Unnamed repository; edit this file 'description' to name the repository.
Auto merge of #12382 - Veykril:ontype, r=lnicola
internal: Make autoclosing angle brackets configurable, disabled by default cc https://github.com/rust-lang/rust-analyzer/issues/12379
bors 2022-05-25
parent d7c1474 · parent f02c915 · commit 3fe137a
-rw-r--r--crates/ide/src/lib.rs5
-rw-r--r--crates/ide/src/typing.rs2
-rw-r--r--crates/rust-analyzer/src/config.rs7
-rw-r--r--crates/rust-analyzer/src/handlers.rs3
-rw-r--r--docs/user/generated_config.adoc5
-rw-r--r--editors/code/package.json5
6 files changed, 25 insertions, 2 deletions
diff --git a/crates/ide/src/lib.rs b/crates/ide/src/lib.rs
index 0d87f4fcfa..e02a691920 100644
--- a/crates/ide/src/lib.rs
+++ b/crates/ide/src/lib.rs
@@ -342,11 +342,16 @@ impl Analysis {
&self,
position: FilePosition,
char_typed: char,
+ autoclose: bool,
) -> Cancellable<Option<SourceChange>> {
// Fast path to not even parse the file.
if !typing::TRIGGER_CHARS.contains(char_typed) {
return Ok(None);
}
+ if char_typed == '<' && !autoclose {
+ return Ok(None);
+ }
+
self.with_db(|db| typing::on_char_typed(db, position, char_typed))
}
diff --git a/crates/ide/src/typing.rs b/crates/ide/src/typing.rs
index 6af62d0ab2..9118f3c699 100644
--- a/crates/ide/src/typing.rs
+++ b/crates/ide/src/typing.rs
@@ -92,7 +92,7 @@ fn on_char_typed_inner(
'<' => on_left_angle_typed(&file.tree(), offset),
'>' => conv(on_right_angle_typed(&file.tree(), offset)),
'{' => conv(on_opening_brace_typed(file, offset)),
- _ => unreachable!(),
+ _ => return None,
};
fn conv(text_edit: Option<TextEdit>) -> Option<ExtendedTextEdit> {
diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs
index c53f7e8c59..110575e85c 100644
--- a/crates/rust-analyzer/src/config.rs
+++ b/crates/rust-analyzer/src/config.rs
@@ -386,6 +386,9 @@ config_data! {
/// Show documentation.
signatureInfo_documentation_enable: bool = "true",
+ /// Whether to insert closing angle brackets when typing an opening angle bracket of a generic argument list.
+ typing_autoClosingAngleBrackets_enable: bool = "false",
+
/// Workspace symbol search kind.
workspace_symbol_search_kind: WorkspaceSymbolSearchKindDef = "\"only_types\"",
/// Limits the number of items returned from a workspace symbol search (Defaults to 128).
@@ -1220,6 +1223,10 @@ impl Config {
n => n,
}
}
+
+ pub fn typing_autoclose_angle(&self) -> bool {
+ self.data.typing_autoClosingAngleBrackets_enable
+ }
}
// Deserialization definitions
diff --git a/crates/rust-analyzer/src/handlers.rs b/crates/rust-analyzer/src/handlers.rs
index a16f0d904c..6567157bcb 100644
--- a/crates/rust-analyzer/src/handlers.rs
+++ b/crates/rust-analyzer/src/handlers.rs
@@ -299,7 +299,8 @@ pub(crate) fn handle_on_type_formatting(
return Ok(None);
}
- let edit = snap.analysis.on_char_typed(position, char_typed)?;
+ let edit =
+ snap.analysis.on_char_typed(position, char_typed, snap.config.typing_autoclose_angle())?;
let edit = match edit {
Some(it) => it,
None => return Ok(None),
diff --git a/docs/user/generated_config.adoc b/docs/user/generated_config.adoc
index 955f085d3f..389124ed8b 100644
--- a/docs/user/generated_config.adoc
+++ b/docs/user/generated_config.adoc
@@ -593,6 +593,11 @@ Show full signature of the callable. Only shows parameters if disabled.
--
Show documentation.
--
+[[rust-analyzer.typing.autoClosingAngleBrackets.enable]]rust-analyzer.typing.autoClosingAngleBrackets.enable (default: `false`)::
++
+--
+Whether to insert closing angle brackets when typing an opening angle bracket of a generic argument list.
+--
[[rust-analyzer.workspace.symbol.search.kind]]rust-analyzer.workspace.symbol.search.kind (default: `"only_types"`)::
+
--
diff --git a/editors/code/package.json b/editors/code/package.json
index 18fa7f2f4c..1c87f0ad82 100644
--- a/editors/code/package.json
+++ b/editors/code/package.json
@@ -1068,6 +1068,11 @@
"default": true,
"type": "boolean"
},
+ "rust-analyzer.typing.autoClosingAngleBrackets.enable": {
+ "markdownDescription": "Whether to insert closing angle brackets when typing an opening angle bracket of a generic argument list.",
+ "default": false,
+ "type": "boolean"
+ },
"rust-analyzer.workspace.symbol.search.kind": {
"markdownDescription": "Workspace symbol search kind.",
"default": "only_types",