diff options
| author | bors <bors@rust-lang.org> | 2023-02-08 09:31:35 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-02-08 09:31:35 +0000 |
| commit | a05ce5a3e75fe642826e9e244aecaf599e95ed92 (patch) | |
| tree | 9b7d25907b756fc22f5ebf4d17fa3c492858b857 | |
| parent | 3c89945e78c5f164c03cabb1c5cd459a86ef963a (diff) | |
| parent | 064fcfa016e9adac35b07ae6c63e1472c31b1616 (diff) | |
Auto merge of #13986 - MariaSolOs:limit-completions, r=Veykril
Add setting for limiting number of completions For #13911.
| -rw-r--r-- | crates/ide-completion/src/config.rs | 1 | ||||
| -rw-r--r-- | crates/ide-completion/src/tests.rs | 1 | ||||
| -rw-r--r-- | crates/rust-analyzer/src/config.rs | 3 | ||||
| -rw-r--r-- | crates/rust-analyzer/src/integrated_benchmarks.rs | 2 | ||||
| -rw-r--r-- | crates/rust-analyzer/src/to_proto.rs | 8 | ||||
| -rw-r--r-- | docs/user/generated_config.adoc | 5 | ||||
| -rw-r--r-- | editors/code/package.json | 9 |
7 files changed, 28 insertions, 1 deletions
diff --git a/crates/ide-completion/src/config.rs b/crates/ide-completion/src/config.rs index a0f5e81b4fb..8f6a97e1e09 100644 --- a/crates/ide-completion/src/config.rs +++ b/crates/ide-completion/src/config.rs @@ -19,6 +19,7 @@ pub struct CompletionConfig { pub insert_use: InsertUseConfig, pub prefer_no_std: bool, pub snippets: Vec<Snippet>, + pub limit: Option<usize>, } #[derive(Clone, Debug, PartialEq, Eq)] diff --git a/crates/ide-completion/src/tests.rs b/crates/ide-completion/src/tests.rs index abe14e48e22..540b0fd0ef7 100644 --- a/crates/ide-completion/src/tests.rs +++ b/crates/ide-completion/src/tests.rs @@ -75,6 +75,7 @@ pub(crate) const TEST_CONFIG: CompletionConfig = CompletionConfig { skip_glob_imports: true, }, snippets: Vec::new(), + limit: None, }; pub(crate) fn completion_list(ra_fixture: &str) -> String { diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs index 67091dc7f22..be09938c2c4 100644 --- a/crates/rust-analyzer/src/config.rs +++ b/crates/rust-analyzer/src/config.rs @@ -200,6 +200,8 @@ config_data! { completion_autoself_enable: bool = "true", /// Whether to add parenthesis and argument snippets when completing function. completion_callable_snippets: CallableCompletionDef = "\"fill_arguments\"", + /// Maximum number of completions to return. If `None`, the limit is infinite. + completion_limit: Option<usize> = "null", /// Whether to show postfix snippets like `dbg`, `if`, `not`, etc. completion_postfix_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. @@ -1343,6 +1345,7 @@ impl Config { .snippet_support? )), snippets: self.snippets.clone(), + limit: self.data.completion_limit, } } diff --git a/crates/rust-analyzer/src/integrated_benchmarks.rs b/crates/rust-analyzer/src/integrated_benchmarks.rs index 405d261db6f..7c13d9bad28 100644 --- a/crates/rust-analyzer/src/integrated_benchmarks.rs +++ b/crates/rust-analyzer/src/integrated_benchmarks.rs @@ -146,6 +146,7 @@ fn integrated_completion_benchmark() { }, snippets: Vec::new(), prefer_no_std: false, + limit: None, }; let position = FilePosition { file_id, offset: TextSize::try_from(completion_offset).unwrap() }; @@ -184,6 +185,7 @@ fn integrated_completion_benchmark() { }, snippets: Vec::new(), prefer_no_std: false, + limit: None, }; let position = FilePosition { file_id, offset: TextSize::try_from(completion_offset).unwrap() }; diff --git a/crates/rust-analyzer/src/to_proto.rs b/crates/rust-analyzer/src/to_proto.rs index 0f0642bb4b5..5bdc1bf8d9b 100644 --- a/crates/rust-analyzer/src/to_proto.rs +++ b/crates/rust-analyzer/src/to_proto.rs @@ -215,8 +215,14 @@ pub(crate) fn completion_items( let max_relevance = items.iter().map(|it| it.relevance().score()).max().unwrap_or_default(); let mut res = Vec::with_capacity(items.len()); for item in items { - completion_item(&mut res, config, line_index, &tdpp, max_relevance, item) + completion_item(&mut res, config, line_index, &tdpp, max_relevance, item); } + + if let Some(limit) = config.completion().limit { + res.sort_by(|item1, item2| item1.sort_text.cmp(&item2.sort_text)); + res.truncate(limit); + } + res } diff --git a/docs/user/generated_config.adoc b/docs/user/generated_config.adoc index d5fdedfe3af..50e3670a7a8 100644 --- a/docs/user/generated_config.adoc +++ b/docs/user/generated_config.adoc @@ -227,6 +227,11 @@ with `self` prefixed to them when inside a method. -- Whether to add parenthesis and argument snippets when completing function. -- +[[rust-analyzer.completion.limit]]rust-analyzer.completion.limit (default: `null`):: ++ +-- +Maximum number of completions to return. If `None`, the limit is infinite. +-- [[rust-analyzer.completion.postfix.enable]]rust-analyzer.completion.postfix.enable (default: `true`):: + -- diff --git a/editors/code/package.json b/editors/code/package.json index 7160781b6f3..9f0b494a6bd 100644 --- a/editors/code/package.json +++ b/editors/code/package.json @@ -705,6 +705,15 @@ "Do no snippet completions for callables." ] }, + "rust-analyzer.completion.limit": { + "markdownDescription": "Maximum number of completions to return. If `None`, the limit is infinite.", + "default": null, + "type": [ + "null", + "integer" + ], + "minimum": 0 + }, "rust-analyzer.completion.postfix.enable": { "markdownDescription": "Whether to show postfix snippets like `dbg`, `if`, `not`, etc.", "default": true, |
