Merge pull request #18522 from tareknaser/configure_typing_exclude_chars

Add Configurable Option to Exclude Trigger Characters for Typing Assists
This commit is contained in:
Lukas Wirth 2024-12-04 05:17:40 +00:00 committed by GitHub
commit d83f0fecb8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 20 additions and 15 deletions

View file

@ -410,14 +410,16 @@ impl Analysis {
&self,
position: FilePosition,
char_typed: char,
autoclose: bool,
chars_to_exclude: Option<String>,
) -> 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);
if let Some(chars_to_exclude) = chars_to_exclude {
if chars_to_exclude.contains(char_typed) {
return Ok(None);
}
}
self.with_db(|db| typing::on_char_typed(db, position, char_typed))

View file

@ -308,8 +308,8 @@ 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,
/// Specify the characters to exclude from triggering typing assists. The default trigger characters are `.`, `=`, `<`, `>`, `{`, and `(`. Setting this to a string will disable typing assists for the specified characters.
typing_excludeChars: Option<String> = None,
/// Enables automatic discovery of projects using [`DiscoverWorkspaceConfig::command`].
@ -2156,8 +2156,8 @@ impl Config {
}
}
pub fn typing_autoclose_angle(&self) -> bool {
*self.typing_autoClosingAngleBrackets_enable()
pub fn typing_exclude_chars(&self) -> Option<String> {
self.typing_excludeChars().clone()
}
// VSCode is our reference implementation, so we allow ourselves to work around issues by

View file

@ -459,9 +459,9 @@ pub(crate) fn handle_on_type_formatting(
if char_typed == '>' {
return Ok(None);
}
let chars_to_exclude = snap.config.typing_exclude_chars();
let edit =
snap.analysis.on_char_typed(position, char_typed, snap.config.typing_autoclose_angle())?;
let edit = snap.analysis.on_char_typed(position, char_typed, chars_to_exclude)?;
let edit = match edit {
Some(it) => it,
None => return Ok(None),

View file

@ -992,10 +992,10 @@ 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`)::
[[rust-analyzer.typing.excludeChars]]rust-analyzer.typing.excludeChars (default: `null`)::
+
--
Whether to insert closing angle brackets when typing an opening angle bracket of a generic argument list.
Specify the characters to exclude from triggering typing assists. The default trigger characters are `.`, `=`, `<`, `>`, `{`, and `(`. Setting this to a string will disable typing assists for the specified characters.
--
[[rust-analyzer.workspace.discoverConfig]]rust-analyzer.workspace.discoverConfig (default: `null`)::
+

View file

@ -2605,10 +2605,13 @@
{
"title": "typing",
"properties": {
"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.typing.excludeChars": {
"markdownDescription": "Specify the characters to exclude from triggering typing assists. The default trigger characters are `.`, `=`, `<`, `>`, `{`, and `(`. Setting this to a string will disable typing assists for the specified characters.",
"default": null,
"type": [
"null",
"string"
]
}
}
},