feat: Make private editable completions configurable, disable by default

This commit is contained in:
Lukas Wirth 2022-02-23 16:02:54 +01:00
parent 789f2b9cb6
commit 2a7793d912
7 changed files with 22 additions and 2 deletions

View file

@ -13,6 +13,7 @@ pub struct CompletionConfig {
pub enable_postfix_completions: bool, pub enable_postfix_completions: bool,
pub enable_imports_on_the_fly: bool, pub enable_imports_on_the_fly: bool,
pub enable_self_on_the_fly: bool, pub enable_self_on_the_fly: bool,
pub enable_private_editable: bool,
pub add_call_parenthesis: bool, pub add_call_parenthesis: bool,
pub add_call_argument_snippets: bool, pub add_call_argument_snippets: bool,
pub snippet_cap: Option<SnippetCap>, pub snippet_cap: Option<SnippetCap>,

View file

@ -360,6 +360,9 @@ impl<'a> CompletionContext<'a> {
None => return Visible::No, None => return Visible::No,
}; };
if !vis.is_visible_from(self.db, module.into()) { if !vis.is_visible_from(self.db, module.into()) {
if !self.config.enable_private_editable {
return Visible::No;
}
// If the definition location is editable, also show private items // If the definition location is editable, also show private items
let root_file = defining_crate.root_file(self.db); let root_file = defining_crate.root_file(self.db);
let source_root_id = self.db.file_source_root(root_file); let source_root_id = self.db.file_source_root(root_file);

View file

@ -64,6 +64,7 @@ pub(crate) const TEST_CONFIG: CompletionConfig = CompletionConfig {
enable_postfix_completions: true, enable_postfix_completions: true,
enable_imports_on_the_fly: true, enable_imports_on_the_fly: true,
enable_self_on_the_fly: true, enable_self_on_the_fly: true,
enable_private_editable: true,
add_call_parenthesis: true, add_call_parenthesis: true,
add_call_argument_snippets: true, add_call_argument_snippets: true,
snippet_cap: SnippetCap::new(true), snippet_cap: SnippetCap::new(true),

View file

@ -161,13 +161,15 @@ config_data! {
} }
}"#, }"#,
/// Whether to show postfix snippets like `dbg`, `if`, `not`, etc. /// Whether to show postfix snippets like `dbg`, `if`, `not`, etc.
completion_postfix_enable: bool = "true", completion_postfix_enable: bool = "true",
/// Toggles the additional completions that automatically add imports when completed. /// Toggles the additional completions that automatically add imports when completed.
/// Note that your client must specify the `additionalTextEdits` LSP client capability to truly have this feature enabled. /// Note that your client must specify the `additionalTextEdits` LSP client capability to truly have this feature enabled.
completion_autoimport_enable: bool = "true", completion_autoimport_enable: bool = "true",
/// Toggles the additional completions that automatically show method calls and field accesses /// Toggles the additional completions that automatically show method calls and field accesses
/// with `self` prefixed to them when inside a method. /// with `self` prefixed to them when inside a method.
completion_autoself_enable: bool = "true", completion_autoself_enable: bool = "true",
/// Enables completions of private items and fields that are defined in the current workspace even if they are not visible at the current position.
completion_privateEditable_enable: bool = "false",
/// Whether to show native rust-analyzer diagnostics. /// Whether to show native rust-analyzer diagnostics.
diagnostics_enable: bool = "true", diagnostics_enable: bool = "true",
@ -875,6 +877,7 @@ impl Config {
enable_imports_on_the_fly: self.data.completion_autoimport_enable enable_imports_on_the_fly: self.data.completion_autoimport_enable
&& completion_item_edit_resolve(&self.caps), && completion_item_edit_resolve(&self.caps),
enable_self_on_the_fly: self.data.completion_autoself_enable, enable_self_on_the_fly: self.data.completion_autoself_enable,
enable_private_editable: self.data.completion_privateEditable_enable,
add_call_parenthesis: self.data.completion_addCallParenthesis, add_call_parenthesis: self.data.completion_addCallParenthesis,
add_call_argument_snippets: self.data.completion_addCallArgumentSnippets, add_call_argument_snippets: self.data.completion_addCallArgumentSnippets,
insert_use: self.insert_use_config(), insert_use: self.insert_use_config(),

View file

@ -134,6 +134,7 @@ fn integrated_completion_benchmark() {
enable_postfix_completions: true, enable_postfix_completions: true,
enable_imports_on_the_fly: true, enable_imports_on_the_fly: true,
enable_self_on_the_fly: true, enable_self_on_the_fly: true,
enable_private_editable: true,
add_call_parenthesis: true, add_call_parenthesis: true,
add_call_argument_snippets: true, add_call_argument_snippets: true,
snippet_cap: SnippetCap::new(true), snippet_cap: SnippetCap::new(true),
@ -171,6 +172,7 @@ fn integrated_completion_benchmark() {
enable_postfix_completions: true, enable_postfix_completions: true,
enable_imports_on_the_fly: true, enable_imports_on_the_fly: true,
enable_self_on_the_fly: true, enable_self_on_the_fly: true,
enable_private_editable: true,
add_call_parenthesis: true, add_call_parenthesis: true,
add_call_argument_snippets: true, add_call_argument_snippets: true,
snippet_cap: SnippetCap::new(true), snippet_cap: SnippetCap::new(true),

View file

@ -213,6 +213,11 @@ Note that your client must specify the `additionalTextEdits` LSP client capabili
Toggles the additional completions that automatically show method calls and field accesses Toggles the additional completions that automatically show method calls and field accesses
with `self` prefixed to them when inside a method. with `self` prefixed to them when inside a method.
-- --
[[rust-analyzer.completion.privateEditable.enable]]rust-analyzer.completion.privateEditable.enable (default: `false`)::
+
--
Enables completions of private items and fields that are defined in the current workspace even if they are not visible at the current position.
--
[[rust-analyzer.diagnostics.enable]]rust-analyzer.diagnostics.enable (default: `true`):: [[rust-analyzer.diagnostics.enable]]rust-analyzer.diagnostics.enable (default: `true`)::
+ +
-- --

View file

@ -643,6 +643,11 @@
"default": true, "default": true,
"type": "boolean" "type": "boolean"
}, },
"rust-analyzer.completion.privateEditable.enable": {
"markdownDescription": "Enables completions of private items and fields that are defined in the current workspace even if they are not visible at the current position.",
"default": false,
"type": "boolean"
},
"rust-analyzer.diagnostics.enable": { "rust-analyzer.diagnostics.enable": {
"markdownDescription": "Whether to show native rust-analyzer diagnostics.", "markdownDescription": "Whether to show native rust-analyzer diagnostics.",
"default": true, "default": true,