From f02c915eb537487c0b4217f816c0dc9f34b94146 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Wed, 25 May 2022 12:15:36 +0200 Subject: [PATCH] internal: Make autoclosing angle brackets configurable, disabled by default --- crates/ide/src/lib.rs | 5 +++++ crates/ide/src/typing.rs | 2 +- crates/rust-analyzer/src/config.rs | 7 +++++++ crates/rust-analyzer/src/handlers.rs | 3 ++- docs/user/generated_config.adoc | 5 +++++ editors/code/package.json | 5 +++++ 6 files changed, 25 insertions(+), 2 deletions(-) diff --git a/crates/ide/src/lib.rs b/crates/ide/src/lib.rs index 0d87f4fcfaf..e02a6919203 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> { // 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 6af62d0ab23..9118f3c699c 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) -> Option { diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs index c53f7e8c592..110575e85cb 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 a16f0d904ce..6567157bcbb 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 955f085d3f2..389124ed8bf 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 18fa7f2f4c7..1c87f0ad82a 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",