diff options
| -rw-r--r-- | crates/rust-analyzer/src/config.rs | 10 | ||||
| -rw-r--r-- | crates/rust-analyzer/src/handlers.rs | 14 | ||||
| -rw-r--r-- | docs/user/generated_config.adoc | 7 | ||||
| -rw-r--r-- | editors/code/package.json | 6 |
4 files changed, 29 insertions, 8 deletions
diff --git a/crates/rust-analyzer/src/config.rs b/crates/rust-analyzer/src/config.rs index 8fbf10072cd..958ff1fcee1 100644 --- a/crates/rust-analyzer/src/config.rs +++ b/crates/rust-analyzer/src/config.rs @@ -354,6 +354,10 @@ config_data! { workspace_symbol_search_scope: WorkspaceSymbolSearchScopeDef = "\"workspace\"", /// 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). + /// Some clients like vs-code issue new searches on result filtering and don't require all results to be returned in the initial search. + /// Other clients requires all results upfront and might require a higher limit. + workspace_symbol_search_limit: usize = "128", } } @@ -487,8 +491,10 @@ pub struct RunnablesConfig { pub struct WorkspaceSymbolConfig { /// In what scope should the symbol be searched in. pub search_scope: WorkspaceSymbolSearchScope, - /// What kind of symbol is being search for. + /// What kind of symbol is being searched for. pub search_kind: WorkspaceSymbolSearchKind, + /// How many items are returned at most. + pub search_limit: usize, } pub struct ClientCommandsConfig { @@ -995,6 +1001,7 @@ impl Config { WorkspaceSymbolSearchKindDef::OnlyTypes => WorkspaceSymbolSearchKind::OnlyTypes, WorkspaceSymbolSearchKindDef::AllSymbols => WorkspaceSymbolSearchKind::AllSymbols, }, + search_limit: self.data.workspace_symbol_search_limit, } } @@ -1298,6 +1305,7 @@ fn field_props(field: &str, ty: &str, doc: &[&str], default: &str) -> serde_json match ty { "bool" => set!("type": "boolean"), + "usize" => set!("type": "integer", "minimum": 0), "String" => set!("type": "string"), "Vec<String>" => set! { "type": "array", diff --git a/crates/rust-analyzer/src/handlers.rs b/crates/rust-analyzer/src/handlers.rs index 15f49783678..78118764fa7 100644 --- a/crates/rust-analyzer/src/handlers.rs +++ b/crates/rust-analyzer/src/handlers.rs @@ -33,7 +33,7 @@ use vfs::AbsPathBuf; use crate::{ cargo_target_spec::CargoTargetSpec, - config::RustfmtConfig, + config::{RustfmtConfig, WorkspaceSymbolConfig}, diff::diff, from_proto, global_state::{GlobalState, GlobalStateSnapshot}, @@ -403,7 +403,9 @@ pub(crate) fn handle_workspace_symbol( ) -> Result<Option<Vec<SymbolInformation>>> { let _p = profile::span("handle_workspace_symbol"); - let (all_symbols, libs) = decide_search_scope_and_kind(¶ms, &snap); + let config = snap.config.workspace_symbol(); + let (all_symbols, libs) = decide_search_scope_and_kind(¶ms, &config); + let limit = config.search_limit; let query = { let query: String = params.query.chars().filter(|&c| c != '#' && c != '*').collect(); @@ -414,13 +416,13 @@ pub(crate) fn handle_workspace_symbol( if libs { q.libs(); } - q.limit(128); + q.limit(limit); q }; let mut res = exec_query(&snap, query)?; if res.is_empty() && !all_symbols { let mut query = Query::new(params.query); - query.limit(128); + query.limit(limit); res = exec_query(&snap, query)?; } @@ -428,14 +430,12 @@ pub(crate) fn handle_workspace_symbol( fn decide_search_scope_and_kind( params: &WorkspaceSymbolParams, - snap: &GlobalStateSnapshot, + config: &WorkspaceSymbolConfig, ) -> (bool, bool) { // Support old-style parsing of markers in the query. let mut all_symbols = params.query.contains('#'); let mut libs = params.query.contains('*'); - let config = snap.config.workspace_symbol(); - // If no explicit marker was set, check request params. If that's also empty // use global config. if !all_symbols { diff --git a/docs/user/generated_config.adoc b/docs/user/generated_config.adoc index 1617ac5a7f8..d552982768b 100644 --- a/docs/user/generated_config.adoc +++ b/docs/user/generated_config.adoc @@ -558,3 +558,10 @@ Workspace symbol search scope. -- Workspace symbol search kind. -- +[[rust-analyzer.workspace.symbol.search.limit]]rust-analyzer.workspace.symbol.search.limit (default: `128`):: ++ +-- +Limits the number of items returned from a workspace symbol search (Defaults to 128). +Some clients like vs-code issue new searches on result filtering and don't require all results to be returned in the initial search. +Other clients requires all results upfront and might require a higher limit. +-- diff --git a/editors/code/package.json b/editors/code/package.json index a62b80b461f..b7bc60a3b8b 100644 --- a/editors/code/package.json +++ b/editors/code/package.json @@ -1014,6 +1014,12 @@ "Search for all symbols kinds" ] }, + "rust-analyzer.workspace.symbol.search.limit": { + "markdownDescription": "Limits the number of items returned from a workspace symbol search (Defaults to 128).\nSome clients like vs-code issue new searches on result filtering and don't require all results to be returned in the initial search.\nOther clients requires all results upfront and might require a higher limit.", + "default": 128, + "type": "integer", + "minimum": 0 + }, "$generated-end": {} } }, |
