From 2d33cdf1882940e4b04620323dfafef9f85126c8 Mon Sep 17 00:00:00 2001 From: Lukas Wirth Date: Wed, 5 Jan 2022 23:46:58 +0100 Subject: [PATCH] fix: `replace_qualified_name_with_use` does not use full item path for replacements --- .../replace_qualified_name_with_use.rs | 35 ++++++++++++++++++- 1 file changed, 34 insertions(+), 1 deletion(-) diff --git a/crates/ide_assists/src/handlers/replace_qualified_name_with_use.rs b/crates/ide_assists/src/handlers/replace_qualified_name_with_use.rs index 2c540dc80d2..b0b9ad440c4 100644 --- a/crates/ide_assists/src/handlers/replace_qualified_name_with_use.rs +++ b/crates/ide_assists/src/handlers/replace_qualified_name_with_use.rs @@ -84,12 +84,12 @@ pub(crate) fn replace_qualified_name_with_use( ImportScope::Module(it) => ImportScope::Module(builder.make_mut(it)), ImportScope::Block(it) => ImportScope::Block(builder.make_mut(it)), }; + shorten_paths(scope.as_syntax_node(), &path.clone_for_update()); // stick the found import in front of the to be replaced path let path = match path_to_qualifier.and_then(|it| mod_path_to_ast(&it).qualifier()) { Some(qualifier) => make::path_concat(qualifier, path), None => path, }; - shorten_paths(scope.as_syntax_node(), &path.clone_for_update()); insert_use(&scope, path, &ctx.config.insert_use); }, ) @@ -356,6 +356,39 @@ mod bar { fn main() { Foo; } +", + ); + } + + #[test] + fn replace_does_not_always_try_to_replace_by_full_item_path() { + check_assist( + replace_qualified_name_with_use, + r" +use std::mem; + +mod std { + pub mod mem { + pub fn drop(_: T) {} + } +} + +fn main() { + mem::drop$0(0); +} +", + r" +use std::mem::{self, drop}; + +mod std { + pub mod mem { + pub fn drop(_: T) {} + } +} + +fn main() { + drop(0); +} ", ); } -- 2.44.0