Merge pull request #1208 from zed-industries/enhance-autoclose

Enhance auto-closing bracket behavior
This commit is contained in:
Antonio Scandurra 2022-06-20 12:17:10 +02:00 committed by GitHub
commit 041e230d24
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 58 additions and 4 deletions

View file

@ -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)]
);
});
}

View file

@ -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 },
]

View file

@ -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 },
]

View file

@ -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 },
]

View file

@ -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 },
]

View file

@ -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 },
]