mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-12-26 04:53:34 +00:00
feat: handle self-param outside of methods when renaming
This commit is contained in:
parent
d7628c0a8b
commit
1e8a03a56e
1 changed files with 40 additions and 11 deletions
|
@ -421,19 +421,28 @@ fn text_edit_from_self_param(self_param: &ast::SelfParam, new_name: &str) -> Opt
|
|||
None
|
||||
}
|
||||
|
||||
let impl_def = self_param.syntax().ancestors().find_map(ast::Impl::cast)?;
|
||||
let type_name = target_type_name(&impl_def)?;
|
||||
match self_param.syntax().ancestors().find_map(ast::Impl::cast) {
|
||||
Some(impl_def) => {
|
||||
let type_name = target_type_name(&impl_def)?;
|
||||
|
||||
let mut replacement_text = String::from(new_name);
|
||||
replacement_text.push_str(": ");
|
||||
match (self_param.amp_token(), self_param.mut_token()) {
|
||||
(Some(_), None) => replacement_text.push('&'),
|
||||
(Some(_), Some(_)) => replacement_text.push_str("&mut "),
|
||||
(_, _) => (),
|
||||
};
|
||||
replacement_text.push_str(type_name.as_str());
|
||||
let mut replacement_text = String::from(new_name);
|
||||
replacement_text.push_str(": ");
|
||||
match (self_param.amp_token(), self_param.mut_token()) {
|
||||
(Some(_), None) => replacement_text.push('&'),
|
||||
(Some(_), Some(_)) => replacement_text.push_str("&mut "),
|
||||
(_, _) => (),
|
||||
};
|
||||
replacement_text.push_str(type_name.as_str());
|
||||
|
||||
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)]
|
||||
|
@ -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]
|
||||
fn test_self_in_path_to_parameter() {
|
||||
check(
|
||||
|
|
Loading…
Reference in a new issue