mirror of
https://github.com/zed-industries/zed.git
synced 2025-02-05 10:20:51 +00:00
Merge pull request #1208 from zed-industries/enhance-autoclose
Enhance auto-closing bracket behavior
This commit is contained in:
commit
041e230d24
6 changed files with 58 additions and 4 deletions
|
@ -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)]
|
||||
);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -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 },
|
||||
]
|
||||
|
|
|
@ -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 },
|
||||
]
|
||||
|
|
|
@ -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 },
|
||||
]
|
||||
|
|
|
@ -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 },
|
||||
]
|
||||
|
|
|
@ -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 },
|
||||
]
|
||||
|
|
Loading…
Reference in a new issue