From 942eeb2f552c86f83026284db48ed3639f48eb69 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Fri, 25 Jun 2021 03:45:41 +0200 Subject: [PATCH] Fix renaming associated trait items with colliding names --- crates/ide/src/rename.rs | 19 +++++++++++++++++++ crates/ide_db/src/search.rs | 4 +++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/crates/ide/src/rename.rs b/crates/ide/src/rename.rs index 96bd07708c..4f5f2c935c 100644 --- a/crates/ide/src/rename.rs +++ b/crates/ide/src/rename.rs @@ -1716,6 +1716,25 @@ impl Foo for () { ); } + #[test] + fn test_rename_trait_method_prefix_of_second() { + check( + "qux", + r#" +trait Foo { + fn foo$0() {} + fn foobar() {} +} +"#, + r#" +trait Foo { + fn qux() {} + fn foobar() {} +} +"#, + ); + } + #[test] fn test_rename_trait_const() { let res = r" diff --git a/crates/ide_db/src/search.rs b/crates/ide_db/src/search.rs index a840e06a60..baed5e8808 100644 --- a/crates/ide_db/src/search.rs +++ b/crates/ide_db/src/search.rs @@ -544,7 +544,9 @@ impl<'a> FindUsages<'a> { let trait_ = mod_def .as_assoc_item(self.sema.db)? .containing_trait_or_trait_impl(self.sema.db)?; - (trait_ == this_trait).then(|| { + (trait_ == this_trait + && self.def.name(self.sema.db) == mod_def.name(self.sema.db)) + .then(|| { let FileRange { file_id, range } = self.sema.original_range(name.syntax()); let reference = FileReference { range,