米凯拉
本周我终于接近了“移动/链接频道”这个小型项目的尾声。令人惊讶的是,它花费的时间和规模几乎与添加聊天功能一样大!到目前为止,我已经为数据库、服务器内存、网络、客户端内存、客户端 UI 和测试助手分别编写了大约六种 DAG 表示转换;-;。值得庆幸的是,能够将这些计算机科学概念应用于现实世界,这让我非常开心。
另外,下周我将参加 Strange Loop!如果你也去那里并想见面,请随时在 Twitter 上 @我们!
(* 移动频道的代码更改净行数为 3200 行,而聊天功能的代码更改净行数为 3000 行)
基里尔
烦人的提示恐慌错误修复花费了几天时间,并且对坐标管理代码进行了更多深入研究,但多亏了 Antonio 的帮助,它终于解决了,我们有了修复方案和更多用于新高亮的随机测试。作为额外的好处,整个提示功能现在应该运行得更快了。
其余时间都用于 prettier 集成:编辑器现在已基本集成了 prettier 用于本地开发,并且能够检测项目中的 prettier 或安装自己的 prettier,并可能管理某些语言所需的插件。我目前正在开发一个 prettier 包装器,它应该能加快格式化过程,还有更多工作要做,例如远程开发——希望下周不会再有提示错误来分散我的注意力。
凯尔
本周,我们完成了与我们的语义索引相关的最后几个主要 PR,值得注意的是在修改后的开放缓冲区中实现了语义搜索。解决了这个问题后,我开始着手开发一个评估框架,用于自动测试我们的引擎,从而使我们能够随着时间的推移进行迭代并做出自信的引擎决策。除此之外,Antonio 和我开始将语义索引集成到我们的内联代码助手。目前,我们在生成内联 AI 时仅利用现有打开文件中的上下文。希望通过语义索引,内联助手在进行编辑或生成新代码时将拥有您的整个工作代码库的完整知识。
茱莉亚 (Julia)
自动完成文档持续取得进展,经过一些代码重组,我们现在有了 Markdown 渲染功能。

我还花了很多时间与 Antonio 修复了一些 LSP 状态错误,与 Piotr 调查了一些语言服务器安装问题,并帮助为未来的一些大项目进行了探索性头脑风暴。
马克斯
本周,我为 Zed 频道构建了一个初始的聊天系统。这将使我们能够就代码进行异步的、基于文本的对话,其中评论可以附加到特定的代码行。目前,聊天功能非常简单。接下来,我们需要构建提及概念和新消息通知。
内特
我一直在深入探索我们将如何在 gpui 中构建 Zed UI 的新方式。到目前为止,我们一直混合使用 gpui 代码和一个自定义的 TypeScript 应用程序来编译样式。最近,我们一直在为 gpui 中的组件构建一个类似 Tailwind 的样式系统。
到目前为止,它在快速原型设计 UI 方面表现出色,我非常兴奋它在 Zed 中实现更快 UI 迭代的潜力。
例如,如果我们想创建一个 Avatar 组件,我们可以这样做
#[derive(Element, Clone)]
pub struct Avatar {
src: ArcCow<'static, str>,
shape: Shape,
}
pub fn avatar(src: impl Into<ArcCow<'static, str>>) -> Avatar {
Avatar {
src: src.into(),
shape: Shape::Circle,
}
}
impl Avatar {
pub fn shape(mut self, shape: Shape) -> Self {
self.shape = shape;
self
}
fn render<V: 'static>(&mut self, _: &mut V, cx: &mut ViewContext<V>) -> impl IntoElement<V> {
let theme = theme(cx);
let mut img = img();
if self.shape == Shape::Circle {
img = img.rounded_full();
} else {
img = img.rounded_md();
}
img.uri(self.src.clone())
.size_4()
.fill(theme.middle.warning.default.foreground)
}
}然后如果我们想要一个圆形头像,我们可以这样做
div().child(
avatar("https://avatars.githubusercontent.com/u/1789?v=4")
)如果我们需要一个圆角矩形形状的头像,我们可以添加一个 shape 方法
div().child(
avatar("https://avatars.githubusercontent.com/u/1789?v=4")
.shape(Shape::RoundedRectangle)
)请原谅这里 Rust 代码的质量不佳,我还在学习!🙈
这只是新系统可能性的一小部分示例。我会在未来某个时候尝试更详细地阐述我们如何使用这个系统重写 Zed UI 及其影响。
在那之前,我将沉浸在 Rust 的世界中!我几乎只从 TypeScript 背景过来,学习曲线非常残酷,但到目前为止一直很有收获。
下周再见!
约瑟夫
我一直专注于增强我们在分析中分析流失用户群体的能力,以便我们能够更清晰地了解哪些特定的开发领域需要改进。此前,我们有一些方法来调查某些功能的使用情况,以及这些功能的用户是否离开了 Zed。然而,我们缺乏有效的方法来比较这些群体之间或与总体流失用户群体之间的差异。这是一项相当大的任务,但感觉我们会从中学习到很多。
Piotr
本周,我完成了“缓冲区替换”功能,并与 Max 和 Nate 合作完成了用户体验。我还追踪了一个 bug 的来源,即在某些键盘布局(尤其是中文、日文和韩文)下,一些用户会遇到随机字符插入的问题。事实证明,Conrad 在葡萄牙语布局上也遇到了类似的问题,所以我们将合作解决这个问题,因为它看起来与我已经修复的问题类似。除此之外,我对命令面板的排序顺序进行了微调,并与 Julia 合作解决了 LSP 更新卡住的问题——尽管目前还没有太大进展。在接下来的一周,我将继续解决这些生活质量方面的改进。我最终还想实现“项目搜索替换”,尽管它在预期行为方面需要比“缓冲区替换”更多的思考。