diff options
| author | bors <bors@rust-lang.org> | 2024-10-14 14:51:57 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2024-10-14 14:51:57 +0000 |
| commit | d4e5c2430f44ca4af8ff7e5bf0f2d7b610112391 (patch) | |
| tree | 2c2b29aaabae04ceddee2e724da442014fe81874 | |
| parent | 23ef13d8b9419030d1584c4634482ebaf46bbebf (diff) | |
| parent | 2ee4925068ca162e8d62bfe5fe02430dc894cdb3 (diff) | |
| download | rust-d4e5c2430f44ca4af8ff7e5bf0f2d7b610112391.tar.gz rust-d4e5c2430f44ca4af8ff7e5bf0f2d7b610112391.zip | |
Auto merge of #18292 - roife:fix-issue-17427, r=Veykril
feat: handle self-param outside of methods when renaming close #17427
| -rw-r--r-- | src/tools/rust-analyzer/crates/ide/src/rename.rs | 53 |
1 files changed, 41 insertions, 12 deletions
diff --git a/src/tools/rust-analyzer/crates/ide/src/rename.rs b/src/tools/rust-analyzer/crates/ide/src/rename.rs index e46cb5a781f..f17c1fa5c62 100644 --- a/src/tools/rust-analyzer/crates/ide/src/rename.rs +++ b/src/tools/rust-analyzer/crates/ide/src/rename.rs @@ -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)?; - - 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()); + 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()); - 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)] @@ -1978,6 +1987,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( "foo", |
