Skip to content

Commit 1a5cee1

Browse files
committed
Auto merge of #15911 - Young-Flash:fix_missing_assoc_item, r=lnicola
fix: handle default constant values in `trait_impl_missing_assoc_item` diagnostic A patch of #15895, close #15909 cc `@Veykril`
2 parents 3751429 + cfc881a commit 1a5cee1

File tree

2 files changed

+18
-5
lines changed

2 files changed

+18
-5
lines changed

crates/hir/src/lib.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -667,21 +667,21 @@ impl Module {
667667
let items = &db.trait_data(trait_.into()).items;
668668
let required_items = items.iter().filter(|&(_, assoc)| match *assoc {
669669
AssocItemId::FunctionId(it) => !db.function_data(it).has_body(),
670-
AssocItemId::ConstId(_) => true,
670+
AssocItemId::ConstId(id) => Const::from(id).value(db).is_none(),
671671
AssocItemId::TypeAliasId(it) => db.type_alias_data(it).type_ref.is_none(),
672672
});
673-
impl_assoc_items_scratch.extend(db.impl_data(impl_def.id).items.iter().map(
673+
impl_assoc_items_scratch.extend(db.impl_data(impl_def.id).items.iter().filter_map(
674674
|&item| {
675-
(
675+
Some((
676676
item,
677677
match item {
678678
AssocItemId::FunctionId(it) => db.function_data(it).name.clone(),
679679
AssocItemId::ConstId(it) => {
680-
db.const_data(it).name.as_ref().unwrap().clone()
680+
db.const_data(it).name.as_ref()?.clone()
681681
}
682682
AssocItemId::TypeAliasId(it) => db.type_alias_data(it).name.clone(),
683683
},
684-
)
684+
))
685685
},
686686
));
687687

crates/ide-diagnostics/src/handlers/trait_impl_missing_assoc_item.rs

+13
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,19 @@ pub(crate) fn trait_impl_missing_assoc_item(
3535
mod tests {
3636
use crate::tests::check_diagnostics;
3737

38+
#[test]
39+
fn trait_with_default_value() {
40+
check_diagnostics(
41+
r#"
42+
trait Marker {
43+
const FLAG: bool = false;
44+
}
45+
struct Foo;
46+
impl Marker for Foo {}
47+
"#,
48+
)
49+
}
50+
3851
#[test]
3952
fn simple() {
4053
check_diagnostics(

0 commit comments

Comments
 (0)