diff --git a/crates/language/src/language.rs b/crates/language/src/language.rs index 928e208627..766e181671 100644 --- a/crates/language/src/language.rs +++ b/crates/language/src/language.rs @@ -830,15 +830,24 @@ impl Language { let mut values = HashMap::default(); for (ix, name) in query.capture_names().iter().enumerate() { if let Some(override_name) = name.strip_prefix("override.") { - let value = self - .config - .overrides - .remove(override_name) - .ok_or_else(|| anyhow!("no such override {override_name}"))?; + let value = self.config.overrides.remove(override_name).ok_or_else(|| { + anyhow!( + "language {:?} has override in query but not in config: {override_name:?}", + self.config.name + ) + })?; values.insert(ix as u32, value); } } + if !self.config.overrides.is_empty() { + let keys = self.config.overrides.keys().collect::>(); + Err(anyhow!( + "language {:?} has overrides in config not in query: {keys:?}", + self.config.name + ))?; + } + self.grammar_mut().override_config = Some(OverrideConfig { query, values }); Ok(self) } diff --git a/crates/zed/src/languages.rs b/crates/zed/src/languages.rs index d7fa67b1d4..240d1dc49e 100644 --- a/crates/zed/src/languages.rs +++ b/crates/zed/src/languages.rs @@ -1,3 +1,4 @@ +use anyhow::Context; use gpui::executor::Background; pub use language::*; use lazy_static::lazy_static; @@ -145,7 +146,9 @@ pub(crate) fn language( .unwrap() .data, ) + .with_context(|| format!("failed to load config.toml for language {name:?}")) .unwrap(); + let mut language = Language::new(config, Some(grammar)); if let Some(query) = load_query(name, "/highlights") { diff --git a/crates/zed/src/languages/c/config.toml b/crates/zed/src/languages/c/config.toml index 5b48415610..1a5fe9339a 100644 --- a/crates/zed/src/languages/c/config.toml +++ b/crates/zed/src/languages/c/config.toml @@ -7,5 +7,20 @@ brackets = [ { start = "[", end = "]", close = true, newline = true }, { start = "(", end = ")", close = true, newline = true }, { start = "\"", end = "\"", close = true, newline = false }, + { start = "'", end = "'", close = true, newline = false }, { start = "/*", end = " */", close = true, newline = false }, ] + +[overrides.comment] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "(", end = ")", close = true, newline = true }, +] + +[overrides.string] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "(", end = ")", close = true, newline = true }, +] diff --git a/crates/zed/src/languages/c/overrides.scm b/crates/zed/src/languages/c/overrides.scm new file mode 100644 index 0000000000..0d14e6c205 --- /dev/null +++ b/crates/zed/src/languages/c/overrides.scm @@ -0,0 +1,2 @@ +(comment) @override.comment +(string_literal) @override.string diff --git a/crates/zed/src/languages/cpp/config.toml b/crates/zed/src/languages/cpp/config.toml index e9a793ec3c..c83adfb067 100644 --- a/crates/zed/src/languages/cpp/config.toml +++ b/crates/zed/src/languages/cpp/config.toml @@ -7,5 +7,20 @@ brackets = [ { start = "[", end = "]", close = true, newline = true }, { start = "(", end = ")", close = true, newline = true }, { start = "\"", end = "\"", close = true, newline = false }, + { start = "'", end = "'", close = true, newline = false }, { start = "/*", end = " */", close = true, newline = false }, ] + +[overrides.comment] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "(", end = ")", close = true, newline = true }, +] + +[overrides.string] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "(", end = ")", close = true, newline = true }, +] diff --git a/crates/zed/src/languages/cpp/overrides.scm b/crates/zed/src/languages/cpp/overrides.scm new file mode 100644 index 0000000000..0d14e6c205 --- /dev/null +++ b/crates/zed/src/languages/cpp/overrides.scm @@ -0,0 +1,2 @@ +(comment) @override.comment +(string_literal) @override.string diff --git a/crates/zed/src/languages/css/config.toml b/crates/zed/src/languages/css/config.toml index 28def3abd5..cf8d4f1e2f 100644 --- a/crates/zed/src/languages/css/config.toml +++ b/crates/zed/src/languages/css/config.toml @@ -5,5 +5,20 @@ 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 } + { start = "\"", end = "\"", close = true, newline = false }, + { start = "'", end = "'", close = true, newline = false }, +] + +[overrides.comment] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "(", end = ")", close = true, newline = true }, +] + +[overrides.string] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "(", end = ")", close = true, newline = true }, ] diff --git a/crates/zed/src/languages/css/overrides.scm b/crates/zed/src/languages/css/overrides.scm new file mode 100644 index 0000000000..9617249d3c --- /dev/null +++ b/crates/zed/src/languages/css/overrides.scm @@ -0,0 +1,2 @@ +(comment) @override.comment +(string_value) @override.string diff --git a/crates/zed/src/languages/elixir/config.toml b/crates/zed/src/languages/elixir/config.toml index 4e1af93943..0185d8eec3 100644 --- a/crates/zed/src/languages/elixir/config.toml +++ b/crates/zed/src/languages/elixir/config.toml @@ -6,5 +6,20 @@ 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 } + { start = "\"", end = "\"", close = true, newline = false }, + { start = "'", end = "'", close = true, newline = false }, +] + +[overrides.comment] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "(", end = ")", close = true, newline = true }, +] + +[overrides.string] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "(", end = ")", close = true, newline = true }, ] diff --git a/crates/zed/src/languages/elixir/overrides.scm b/crates/zed/src/languages/elixir/overrides.scm new file mode 100644 index 0000000000..ed1b20d44b --- /dev/null +++ b/crates/zed/src/languages/elixir/overrides.scm @@ -0,0 +1,2 @@ +(comment) @override.comment +[(string) (charlist)] @override.string diff --git a/crates/zed/src/languages/erb/config.toml b/crates/zed/src/languages/erb/config.toml index 280219a119..9cfcef0c8b 100644 --- a/crates/zed/src/languages/erb/config.toml +++ b/crates/zed/src/languages/erb/config.toml @@ -4,5 +4,4 @@ autoclose_before = ">})" brackets = [ { start = "<", end = ">", close = true, newline = true }, ] - -block_comment = ["<%#", "%>"] \ No newline at end of file +block_comment = ["<%#", "%>"] diff --git a/crates/zed/src/languages/go/config.toml b/crates/zed/src/languages/go/config.toml index fc6167e311..3f9464594c 100644 --- a/crates/zed/src/languages/go/config.toml +++ b/crates/zed/src/languages/go/config.toml @@ -7,5 +7,20 @@ brackets = [ { start = "[", end = "]", close = true, newline = true }, { start = "(", end = ")", close = true, newline = true }, { start = "\"", end = "\"", close = true, newline = false }, + { start = "'", end = "'", close = true, newline = false }, { start = "/*", end = " */", close = true, newline = false }, ] + +[overrides.comment] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "(", end = ")", close = true, newline = true }, +] + +[overrides.string] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "(", end = ")", close = true, newline = true }, +] diff --git a/crates/zed/src/languages/go/overrides.scm b/crates/zed/src/languages/go/overrides.scm new file mode 100644 index 0000000000..fc32c47f68 --- /dev/null +++ b/crates/zed/src/languages/go/overrides.scm @@ -0,0 +1,6 @@ +(comment) @override.comment +[ + (interpreted_string_literal) + (raw_string_literal) + (rune_literal) +] @override.string diff --git a/crates/zed/src/languages/html/config.toml b/crates/zed/src/languages/html/config.toml index 3e618da25e..f4f0ba26ea 100644 --- a/crates/zed/src/languages/html/config.toml +++ b/crates/zed/src/languages/html/config.toml @@ -9,4 +9,18 @@ brackets = [ { start = "!--", end = " --", close = true, newline = false }, ] -block_comment = [""] \ No newline at end of file +block_comment = [""] + +[overrides.comment] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "(", end = ")", close = true, newline = true }, +] + +[overrides.string] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "(", end = ")", close = true, newline = true }, +] diff --git a/crates/zed/src/languages/html/overrides.scm b/crates/zed/src/languages/html/overrides.scm new file mode 100644 index 0000000000..8f6a1f9eea --- /dev/null +++ b/crates/zed/src/languages/html/overrides.scm @@ -0,0 +1,2 @@ +(comment) @override.comment +(quoted_attribute_value) @override.string \ No newline at end of file diff --git a/crates/zed/src/languages/javascript/config.toml b/crates/zed/src/languages/javascript/config.toml index d7612d13f0..a5a656393d 100644 --- a/crates/zed/src/languages/javascript/config.toml +++ b/crates/zed/src/languages/javascript/config.toml @@ -12,3 +12,21 @@ brackets = [ { start = "`", end = "`", close = true, newline = false }, { start = "/*", end = " */", close = true, newline = false }, ] + +[overrides.comment] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "(", end = ")", close = true, newline = true }, +] + +[overrides.string] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "(", end = ")", close = true, newline = true }, +] + +[overrides.element] +line_comment = { remove = true } +block_comment = ["{/* ", " */}"] diff --git a/crates/zed/src/languages/javascript/overrides.scm b/crates/zed/src/languages/javascript/overrides.scm new file mode 100644 index 0000000000..f19c1d9203 --- /dev/null +++ b/crates/zed/src/languages/javascript/overrides.scm @@ -0,0 +1,9 @@ +(comment) @override.comment +(string) @override.string + +[ + (jsx_element) + (jsx_fragment) + (jsx_self_closing_element) + (jsx_expression) +] @override.element diff --git a/crates/zed/src/languages/json/config.toml b/crates/zed/src/languages/json/config.toml index cb36279358..48a1fb0c99 100644 --- a/crates/zed/src/languages/json/config.toml +++ b/crates/zed/src/languages/json/config.toml @@ -7,3 +7,9 @@ brackets = [ { start = "[", end = "]", close = true, newline = true }, { start = "\"", end = "\"", close = true, newline = false }, ] + +[overrides.string] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, +] diff --git a/crates/zed/src/languages/json/overrides.scm b/crates/zed/src/languages/json/overrides.scm new file mode 100644 index 0000000000..83911ae4a5 --- /dev/null +++ b/crates/zed/src/languages/json/overrides.scm @@ -0,0 +1,2 @@ +(comment) @comment +(string) @override.string \ No newline at end of file diff --git a/crates/zed/src/languages/python/config.toml b/crates/zed/src/languages/python/config.toml index c6b41ed700..a817de8e3b 100644 --- a/crates/zed/src/languages/python/config.toml +++ b/crates/zed/src/languages/python/config.toml @@ -12,4 +12,18 @@ brackets = [ auto_indent_using_last_non_empty_line = false increase_indent_pattern = ":$" -decrease_indent_pattern = "^\\s*(else|elif|except|finally)\\b.*:" \ No newline at end of file +decrease_indent_pattern = "^\\s*(else|elif|except|finally)\\b.*:" + +[overrides.comment] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "(", end = ")", close = true, newline = true }, +] + +[overrides.string] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "(", end = ")", close = true, newline = true }, +] diff --git a/crates/zed/src/languages/python/overrides.scm b/crates/zed/src/languages/python/overrides.scm new file mode 100644 index 0000000000..3a7ad5f035 --- /dev/null +++ b/crates/zed/src/languages/python/overrides.scm @@ -0,0 +1,2 @@ +(comment) @override.comment +(string) @override.string diff --git a/crates/zed/src/languages/ruby/config.toml b/crates/zed/src/languages/ruby/config.toml index 5600266de3..4fd21d8bd0 100644 --- a/crates/zed/src/languages/ruby/config.toml +++ b/crates/zed/src/languages/ruby/config.toml @@ -7,5 +7,19 @@ brackets = [ { start = "[", end = "]", close = true, newline = true }, { start = "(", end = ")", close = true, newline = true }, { start = "\"", end = "\"", close = true, newline = false }, - { start = "'", end = "'", close = false, newline = false }, -] \ No newline at end of file + { start = "'", end = "'", close = true, newline = false }, +] + +[overrides.comment] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "(", end = ")", close = true, newline = true }, +] + +[overrides.string] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "(", end = ")", close = true, newline = true }, +] diff --git a/crates/zed/src/languages/ruby/overrides.scm b/crates/zed/src/languages/ruby/overrides.scm new file mode 100644 index 0000000000..3a7ad5f035 --- /dev/null +++ b/crates/zed/src/languages/ruby/overrides.scm @@ -0,0 +1,2 @@ +(comment) @override.comment +(string) @override.string diff --git a/crates/zed/src/languages/rust/config.toml b/crates/zed/src/languages/rust/config.toml index 971ed27ebc..f9f6b59717 100644 --- a/crates/zed/src/languages/rust/config.toml +++ b/crates/zed/src/languages/rust/config.toml @@ -11,3 +11,19 @@ brackets = [ { start = "'", end = "'", close = false, newline = false }, { start = "/*", end = " */", close = true, newline = false }, ] + +[overrides.comment] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "(", end = ")", close = true, newline = true }, + { start = "<", end = ">", close = false, newline = true }, +] + +[overrides.string] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "(", end = ")", close = true, newline = true }, + { start = "<", end = ">", close = false, newline = true }, +] diff --git a/crates/zed/src/languages/rust/overrides.scm b/crates/zed/src/languages/rust/overrides.scm new file mode 100644 index 0000000000..29128d98e7 --- /dev/null +++ b/crates/zed/src/languages/rust/overrides.scm @@ -0,0 +1,8 @@ +[ + (string_literal) + (raw_string_literal) +] @override.string +[ + (line_comment) + (block_comment) +] @override.comment diff --git a/crates/zed/src/languages/scheme/config.toml b/crates/zed/src/languages/scheme/config.toml index 7e63673834..46e11bdc11 100644 --- a/crates/zed/src/languages/scheme/config.toml +++ b/crates/zed/src/languages/scheme/config.toml @@ -7,3 +7,15 @@ brackets = [ { start = "(", end = ")", close = true, newline = false }, { start = "\"", end = "\"", close = true, newline = false }, ] + +[overrides.comment] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, +] + +[overrides.string] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, +] diff --git a/crates/zed/src/languages/scheme/overrides.scm b/crates/zed/src/languages/scheme/overrides.scm new file mode 100644 index 0000000000..28a8a569df --- /dev/null +++ b/crates/zed/src/languages/scheme/overrides.scm @@ -0,0 +1,6 @@ +[ + (comment) + (block_comment) + (directive) +] @override.comment +(string) @override.string diff --git a/crates/zed/src/languages/toml/config.toml b/crates/zed/src/languages/toml/config.toml index cd624aecef..30797bf141 100644 --- a/crates/zed/src/languages/toml/config.toml +++ b/crates/zed/src/languages/toml/config.toml @@ -6,4 +6,17 @@ brackets = [ { start = "{", end = "}", close = true, newline = true }, { start = "[", end = "]", close = true, newline = true }, { start = "\"", end = "\"", close = true, newline = false }, + { start = "'", end = "'", close = true, newline = false }, +] + +[overrides.comment] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, +] + +[overrides.string] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, ] diff --git a/crates/zed/src/languages/toml/overrides.scm b/crates/zed/src/languages/toml/overrides.scm new file mode 100644 index 0000000000..3a7ad5f035 --- /dev/null +++ b/crates/zed/src/languages/toml/overrides.scm @@ -0,0 +1,2 @@ +(comment) @override.comment +(string) @override.string diff --git a/crates/zed/src/languages/typescript/config.toml b/crates/zed/src/languages/typescript/config.toml index 8e5886167c..3c2146e001 100644 --- a/crates/zed/src/languages/typescript/config.toml +++ b/crates/zed/src/languages/typescript/config.toml @@ -12,3 +12,17 @@ brackets = [ { start = "`", end = "`", close = true, newline = false }, { start = "/*", end = " */", close = true, newline = false }, ] + +[overrides.comment] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "(", end = ")", close = true, newline = true }, +] + +[overrides.string] +brackets = [ + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "(", end = ")", close = true, newline = true }, +] diff --git a/crates/zed/src/languages/typescript/overrides.scm b/crates/zed/src/languages/typescript/overrides.scm new file mode 100644 index 0000000000..3a7ad5f035 --- /dev/null +++ b/crates/zed/src/languages/typescript/overrides.scm @@ -0,0 +1,2 @@ +(comment) @override.comment +(string) @override.string