Skip to content
This repository was archived by the owner on May 28, 2025. It is now read-only.

Commit e62e926

Browse files
committed
Use text range of name after macro expansion
1 parent 08348d7 commit e62e926

File tree

2 files changed

+34
-7
lines changed

2 files changed

+34
-7
lines changed

crates/ide/src/rename.rs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1133,6 +1133,34 @@ pub mod foo$0;
11331133
)
11341134
}
11351135

1136+
#[test]
1137+
fn test_rename_mod_in_macro() {
1138+
check(
1139+
"bar",
1140+
r#"
1141+
//- /foo.rs
1142+
1143+
//- /lib.rs
1144+
macro_rules! submodule {
1145+
($name:ident) => {
1146+
mod $name;
1147+
};
1148+
}
1149+
1150+
submodule!($0foo);
1151+
"#,
1152+
r#"
1153+
macro_rules! submodule {
1154+
($name:ident) => {
1155+
mod $name;
1156+
};
1157+
}
1158+
1159+
submodule!(bar);
1160+
"#,
1161+
)
1162+
}
1163+
11361164
#[test]
11371165
fn test_enum_variant_from_module_1() {
11381166
cov_mark::check!(rename_non_local);

crates/ide_db/src/rename.rs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@ use std::fmt;
2525
use base_db::{AnchoredPathBuf, FileId, FileRange};
2626
use either::Either;
2727
use hir::{AsAssocItem, FieldSource, HasSource, InFile, ModuleSource, Semantics};
28-
use stdx::never;
2928
use syntax::{
3029
ast::{self, HasName},
3130
AstNode, SyntaxKind, TextRange, T,
@@ -188,16 +187,16 @@ fn rename_mod(
188187
source_change.push_file_system_edit(move_file);
189188
}
190189

191-
if let Some(InFile { file_id, value: decl_source }) = module.declaration_source(sema.db) {
190+
if let Some(InFile { file_id, value: _ }) = module.declaration_source(sema.db) {
192191
let file_id = file_id.original_file(sema.db);
193-
match decl_source.name() {
194-
Some(name) => source_change.insert_source_edit(
192+
if let Some(file_range) = Definition::Module(module).range_for_rename(sema) {
193+
source_change.insert_source_edit(
195194
file_id,
196-
TextEdit::replace(name.syntax().text_range(), new_name.to_string()),
197-
),
198-
_ => never!("Module source node is missing a name"),
195+
TextEdit::replace(file_range.range, new_name.to_string()),
196+
)
199197
}
200198
}
199+
201200
let def = Definition::Module(module);
202201
let usages = def.usages(sema).all();
203202
let ref_edits = usages.iter().map(|(&file_id, references)| {

0 commit comments

Comments
 (0)