Auto merge of #18292 - roife:fix-issue-17427, r=Veykril

feat: handle self-param outside of methods when renaming

close #17427
This commit is contained in:
bors 2024-10-14 14:51:57 +00:00
commit eff79f171b

View file

@ -421,7 +421,8 @@ fn text_edit_from_self_param(self_param: &ast::SelfParam, new_name: &str) -> Opt
None None
} }
let impl_def = self_param.syntax().ancestors().find_map(ast::Impl::cast)?; match self_param.syntax().ancestors().find_map(ast::Impl::cast) {
Some(impl_def) => {
let type_name = target_type_name(&impl_def)?; let type_name = target_type_name(&impl_def)?;
let mut replacement_text = String::from(new_name); let mut replacement_text = String::from(new_name);
@ -435,6 +436,14 @@ fn text_edit_from_self_param(self_param: &ast::SelfParam, new_name: &str) -> Opt
Some(TextEdit::replace(self_param.syntax().text_range(), replacement_text)) Some(TextEdit::replace(self_param.syntax().text_range(), replacement_text))
} }
None => {
cov_mark::hit!(rename_self_outside_of_methods);
let mut replacement_text = String::from(new_name);
replacement_text.push_str(": _");
Some(TextEdit::replace(self_param.syntax().text_range(), replacement_text))
}
}
}
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
@ -1977,6 +1986,26 @@ impl Foo {
); );
} }
#[test]
fn test_self_outside_of_methods() {
cov_mark::check!(rename_self_outside_of_methods);
check(
"foo",
r#"
fn f($0self) -> i32 {
use self as _;
self.i
}
"#,
r#"
fn f(foo: _) -> i32 {
use self as _;
foo.i
}
"#,
);
}
#[test] #[test]
fn test_self_in_path_to_parameter() { fn test_self_in_path_to_parameter() {
check( check(