Skip to content

Commit aa38fa1

Browse files
bors[bot]Veykril
andauthored
Merge #7772
7772: Pickup ConstReference patterns in FindUsages r=Veykril a=Veykril bors r+ Co-authored-by: Lukas Wirth <lukastw97@gmail.com>
2 parents a307e4f + 9e8f4d3 commit aa38fa1

File tree

2 files changed

+36
-4
lines changed

2 files changed

+36
-4
lines changed

crates/ide/src/references.rs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1224,4 +1224,29 @@ fn test() {}
12241224
"#]],
12251225
);
12261226
}
1227+
1228+
#[test]
1229+
fn test_const_in_pattern() {
1230+
check(
1231+
r#"
1232+
const A$0: i32 = 42;
1233+
1234+
fn main() {
1235+
match A {
1236+
A => (),
1237+
_ => (),
1238+
}
1239+
if let A = A {}
1240+
}
1241+
"#,
1242+
expect![[r#"
1243+
A Const FileId(0) 0..18 6..7
1244+
1245+
FileId(0) 42..43
1246+
FileId(0) 54..55
1247+
FileId(0) 97..98
1248+
FileId(0) 101..102
1249+
"#]],
1250+
);
1251+
}
12271252
}

crates/ide_db/src/search.rs

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -416,10 +416,11 @@ impl<'a> FindUsages<'a> {
416416
sink: &mut dyn FnMut(FileId, FileReference) -> bool,
417417
) -> bool {
418418
match NameClass::classify(self.sema, name) {
419-
Some(NameClass::PatFieldShorthand { local_def: _, field_ref }) => {
420-
if !matches!(self.def, Definition::Field(_) if &field_ref == self.def) {
421-
return false;
422-
}
419+
Some(NameClass::PatFieldShorthand { local_def: _, field_ref })
420+
if matches!(
421+
self.def, Definition::Field(_) if &field_ref == self.def
422+
) =>
423+
{
423424
let FileRange { file_id, range } = self.sema.original_range(name.syntax());
424425
let reference = FileReference {
425426
range,
@@ -429,6 +430,12 @@ impl<'a> FindUsages<'a> {
429430
};
430431
sink(file_id, reference)
431432
}
433+
Some(NameClass::ConstReference(def)) if *self.def == def => {
434+
let FileRange { file_id, range } = self.sema.original_range(name.syntax());
435+
let reference =
436+
FileReference { range, name: ast::NameLike::Name(name.clone()), access: None };
437+
sink(file_id, reference)
438+
}
432439
_ => false, // not a usage
433440
}
434441
}

0 commit comments

Comments
 (0)