Rework shared commit editors (#24274)
Rework of https://github.com/zed-industries/zed/pull/24130
Uses
1033c0b57e
`COMMIT_EDITMSG` language-related definitions (thanks @d1y )
Instead of using real `.git/COMMIT_EDITMSG` file, create a buffer
without FS representation, stored in the `Repository` and shared the
regular way via the `BufferStore`.
Adds a knowledge of what `Git Commit` language is, and uses it in the
buffers which are rendered in the git panel.
Release Notes:
- N/A
---------
Co-authored-by: Conrad Irwin <conrad@zed.dev>
Co-authored-by: d1y <chenhonzhou@gmail.com>
Co-authored-by: Smit <smit@zed.dev>
This commit is contained in:
parent
da4bad3a55
commit
868e3f75b2
17 changed files with 428 additions and 372 deletions
|
@ -19,6 +19,7 @@ load-grammars = [
|
|||
"tree-sitter-cpp",
|
||||
"tree-sitter-css",
|
||||
"tree-sitter-diff",
|
||||
"tree-sitter-gitcommit",
|
||||
"tree-sitter-go",
|
||||
"tree-sitter-go-mod",
|
||||
"tree-sitter-gowork",
|
||||
|
@ -69,6 +70,7 @@ tree-sitter-c = { workspace = true, optional = true }
|
|||
tree-sitter-cpp = { workspace = true, optional = true }
|
||||
tree-sitter-css = { workspace = true, optional = true }
|
||||
tree-sitter-diff = { workspace = true, optional = true }
|
||||
tree-sitter-gitcommit = {workspace = true, optional = true }
|
||||
tree-sitter-go = { workspace = true, optional = true }
|
||||
tree-sitter-go-mod = { workspace = true, optional = true }
|
||||
tree-sitter-gowork = { workspace = true, optional = true }
|
||||
|
|
18
crates/languages/src/gitcommit/config.toml
Normal file
18
crates/languages/src/gitcommit/config.toml
Normal file
|
@ -0,0 +1,18 @@
|
|||
name = "Git Commit"
|
||||
grammar = "git_commit"
|
||||
path_suffixes = [
|
||||
"TAG_EDITMSG",
|
||||
"MERGE_MSG",
|
||||
"COMMIT_EDITMSG",
|
||||
"NOTES_EDITMSG",
|
||||
"EDIT_DESCRIPTION",
|
||||
]
|
||||
line_comments = ["#"]
|
||||
brackets = [
|
||||
{ start = "(", end = ")", close = true, newline = false },
|
||||
{ start = "`", end = "`", close = true, newline = false },
|
||||
{ start = "\"", end = "\"", close = true, newline = false },
|
||||
{ start = "'", end = "'", close = true, newline = false },
|
||||
{ start = "{", end = "}", close = true, newline = false },
|
||||
{ start = "[", end = "]", close = true, newline = false },
|
||||
]
|
18
crates/languages/src/gitcommit/highlights.scm
Normal file
18
crates/languages/src/gitcommit/highlights.scm
Normal file
|
@ -0,0 +1,18 @@
|
|||
(subject) @markup.heading
|
||||
(path) @string.special.path
|
||||
(branch) @string.special.symbol
|
||||
(commit) @constant
|
||||
(item) @markup.link.url
|
||||
(header) @tag
|
||||
|
||||
(change kind: "new file" @diff.plus)
|
||||
(change kind: "deleted" @diff.minus)
|
||||
(change kind: "modified" @diff.delta)
|
||||
(change kind: "renamed" @diff.delta.moved)
|
||||
|
||||
(trailer
|
||||
key: (trailer_key) @variable.other.member
|
||||
value: (trailer_value) @string)
|
||||
|
||||
[":" "=" "->" (scissors)] @punctuation.delimiter
|
||||
(comment) @comment
|
5
crates/languages/src/gitcommit/injections.scm
Normal file
5
crates/languages/src/gitcommit/injections.scm
Normal file
|
@ -0,0 +1,5 @@
|
|||
((scissors) @content
|
||||
(#set! "language" "diff"))
|
||||
|
||||
((rebase_command) @content
|
||||
(#set! "language" "git_rebase"))
|
|
@ -31,6 +31,25 @@ mod yaml;
|
|||
#[exclude = "*.rs"]
|
||||
struct LanguageDir;
|
||||
|
||||
/// A shared grammar for plain text, exposed for reuse by downstream crates.
|
||||
#[cfg(feature = "tree-sitter-gitcommit")]
|
||||
pub static LANGUAGE_GIT_COMMIT: std::sync::LazyLock<Arc<Language>> =
|
||||
std::sync::LazyLock::new(|| {
|
||||
Arc::new(Language::new(
|
||||
LanguageConfig {
|
||||
name: "Git Commit".into(),
|
||||
soft_wrap: Some(language::language_settings::SoftWrap::EditorWidth),
|
||||
matcher: LanguageMatcher {
|
||||
path_suffixes: vec!["COMMIT_EDITMSG".to_owned()],
|
||||
first_line_pattern: None,
|
||||
},
|
||||
line_comments: vec![Arc::from("#")],
|
||||
..LanguageConfig::default()
|
||||
},
|
||||
Some(tree_sitter_gitcommit::LANGUAGE.into()),
|
||||
))
|
||||
});
|
||||
|
||||
pub fn init(languages: Arc<LanguageRegistry>, node_runtime: NodeRuntime, cx: &mut App) {
|
||||
#[cfg(feature = "load-grammars")]
|
||||
languages.register_native_grammars([
|
||||
|
@ -53,6 +72,7 @@ pub fn init(languages: Arc<LanguageRegistry>, node_runtime: NodeRuntime, cx: &mu
|
|||
("tsx", tree_sitter_typescript::LANGUAGE_TSX),
|
||||
("typescript", tree_sitter_typescript::LANGUAGE_TYPESCRIPT),
|
||||
("yaml", tree_sitter_yaml::LANGUAGE),
|
||||
("gitcommit", tree_sitter_gitcommit::LANGUAGE),
|
||||
]);
|
||||
|
||||
macro_rules! language {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue