]> git.lizzy.rs Git - rust.git/commitdiff
fix: `replace_qualified_name_with_use` does not use full item path for replacements
authorLukas Wirth <lukastw97@gmail.com>
Wed, 5 Jan 2022 22:46:58 +0000 (23:46 +0100)
committerLukas Wirth <lukastw97@gmail.com>
Wed, 5 Jan 2022 22:46:58 +0000 (23:46 +0100)
crates/ide_assists/src/handlers/replace_qualified_name_with_use.rs

index 2c540dc80d25ed83e9015d0201a9f5a00355a66c..b0b9ad440c4662e442f7c444ab914bb41e155966 100644 (file)
@@ -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>(_: T) {}
+    }
+}
+
+fn main() {
+    mem::drop$0(0);
+}
+",
+            r"
+use std::mem::{self, drop};
+
+mod std {
+    pub mod mem {
+        pub fn drop<T>(_: T) {}
+    }
+}
+
+fn main() {
+    drop(0);
+}
 ",
         );
     }