diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index f9d5001985..787f7b8514 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -1761,8 +1761,8 @@ impl Editor { // bracket of any of this language's bracket pairs. let mut bracket_pair = None; let mut is_bracket_pair_start = false; - for pair in language.brackets() { - if pair.close && pair.start.ends_with(text.as_ref()) { + for (pair, enabled) in language.brackets() { + if enabled && pair.close && pair.start.ends_with(text.as_ref()) { bracket_pair = Some(pair.clone()); is_bracket_pair_start = true; break; @@ -1930,11 +1930,11 @@ impl Editor { .map(|c| c.len_utf8()) .sum::(); - insert_extra_newline = language.brackets().iter().any(|pair| { + insert_extra_newline = language.brackets().any(|(pair, enabled)| { let pair_start = pair.start.trim_end(); let pair_end = pair.end.trim_start(); - pair.newline + enabled && pair.newline && buffer .contains_str_at(end + trailing_whitespace_len, pair_end) && buffer.contains_str_at( diff --git a/crates/editor/src/editor_tests.rs b/crates/editor/src/editor_tests.rs index 9b5cececff..64ff6dec38 100644 --- a/crates/editor/src/editor_tests.rs +++ b/crates/editor/src/editor_tests.rs @@ -14,7 +14,7 @@ use gpui::{ geometry::{rect::RectF, vector::vec2f}, platform::{WindowBounds, WindowOptions}, }; -use language::{FakeLspAdapter, LanguageConfig, LanguageRegistry, Point}; +use language::{BracketPairConfig, FakeLspAdapter, LanguageConfig, LanguageRegistry, Point}; use project::FakeFs; use settings::EditorSettings; use util::{ @@ -3002,20 +3002,23 @@ async fn test_autoindent_selections(cx: &mut gpui::TestAppContext) { let language = Arc::new( Language::new( LanguageConfig { - brackets: vec![ - BracketPair { - start: "{".to_string(), - end: "}".to_string(), - close: false, - newline: true, - }, - BracketPair { - start: "(".to_string(), - end: ")".to_string(), - close: false, - newline: true, - }, - ], + brackets: BracketPairConfig { + pairs: vec![ + BracketPair { + start: "{".to_string(), + end: "}".to_string(), + close: false, + newline: true, + }, + BracketPair { + start: "(".to_string(), + end: ")".to_string(), + close: false, + newline: true, + }, + ], + ..Default::default() + }, ..Default::default() }, Some(tree_sitter_rust::language()), @@ -3059,38 +3062,41 @@ async fn test_autoclose_pairs(cx: &mut gpui::TestAppContext) { let language = Arc::new(Language::new( LanguageConfig { - brackets: vec![ - BracketPair { - start: "{".to_string(), - end: "}".to_string(), - close: true, - newline: true, - }, - BracketPair { - start: "(".to_string(), - end: ")".to_string(), - close: true, - newline: true, - }, - BracketPair { - start: "/*".to_string(), - end: " */".to_string(), - close: true, - newline: true, - }, - BracketPair { - start: "[".to_string(), - end: "]".to_string(), - close: false, - newline: true, - }, - BracketPair { - start: "\"".to_string(), - end: "\"".to_string(), - close: true, - newline: false, - }, - ], + brackets: BracketPairConfig { + pairs: vec![ + BracketPair { + start: "{".to_string(), + end: "}".to_string(), + close: true, + newline: true, + }, + BracketPair { + start: "(".to_string(), + end: ")".to_string(), + close: true, + newline: true, + }, + BracketPair { + start: "/*".to_string(), + end: " */".to_string(), + close: true, + newline: true, + }, + BracketPair { + start: "[".to_string(), + end: "]".to_string(), + close: false, + newline: true, + }, + BracketPair { + start: "\"".to_string(), + end: "\"".to_string(), + close: true, + newline: false, + }, + ], + ..Default::default() + }, autoclose_before: "})]".to_string(), ..Default::default() }, @@ -3227,26 +3233,29 @@ async fn test_autoclose_with_embedded_language(cx: &mut gpui::TestAppContext) { Language::new( LanguageConfig { name: "HTML".into(), - brackets: vec![ - BracketPair { - start: "<".into(), - end: ">".into(), - close: true, - ..Default::default() - }, - BracketPair { - start: "{".into(), - end: "}".into(), - close: true, - ..Default::default() - }, - BracketPair { - start: "(".into(), - end: ")".into(), - close: true, - ..Default::default() - }, - ], + brackets: BracketPairConfig { + pairs: vec![ + BracketPair { + start: "<".into(), + end: ">".into(), + close: true, + ..Default::default() + }, + BracketPair { + start: "{".into(), + end: "}".into(), + close: true, + ..Default::default() + }, + BracketPair { + start: "(".into(), + end: ")".into(), + close: true, + ..Default::default() + }, + ], + ..Default::default() + }, autoclose_before: "})]>".into(), ..Default::default() }, @@ -3265,26 +3274,29 @@ async fn test_autoclose_with_embedded_language(cx: &mut gpui::TestAppContext) { let javascript_language = Arc::new(Language::new( LanguageConfig { name: "JavaScript".into(), - brackets: vec![ - BracketPair { - start: "/*".into(), - end: " */".into(), - close: true, - ..Default::default() - }, - BracketPair { - start: "{".into(), - end: "}".into(), - close: true, - ..Default::default() - }, - BracketPair { - start: "(".into(), - end: ")".into(), - close: true, - ..Default::default() - }, - ], + brackets: BracketPairConfig { + pairs: vec![ + BracketPair { + start: "/*".into(), + end: " */".into(), + close: true, + ..Default::default() + }, + BracketPair { + start: "{".into(), + end: "}".into(), + close: true, + ..Default::default() + }, + BracketPair { + start: "(".into(), + end: ")".into(), + close: true, + ..Default::default() + }, + ], + ..Default::default() + }, autoclose_before: "})]>".into(), ..Default::default() }, @@ -3452,20 +3464,23 @@ async fn test_surround_with_pair(cx: &mut gpui::TestAppContext) { cx.update(|cx| cx.set_global(Settings::test(cx))); let language = Arc::new(Language::new( LanguageConfig { - brackets: vec![ - BracketPair { - start: "{".to_string(), - end: "}".to_string(), - close: true, - newline: true, - }, - BracketPair { - start: "/* ".to_string(), - end: "*/".to_string(), - close: true, - ..Default::default() - }, - ], + brackets: BracketPairConfig { + pairs: vec![ + BracketPair { + start: "{".to_string(), + end: "}".to_string(), + close: true, + newline: true, + }, + BracketPair { + start: "/* ".to_string(), + end: "*/".to_string(), + close: true, + ..Default::default() + }, + ], + ..Default::default() + }, ..Default::default() }, Some(tree_sitter_rust::language()), @@ -3603,12 +3618,15 @@ async fn test_delete_autoclose_pair(cx: &mut gpui::TestAppContext) { cx.update(|cx| cx.set_global(Settings::test(cx))); let language = Arc::new(Language::new( LanguageConfig { - brackets: vec![BracketPair { - start: "{".to_string(), - end: "}".to_string(), - close: true, - newline: true, - }], + brackets: BracketPairConfig { + pairs: vec![BracketPair { + start: "{".to_string(), + end: "}".to_string(), + close: true, + newline: true, + }], + ..Default::default() + }, autoclose_before: "}".to_string(), ..Default::default() }, @@ -5030,20 +5048,23 @@ async fn test_extra_newline_insertion(cx: &mut gpui::TestAppContext) { let language = Arc::new( Language::new( LanguageConfig { - brackets: vec![ - BracketPair { - start: "{".to_string(), - end: "}".to_string(), - close: true, - newline: true, - }, - BracketPair { - start: "/* ".to_string(), - end: " */".to_string(), - close: true, - newline: true, - }, - ], + brackets: BracketPairConfig { + pairs: vec![ + BracketPair { + start: "{".to_string(), + end: "}".to_string(), + close: true, + newline: true, + }, + BracketPair { + start: "/* ".to_string(), + end: " */".to_string(), + close: true, + newline: true, + }, + ], + ..Default::default() + }, ..Default::default() }, Some(tree_sitter_rust::language()), diff --git a/crates/editor/src/highlight_matching_bracket.rs b/crates/editor/src/highlight_matching_bracket.rs index 0d868d460c..ce3864f56a 100644 --- a/crates/editor/src/highlight_matching_bracket.rs +++ b/crates/editor/src/highlight_matching_bracket.rs @@ -32,11 +32,10 @@ pub fn refresh_matching_bracket_highlights(editor: &mut Editor, cx: &mut ViewCon #[cfg(test)] mod tests { - use crate::test::editor_lsp_test_context::EditorLspTestContext; - use super::*; + use crate::test::editor_lsp_test_context::EditorLspTestContext; use indoc::indoc; - use language::{BracketPair, Language, LanguageConfig}; + use language::{BracketPair, BracketPairConfig, Language, LanguageConfig}; #[gpui::test] async fn test_matching_bracket_highlights(cx: &mut gpui::TestAppContext) { @@ -45,20 +44,23 @@ mod tests { LanguageConfig { name: "Rust".into(), path_suffixes: vec!["rs".to_string()], - brackets: vec![ - BracketPair { - start: "{".to_string(), - end: "}".to_string(), - close: false, - newline: true, - }, - BracketPair { - start: "(".to_string(), - end: ")".to_string(), - close: false, - newline: true, - }, - ], + brackets: BracketPairConfig { + pairs: vec![ + BracketPair { + start: "{".to_string(), + end: "}".to_string(), + close: false, + newline: true, + }, + BracketPair { + start: "(".to_string(), + end: ")".to_string(), + close: false, + newline: true, + }, + ], + ..Default::default() + }, ..Default::default() }, Some(tree_sitter_rust::language()), diff --git a/crates/language/src/buffer_tests.rs b/crates/language/src/buffer_tests.rs index e6e7544763..36add5f1f3 100644 --- a/crates/language/src/buffer_tests.rs +++ b/crates/language/src/buffer_tests.rs @@ -1527,42 +1527,34 @@ fn test_language_config_at(cx: &mut MutableAppContext) { LanguageConfig { name: "JavaScript".into(), line_comment: Some("// ".into()), - brackets: vec![ - BracketPair { - start: "{".into(), - end: "}".into(), - close: true, - newline: false, - }, - BracketPair { - start: "'".into(), - end: "'".into(), - close: true, - newline: false, - }, - ], - overrides: [ - ( - "element".into(), - LanguageConfigOverride { - line_comment: Override::Remove { remove: true }, - block_comment: Override::Set(("{/*".into(), "*/}".into())), - ..Default::default() + brackets: BracketPairConfig { + pairs: vec![ + BracketPair { + start: "{".into(), + end: "}".into(), + close: true, + newline: false, }, - ), - ( - "string".into(), - LanguageConfigOverride { - brackets: Override::Set(vec![BracketPair { - start: "{".into(), - end: "}".into(), - close: true, - newline: false, - }]), - ..Default::default() + BracketPair { + start: "'".into(), + end: "'".into(), + close: true, + newline: false, }, - ), - ] + ], + disabled_scopes_by_bracket_ix: vec![ + Vec::new(), // + vec!["string".into()], + ], + }, + overrides: [( + "element".into(), + LanguageConfigOverride { + line_comment: Override::Remove { remove: true }, + block_comment: Override::Set(("{/*".into(), "*/}".into())), + ..Default::default() + }, + )] .into_iter() .collect(), ..Default::default() @@ -1584,11 +1576,19 @@ fn test_language_config_at(cx: &mut MutableAppContext) { let config = snapshot.language_scope_at(0).unwrap(); assert_eq!(config.line_comment_prefix().unwrap().as_ref(), "// "); - assert_eq!(config.brackets().len(), 2); + // Both bracket pairs are enabled + assert_eq!( + config.brackets().map(|e| e.1).collect::>(), + &[true, true] + ); let string_config = snapshot.language_scope_at(3).unwrap(); - assert_eq!(config.line_comment_prefix().unwrap().as_ref(), "// "); - assert_eq!(string_config.brackets().len(), 1); + assert_eq!(string_config.line_comment_prefix().unwrap().as_ref(), "// "); + // Second bracket pair is disabled + assert_eq!( + string_config.brackets().map(|e| e.1).collect::>(), + &[true, false] + ); let element_config = snapshot.language_scope_at(10).unwrap(); assert_eq!(element_config.line_comment_prefix(), None); @@ -1596,7 +1596,11 @@ fn test_language_config_at(cx: &mut MutableAppContext) { element_config.block_comment_delimiters(), Some((&"{/*".into(), &"*/}".into())) ); - assert_eq!(element_config.brackets().len(), 2); + // Both bracket pairs are enabled + assert_eq!( + element_config.brackets().map(|e| e.1).collect::>(), + &[true, true] + ); buffer }); diff --git a/crates/language/src/language.rs b/crates/language/src/language.rs index 4279ce6654..c84fc109ff 100644 --- a/crates/language/src/language.rs +++ b/crates/language/src/language.rs @@ -231,7 +231,7 @@ pub struct CodeLabel { pub struct LanguageConfig { pub name: Arc, pub path_suffixes: Vec, - pub brackets: Vec, + pub brackets: BracketPairConfig, #[serde(default = "auto_indent_using_last_non_empty_line_default")] pub auto_indent_using_last_non_empty_line: bool, #[serde(default, deserialize_with = "deserialize_regex")] @@ -270,8 +270,8 @@ pub struct LanguageConfigOverride { pub line_comment: Override>, #[serde(default)] pub block_comment: Override<(Arc, Arc)>, - #[serde(default)] - pub brackets: Override>, + #[serde(skip_deserializing)] + pub disabled_bracket_ixs: Vec, } #[derive(Deserialize, Debug)] @@ -336,7 +336,41 @@ pub struct FakeLspAdapter { pub disk_based_diagnostics_sources: Vec, } -#[derive(Clone, Debug, Default, Deserialize)] +#[derive(Clone, Debug, Default)] +pub struct BracketPairConfig { + pub pairs: Vec, + pub disabled_scopes_by_bracket_ix: Vec>, +} + +impl<'de> Deserialize<'de> for BracketPairConfig { + fn deserialize(deserializer: D) -> std::result::Result + where + D: Deserializer<'de>, + { + #[derive(Deserialize)] + pub struct Entry { + #[serde(flatten)] + pub bracket_pair: BracketPair, + #[serde(default)] + pub not_in: Vec, + } + + let result = Vec::::deserialize(deserializer)?; + let mut brackets = Vec::with_capacity(result.len()); + let mut disabled_scopes_by_bracket_ix = Vec::with_capacity(result.len()); + for entry in result { + brackets.push(entry.bracket_pair); + disabled_scopes_by_bracket_ix.push(entry.not_in); + } + + Ok(BracketPairConfig { + pairs: brackets, + disabled_scopes_by_bracket_ix, + }) + } +} + +#[derive(Clone, Debug, Default, Deserialize, PartialEq)] pub struct BracketPair { pub start: String, pub end: String, @@ -393,7 +427,7 @@ struct InjectionConfig { struct OverrideConfig { query: Query, - values: HashMap, + values: HashMap, } #[derive(Default, Clone)] @@ -967,16 +1001,11 @@ impl Language { pub fn with_override_query(mut self, source: &str) -> Result { let query = Query::new(self.grammar_mut().ts_language, source)?; - let mut values = HashMap::default(); + let mut override_configs_by_id = HashMap::default(); for (ix, name) in query.capture_names().iter().enumerate() { if !name.starts_with('_') { - let value = self.config.overrides.remove(name).ok_or_else(|| { - anyhow!( - "language {:?} has override in query but not in config: {name:?}", - self.config.name - ) - })?; - values.insert(ix as u32, value); + let value = self.config.overrides.remove(name).unwrap_or_default(); + override_configs_by_id.insert(ix as u32, (name.clone(), value)); } } @@ -988,7 +1017,28 @@ impl Language { ))?; } - self.grammar_mut().override_config = Some(OverrideConfig { query, values }); + for (name, override_config) in override_configs_by_id.values_mut() { + override_config.disabled_bracket_ixs = self + .config + .brackets + .disabled_scopes_by_bracket_ix + .iter() + .enumerate() + .filter_map(|(ix, disabled_scope_names)| { + if disabled_scope_names.contains(name) { + Some(ix as u16) + } else { + None + } + }) + .collect(); + } + + self.config.brackets.disabled_scopes_by_bracket_ix.clear(); + self.grammar_mut().override_config = Some(OverrideConfig { + query, + values: override_configs_by_id, + }); Ok(self) } @@ -1132,12 +1182,26 @@ impl LanguageScope { .map(|e| (&e.0, &e.1)) } - pub fn brackets(&self) -> &[BracketPair] { - Override::as_option( - self.config_override().map(|o| &o.brackets), - Some(&self.language.config.brackets), - ) - .map_or(&[], Vec::as_slice) + pub fn brackets(&self) -> impl Iterator { + let mut disabled_ids = self + .config_override() + .map_or(&[] as _, |o| o.disabled_bracket_ixs.as_slice()); + self.language + .config + .brackets + .pairs + .iter() + .enumerate() + .map(move |(ix, bracket)| { + let mut is_enabled = true; + if let Some(next_disabled_ix) = disabled_ids.first() { + if ix == *next_disabled_ix as usize { + disabled_ids = &disabled_ids[1..]; + is_enabled = false; + } + } + (bracket, is_enabled) + }) } pub fn should_autoclose_before(&self, c: char) -> bool { @@ -1148,7 +1212,7 @@ impl LanguageScope { let id = self.override_id?; let grammar = self.language.grammar.as_ref()?; let override_config = grammar.override_config.as_ref()?; - override_config.values.get(&id) + override_config.values.get(&id).map(|e| &e.1) } } diff --git a/crates/zed/src/languages/c/config.toml b/crates/zed/src/languages/c/config.toml index 1a5fe9339a..f986f4b834 100644 --- a/crates/zed/src/languages/c/config.toml +++ b/crates/zed/src/languages/c/config.toml @@ -6,21 +6,7 @@ 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 }, + { 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/crates/zed/src/languages/cpp/config.toml b/crates/zed/src/languages/cpp/config.toml index c83adfb067..c719fae1eb 100644 --- a/crates/zed/src/languages/cpp/config.toml +++ b/crates/zed/src/languages/cpp/config.toml @@ -6,21 +6,7 @@ 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 }, + { 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/crates/zed/src/languages/css/config.toml b/crates/zed/src/languages/css/config.toml index cf8d4f1e2f..ba9660c4ed 100644 --- a/crates/zed/src/languages/css/config.toml +++ b/crates/zed/src/languages/css/config.toml @@ -5,20 +5,6 @@ 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 }, -] - -[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 }, + { start = "\"", end = "\"", close = true, newline = false, not_in = ["string", "comment"] }, + { start = "'", end = "'", close = true, newline = false, not_in = ["string", "comment"] }, ] diff --git a/crates/zed/src/languages/elixir/config.toml b/crates/zed/src/languages/elixir/config.toml index 0185d8eec3..05c126e9da 100644 --- a/crates/zed/src/languages/elixir/config.toml +++ b/crates/zed/src/languages/elixir/config.toml @@ -6,20 +6,6 @@ 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 }, -] - -[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 }, + { start = "\"", end = "\"", close = true, newline = false, not_in = ["string", "comment"] }, + { start = "'", end = "'", close = true, newline = false, not_in = ["string", "comment"] }, ] diff --git a/crates/zed/src/languages/go/config.toml b/crates/zed/src/languages/go/config.toml index 3f9464594c..1951e193f0 100644 --- a/crates/zed/src/languages/go/config.toml +++ b/crates/zed/src/languages/go/config.toml @@ -6,21 +6,7 @@ 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 }, + { start = "\"", end = "\"", close = true, newline = false, not_in = ["comment", "string"] }, + { start = "'", end = "'", close = true, newline = false, not_in = ["comment", "string"] }, + { start = "/*", end = " */", close = true, newline = false, not_in = ["comment", "string"] }, ] diff --git a/crates/zed/src/languages/html/config.toml b/crates/zed/src/languages/html/config.toml index f4f0ba26ea..077a421ce1 100644 --- a/crates/zed/src/languages/html/config.toml +++ b/crates/zed/src/languages/html/config.toml @@ -1,26 +1,12 @@ name = "HTML" path_suffixes = ["html"] 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 }, - { start = "!--", end = " --", close = true, newline = false }, -] - 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 }, + { start = "\"", end = "\"", close = true, newline = false, not_in = ["comment", "string"] }, + { start = "<", end = ">", close = true, newline = true, not_in = ["comment", "string"] }, + { start = "!--", end = " --", close = true, newline = false, not_in = ["comment", "string"] }, ] diff --git a/crates/zed/src/languages/javascript/config.toml b/crates/zed/src/languages/javascript/config.toml index a5a656393d..7c49ac9513 100644 --- a/crates/zed/src/languages/javascript/config.toml +++ b/crates/zed/src/languages/javascript/config.toml @@ -6,25 +6,11 @@ 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 }, - { start = "\"", end = "\"", close = true, newline = false }, - { 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 }, + { start = "<", end = ">", close = false, newline = true, not_in = ["comment", "string"] }, + { start = "\"", end = "\"", close = true, newline = false, not_in = ["comment", "string"] }, + { start = "'", end = "'", close = true, newline = false, not_in = ["comment", "string"] }, + { start = "`", end = "`", close = true, newline = false, not_in = ["comment", "string"] }, + { start = "/*", end = " */", close = true, newline = false, not_in = ["comment", "string"] }, ] [overrides.element] diff --git a/crates/zed/src/languages/json/config.toml b/crates/zed/src/languages/json/config.toml index 48a1fb0c99..87f41882a5 100644 --- a/crates/zed/src/languages/json/config.toml +++ b/crates/zed/src/languages/json/config.toml @@ -5,11 +5,5 @@ autoclose_before = ",]}" brackets = [ { start = "{", end = "}", close = true, newline = true }, { 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 }, + { start = "\"", end = "\"", close = true, newline = false, not_in = ["string"] }, ] diff --git a/crates/zed/src/languages/lua/config.toml b/crates/zed/src/languages/lua/config.toml index effb37f945..fe44a3d2aa 100644 --- a/crates/zed/src/languages/lua/config.toml +++ b/crates/zed/src/languages/lua/config.toml @@ -3,13 +3,7 @@ path_suffixes = ["lua"] line_comment = "-- " autoclose_before = ",]}" brackets = [ -{ start = "{", end = "}", close = true, newline = true }, -{ start = "[", end = "]", close = true, newline = true }, -{ start = "\"", end = "\"", close = true, newline = false }, + { start = "{", end = "}", close = true, newline = true }, + { start = "[", end = "]", close = true, newline = true }, + { start = "\"", end = "\"", close = true, newline = false, not_in = ["string"] }, ] - -[overrides.string] -brackets = [ -{ start = "{", end = "}", close = true, newline = true }, -{ start = "[", end = "]", close = true, newline = true }, -] \ 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 45f20e25a3..e733676d89 100644 --- a/crates/zed/src/languages/python/config.toml +++ b/crates/zed/src/languages/python/config.toml @@ -3,27 +3,13 @@ path_suffixes = ["py", "pyi"] line_comment = "# " 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 }, - { start = "'", end = "'", close = false, newline = false }, + { 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 = false, newline = false, not_in = ["string"] }, ] auto_indent_using_last_non_empty_line = false increase_indent_pattern = ":\\s*$" 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/ruby/config.toml b/crates/zed/src/languages/ruby/config.toml index 4fd21d8bd0..329e080740 100644 --- a/crates/zed/src/languages/ruby/config.toml +++ b/crates/zed/src/languages/ruby/config.toml @@ -6,20 +6,6 @@ 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 }, -] - -[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 }, + { start = "\"", end = "\"", close = true, newline = false, not_in = ["comment", "string"] }, + { start = "'", end = "'", close = true, newline = false, not_in = ["comment", "string"] }, ] diff --git a/crates/zed/src/languages/rust/config.toml b/crates/zed/src/languages/rust/config.toml index f9f6b59717..705287f0a7 100644 --- a/crates/zed/src/languages/rust/config.toml +++ b/crates/zed/src/languages/rust/config.toml @@ -6,24 +6,7 @@ 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 }, - { 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 }, - { 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 }, + { start = "<", end = ">", close = false, newline = true, not_in = ["string", "comment"] }, + { start = "\"", end = "\"", close = true, newline = false, not_in = ["string"] }, + { start = "/*", end = " */", close = true, newline = false, not_in = ["string", "comment"] }, ] diff --git a/crates/zed/src/languages/scheme/config.toml b/crates/zed/src/languages/scheme/config.toml index 46e11bdc11..7b47698833 100644 --- a/crates/zed/src/languages/scheme/config.toml +++ b/crates/zed/src/languages/scheme/config.toml @@ -5,17 +5,5 @@ autoclose_before = "])" brackets = [ { 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 }, -] - -[overrides.string] -brackets = [ - { start = "{", end = "}", close = true, newline = true }, - { start = "[", end = "]", close = true, newline = true }, + { start = "\"", end = "\"", close = true, newline = false, not_in = ["comment", "string"] }, ] diff --git a/crates/zed/src/languages/toml/config.toml b/crates/zed/src/languages/toml/config.toml index 30797bf141..4e89f5cabd 100644 --- a/crates/zed/src/languages/toml/config.toml +++ b/crates/zed/src/languages/toml/config.toml @@ -5,18 +5,6 @@ autoclose_before = ",]}" 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 }, + { start = "\"", end = "\"", close = true, newline = false, not_in = ["comment", "string"] }, + { start = "'", end = "'", close = true, newline = false, not_in = ["comment", "string"] }, ] diff --git a/crates/zed/src/languages/tsx/config.toml b/crates/zed/src/languages/tsx/config.toml index 4f466cc961..234dc6b013 100644 --- a/crates/zed/src/languages/tsx/config.toml +++ b/crates/zed/src/languages/tsx/config.toml @@ -6,18 +6,13 @@ 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 }, - { 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 = false, newline = true, not_in = ["string", "comment"] }, + { 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"] }, + { start = "/*", end = " */", close = true, newline = false, not_in = ["string", "comment"] }, ] [overrides.element] line_comment = { remove = true } block_comment = ["{/* ", " */}"] - -[overrides.string] -brackets = [ - { start = "{", end = "}", close = true, newline = true }, -] diff --git a/crates/zed/src/languages/typescript/config.toml b/crates/zed/src/languages/typescript/config.toml index 3c2146e001..4f006b342a 100644 --- a/crates/zed/src/languages/typescript/config.toml +++ b/crates/zed/src/languages/typescript/config.toml @@ -6,23 +6,9 @@ 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 }, - { start = "\"", end = "\"", close = true, newline = false }, - { 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 }, + { start = "<", end = ">", close = false, newline = true, not_in = ["string", "comment"] }, + { 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"] }, + { start = "/*", end = " */", close = true, newline = false, not_in = ["string", "comment"] }, ] diff --git a/crates/zed/src/languages/yaml/config.toml b/crates/zed/src/languages/yaml/config.toml index 08dac475b3..6912d92457 100644 --- a/crates/zed/src/languages/yaml/config.toml +++ b/crates/zed/src/languages/yaml/config.toml @@ -5,13 +5,7 @@ autoclose_before = ",]}" 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, not_in = ["string"] }, ] increase_indent_pattern = ":\\s*[|>]?\\s*$" - -[overrides.string] -brackets = [ - { start = "{", end = "}", close = true, newline = true }, - { start = "[", end = "]", close = true, newline = true }, -]