diff --git a/Cargo.lock b/Cargo.lock index ae9cf8525d..3774dc4751 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -8764,6 +8764,15 @@ dependencies = [ "tree-sitter", ] +[[package]] +name = "tree-sitter-gitcommit" +version = "0.3.3" +source = "git+https://github.com/gbprod/tree-sitter-gitcommit#e8d9eda4e5ea0b08aa39d48dab0f6553058fbe0f" +dependencies = [ + "cc", + "tree-sitter", +] + [[package]] name = "tree-sitter-gleam" version = "0.34.0" @@ -10323,6 +10332,7 @@ dependencies = [ "tree-sitter-elixir", "tree-sitter-elm", "tree-sitter-embedded-template", + "tree-sitter-gitcommit", "tree-sitter-gleam", "tree-sitter-glsl", "tree-sitter-go", diff --git a/Cargo.toml b/Cargo.toml index ffb1ef5328..d312c27abd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -140,6 +140,7 @@ tree-sitter-css = { git = "https://github.com/tree-sitter/tree-sitter-css", rev tree-sitter-elixir = { git = "https://github.com/elixir-lang/tree-sitter-elixir", rev = "a2861e88a730287a60c11ea9299c033c7d076e30" } tree-sitter-elm = { git = "https://github.com/elm-tooling/tree-sitter-elm", rev = "692c50c0b961364c40299e73c1306aecb5d20f40" } tree-sitter-embedded-template = "0.20.0" +tree-sitter-gitcommit = { git = "https://github.com/gbprod/tree-sitter-gitcommit" } tree-sitter-gleam = { git = "https://github.com/gleam-lang/tree-sitter-gleam", rev = "58b7cac8fc14c92b0677c542610d8738c373fa81" } tree-sitter-glsl = { git = "https://github.com/theHamsta/tree-sitter-glsl", rev = "2a56fb7bc8bb03a1892b4741279dd0a8758b7fb3" } tree-sitter-go = { git = "https://github.com/tree-sitter/tree-sitter-go", rev = "aeb2f33b366fd78d5789ff104956ce23508b85db" } diff --git a/crates/zed/Cargo.toml b/crates/zed/Cargo.toml index c57c27b854..c27f963bd1 100644 --- a/crates/zed/Cargo.toml +++ b/crates/zed/Cargo.toml @@ -112,6 +112,7 @@ tree-sitter-css.workspace = true tree-sitter-elixir.workspace = true tree-sitter-elm.workspace = true tree-sitter-embedded-template.workspace = true +tree-sitter-gitcommit.workspace = true tree-sitter-gleam.workspace = true tree-sitter-glsl.workspace = true tree-sitter-go.workspace = true diff --git a/crates/zed/src/languages.rs b/crates/zed/src/languages.rs index 92682d590a..8fcb27a5ce 100644 --- a/crates/zed/src/languages.rs +++ b/crates/zed/src/languages.rs @@ -112,7 +112,7 @@ pub fn init( })], ), } - + language("gitcommit", tree_sitter_gitcommit::language(), vec![]); language( "gleam", tree_sitter_gleam::language(), diff --git a/crates/zed/src/languages/gitcommit/config.toml b/crates/zed/src/languages/gitcommit/config.toml new file mode 100644 index 0000000000..25eb2425df --- /dev/null +++ b/crates/zed/src/languages/gitcommit/config.toml @@ -0,0 +1,11 @@ +name = "Git commit" +path_suffixes = [ + # Refer to https://github.com/neovim/neovim/blob/master/runtime/lua/vim/filetype.lua#L1286-L1290 + "TAG_EDITMSG", + "MERGE_MSG", + "COMMIT_EDITMSG", + "NOTES_EDITMSG", + "EDIT_DESCRIPTION", +] +line_comments = ["#"] +brackets = [] diff --git a/crates/zed/src/languages/gitcommit/highlights.scm b/crates/zed/src/languages/gitcommit/highlights.scm new file mode 100644 index 0000000000..a8a3352057 --- /dev/null +++ b/crates/zed/src/languages/gitcommit/highlights.scm @@ -0,0 +1,34 @@ +(comment) @comment +(generated_comment) @comment +(title) @text.title +(text) @text +(branch) @text.reference +(change) @keyword +(filepath) @text.uri +(arrow) @punctuation.delimiter + +(subject) @text.title +(subject (overflow) @text) +(prefix (type) @keyword) +(prefix (scope) @parameter) +(prefix [ + "(" + ")" + ":" +] @punctuation.delimiter) +(prefix [ + "!" +] @punctuation.special) + +(message) @text + +(trailer (token) @keyword) +(trailer (value) @text) + +(breaking_change (token) @text.warning) +(breaking_change (value) @text) + +(scissor) @comment +(subject_prefix) @keyword + +(ERROR) @error diff --git a/crates/zed/src/languages/gitcommit/injections.scm b/crates/zed/src/languages/gitcommit/injections.scm new file mode 100644 index 0000000000..5e516f5a23 --- /dev/null +++ b/crates/zed/src/languages/gitcommit/injections.scm @@ -0,0 +1,8 @@ +((diff) @injection.content + (#set! injection.combined) + (#set! injection.language "diff")) + +((rebase_command) @injection.content + (#set! injection.combined) + (#set! injection.language "git_rebase")) +