let node = sema.find_node_at_offset_with_descend(&syntax, position.offset)?;
let def = match &node {
ast::NameLike::Name(name) => {
- NameClass::classify(&sema, name).map(|class| class.referenced_or_defined(sema.db))
+ NameClass::classify(&sema, name).map(|class| class.defined_or_referenced_local())
}
ast::NameLike::NameRef(name_ref) => {
- NameRefClass::classify(&sema, name_ref).map(|class| class.referenced(sema.db))
+ NameRefClass::classify(&sema, name_ref).map(|class| class.referenced_local())
}
ast::NameLike::Lifetime(_) => None,
}?;
hir::ModuleDef::Function(f) => {
let assoc = f.as_assoc_item(sema.db)?;
let name = assoc.name(sema.db)?;
- let trait_ = assoc.containing_trait(sema.db)?;
+ let trait_ = assoc.containing_trait_or_trait_impl(sema.db)?;
impls_for_trait_item(&sema, trait_, name)
}
hir::ModuleDef::Const(c) => {
let assoc = c.as_assoc_item(sema.db)?;
let name = assoc.name(sema.db)?;
- let trait_ = assoc.containing_trait(sema.db)?;
+ let trait_ = assoc.containing_trait_or_trait_impl(sema.db)?;
impls_for_trait_item(&sema, trait_, name)
}
_ => return None,
.filter_map(|imp| {
let item = imp.items(sema.db).iter().find_map(|itm| {
let itm_name = itm.name(sema.db)?;
- (itm_name == fun_name).then(|| itm.clone())
+ (itm_name == fun_name).then(|| *itm)
})?;
item.try_to_nav(sema.db)
})
fn goto_implementation_to_builtin_derive() {
check(
r#"
+//- minicore: copy, derive
#[derive(Copy)]
//^^^^^^^^^^^^^^^
struct Foo$0;
-
-mod marker {
- trait Copy {}
-}
-#[rustc_builtin_macro]
-macro Copy {}
"#,
);
}