Add overrides for all languages

Max Brunsfeld and Julia Risley created

Co-authored-by: Julia Risley <julia@zed.dev>

Change summary

crates/language/src/language.rs                   | 19 ++++++++++++----
crates/zed/src/languages.rs                       |  3 ++
crates/zed/src/languages/c/config.toml            | 15 +++++++++++++
crates/zed/src/languages/c/overrides.scm          |  2 +
crates/zed/src/languages/cpp/config.toml          | 15 +++++++++++++
crates/zed/src/languages/cpp/overrides.scm        |  2 +
crates/zed/src/languages/css/config.toml          | 17 ++++++++++++++
crates/zed/src/languages/css/overrides.scm        |  2 +
crates/zed/src/languages/elixir/config.toml       | 17 ++++++++++++++
crates/zed/src/languages/elixir/overrides.scm     |  2 +
crates/zed/src/languages/erb/config.toml          |  3 -
crates/zed/src/languages/go/config.toml           | 15 +++++++++++++
crates/zed/src/languages/go/overrides.scm         |  6 +++++
crates/zed/src/languages/html/config.toml         | 16 +++++++++++++
crates/zed/src/languages/html/overrides.scm       |  2 +
crates/zed/src/languages/javascript/config.toml   | 18 ++++++++++++++++
crates/zed/src/languages/javascript/overrides.scm |  9 ++++++++
crates/zed/src/languages/json/config.toml         |  6 +++++
crates/zed/src/languages/json/overrides.scm       |  2 +
crates/zed/src/languages/python/config.toml       | 16 +++++++++++++
crates/zed/src/languages/python/overrides.scm     |  2 +
crates/zed/src/languages/ruby/config.toml         | 18 ++++++++++++++-
crates/zed/src/languages/ruby/overrides.scm       |  2 +
crates/zed/src/languages/rust/config.toml         | 16 ++++++++++++++
crates/zed/src/languages/rust/overrides.scm       |  8 +++++++
crates/zed/src/languages/scheme/config.toml       | 12 ++++++++++
crates/zed/src/languages/scheme/overrides.scm     |  6 +++++
crates/zed/src/languages/toml/config.toml         | 13 +++++++++++
crates/zed/src/languages/toml/overrides.scm       |  2 +
crates/zed/src/languages/typescript/config.toml   | 14 ++++++++++++
crates/zed/src/languages/typescript/overrides.scm |  2 +
31 files changed, 269 insertions(+), 13 deletions(-)

Detailed changes

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::<Vec<_>>();
+            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)
     }

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") {

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 },
+]

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 },
+]

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 },
 ]

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 },
 ]

crates/zed/src/languages/erb/config.toml 🔗

@@ -4,5 +4,4 @@ autoclose_before = ">})"
 brackets = [
     { start = "<", end = ">", close = true, newline = true },
 ]
-
-block_comment = ["<%#", "%>"]
+block_comment = ["<%#", "%>"]

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 },
+]

crates/zed/src/languages/html/config.toml 🔗

@@ -9,4 +9,18 @@ brackets = [
     { start = "!--", end = " --", close = true, newline = false },
 ]
 
-block_comment = ["<!-- ", " -->"]
+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 },
+]

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 = ["{/* ", " */}"]

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 },
+]

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.*:"
+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 },
+]

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 },
-]
+  { 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 },
+]

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 },
+]

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 },
+]

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 },
 ]

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 },
+]