Add support for auto surround (#13217)
 In the past, Zed used a single switch called `autoclose` to control both `autoclose` and `auto_surround` functionalities: + `autoclose`: when input '(', append ')' automatically. + `auto_surround`: when select text and input '(', surround text with '(' and ')' automatically. This PR separates `auto_surround` from `autoclose` to support `<`. Previously, if `autoclose` of `<` was set to `false`, `auto_surround` couldn't be used. However, setting `autoclose` to `true` would affect the default behavior of simple expression. For example, `a < b` would become `a <> b`. For more information, see #13187. Fix #12898. Release Notes: - Added support for `auto_surround` ([#12898](https://github.com/zed-industries/zed/issues/12898)).
This commit is contained in:
parent
963b0c010a
commit
95b06097ee
9 changed files with 96 additions and 6 deletions
|
@ -1782,12 +1782,14 @@ fn test_language_scope_at_with_javascript(cx: &mut AppContext) {
|
|||
start: "{".into(),
|
||||
end: "}".into(),
|
||||
close: true,
|
||||
surround: true,
|
||||
newline: false,
|
||||
},
|
||||
BracketPair {
|
||||
start: "'".into(),
|
||||
end: "'".into(),
|
||||
close: true,
|
||||
surround: true,
|
||||
newline: false,
|
||||
},
|
||||
],
|
||||
|
@ -1910,12 +1912,14 @@ fn test_language_scope_at_with_rust(cx: &mut AppContext) {
|
|||
start: "{".into(),
|
||||
end: "}".into(),
|
||||
close: true,
|
||||
surround: true,
|
||||
newline: false,
|
||||
},
|
||||
BracketPair {
|
||||
start: "'".into(),
|
||||
end: "'".into(),
|
||||
close: true,
|
||||
surround: true,
|
||||
newline: false,
|
||||
},
|
||||
],
|
||||
|
|
|
@ -61,6 +61,7 @@ use task::RunnableTag;
|
|||
pub use task_context::{ContextProvider, RunnableRange};
|
||||
use theme::SyntaxTheme;
|
||||
use tree_sitter::{self, wasmtime, Query, QueryCursor, WasmStore};
|
||||
use util::serde::default_true;
|
||||
|
||||
pub use buffer::Operation;
|
||||
pub use buffer::*;
|
||||
|
@ -803,6 +804,9 @@ pub struct BracketPair {
|
|||
pub end: String,
|
||||
/// True if `end` should be automatically inserted right after `start` characters.
|
||||
pub close: bool,
|
||||
/// True if selected text should be surrounded by `start` and `end` characters.
|
||||
#[serde(default = "default_true")]
|
||||
pub surround: bool,
|
||||
/// True if an extra newline should be inserted while the cursor is in the middle
|
||||
/// of that bracket pair.
|
||||
pub newline: bool,
|
||||
|
|
|
@ -112,6 +112,8 @@ pub struct LanguageSettings {
|
|||
pub inlay_hints: InlayHintSettings,
|
||||
/// Whether to automatically close brackets.
|
||||
pub use_autoclose: bool,
|
||||
/// Whether to automatically surround text with brackets.
|
||||
pub use_auto_surround: bool,
|
||||
// Controls how the editor handles the autoclosed characters.
|
||||
pub always_treat_brackets_as_autoclosed: bool,
|
||||
/// Which code actions to run on save
|
||||
|
@ -315,6 +317,11 @@ pub struct LanguageSettingsContent {
|
|||
///
|
||||
/// Default: true
|
||||
pub use_autoclose: Option<bool>,
|
||||
/// Whether to automatically surround text with characters for you. For example,
|
||||
/// when you select text and type (, Zed will automatically surround text with ().
|
||||
///
|
||||
/// Default: true
|
||||
pub use_auto_surround: Option<bool>,
|
||||
// Controls how the editor handles the autoclosed characters.
|
||||
// When set to `false`(default), skipping over and auto-removing of the closing characters
|
||||
// happen only for auto-inserted characters.
|
||||
|
@ -774,6 +781,7 @@ fn merge_settings(settings: &mut LanguageSettings, src: &LanguageSettingsContent
|
|||
merge(&mut settings.hard_tabs, src.hard_tabs);
|
||||
merge(&mut settings.soft_wrap, src.soft_wrap);
|
||||
merge(&mut settings.use_autoclose, src.use_autoclose);
|
||||
merge(&mut settings.use_auto_surround, src.use_auto_surround);
|
||||
merge(
|
||||
&mut settings.always_treat_brackets_as_autoclosed,
|
||||
src.always_treat_brackets_as_autoclosed,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue