}
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
};
let reference_modifier = match ref_kind {
RefKind::MutRef => "&mut ",
RefKind::Ref => "&",
- RefKind::None => ""
+ RefKind::None => "",
};
match anchor {
enum RefKind {
Ref,
MutRef,
- None
+ None,
}
#[derive(Debug)]
fn foo(s: &S) {
let $0z = &s.sub.field.field;
z.do_thing();
+}"#,
+ );
+ }
+
+ #[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();
}"#,
);
}