mirror of
https://github.com/rust-lang/rust-analyzer.git
synced 2025-10-03 15:15:24 +00:00
Fix invalid shorthand initialization diagnostic for tuple structs
This commit is contained in:
parent
36353bb182
commit
59f195a323
1 changed files with 18 additions and 1 deletions
|
@ -187,7 +187,12 @@ fn check_struct_shorthand_initialization(
|
||||||
if let (Some(name_ref), Some(expr)) = (record_field.name_ref(), record_field.expr()) {
|
if let (Some(name_ref), Some(expr)) = (record_field.name_ref(), record_field.expr()) {
|
||||||
let field_name = name_ref.syntax().text().to_string();
|
let field_name = name_ref.syntax().text().to_string();
|
||||||
let field_expr = expr.syntax().text().to_string();
|
let field_expr = expr.syntax().text().to_string();
|
||||||
if field_name == field_expr {
|
let field_name_is_tup_index = name_ref
|
||||||
|
.syntax()
|
||||||
|
.first_token()
|
||||||
|
.map(|token| token.kind().is_literal())
|
||||||
|
.unwrap_or(false);
|
||||||
|
if field_name == field_expr && !field_name_is_tup_index {
|
||||||
let mut edit_builder = TextEditBuilder::default();
|
let mut edit_builder = TextEditBuilder::default();
|
||||||
edit_builder.delete(record_field.syntax().text_range());
|
edit_builder.delete(record_field.syntax().text_range());
|
||||||
edit_builder.insert(record_field.syntax().text_range().start(), field_name);
|
edit_builder.insert(record_field.syntax().text_range().start(), field_name);
|
||||||
|
@ -719,6 +724,18 @@ mod tests {
|
||||||
"#,
|
"#,
|
||||||
check_struct_shorthand_initialization,
|
check_struct_shorthand_initialization,
|
||||||
);
|
);
|
||||||
|
check_not_applicable(
|
||||||
|
r#"
|
||||||
|
struct A(usize);
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
A {
|
||||||
|
0: 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
"#,
|
||||||
|
check_struct_shorthand_initialization,
|
||||||
|
);
|
||||||
|
|
||||||
check_apply(
|
check_apply(
|
||||||
r#"
|
r#"
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue