Merge pull request #1714 from zed-industries/fix-autoclose

Kay Simmons created

Don't autoclose brackets when `close` is false

Change summary

crates/editor/src/editor.rs       |  2 +-
crates/editor/src/editor_tests.rs | 11 +++++++++++
2 files changed, 12 insertions(+), 1 deletion(-)

Detailed changes

crates/editor/src/editor.rs ๐Ÿ”—

@@ -1874,7 +1874,7 @@ impl Editor {
                 let mut bracket_pair = None;
                 let mut is_bracket_pair_start = false;
                 for pair in language.brackets() {
-                    if pair.start.ends_with(text.as_ref()) {
+                    if pair.close && pair.start.ends_with(text.as_ref()) {
                         bracket_pair = Some(pair.clone());
                         is_bracket_pair_start = true;
                         break;

crates/editor/src/editor_tests.rs ๐Ÿ”—

@@ -3016,6 +3016,11 @@ async fn test_autoclose_pairs(cx: &mut gpui::TestAppContext) {
     cx.update_editor(|view, cx| view.handle_input("{", cx));
     cx.assert_editor_state("{ห‡a b");
 
+    // Don't autoclose if `close` is false for the bracket pair
+    cx.set_state("ห‡");
+    cx.update_editor(|view, cx| view.handle_input("[", cx));
+    cx.assert_editor_state("[ห‡");
+
     // Surround with brackets if text is selected
     cx.set_state("ยซaห‡ยป b");
     cx.update_editor(|view, cx| view.handle_input("{", cx));
@@ -3034,16 +3039,19 @@ async fn test_autoclose_with_embedded_language(cx: &mut gpui::TestAppContext) {
                     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()
                     },
                 ],
@@ -3069,16 +3077,19 @@ async fn test_autoclose_with_embedded_language(cx: &mut gpui::TestAppContext) {
                 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()
                 },
             ],