mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-26 13:03:31 +00:00
Allow clients to configure the global workspace search limit
This commit is contained in:
parent
cfa26c3ac3
commit
553bb7f50a
4 changed files with 29 additions and 8 deletions
|
@ -288,6 +288,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",
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -421,8 +425,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 {
|
||||
|
@ -893,6 +899,7 @@ impl Config {
|
|||
WorkspaceSymbolSearchKindDef::OnlyTypes => WorkspaceSymbolSearchKind::OnlyTypes,
|
||||
WorkspaceSymbolSearchKindDef::AllSymbols => WorkspaceSymbolSearchKind::AllSymbols,
|
||||
},
|
||||
search_limit: self.data.workspace_symbol_search_limit,
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1159,6 +1166,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",
|
||||
|
|
|
@ -34,7 +34,7 @@ use vfs::AbsPathBuf;
|
|||
|
||||
use crate::{
|
||||
cargo_target_spec::CargoTargetSpec,
|
||||
config::RustfmtConfig,
|
||||
config::{RustfmtConfig, WorkspaceSymbolConfig},
|
||||
diff::diff,
|
||||
from_proto,
|
||||
global_state::{GlobalState, GlobalStateSnapshot},
|
||||
|
@ -392,7 +392,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();
|
||||
|
@ -403,13 +405,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)?;
|
||||
}
|
||||
|
||||
|
@ -417,14 +419,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 {
|
||||
|
|
|
@ -461,3 +461,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.
|
||||
--
|
||||
|
|
|
@ -929,6 +929,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": {}
|
||||
}
|
||||
},
|
||||
|
|
Loading…
Reference in a new issue