开发扩展
扩展功能
扩展可以为 Zed 添加以下功能
在本地开发扩展
在开始为 Zed 开发扩展之前,请确保通过 rustup 安装 Rust。
必须通过 rustup 安装 Rust。如果您通过 homebrew 或其他方式安装了 Rust,则安装开发扩展将不起作用。
在开发扩展时,您可以在 Zed 中使用它,而无需通过将其安装为开发扩展来发布它。
在扩展页面中,单击“安装开发扩展”按钮,然后选择包含您的扩展的目录。
如果您已经安装了同名的已发布扩展,您的开发扩展将覆盖它。
Zed 扩展的目录结构
Zed 扩展是一个包含 extension.toml
的 Git 存储库。 此文件必须包含有关扩展的一些基本信息
id = "my-extension"
name = "My extension"
version = "0.0.1"
schema_version = 1
authors = ["Your Name <you@example.com>"]
description = "My cool extension"
repository = "https://github.com/your-name/my-zed-extension"
除此之外,还有其他几个可选的文件和目录可用于向 Zed 扩展添加功能。 提供所有功能的扩展的示例目录结构如下所示
my-extension/
extension.toml
Cargo.toml
src/
lib.rs
languages/
my-language/
config.toml
highlights.scm
themes/
my-theme.json
WebAssembly
扩展的过程部分是用 Rust 编写并编译为 WebAssembly。 要开发包含自定义代码的扩展,请包含如下所示的 Cargo.toml
[package]
name = "my-extension"
version = "0.0.1"
edition = "2021"
[lib]
crate-type = ["cdylib"]
[dependencies]
zed_extension_api = "0.1.0"
请确保使用 crates.io 上提供的最新版本的 zed_extension_api
。
在 Rust crate 的 src/lib.rs
文件中,您需要为您的扩展定义一个结构,并实现 Extension
trait,以及使用 register_extension!
宏来注册您的扩展
use zed_extension_api as zed;
struct MyExtension {
// ... state
}
impl zed::Extension for MyExtension {
// ...
}
zed::register_extension!(MyExtension);
发布您的扩展
要发布扩展,请打开一个 PR 到 zed-industries/extensions
repo。
注意:如果您将
zed-industries/extensions
repo 分叉到个人 GitHub 帐户而不是 GitHub 组织,这将非常有帮助,因为这允许 Zed 员工将任何需要的更改推送到您的 PR,以加快发布过程。
在您的 PR 中,执行以下操作
- 将您的扩展作为 Git 子模块添加到
extensions/
目录中
git submodule add https://github.com/your-username/foobar-zed.git extensions/foobar
git add extensions/foobar
- 向顶级
extensions.toml
文件添加一个包含您的扩展的新条目
[my-extension]
submodule = "extensions/my-extension"
version = "0.0.1"
如果您的扩展位于子模块中的子目录中,您可以使用
path
字段来指向扩展所在的位置。
- 运行
pnpm sort-extensions
以确保extensions.toml
和.gitmodules
已排序
一旦您的 PR 被合并,该扩展将被打包并发布到 Zed 扩展注册表。
扩展 ID 和名称不应包含
zed
或Zed
,因为它们都是 Zed 扩展。
更新扩展
要更新扩展,请打开一个 PR 到 zed-industries/extensions
repo。
在您的 PR 中,执行以下操作
- 将扩展的子模块更新到新版本的提交。
- 更新
extensions.toml
中扩展的version
字段- 确保
version
与特定提交中extension.toml
中设置的版本匹配。
- 确保
如果您想自动化此过程,可以使用 社区 GitHub Action。