toml: Extract to zed-extensions/toml repository (#37558)

Marshall Bowers created

This PR extracts the TOML extension to the
[zed-extensions/toml](https://github.com/zed-extensions/toml)
repository.

Release Notes:

- N/A

Change summary

.config/hakari.toml                            |   1 
Cargo.lock                                     |   7 
Cargo.toml                                     |   1 
docs/src/languages/toml.md                     |   2 
extensions/toml/Cargo.toml                     |  16 --
extensions/toml/LICENSE-APACHE                 |   1 
extensions/toml/extension.toml                 |  18 --
extensions/toml/languages/toml/brackets.scm    |   3 
extensions/toml/languages/toml/config.toml     |  11 -
extensions/toml/languages/toml/highlights.scm  |  38 -----
extensions/toml/languages/toml/indents.scm     |   0 
extensions/toml/languages/toml/outline.scm     |  15 -
extensions/toml/languages/toml/overrides.scm   |   2 
extensions/toml/languages/toml/redactions.scm  |   1 
extensions/toml/languages/toml/textobjects.scm |   6 
extensions/toml/src/toml.rs                    | 152 --------------------
16 files changed, 1 insertion(+), 273 deletions(-)

Detailed changes

.config/hakari.toml 🔗

@@ -41,5 +41,4 @@ workspace-members = [
     "slash_commands_example",
     "zed_snippets",
     "zed_test_extension",
-    "zed_toml",
 ]

Cargo.lock 🔗

@@ -20653,13 +20653,6 @@ dependencies = [
  "zed_extension_api 0.6.0",
 ]
 
-[[package]]
-name = "zed_toml"
-version = "0.1.4"
-dependencies = [
- "zed_extension_api 0.1.0",
-]
-
 [[package]]
 name = "zeno"
 version = "0.3.2"

Cargo.toml 🔗

@@ -211,7 +211,6 @@ members = [
     "extensions/slash-commands-example",
     "extensions/snippets",
     "extensions/test-extension",
-    "extensions/toml",
 
     #
     # Tooling

docs/src/languages/toml.md 🔗

@@ -1,6 +1,6 @@
 # TOML
 
-TOML support is available through the [TOML extension](https://github.com/zed-industries/zed/tree/main/extensions/toml).
+TOML support is available through the [TOML extension](https://github.com/zed-extensions/toml).
 
 - Tree-sitter: [tree-sitter/tree-sitter-toml](https://github.com/tree-sitter/tree-sitter-toml)
 - Language Server: [tamasfe/taplo](https://github.com/tamasfe/taplo)

extensions/toml/Cargo.toml 🔗

@@ -1,16 +0,0 @@
-[package]
-name = "zed_toml"
-version = "0.1.4"
-edition.workspace = true
-publish.workspace = true
-license = "Apache-2.0"
-
-[lints]
-workspace = true
-
-[lib]
-path = "src/toml.rs"
-crate-type = ["cdylib"]
-
-[dependencies]
-zed_extension_api = "0.1.0"

extensions/toml/extension.toml 🔗

@@ -1,18 +0,0 @@
-id = "toml"
-name = "TOML"
-description = "TOML support."
-version = "0.1.4"
-schema_version = 1
-authors = [
-    "Max Brunsfeld <max@zed.dev>",
-    "Ammar Arif <evergreenkary@gmail.com>"
-]
-repository = "https://github.com/zed-industries/zed"
-
-[language_servers.taplo]
-name = "Taplo"
-language = "TOML"
-
-[grammars.toml]
-repository = "https://github.com/tree-sitter/tree-sitter-toml"
-commit = "342d9be207c2dba869b9967124c679b5e6fd0ebe"

extensions/toml/languages/toml/config.toml 🔗

@@ -1,11 +0,0 @@
-name = "TOML"
-grammar = "toml"
-path_suffixes = ["Cargo.lock", "toml", "Pipfile", "uv.lock"]
-line_comments = ["# "]
-autoclose_before = ",]}"
-brackets = [
-    { start = "{", end = "}", close = true, newline = true },
-    { start = "[", end = "]", close = true, newline = true },
-    { start = "\"", end = "\"", close = true, newline = false, not_in = ["comment", "string"] },
-    { start = "'", end = "'", close = true, newline = false, not_in = ["comment", "string"] },
-]

extensions/toml/languages/toml/highlights.scm 🔗

@@ -1,38 +0,0 @@
-; Properties
-;-----------
-
-(bare_key) @property
-(quoted_key) @property
-
-; Literals
-;---------
-
-(boolean) @constant
-(comment) @comment
-(integer) @number
-(float) @number
-(string) @string
-(escape_sequence) @string.escape
-(offset_date_time) @string.special
-(local_date_time) @string.special
-(local_date) @string.special
-(local_time) @string.special
-
-; Punctuation
-;------------
-
-[
-  "."
-  ","
-] @punctuation.delimiter
-
-"=" @operator
-
-[
-  "["
-  "]"
-  "[["
-  "]]"
-  "{"
-  "}"
-]  @punctuation.bracket

extensions/toml/src/toml.rs 🔗

@@ -1,152 +0,0 @@
-use std::fs;
-use zed::LanguageServerId;
-use zed_extension_api::settings::LspSettings;
-use zed_extension_api::{self as zed, Result};
-
-struct TaploBinary {
-    path: String,
-    args: Option<Vec<String>>,
-}
-
-struct TomlExtension {
-    cached_binary_path: Option<String>,
-}
-
-impl TomlExtension {
-    fn language_server_binary(
-        &mut self,
-        language_server_id: &LanguageServerId,
-        worktree: &zed::Worktree,
-    ) -> Result<TaploBinary> {
-        let binary_settings = LspSettings::for_worktree("taplo", worktree)
-            .ok()
-            .and_then(|lsp_settings| lsp_settings.binary);
-        let binary_args = binary_settings
-            .as_ref()
-            .and_then(|binary_settings| binary_settings.arguments.clone());
-
-        if let Some(path) = binary_settings.and_then(|binary_settings| binary_settings.path) {
-            return Ok(TaploBinary {
-                path,
-                args: binary_args,
-            });
-        }
-
-        if let Some(path) = worktree.which("taplo") {
-            return Ok(TaploBinary {
-                path,
-                args: binary_args,
-            });
-        }
-
-        if let Some(path) = &self.cached_binary_path
-            && fs::metadata(path).is_ok_and(|stat| stat.is_file())
-        {
-            return Ok(TaploBinary {
-                path: path.clone(),
-                args: binary_args,
-            });
-        }
-
-        zed::set_language_server_installation_status(
-            language_server_id,
-            &zed::LanguageServerInstallationStatus::CheckingForUpdate,
-        );
-        let release = zed::latest_github_release(
-            "tamasfe/taplo",
-            zed::GithubReleaseOptions {
-                require_assets: true,
-                pre_release: false,
-            },
-        )?;
-
-        let (platform, arch) = zed::current_platform();
-        let asset_name = format!(
-            "taplo-{os}-{arch}.gz",
-            arch = match arch {
-                zed::Architecture::Aarch64 => "aarch64",
-                zed::Architecture::X86 => "x86",
-                zed::Architecture::X8664 => "x86_64",
-            },
-            os = match platform {
-                zed::Os::Mac => "darwin",
-                zed::Os::Linux => "linux",
-                zed::Os::Windows => "windows",
-            },
-        );
-
-        let asset = release
-            .assets
-            .iter()
-            .find(|asset| asset.name == asset_name)
-            .ok_or_else(|| format!("no asset found matching {:?}", asset_name))?;
-
-        let version_dir = format!("taplo-{}", release.version);
-        fs::create_dir_all(&version_dir)
-            .map_err(|err| format!("failed to create directory '{version_dir}': {err}"))?;
-
-        let binary_path = format!(
-            "{version_dir}/{bin_name}",
-            bin_name = match platform {
-                zed::Os::Windows => "taplo.exe",
-                zed::Os::Mac | zed::Os::Linux => "taplo",
-            }
-        );
-
-        if !fs::metadata(&binary_path).is_ok_and(|stat| stat.is_file()) {
-            zed::set_language_server_installation_status(
-                language_server_id,
-                &zed::LanguageServerInstallationStatus::Downloading,
-            );
-
-            zed::download_file(
-                &asset.download_url,
-                &binary_path,
-                zed::DownloadedFileType::Gzip,
-            )
-            .map_err(|err| format!("failed to download file: {err}"))?;
-
-            zed::make_file_executable(&binary_path)?;
-
-            let entries = fs::read_dir(".")
-                .map_err(|err| format!("failed to list working directory {err}"))?;
-            for entry in entries {
-                let entry = entry.map_err(|err| format!("failed to load directory entry {err}"))?;
-                if entry.file_name().to_str() != Some(&version_dir) {
-                    fs::remove_dir_all(entry.path()).ok();
-                }
-            }
-        }
-
-        self.cached_binary_path = Some(binary_path.clone());
-        Ok(TaploBinary {
-            path: binary_path,
-            args: binary_args,
-        })
-    }
-}
-
-impl zed::Extension for TomlExtension {
-    fn new() -> Self {
-        Self {
-            cached_binary_path: None,
-        }
-    }
-
-    fn language_server_command(
-        &mut self,
-        language_server_id: &LanguageServerId,
-        worktree: &zed::Worktree,
-    ) -> Result<zed::Command> {
-        let taplo_binary = self.language_server_binary(language_server_id, worktree)?;
-        Ok(zed::Command {
-            command: taplo_binary.path,
-            args: taplo_binary
-                .args
-                .unwrap_or_else(|| vec!["lsp".to_string(), "stdio".to_string()]),
-            env: Default::default(),
-        })
-    }
-}
-
-zed::register_extension!(TomlExtension);