aboutsummaryrefslogtreecommitdiff
path: root/crates/ra_ide
diff options
context:
space:
mode:
authorOptimalStrategy <[email protected]>2020-06-12 06:11:54 +0100
committerOptimalStrategy <[email protected]>2020-06-12 06:11:54 +0100
commit59f195a3231d9cbc3baac2c6ca8e6400311deeb7 (patch)
tree5e463eded6f59871664df160b2103681886a7e2a /crates/ra_ide
parent36353bb1827dbd2efcde2d18c8598c4cc5e2e296 (diff)
Fix invalid shorthand initialization diagnostic for tuple structs
Diffstat (limited to 'crates/ra_ide')
-rw-r--r--crates/ra_ide/src/diagnostics.rs19
1 files changed, 18 insertions, 1 deletions
diff --git a/crates/ra_ide/src/diagnostics.rs b/crates/ra_ide/src/diagnostics.rs
index f44feaf69..9cd36ad35 100644
--- a/crates/ra_ide/src/diagnostics.rs
+++ b/crates/ra_ide/src/diagnostics.rs
@@ -187,7 +187,12 @@ fn check_struct_shorthand_initialization(
187 if let (Some(name_ref), Some(expr)) = (record_field.name_ref(), record_field.expr()) { 187 if let (Some(name_ref), Some(expr)) = (record_field.name_ref(), record_field.expr()) {
188 let field_name = name_ref.syntax().text().to_string(); 188 let field_name = name_ref.syntax().text().to_string();
189 let field_expr = expr.syntax().text().to_string(); 189 let field_expr = expr.syntax().text().to_string();
190 if field_name == field_expr { 190 let field_name_is_tup_index = name_ref
191 .syntax()
192 .first_token()
193 .map(|token| token.kind().is_literal())
194 .unwrap_or(false);
195 if field_name == field_expr && !field_name_is_tup_index {
191 let mut edit_builder = TextEditBuilder::default(); 196 let mut edit_builder = TextEditBuilder::default();
192 edit_builder.delete(record_field.syntax().text_range()); 197 edit_builder.delete(record_field.syntax().text_range());
193 edit_builder.insert(record_field.syntax().text_range().start(), field_name); 198 edit_builder.insert(record_field.syntax().text_range().start(), field_name);
@@ -719,6 +724,18 @@ mod tests {
719 "#, 724 "#,
720 check_struct_shorthand_initialization, 725 check_struct_shorthand_initialization,
721 ); 726 );
727 check_not_applicable(
728 r#"
729 struct A(usize);
730
731 fn main() {
732 A {
733 0: 0
734 }
735 }
736 "#,
737 check_struct_shorthand_initialization,
738 );
722 739
723 check_apply( 740 check_apply(
724 r#" 741 r#"