From d6c630f8eba8303351093ea54ca428e1005978a1 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Mon, 20 Jun 2022 11:38:12 +0200 Subject: [PATCH 1/4] Add missing auto-close brackets from various languages --- crates/zed/src/languages/javascript/config.toml | 2 ++ crates/zed/src/languages/markdown/config.toml | 3 +++ crates/zed/src/languages/rust/config.toml | 1 + crates/zed/src/languages/tsx/config.toml | 2 ++ crates/zed/src/languages/typescript/config.toml | 1 + 5 files changed, 9 insertions(+) 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..cae419aeed 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 = true, 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..53c953cc95 100644 --- a/crates/zed/src/languages/typescript/config.toml +++ b/crates/zed/src/languages/typescript/config.toml @@ -9,4 +9,5 @@ brackets = [ { start = "<", end = ">", close = false, newline = true }, { start = "\"", end = "\"", close = true, newline = false }, { start = "/*", end = " */", close = true, newline = false }, + { start = "`", end = "`", close = true, newline = false }, ] From d5efae609e8c8668a7480935b48dbe77b5903442 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Mon, 20 Jun 2022 11:50:44 +0200 Subject: [PATCH 2/4] Respect `close` in language configuration when autoclosing bracket --- crates/editor/src/editor.rs | 52 ++++++++++++++++++++++++++++++++++--- 1 file changed, 48 insertions(+), 4 deletions(-) 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)] + ); }); } From 6040429f93e9191e69b552913e13ecd519620b8b Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Mon, 20 Jun 2022 11:54:46 +0200 Subject: [PATCH 3/4] Auto-close ' for TypeScript and don't do so for Rust --- crates/zed/src/languages/rust/config.toml | 1 - crates/zed/src/languages/typescript/config.toml | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/crates/zed/src/languages/rust/config.toml b/crates/zed/src/languages/rust/config.toml index cae419aeed..e4d222cdde 100644 --- a/crates/zed/src/languages/rust/config.toml +++ b/crates/zed/src/languages/rust/config.toml @@ -8,6 +8,5 @@ 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 }, ] diff --git a/crates/zed/src/languages/typescript/config.toml b/crates/zed/src/languages/typescript/config.toml index 53c953cc95..8e5886167c 100644 --- a/crates/zed/src/languages/typescript/config.toml +++ b/crates/zed/src/languages/typescript/config.toml @@ -8,6 +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 }, + { start = "/*", end = " */", close = true, newline = false }, ] From d425d9fa6481de420c929d28d3f47655f7b74266 Mon Sep 17 00:00:00 2001 From: Antonio Scandurra Date: Mon, 20 Jun 2022 11:56:18 +0200 Subject: [PATCH 4/4] Allow wrapping selected text with `'` in Rust --- crates/zed/src/languages/rust/config.toml | 1 + 1 file changed, 1 insertion(+) 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 }, ]