Docs Party 2024 (#15876)
Co-authored-by: Raunak Raj <nkray21111983@gmail.com> Co-authored-by: Thorsten Ball <mrnugget@gmail.com> Co-authored-by: Bennet <bennet@zed.dev> Co-authored-by: Marshall Bowers <elliott.codes@gmail.com> Co-authored-by: Joseph T Lyons <JosephTLyons@gmail.com> Co-authored-by: Mikayla <mikayla@zed.dev> Co-authored-by: Jason <jason@zed.dev> Co-authored-by: Antonio Scandurra <me@as-cii.com> Co-authored-by: Max Brunsfeld <maxbrunsfeld@gmail.com> Co-authored-by: Marshall <marshall@zed.dev> Co-authored-by: Nathan Sobo <nathan@zed.dev> Co-authored-by: Jason Mancuso <7891333+jvmncs@users.noreply.github.com> Co-authored-by: Piotr Osiewicz <24362066+osiewicz@users.noreply.github.com>
This commit is contained in:
parent
c633fa5a10
commit
eb3c4b0e46
100 changed files with 2564 additions and 457 deletions
104
docs/src/extensions/developing-extensions.md
Normal file
104
docs/src/extensions/developing-extensions.md
Normal file
|
@ -0,0 +1,104 @@
|
|||
# Developing Extensions
|
||||
|
||||
## Extension Capabilities
|
||||
|
||||
Extensions can add the following capabilities to Zed:
|
||||
|
||||
- [Languages](./languages.md)
|
||||
- [Themes](./themes.md)
|
||||
|
||||
## Directory Structure of a Zed Extension
|
||||
|
||||
A Zed extension is a Git repository that contains an `extension.toml`. This file must contain some
|
||||
basic information about the extension:
|
||||
|
||||
```toml
|
||||
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"
|
||||
```
|
||||
|
||||
<!--
|
||||
TBD: Document `slash_commands`, `indexed_docs_providers` (see: extensions/gleam/extension.toml)
|
||||
-->
|
||||
|
||||
In addition to this, there are several other optional files and directories that can be used to add functionality to a Zed extension. An example directory structure of an extension that provides all capabilities is as follows:
|
||||
|
||||
```
|
||||
my-extension/
|
||||
extension.toml
|
||||
Cargo.toml
|
||||
src/
|
||||
lib.rs
|
||||
languages/
|
||||
config.toml
|
||||
highlights.scm
|
||||
themes/
|
||||
my-theme.json
|
||||
```
|
||||
|
||||
## WebAssembly
|
||||
|
||||
Procedural parts of extensions are written in Rust and compiled to WebAssembly. To develop an extension that includes custom code, include a `Cargo.toml` like this:
|
||||
|
||||
```toml
|
||||
[package]
|
||||
name = "my-extension"
|
||||
version = "0.0.1"
|
||||
edition = "2021"
|
||||
|
||||
[lib]
|
||||
crate-type = ["cdylib"]
|
||||
|
||||
[dependencies]
|
||||
zed_extension_api = "0.0.6"
|
||||
```
|
||||
|
||||
Make sure to use the latest version of the [`zed_extension_api`](https://crates.io/crates/zed_extension_api) available on crates.io.
|
||||
|
||||
In the `src/lib.rs` file in your Rust crate you will need to define a struct for your extension and implement the `Extension` trait, as well as use the `register_extension!` macro to register your extension:
|
||||
|
||||
```rs
|
||||
use zed_extension_api as zed;
|
||||
|
||||
struct MyExtension {
|
||||
// ... state
|
||||
}
|
||||
|
||||
impl zed::Extension for MyExtension {
|
||||
// ...
|
||||
}
|
||||
|
||||
zed::register_extension!(MyExtension);
|
||||
```
|
||||
|
||||
## Developing an Extension Locally
|
||||
|
||||
When developing an extension, you can use it in Zed without needing to publish it by installing it as a _dev extension_.
|
||||
|
||||
From the extensions page, click the `Install Dev Extension` button and select the directory containing your extension.
|
||||
|
||||
If you already have a published extension with the same name installed, your dev extension will override it.
|
||||
|
||||
## Publishing your extension
|
||||
|
||||
To publish an extension, open a PR to [this repo](https://github.com/zed-industries/extensions).
|
||||
|
||||
In your PR, do the following:
|
||||
|
||||
1. Add your extension as a Git submodule within the `extensions/` directory
|
||||
2. Add a new entry to the top-level `extensions.toml` file containing your extension:
|
||||
|
||||
```toml
|
||||
[my-extension]
|
||||
submodule = "extensions/my-extension"
|
||||
version = "0.0.1"
|
||||
```
|
||||
|
||||
3. Run `pnpm sort-extensions` to ensure `extensions.toml` and `.gitmodules` are sorted
|
||||
|
||||
Once your PR is merged, the extension will be packaged and published to the Zed extension registry.
|
Loading…
Add table
Add a link
Reference in a new issue