diff options
| author | bors <bors@rust-lang.org> | 2023-08-05 08:33:05 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2023-08-05 08:33:05 +0000 |
| commit | 27e2eea54fbd1edeefa2b47ddd4f552a04b86582 (patch) | |
| tree | a4939f5d511f0ab256c614749be24c1b30cb251d | |
| parent | 86b6b6f705eb0c29691c3b2f7f5ac71df0e8caae (diff) | |
| parent | edabffbd5ae0fa16afd4c555442bce4e96386a8f (diff) | |
| download | rust-27e2eea54fbd1edeefa2b47ddd4f552a04b86582.tar.gz rust-27e2eea54fbd1edeefa2b47ddd4f552a04b86582.zip | |
Auto merge of #15393 - Wilfred:full_moniker_param, r=Veykril
SCIP: Qualify parameters by the containing function SCIP requires symbols to be unique, but multiple functions may have a parameter with the same name. Qualify parameters according to the containing function.
| -rw-r--r-- | crates/ide/src/moniker.rs | 11 | ||||
| -rw-r--r-- | crates/rust-analyzer/src/cli/scip.rs | 38 |
2 files changed, 49 insertions, 0 deletions
diff --git a/crates/ide/src/moniker.rs b/crates/ide/src/moniker.rs index de8c5b8e830..17f3771b1a5 100644 --- a/crates/ide/src/moniker.rs +++ b/crates/ide/src/moniker.rs @@ -177,6 +177,17 @@ pub(crate) fn def_to_moniker( }); } + // Qualify locals/parameters by their parent definition name. + if let Definition::Local(it) = def { + let parent_name = it.parent(db).name(db); + if let Some(name) = parent_name { + description.push(MonikerDescriptor { + name: name.display(db).to_string(), + desc: MonikerDescriptorKind::Method, + }); + } + } + let name_desc = match def { // These are handled by top-level guard (for performance). Definition::GenericParam(_) diff --git a/crates/rust-analyzer/src/cli/scip.rs b/crates/rust-analyzer/src/cli/scip.rs index 4579aca3021..44337f955e5 100644 --- a/crates/rust-analyzer/src/cli/scip.rs +++ b/crates/rust-analyzer/src/cli/scip.rs @@ -417,6 +417,44 @@ pub mod module { } #[test] + fn symbol_for_param() { + check_symbol( + r#" +//- /lib.rs crate:main deps:foo +use foo::example_mod::func; +fn main() { + func(42); +} +//- /foo/lib.rs crate:foo@0.1.0,https://a.b/foo.git library +pub mod example_mod { + pub fn func(x$0: usize) {} +} +"#, + "rust-analyzer cargo foo 0.1.0 example_mod/func().(x)", + ); + } + + #[test] + fn symbol_for_closure_param() { + check_symbol( + r#" +//- /lib.rs crate:main deps:foo +use foo::example_mod::func; +fn main() { + func(); +} +//- /foo/lib.rs crate:foo@0.1.0,https://a.b/foo.git library +pub mod example_mod { + pub fn func() { + let f = |x$0: usize| {}; + } +} +"#, + "rust-analyzer cargo foo 0.1.0 example_mod/func().(x)", + ); + } + + #[test] fn local_symbol_for_local() { check_symbol( r#" |
