diff options
| author | Jeroen Vannevel <jer_vannevel@outlook.com> | 2022-01-05 01:18:55 +0000 |
|---|---|---|
| committer | Jeroen Vannevel <jer_vannevel@outlook.com> | 2022-01-05 01:18:55 +0000 |
| commit | cd5ad4e5007c0de29c487bb2763db7e3457b2a2c (patch) | |
| tree | 3a90b9e0d0334423885e411765682a8d488e5efa | |
| parent | 817f47828c86683e6950576eb213e9d9d2524bf8 (diff) | |
| download | rust-cd5ad4e5007c0de29c487bb2763db7e3457b2a2c.tar.gz rust-cd5ad4e5007c0de29c487bb2763db7e3457b2a2c.zip | |
Don't include a ref if none was declared
| -rw-r--r-- | crates/ide_assists/src/handlers/extract_variable.rs | 52 |
1 files changed, 49 insertions, 3 deletions
diff --git a/crates/ide_assists/src/handlers/extract_variable.rs b/crates/ide_assists/src/handlers/extract_variable.rs index fb48c0b4f12..39a4700915f 100644 --- a/crates/ide_assists/src/handlers/extract_variable.rs +++ b/crates/ide_assists/src/handlers/extract_variable.rs @@ -53,7 +53,13 @@ pub(crate) fn extract_variable(acc: &mut Assists, ctx: &AssistContext) -> Option } let ref_kind: RefKind = if let Some(receiver_type) = get_receiver_type(&ctx, &to_extract) { - if receiver_type.is_mutable_reference() { RefKind::MutRef } else { RefKind::Ref } + if receiver_type.is_mutable_reference() { + RefKind::MutRef + } else if receiver_type.is_reference() { + RefKind::Ref + } else { + RefKind::None + } } else { RefKind::None }; @@ -86,7 +92,7 @@ pub(crate) fn extract_variable(acc: &mut Assists, ctx: &AssistContext) -> Option let reference_modifier = match ref_kind { RefKind::MutRef => "&mut ", RefKind::Ref => "&", - RefKind::None => "" + RefKind::None => "", }; match anchor { @@ -180,7 +186,7 @@ fn get_receiver(expression: ast::Expr) -> Option<ast::Expr> { enum RefKind { Ref, MutRef, - None + None, } #[derive(Debug)] @@ -1091,4 +1097,44 @@ fn foo(s: &S) { }"#, ); } + + #[test] + fn test_extract_var_regular_parameter() { + check_assist( + extract_variable, + r#" +struct X; + +impl X { + fn do_thing(&self) { + + } +} + +struct S { + sub: X +} + +fn foo(s: S) { + $0s.sub$0.do_thing(); +}"#, + r#" +struct X; + +impl X { + fn do_thing(&self) { + + } +} + +struct S { + sub: X +} + +fn foo(s: S) { + let $0x = s.sub; + x.do_thing(); +}"#, + ); + } } |
