From 431727fdd777194140518b206196d8234b571b11 Mon Sep 17 00:00:00 2001 From: Marshall Bowers Date: Wed, 5 Mar 2025 17:23:49 -0500 Subject: [PATCH] csharp: Extract to zed-extensions/csharp repository (#26166) This PR extracts the C# extension to the [zed-extensions/csharp](https://github.com/zed-extensions/csharp) repository. Release Notes: - N/A --- Cargo.lock | 7 - Cargo.toml | 1 - docs/src/languages/csharp.md | 2 +- extensions/csharp/Cargo.toml | 16 -- extensions/csharp/LICENSE-APACHE | 1 - extensions/csharp/extension.toml | 15 -- .../csharp/languages/csharp/brackets.scm | 5 - .../csharp/languages/csharp/config.toml | 14 - .../csharp/languages/csharp/highlights.scm | 254 ------------------ .../csharp/languages/csharp/indents.scm | 3 - .../csharp/languages/csharp/injections.scm | 2 - .../csharp/languages/csharp/outline.scm | 38 --- extensions/csharp/src/csharp.rs | 144 ---------- 13 files changed, 1 insertion(+), 501 deletions(-) delete mode 100644 extensions/csharp/Cargo.toml delete mode 120000 extensions/csharp/LICENSE-APACHE delete mode 100644 extensions/csharp/extension.toml delete mode 100644 extensions/csharp/languages/csharp/brackets.scm delete mode 100644 extensions/csharp/languages/csharp/config.toml delete mode 100644 extensions/csharp/languages/csharp/highlights.scm delete mode 100644 extensions/csharp/languages/csharp/indents.scm delete mode 100644 extensions/csharp/languages/csharp/injections.scm delete mode 100644 extensions/csharp/languages/csharp/outline.scm delete mode 100644 extensions/csharp/src/csharp.rs diff --git a/Cargo.lock b/Cargo.lock index 19ad12ae09..33881ea217 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -16996,13 +16996,6 @@ dependencies = [ "serde", ] -[[package]] -name = "zed_csharp" -version = "0.1.1" -dependencies = [ - "zed_extension_api 0.1.0", -] - [[package]] name = "zed_elixir" version = "0.1.4" diff --git a/Cargo.toml b/Cargo.toml index 420d0ef7c9..aede683dcf 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -168,7 +168,6 @@ members = [ # Extensions # - "extensions/csharp", "extensions/elixir", "extensions/emmet", "extensions/erlang", diff --git a/docs/src/languages/csharp.md b/docs/src/languages/csharp.md index f6cf252a15..7fbf2b1437 100644 --- a/docs/src/languages/csharp.md +++ b/docs/src/languages/csharp.md @@ -2,7 +2,7 @@ Note language name is "CSharp" for settings not "C#' -C# support is available through the [C# extension](https://github.com/zed-industries/zed/tree/main/extensions/csharp). +C# support is available through the [C# extension](https://github.com/zed-extensions/csharp). - Tree-sitter: [tree-sitter/tree-sitter-c-sharp](https://github.com/tree-sitter/tree-sitter-c-sharp) - Language Server: [OmniSharp/omnisharp-roslyn](https://github.com/OmniSharp/omnisharp-roslyn) diff --git a/extensions/csharp/Cargo.toml b/extensions/csharp/Cargo.toml deleted file mode 100644 index a1f7bb383b..0000000000 --- a/extensions/csharp/Cargo.toml +++ /dev/null @@ -1,16 +0,0 @@ -[package] -name = "zed_csharp" -version = "0.1.1" -edition.workspace = true -publish.workspace = true -license = "Apache-2.0" - -[lints] -workspace = true - -[lib] -path = "src/csharp.rs" -crate-type = ["cdylib"] - -[dependencies] -zed_extension_api = "0.1.0" diff --git a/extensions/csharp/LICENSE-APACHE b/extensions/csharp/LICENSE-APACHE deleted file mode 120000 index 1cd601d0a3..0000000000 --- a/extensions/csharp/LICENSE-APACHE +++ /dev/null @@ -1 +0,0 @@ -../../LICENSE-APACHE \ No newline at end of file diff --git a/extensions/csharp/extension.toml b/extensions/csharp/extension.toml deleted file mode 100644 index 9e16ca5152..0000000000 --- a/extensions/csharp/extension.toml +++ /dev/null @@ -1,15 +0,0 @@ -id = "csharp" -name = "C#" -description = "C# support." -version = "0.1.1" -schema_version = 1 -authors = ["fminkowski "] -repository = "https://github.com/zed-industries/zed" - -[language_servers.omnisharp] -name = "OmniSharp" -language = "CSharp" - -[grammars.c_sharp] -repository = "https://github.com/tree-sitter/tree-sitter-c-sharp" -commit = "dd5e59721a5f8dae34604060833902b882023aaf" diff --git a/extensions/csharp/languages/csharp/brackets.scm b/extensions/csharp/languages/csharp/brackets.scm deleted file mode 100644 index 63395f81d8..0000000000 --- a/extensions/csharp/languages/csharp/brackets.scm +++ /dev/null @@ -1,5 +0,0 @@ -("(" @open ")" @close) -("[" @open "]" @close) -("{" @open "}" @close) -("<" @open ">" @close) -("\"" @open "\"" @close) diff --git a/extensions/csharp/languages/csharp/config.toml b/extensions/csharp/languages/csharp/config.toml deleted file mode 100644 index 8f07b45e3b..0000000000 --- a/extensions/csharp/languages/csharp/config.toml +++ /dev/null @@ -1,14 +0,0 @@ -name = "CSharp" -code_fence_block_name = "csharp" -grammar = "c_sharp" -path_suffixes = ["cs"] -line_comments = ["// ", "/// "] -autoclose_before = ";:.,=}])>" -brackets = [ - { start = "{", end = "}", close = true, newline = true }, - { start = "[", end = "]", close = true, newline = true }, - { start = "(", end = ")", close = true, newline = true }, - { start = "\"", end = "\"", close = true, newline = false, not_in = ["string"] }, - { start = "'", end = "'", close = true, newline = false, not_in = ["string", "comment"] }, - { start = "/*", end = " */", close = true, newline = false, not_in = ["string", "comment"] }, -] diff --git a/extensions/csharp/languages/csharp/highlights.scm b/extensions/csharp/languages/csharp/highlights.scm deleted file mode 100644 index cb3c1ad4ad..0000000000 --- a/extensions/csharp/languages/csharp/highlights.scm +++ /dev/null @@ -1,254 +0,0 @@ -;; Methods -(method_declaration name: (identifier) @function) -(local_function_statement name: (identifier) @function) - -;; Types -(interface_declaration name: (identifier) @type) -(class_declaration name: (identifier) @type) -(enum_declaration name: (identifier) @type) -(struct_declaration (identifier) @type) -(record_declaration (identifier) @type) -(record_struct_declaration (identifier) @type) -(namespace_declaration name: (identifier) @type) - -(constructor_declaration name: (identifier) @constructor) -(destructor_declaration name: (identifier) @constructor) - -[ - (implicit_type) - (predefined_type) -] @type.builtin - -(_ type: (identifier) @type) - -;; Enum -(enum_member_declaration (identifier) @property) - -;; Literals -[ - (real_literal) - (integer_literal) -] @number - -[ - (character_literal) - (string_literal) - (verbatim_string_literal) - (interpolated_string_text) - (interpolated_verbatim_string_text) - "\"" - "$\"" - "@$\"" - "$@\"" - ] @string - -[ - (boolean_literal) - (null_literal) -] @constant - -;; Comments -(comment) @comment - -;; Tokens -[ - ";" - "." - "," -] @punctuation.delimiter - -[ - "--" - "-" - "-=" - "&" - "&=" - "&&" - "+" - "++" - "+=" - "<" - "<=" - "<<" - "<<=" - "=" - "==" - "!" - "!=" - "=>" - ">" - ">=" - ">>" - ">>=" - ">>>" - ">>>=" - "|" - "|=" - "||" - "?" - "??" - "??=" - "^" - "^=" - "~" - "*" - "*=" - "/" - "/=" - "%" - "%=" - ":" -] @operator - -[ - "(" - ")" - "[" - "]" - "{" - "}" -] @punctuation.bracket - -;; Keywords -(modifier) @keyword -(this_expression) @keyword -(escape_sequence) @keyword - -[ - "add" - "alias" - "as" - "base" - "break" - "case" - "catch" - "checked" - "class" - "continue" - "default" - "delegate" - "do" - "else" - "enum" - "event" - "explicit" - "extern" - "finally" - "for" - "foreach" - "global" - "goto" - "if" - "implicit" - "interface" - "is" - "lock" - "namespace" - "notnull" - "operator" - "params" - "return" - "remove" - "sizeof" - "stackalloc" - "static" - "struct" - "switch" - "throw" - "try" - "typeof" - "unchecked" - "using" - "while" - "new" - "await" - "in" - "yield" - "get" - "set" - "when" - "out" - "ref" - "from" - "where" - "select" - "record" - "init" - "with" - "let" -] @keyword - - -;; Linq -(from_clause (identifier) @variable) -(group_clause (identifier) @variable) -(order_by_clause (identifier) @variable) -(join_clause (identifier) @variable) -(select_clause (identifier) @variable) -(query_continuation (identifier) @variable) @keyword - -;; Record -(with_expression - (with_initializer_expression - (simple_assignment_expression - (identifier) @variable))) - -;; Exprs -(binary_expression (identifier) @variable (identifier) @variable) -(binary_expression (identifier)* @variable) -(conditional_expression (identifier) @variable) -(prefix_unary_expression (identifier) @variable) -(postfix_unary_expression (identifier)* @variable) -(assignment_expression (identifier) @variable) -(cast_expression (_) (identifier) @variable) - -;; Class -(base_list (identifier) @type) ;; applies to record_base too -(property_declaration (generic_name)) -(property_declaration - name: (identifier) @variable) -(property_declaration - name: (identifier) @variable) -(property_declaration - name: (identifier) @variable) - -;; Lambda -(lambda_expression) @variable - -;; Attribute -(attribute) @attribute - -;; Parameter -(parameter - name: (identifier) @variable) -(parameter (identifier) @variable) -(parameter_modifier) @keyword - -;; Variable declarations -(variable_declarator (identifier) @variable) -(for_each_statement left: (identifier) @variable) -(catch_declaration (_) (identifier) @variable) - -;; Return -(return_statement (identifier) @variable) -(yield_statement (identifier) @variable) - -;; Type -(generic_name (identifier) @type) -(type_parameter (identifier) @property) -(type_argument_list (identifier) @type) -(as_expression right: (identifier) @type) -(is_expression right: (identifier) @type) - -;; Type constraints -(type_parameter_constraints_clause (identifier) @property) - -;; Switch -(switch_statement (identifier) @variable) -(switch_expression (identifier) @variable) - -;; Lock statement -(lock_statement (identifier) @variable) - -;; Method calls -(invocation_expression (member_access_expression name: (identifier) @function)) diff --git a/extensions/csharp/languages/csharp/indents.scm b/extensions/csharp/languages/csharp/indents.scm deleted file mode 100644 index acb44a5e1e..0000000000 --- a/extensions/csharp/languages/csharp/indents.scm +++ /dev/null @@ -1,3 +0,0 @@ -(_ "{" "}" @end) @indent -(_ "[" "]" @end) @indent -(_ "(" ")" @end) @indent diff --git a/extensions/csharp/languages/csharp/injections.scm b/extensions/csharp/languages/csharp/injections.scm deleted file mode 100644 index 2f0e58eb64..0000000000 --- a/extensions/csharp/languages/csharp/injections.scm +++ /dev/null @@ -1,2 +0,0 @@ -((comment) @injection.content - (#set! injection.language "comment")) diff --git a/extensions/csharp/languages/csharp/outline.scm b/extensions/csharp/languages/csharp/outline.scm deleted file mode 100644 index aed899b37b..0000000000 --- a/extensions/csharp/languages/csharp/outline.scm +++ /dev/null @@ -1,38 +0,0 @@ -(class_declaration - "class" @context - name: (identifier) @name -) @item - -(constructor_declaration - name: (identifier) @name -) @item - -(property_declaration - type: (identifier)? @context - type: (predefined_type)? @context - name: (identifier) @name -) @item - -(field_declaration - (variable_declaration) @context -) @item - -(method_declaration - name: (identifier) @name - parameters: (parameter_list) @context -) @item - -(enum_declaration - "enum" @context - name: (identifier) @name -) @item - -(namespace_declaration - "namespace" @context - name: (qualified_name) @name -) @item - -(interface_declaration - "interface" @context - name: (identifier) @name -) @item diff --git a/extensions/csharp/src/csharp.rs b/extensions/csharp/src/csharp.rs deleted file mode 100644 index f9da890ef1..0000000000 --- a/extensions/csharp/src/csharp.rs +++ /dev/null @@ -1,144 +0,0 @@ -use std::fs; -use zed_extension_api::{self as zed, settings::LspSettings, LanguageServerId, Result}; - -struct OmnisharpBinary { - path: String, - args: Option>, -} - -struct CsharpExtension { - cached_binary_path: Option, -} - -impl CsharpExtension { - fn language_server_binary( - &mut self, - language_server_id: &LanguageServerId, - worktree: &zed::Worktree, - ) -> Result { - let binary_settings = LspSettings::for_worktree("omnisharp", 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(OmnisharpBinary { - path, - args: binary_args, - }); - } - - if let Some(path) = worktree.which("OmniSharp") { - return Ok(OmnisharpBinary { - path, - args: binary_args, - }); - } - - if let Some(path) = &self.cached_binary_path { - if fs::metadata(path).map_or(false, |stat| stat.is_file()) { - return Ok(OmnisharpBinary { - path: path.clone(), - args: binary_args, - }); - } - } - - zed::set_language_server_installation_status( - language_server_id, - &zed::LanguageServerInstallationStatus::CheckingForUpdate, - ); - let release = zed::latest_github_release( - "OmniSharp/omnisharp-roslyn", - zed::GithubReleaseOptions { - require_assets: true, - pre_release: false, - }, - )?; - - let (platform, arch) = zed::current_platform(); - let asset_name = format!( - "omnisharp-{os}-{arch}-net6.0.{extension}", - os = match platform { - zed::Os::Mac => "osx", - zed::Os::Linux => "linux", - zed::Os::Windows => "win", - }, - arch = match arch { - zed::Architecture::Aarch64 => "arm64", - zed::Architecture::X86 => "x86", - zed::Architecture::X8664 => "x64", - }, - extension = match platform { - zed::Os::Mac | zed::Os::Linux => "tar.gz", - zed::Os::Windows => "zip", - } - ); - - 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!("omnisharp-{}", release.version); - let binary_path = format!("{version_dir}/OmniSharp"); - - if !fs::metadata(&binary_path).map_or(false, |stat| stat.is_file()) { - zed::set_language_server_installation_status( - language_server_id, - &zed::LanguageServerInstallationStatus::Downloading, - ); - - zed::download_file( - &asset.download_url, - &version_dir, - match platform { - zed::Os::Mac | zed::Os::Linux => zed::DownloadedFileType::GzipTar, - zed::Os::Windows => zed::DownloadedFileType::Zip, - }, - ) - .map_err(|e| format!("failed to download file: {e}"))?; - - let entries = - fs::read_dir(".").map_err(|e| format!("failed to list working directory {e}"))?; - for entry in entries { - let entry = entry.map_err(|e| format!("failed to load directory entry {e}"))?; - 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(OmnisharpBinary { - path: binary_path, - args: binary_args, - }) - } -} - -impl zed::Extension for CsharpExtension { - fn new() -> Self { - Self { - cached_binary_path: None, - } - } - - fn language_server_command( - &mut self, - language_server_id: &zed::LanguageServerId, - worktree: &zed::Worktree, - ) -> Result { - let omnisharp_binary = self.language_server_binary(language_server_id, worktree)?; - Ok(zed::Command { - command: omnisharp_binary.path, - args: omnisharp_binary.args.unwrap_or_else(|| vec!["-lsp".into()]), - env: Default::default(), - }) - } -} - -zed::register_extension!(CsharpExtension);