mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-11-15 01:17:27 +00:00
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.
This commit is contained in:
parent
c59bd2dc3f
commit
edabffbd5a
2 changed files with 49 additions and 0 deletions
|
@ -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 {
|
let name_desc = match def {
|
||||||
// These are handled by top-level guard (for performance).
|
// These are handled by top-level guard (for performance).
|
||||||
Definition::GenericParam(_)
|
Definition::GenericParam(_)
|
||||||
|
|
|
@ -416,6 +416,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]
|
#[test]
|
||||||
fn local_symbol_for_local() {
|
fn local_symbol_for_local() {
|
||||||
check_symbol(
|
check_symbol(
|
||||||
|
|
Loading…
Reference in a new issue