diff --git a/crates/editor/src/editor.rs b/crates/editor/src/editor.rs index 26692a3ba7fdfb2775352dab9b34835e16ec5ba5..b579228fd9acf2bb5fa80ce05923e20085fd7225 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 fb61d85f839ec25f8cde4f0b485ea190733692af..d7612d13f08ec2eac41d30bef1da7cc41eccbd20 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 340189e412d8da51870bc1049e73b25e999188f8..6aa76601c9ca896c17c6ee211d6514065bd9a987 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 e4d222cddedaa5a004b71a74ed7d3d4dd9608bb2..971ed27ebc3147ecee9ac6884712a3937ff1b7ba 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 62717266df9e0bd56d83b336cfbf28aa2b01ee4b..7baa12385c89d684eb80a708497d02693017eca3 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 5d491d2d329e89fe2a97ff8121c2d30c861b61d5..8e5886167c763c1bb86a5ee0e6e8d88d08ad0d7b 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 }, ]