about summary refs log tree commit diff
diff options
context:
space:
mode:
authorharpsword <harpswordyyl@gmail.com>2022-07-07 22:25:25 +0800
committerharpsword <harpswordyyl@gmail.com>2022-07-10 10:45:03 +0800
commit4b3164f129dcbbf6a4d15a4c01bfdb01f3f8721e (patch)
treeb270e1cc693784795386b5c47efe7573b36c64a8
parentfee5555cfabed4b8abbd40983fc4442df4007e49 (diff)
downloadrust-4b3164f129dcbbf6a4d15a4c01bfdb01f3f8721e.tar.gz
rust-4b3164f129dcbbf6a4d15a4c01bfdb01f3f8721e.zip
fix: ignore renames for crate root
-rw-r--r--crates/ide-db/src/rename.rs4
-rw-r--r--crates/ide/src/rename.rs29
2 files changed, 33 insertions, 0 deletions
diff --git a/crates/ide-db/src/rename.rs b/crates/ide-db/src/rename.rs
index 8f83496e938..59cbde0944d 100644
--- a/crates/ide-db/src/rename.rs
+++ b/crates/ide-db/src/rename.rs
@@ -177,6 +177,10 @@ fn rename_mod(
 
     let mut source_change = SourceChange::default();
 
+    if module.is_crate_root(sema.db) {
+        return Ok(source_change);
+    }
+
     let InFile { file_id, value: def_source } = module.definition_source(sema.db);
     if let ModuleSource::SourceFile(..) = def_source {
         let anchor = file_id.original_file(sema.db);
diff --git a/crates/ide/src/rename.rs b/crates/ide/src/rename.rs
index 0f8033611a1..23d6f8d8e4e 100644
--- a/crates/ide/src/rename.rs
+++ b/crates/ide/src/rename.rs
@@ -379,6 +379,15 @@ mod tests {
         expect.assert_debug_eq(&source_change)
     }
 
+    fn check_expect_will_rename_file(new_name: &str, ra_fixture: &str, expect: Expect) {
+        let (analysis, position) = fixture::position(ra_fixture);
+        let source_change = analysis
+            .will_rename_file(position.file_id, new_name)
+            .unwrap()
+            .expect("Expect returned a RenameError");
+        expect.assert_debug_eq(&source_change)
+    }
+
     fn check_prepare(ra_fixture: &str, expect: Expect) {
         let (analysis, position) = fixture::position(ra_fixture);
         let result = analysis
@@ -1246,6 +1255,26 @@ submodule!(bar);
     }
 
     #[test]
+    fn test_rename_mod_for_crate_root() {
+        check_expect_will_rename_file(
+            "main",
+            r#"
+//- /lib.rs
+use crate::foo as bar;
+fn foo() {}
+mod bar$0;
+"#,
+            expect![[r#"
+                SourceChange {
+                    source_file_edits: {},
+                    file_system_edits: [],
+                    is_snippet: false,
+                }
+                "#]],
+        )
+    }
+
+    #[test]
     fn test_enum_variant_from_module_1() {
         cov_mark::check!(rename_non_local);
         check(