Mikayla
这周我终于接近完成移动/链接频道这个小项目了。令人惊讶的是,它花费了与添加聊天功能一样长的时间,并且几乎和它一样大! 在这一点上,我已经为数据库、服务器内存、网络、客户端内存、客户端 UI 和测试助手编写了大约六个 DAG 表示转换 ;-;. 值得庆幸的是,能够在现实世界中使用这些计算机科学概念非常有趣。
另外,下周我将参加 Strange Loop! 如果你也要去那里并且想见面,请随时在 Twitter 上 @ 我们!
(* 移动频道更改了 3200 行净 LOC,而聊天更改了 3000 行净 LOC)
Kirill
修复提示的令人讨厌的恐慌错误花了几天时间,并且更多地深入到坐标管理代码中,但感谢 Antonio 的帮助,它已经结束了,我们有一个修复程序和更多用于新突出显示的随机测试。 此外,整个提示功能现在应该更快了。
剩下的时间都用于更漂亮的集成:编辑器现在具有与更漂亮的本地开发的基本集成,并且能够检测项目的更漂亮或安装自己的,从而潜在地管理某些语言所需的插件。 我目前正在开发一个更漂亮的包装器,它应该可以加快格式化过程,并且还有更多工作要做,例如远程开发——希望下周没有更多的提示错误来分散我的注意力。
Kyle
本周,我们完成了与我们的语义索引相关的主要 PR 中的最后一个,特别是在修改后的开放缓冲区中实现语义搜索。 解决了这个问题后,我已经开始构建一个评估框架,用于自动测试我们的引擎,使我们能够随着时间的推移迭代并做出自信的引擎决策。 除此之外,Antonio 和我开始将语义索引集成到我们的内联代码助手中。 目前,我们在通知内联 AI 生成时,仅利用现有打开文件中的上下文。 我们希望通过语义索引,内联助手在进行编辑或生成新代码时能够完全了解您的工作代码库。
Julia
自动完成文档继续取得进展,通过一些代码重组,我们已经完成了 markdown 渲染

我还花了很多时间与 Antonio 一起修复一些 LSP 状态错误,与 Piotr 一起调查了一些语言服务器安装问题,并帮助为未来的一些大型工作制定了一些探索性头脑风暴。
Max
本周,我为 Zed 频道构建了一个初始聊天系统。 这将使我们能够进行关于代码的异步、基于文本的对话,其中评论可以附加到特定的代码行。 目前,聊天非常简单。 接下来,我们需要构建提及的概念以及新消息的通知。
Nate
我一直在埋头研究我们未来将在 gpui 中构建 Zed UI 的新方式。 在此之前,我们一直混合使用 gpui
代码和一个自定义 typescript 应用程序来编译样式。 最近,我们一直在构建一个类似于 Tailwind 的系统,用于在 gpui
中设计组件样式。
到目前为止,它对于快速原型设计 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 背景而来,学习曲线非常残酷,但到目前为止还是很有收获的。
直到下周!
Joseph
我一直在专注于增强我们在分析中分析流失用户群体的能力,以便我们能够更清楚地了解哪些特定开发领域需要改进。 以前,我们有一些方法来调查某些功能的使用情况,以及这些功能的用户是否离开了 Zed。 然而,我们缺乏一种有效的方法来将这些群体彼此进行比较或与整个流失用户群体进行比较。 这是一项有点大的任务,但感觉我们会从中学习到很多东西。
Piotr
本周,我完成了“在缓冲区中替换”功能,与 Max 和 Nate 合作完成了用户体验。 我还追踪了这样一个错误的来源,即在某些键盘布局(特别是中文、日文和韩文)下,一些用户遇到了随机字符被插入到他们自己的情况。 事实证明,Conrad 在葡萄牙语布局中遇到了类似的问题,因此我们将配对以消除这个问题,因为它看起来与我已经修复的问题类似。 除此之外,我对命令面板排序顺序进行了一些小的调整,并与 Julia 配对解决了 LSP 卡在更新的问题——但目前还没有太大进展。 在接下来的一周,我将继续解决这些 QoL 改进。 我还想最终进入“在项目搜索中替换”,尽管它比“在缓冲区中替换”需要更多关于预期行为的思考。