From a9b6aec8a788d33ebe9667d53d127be59d93e555 Mon Sep 17 00:00:00 2001 From: Matt Niemeir Date: Mon, 9 Mar 2020 21:18:55 -0500 Subject: Struct field rename renames field in constructor field shorthand --- crates/ra_ide_db/src/search.rs | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) (limited to 'crates/ra_ide_db/src/search.rs') diff --git a/crates/ra_ide_db/src/search.rs b/crates/ra_ide_db/src/search.rs index 6f198df04..9436a7562 100644 --- a/crates/ra_ide_db/src/search.rs +++ b/crates/ra_ide_db/src/search.rs @@ -17,7 +17,7 @@ use rustc_hash::FxHashMap; use test_utils::tested_by; use crate::{ - defs::{classify_name_ref, Definition}, + defs::{classify_name_ref, Definition, NameRefClass}, RootDatabase, }; @@ -30,6 +30,7 @@ pub struct Reference { #[derive(Debug, Clone, PartialEq)] pub enum ReferenceKind { + StructFieldShorthand, StructLiteral, Other, } @@ -237,9 +238,8 @@ impl Definition { // FIXME: reuse sb // See https://github.com/rust-lang/rust/pull/68198#issuecomment-574269098 - if let Some(d) = classify_name_ref(&sema, &name_ref) { - let d = d.definition(); - if &d == self { + match (classify_name_ref(&sema, &name_ref), self) { + (Some(NameRefClass::Definition(def)), _) if &def == self => { let kind = if is_record_lit_name_ref(&name_ref) || is_call_expr_name_ref(&name_ref) { @@ -252,9 +252,21 @@ impl Definition { refs.push(Reference { file_range, kind, - access: reference_access(&d, &name_ref), + access: reference_access(&def, &name_ref), }); } + ( + Some(NameRefClass::FieldShorthand { local, field: _ }), + Definition::StructField(_), + ) => { + let file_range = sema.original_range(name_ref.syntax()); + refs.push(Reference { + file_range: file_range, + kind: ReferenceKind::StructFieldShorthand, + access: reference_access(&Definition::Local(local), &name_ref), + }); + } + _ => {} // not a usage } } } -- cgit v1.2.3 From ce8121bd65daecd9e92371c244dd1ac2b0e5ecda Mon Sep 17 00:00:00 2001 From: Matt Niemeir Date: Mon, 9 Mar 2020 21:34:33 -0500 Subject: Renaming a local renames struct field shorthand --- crates/ra_ide_db/src/search.rs | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) (limited to 'crates/ra_ide_db/src/search.rs') diff --git a/crates/ra_ide_db/src/search.rs b/crates/ra_ide_db/src/search.rs index 9436a7562..b843b5b57 100644 --- a/crates/ra_ide_db/src/search.rs +++ b/crates/ra_ide_db/src/search.rs @@ -30,7 +30,8 @@ pub struct Reference { #[derive(Debug, Clone, PartialEq)] pub enum ReferenceKind { - StructFieldShorthand, + StructFieldShorthandForField, + StructFieldShorthandForLocal, StructLiteral, Other, } @@ -238,8 +239,8 @@ impl Definition { // FIXME: reuse sb // See https://github.com/rust-lang/rust/pull/68198#issuecomment-574269098 - match (classify_name_ref(&sema, &name_ref), self) { - (Some(NameRefClass::Definition(def)), _) if &def == self => { + match classify_name_ref(&sema, &name_ref) { + Some(NameRefClass::Definition(def)) if &def == self => { let kind = if is_record_lit_name_ref(&name_ref) || is_call_expr_name_ref(&name_ref) { @@ -255,14 +256,19 @@ impl Definition { access: reference_access(&def, &name_ref), }); } - ( - Some(NameRefClass::FieldShorthand { local, field: _ }), - Definition::StructField(_), - ) => { + Some(NameRefClass::FieldShorthand { local, field: _ }) => { + let kind = match self { + Definition::StructField(_) => { + ReferenceKind::StructFieldShorthandForField + } + Definition::Local(_) => ReferenceKind::StructFieldShorthandForLocal, + _ => continue, + }; + let file_range = sema.original_range(name_ref.syntax()); refs.push(Reference { - file_range: file_range, - kind: ReferenceKind::StructFieldShorthand, + file_range, + kind, access: reference_access(&Definition::Local(local), &name_ref), }); } -- cgit v1.2.3 From 13ccbb2919dff8e98d0a242d9d6b7edd17a6bd2c Mon Sep 17 00:00:00 2001 From: Matt Niemeir Date: Tue, 10 Mar 2020 22:27:38 -0500 Subject: find_usages limited to actual usages again --- crates/ra_ide_db/src/search.rs | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'crates/ra_ide_db/src/search.rs') diff --git a/crates/ra_ide_db/src/search.rs b/crates/ra_ide_db/src/search.rs index b843b5b57..cf78d3e41 100644 --- a/crates/ra_ide_db/src/search.rs +++ b/crates/ra_ide_db/src/search.rs @@ -256,21 +256,21 @@ impl Definition { access: reference_access(&def, &name_ref), }); } - Some(NameRefClass::FieldShorthand { local, field: _ }) => { - let kind = match self { - Definition::StructField(_) => { - ReferenceKind::StructFieldShorthandForField - } - Definition::Local(_) => ReferenceKind::StructFieldShorthandForLocal, - _ => continue, + Some(NameRefClass::FieldShorthand { local, field }) => { + match self { + Definition::StructField(_) if &field == self => refs.push(Reference { + file_range: sema.original_range(name_ref.syntax()), + kind: ReferenceKind::StructFieldShorthandForField, + access: reference_access(&field, &name_ref), + }), + Definition::Local(l) if &local == l => refs.push(Reference { + file_range: sema.original_range(name_ref.syntax()), + kind: ReferenceKind::StructFieldShorthandForLocal, + access: reference_access(&Definition::Local(local), &name_ref), + }), + + _ => {} // not a usage }; - - let file_range = sema.original_range(name_ref.syntax()); - refs.push(Reference { - file_range, - kind, - access: reference_access(&Definition::Local(local), &name_ref), - }); } _ => {} // not a usage } -- cgit v1.2.3