diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 26692a3ba7..b579228fd9 100644 --- a/crates/editor/src/editor.rs +++ b/crates/editor/src/editor.rs @@ -2005,10 +2005,11 @@ impl Editor { let autoclose_pair = snapshot.language().and_then(|language| { let first_selection_start = selections.first().unwrap().start; let pair = language.brackets().iter().find(|pair| { - snapshot.contains_str_at( - first_selection_start.saturating_sub(pair.start.len()), - &pair.start, - ) + pair.close + && snapshot.contains_str_at( + first_selection_start.saturating_sub(pair.start.len()), + &pair.start, + ) }); pair.and_then(|pair| { let should_autoclose = selections.iter().all(|selection| { @@ -8719,6 +8720,12 @@ mod tests { close: true, newline: true, }, + BracketPair { + start: "[".to_string(), + end: "]".to_string(), + close: false, + newline: true, + }, ], autoclose_before: "})]".to_string(), ..Default::default() @@ -8847,6 +8854,43 @@ mod tests { view.selections.display_ranges(cx), [DisplayPoint::new(0, 1)..DisplayPoint::new(0, 2)] ); + + view.undo(&Undo, cx); + view.handle_input(&Input("[".to_string()), cx); + assert_eq!( + view.text(cx), + " + [a] + + /* + * + " + .unindent() + ); + assert_eq!( + view.selections.display_ranges(cx), + [DisplayPoint::new(0, 1)..DisplayPoint::new(0, 2)] + ); + + view.undo(&Undo, cx); + view.change_selections(None, cx, |s| { + s.select_display_ranges([DisplayPoint::new(0, 1)..DisplayPoint::new(0, 1)]) + }); + view.handle_input(&Input("[".to_string()), cx); + assert_eq!( + view.text(cx), + " + a[ + + /* + * + " + .unindent() + ); + assert_eq!( + view.selections.display_ranges(cx), + [DisplayPoint::new(0, 2)..DisplayPoint::new(0, 2)] + ); }); } diff --git a/crates/zed/src/languages/javascript/config.toml b/crates/zed/src/languages/javascript/config.toml index fb61d85f83..d7612d13f0 100644 --- a/crates/zed/src/languages/javascript/config.toml +++ b/crates/zed/src/languages/javascript/config.toml @@ -8,5 +8,7 @@ brackets = [ { 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 }, ] diff --git a/crates/zed/src/languages/markdown/config.toml b/crates/zed/src/languages/markdown/config.toml index 340189e412..6aa76601c9 100644 --- a/crates/zed/src/languages/markdown/config.toml +++ b/crates/zed/src/languages/markdown/config.toml @@ -5,4 +5,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 = false }, + { start = "'", end = "'", close = false, newline = false }, + { start = "`", end = "`", close = false, newline = false }, ] diff --git a/crates/zed/src/languages/rust/config.toml b/crates/zed/src/languages/rust/config.toml index e4d222cdde..971ed27ebc 100644 --- a/crates/zed/src/languages/rust/config.toml +++ b/crates/zed/src/languages/rust/config.toml @@ -8,5 +8,6 @@ brackets = [ { 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 }, ] diff --git a/crates/zed/src/languages/tsx/config.toml b/crates/zed/src/languages/tsx/config.toml index 62717266df..7baa12385c 100644 --- a/crates/zed/src/languages/tsx/config.toml +++ b/crates/zed/src/languages/tsx/config.toml @@ -8,5 +8,7 @@ brackets = [ { 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 }, ] diff --git a/crates/zed/src/languages/typescript/config.toml b/crates/zed/src/languages/typescript/config.toml index 5d491d2d32..8e5886167c 100644 --- a/crates/zed/src/languages/typescript/config.toml +++ b/crates/zed/src/languages/typescript/config.toml @@ -8,5 +8,7 @@ brackets = [ { 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 }, ]