mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-09-28 04:44:57 +00:00
fix missing assoc item
This commit is contained in:
parent
58de0b130a
commit
cfc881ae13
2 changed files with 18 additions and 5 deletions
|
@ -667,21 +667,21 @@ impl Module {
|
||||||
let items = &db.trait_data(trait_.into()).items;
|
let items = &db.trait_data(trait_.into()).items;
|
||||||
let required_items = items.iter().filter(|&(_, assoc)| match *assoc {
|
let required_items = items.iter().filter(|&(_, assoc)| match *assoc {
|
||||||
AssocItemId::FunctionId(it) => !db.function_data(it).has_body(),
|
AssocItemId::FunctionId(it) => !db.function_data(it).has_body(),
|
||||||
AssocItemId::ConstId(_) => true,
|
AssocItemId::ConstId(id) => Const::from(id).value(db).is_none(),
|
||||||
AssocItemId::TypeAliasId(it) => db.type_alias_data(it).type_ref.is_none(),
|
AssocItemId::TypeAliasId(it) => db.type_alias_data(it).type_ref.is_none(),
|
||||||
});
|
});
|
||||||
impl_assoc_items_scratch.extend(db.impl_data(impl_def.id).items.iter().map(
|
impl_assoc_items_scratch.extend(db.impl_data(impl_def.id).items.iter().filter_map(
|
||||||
|&item| {
|
|&item| {
|
||||||
(
|
Some((
|
||||||
item,
|
item,
|
||||||
match item {
|
match item {
|
||||||
AssocItemId::FunctionId(it) => db.function_data(it).name.clone(),
|
AssocItemId::FunctionId(it) => db.function_data(it).name.clone(),
|
||||||
AssocItemId::ConstId(it) => {
|
AssocItemId::ConstId(it) => {
|
||||||
db.const_data(it).name.as_ref().unwrap().clone()
|
db.const_data(it).name.as_ref()?.clone()
|
||||||
}
|
}
|
||||||
AssocItemId::TypeAliasId(it) => db.type_alias_data(it).name.clone(),
|
AssocItemId::TypeAliasId(it) => db.type_alias_data(it).name.clone(),
|
||||||
},
|
},
|
||||||
)
|
))
|
||||||
},
|
},
|
||||||
));
|
));
|
||||||
|
|
||||||
|
|
|
@ -35,6 +35,19 @@ pub(crate) fn trait_impl_missing_assoc_item(
|
||||||
mod tests {
|
mod tests {
|
||||||
use crate::tests::check_diagnostics;
|
use crate::tests::check_diagnostics;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn trait_with_default_value() {
|
||||||
|
check_diagnostics(
|
||||||
|
r#"
|
||||||
|
trait Marker {
|
||||||
|
const FLAG: bool = false;
|
||||||
|
}
|
||||||
|
struct Foo;
|
||||||
|
impl Marker for Foo {}
|
||||||
|
"#,
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn simple() {
|
fn simple() {
|
||||||
check_diagnostics(
|
check_diagnostics(
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue