Add setting to disable inline completions in language scopes (#20508)
This adds a setting to disable inline completions in language scopes to, for example, disable them in comments or strings. This setting can be made per language. Examples: ```json { "languages": { "Go": { "inline_completions_disabled_in": ["comment", "string"] } } } ``` ```json { "inline_completions_disabled_in": ["comment"] } ``` Closes #9133 Release Notes: - Added language setting to disable inline comments in certain scopes. Example: `{"languages": {"Go": {"inline_completions_disabled_in": ["comment", "string"]}}}` Co-authored-by: Bennet <bennet@zed.dev>
This commit is contained in:
parent
9e7afe870a
commit
ba743a1bd9
4 changed files with 77 additions and 0 deletions
|
@ -193,6 +193,9 @@
|
||||||
// Controls whether inline completions are shown immediately (true)
|
// Controls whether inline completions are shown immediately (true)
|
||||||
// or manually by triggering `editor::ShowInlineCompletion` (false).
|
// or manually by triggering `editor::ShowInlineCompletion` (false).
|
||||||
"show_inline_completions": true,
|
"show_inline_completions": true,
|
||||||
|
// Controls whether inline completions are shown in a given language scope.
|
||||||
|
// Example: ["string", "comment"]
|
||||||
|
"inline_completions_disabled_in": [],
|
||||||
// Whether to show tabs and spaces in the editor.
|
// Whether to show tabs and spaces in the editor.
|
||||||
// This setting can take three values:
|
// This setting can take three values:
|
||||||
//
|
//
|
||||||
|
|
|
@ -2510,6 +2510,10 @@ impl Editor {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if self.inline_completions_disabled_in_scope(buffer, buffer_position, cx) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if let Some(provider) = self.inline_completion_provider() {
|
if let Some(provider) = self.inline_completion_provider() {
|
||||||
if let Some(show_inline_completions) = self.show_inline_completions_override {
|
if let Some(show_inline_completions) = self.show_inline_completions_override {
|
||||||
show_inline_completions
|
show_inline_completions
|
||||||
|
@ -2521,6 +2525,27 @@ impl Editor {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn inline_completions_disabled_in_scope(
|
||||||
|
&self,
|
||||||
|
buffer: &Model<Buffer>,
|
||||||
|
buffer_position: language::Anchor,
|
||||||
|
cx: &AppContext,
|
||||||
|
) -> bool {
|
||||||
|
let snapshot = buffer.read(cx).snapshot();
|
||||||
|
let settings = snapshot.settings_at(buffer_position, cx);
|
||||||
|
|
||||||
|
let Some(scope) = snapshot.language_scope_at(buffer_position) else {
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
scope.override_name().map_or(false, |scope_name| {
|
||||||
|
settings
|
||||||
|
.inline_completions_disabled_in
|
||||||
|
.iter()
|
||||||
|
.any(|s| s == scope_name)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
pub fn set_use_modal_editing(&mut self, to: bool) {
|
pub fn set_use_modal_editing(&mut self, to: bool) {
|
||||||
self.use_modal_editing = to;
|
self.use_modal_editing = to;
|
||||||
}
|
}
|
||||||
|
|
|
@ -112,6 +112,9 @@ pub struct LanguageSettings {
|
||||||
/// Controls whether inline completions are shown immediately (true)
|
/// Controls whether inline completions are shown immediately (true)
|
||||||
/// or manually by triggering `editor::ShowInlineCompletion` (false).
|
/// or manually by triggering `editor::ShowInlineCompletion` (false).
|
||||||
pub show_inline_completions: bool,
|
pub show_inline_completions: bool,
|
||||||
|
/// Controls whether inline completions are shown in the given language
|
||||||
|
/// scopes.
|
||||||
|
pub inline_completions_disabled_in: Vec<String>,
|
||||||
/// Whether to show tabs and spaces in the editor.
|
/// Whether to show tabs and spaces in the editor.
|
||||||
pub show_whitespaces: ShowWhitespaceSetting,
|
pub show_whitespaces: ShowWhitespaceSetting,
|
||||||
/// Whether to start a new line with a comment when a previous line is a comment as well.
|
/// Whether to start a new line with a comment when a previous line is a comment as well.
|
||||||
|
@ -318,6 +321,14 @@ pub struct LanguageSettingsContent {
|
||||||
/// Default: true
|
/// Default: true
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub show_inline_completions: Option<bool>,
|
pub show_inline_completions: Option<bool>,
|
||||||
|
/// Controls whether inline completions are shown in the given language
|
||||||
|
/// scopes.
|
||||||
|
///
|
||||||
|
/// Example: ["string", "comment"]
|
||||||
|
///
|
||||||
|
/// Default: []
|
||||||
|
#[serde(default)]
|
||||||
|
pub inline_completions_disabled_in: Option<Vec<String>>,
|
||||||
/// Whether to show tabs and spaces in the editor.
|
/// Whether to show tabs and spaces in the editor.
|
||||||
#[serde(default)]
|
#[serde(default)]
|
||||||
pub show_whitespaces: Option<ShowWhitespaceSetting>,
|
pub show_whitespaces: Option<ShowWhitespaceSetting>,
|
||||||
|
@ -1164,6 +1175,10 @@ fn merge_settings(settings: &mut LanguageSettings, src: &LanguageSettingsContent
|
||||||
&mut settings.show_inline_completions,
|
&mut settings.show_inline_completions,
|
||||||
src.show_inline_completions,
|
src.show_inline_completions,
|
||||||
);
|
);
|
||||||
|
merge(
|
||||||
|
&mut settings.inline_completions_disabled_in,
|
||||||
|
src.inline_completions_disabled_in.clone(),
|
||||||
|
);
|
||||||
merge(&mut settings.show_whitespaces, src.show_whitespaces);
|
merge(&mut settings.show_whitespaces, src.show_whitespaces);
|
||||||
merge(
|
merge(
|
||||||
&mut settings.extend_comment_on_newline,
|
&mut settings.extend_comment_on_newline,
|
||||||
|
|
|
@ -359,6 +359,40 @@ There are two options to choose from:
|
||||||
|
|
||||||
List of `string` values
|
List of `string` values
|
||||||
|
|
||||||
|
## Inline Completions Disabled in
|
||||||
|
|
||||||
|
- Description: A list of language scopes in which inline completions should be disabled.
|
||||||
|
- Setting: `inline_completions_disabled_in`
|
||||||
|
- Default: `[]`
|
||||||
|
|
||||||
|
**Options**
|
||||||
|
|
||||||
|
List of `string` values
|
||||||
|
|
||||||
|
1. Don't show inline completions in comments:
|
||||||
|
|
||||||
|
```json
|
||||||
|
"disabled_in": ["comment"]
|
||||||
|
```
|
||||||
|
|
||||||
|
2. Don't show inline completions in strings and comments:
|
||||||
|
|
||||||
|
```json
|
||||||
|
"disabled_in": ["comment", "string"]
|
||||||
|
```
|
||||||
|
|
||||||
|
3. Only in Go, don't show inline completions in strings and comments:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"languages": {
|
||||||
|
"Go": {
|
||||||
|
"inline_completions_disabled_in": ["comment", "string"]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
## Current Line Highlight
|
## Current Line Highlight
|
||||||
|
|
||||||
- Description: How to highlight the current line in the editor.
|
- Description: How to highlight the current line in the editor.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue