Skip to content

Commit 4c54ec1

Browse files
bors[bot]Veykril
andauthored
Merge #9148
9148: minor: Prevent renaming of aliases on usages r=Veykril a=Veykril Otherwise trying to rename a usage that goes through an alias will still rename the aliased item instead, cc #5671 bors r+ Co-authored-by: Lukas Wirth <[email protected]>
2 parents fec00f4 + d30f2d4 commit 4c54ec1

File tree

1 file changed

+32
-1
lines changed

1 file changed

+32
-1
lines changed

crates/ide/src/references/rename.rs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,17 @@ fn find_definition(
170170
NameClass::classify(sema, &name).map(|class| class.referenced_or_defined(sema.db))
171171
}
172172
ast::NameLike::NameRef(name_ref) => {
173-
NameRefClass::classify(sema, &name_ref).map(|class| class.referenced(sema.db))
173+
if let Some(def) =
174+
NameRefClass::classify(sema, &name_ref).map(|class| class.referenced(sema.db))
175+
{
176+
// if the name differs from the definitions name it has to be an alias
177+
if def.name(sema.db).map_or(false, |it| it.to_string() != name_ref.text()) {
178+
bail!("Renaming aliases is currently unsupported");
179+
}
180+
Some(def)
181+
} else {
182+
None
183+
}
174184
}
175185
ast::NameLike::Lifetime(lifetime) => NameRefClass::classify_lifetime(sema, &lifetime)
176186
.map(|class| NameRefClass::referenced(class, sema.db))
@@ -1907,4 +1917,25 @@ impl Fo0 where Self: {}
19071917
"#,
19081918
);
19091919
}
1920+
1921+
#[test]
1922+
fn test_rename_fails_on_aliases() {
1923+
check(
1924+
"Baz",
1925+
r#"
1926+
struct Foo;
1927+
use Foo as Bar$0;
1928+
"#,
1929+
"error: Renaming aliases is currently unsupported",
1930+
);
1931+
check(
1932+
"Baz",
1933+
r#"
1934+
struct Foo;
1935+
use Foo as Bar;
1936+
use Bar$0;
1937+
"#,
1938+
"error: Renaming aliases is currently unsupported",
1939+
);
1940+
}
19101941
}

0 commit comments

Comments
 (0)