Skip to content

Commit 408fa14

Browse files
committed
add test for item same name
1 parent 0dbc091 commit 408fa14

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

crates/ide/src/goto_definition.rs

+20-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use std::convert::TryInto;
1+
use std::{convert::TryInto, mem::discriminant};
22

33
use crate::{doc_links::token_as_doc_comment, FilePosition, NavigationTarget, RangeInfo, TryToNav};
44
use hir::{AsAssocItem, AssocItem, Semantics};
@@ -126,9 +126,11 @@ fn try_filter_trait_item_definition(
126126
};
127127
let trait_ = imp.trait_(db)?;
128128
let name = def.name(db)?;
129+
let discri_value = discriminant(&assoc);
129130
trait_
130131
.items(db)
131132
.iter()
133+
.filter(|itm| discriminant(*itm) == discri_value)
132134
.find_map(|itm| (itm.name(db)? == name).then(|| itm.try_to_nav(db)).flatten())
133135
.map(|it| vec![it])
134136
}
@@ -175,6 +177,23 @@ mod tests {
175177
assert!(navs.is_empty(), "didn't expect this to resolve anywhere: {:?}", navs)
176178
}
177179

180+
#[test]
181+
fn goto_def_if_items_same_name() {
182+
check(
183+
r#"
184+
trait Trait {
185+
type A;
186+
const A: i32;
187+
//^
188+
}
189+
190+
struct T;
191+
impl Trait for T {
192+
type A = i32;
193+
const A$0: i32 = -9;
194+
}"#,
195+
);
196+
}
178197
#[test]
179198
fn goto_def_in_mac_call_in_attr_invoc() {
180199
check(

0 commit comments

Comments
 (0)