From 7a76433c45b01e969f1eca51aec76db53b9e4db3 Mon Sep 17 00:00:00 2001 From: DJMcNab <36049421+DJMcNab@users.noreply.github.com> Date: Sat, 26 Jan 2019 18:45:29 +0000 Subject: Struct literals should not be a `BlockLike::Block` --- crates/ra_syntax/src/grammar/expressions.rs | 2 +- .../data/parser/ok/0043_complex_assignment.rs | 8 ++ .../data/parser/ok/0043_complex_assignment.txt | 109 +++++++++++++++++++++ 3 files changed, 118 insertions(+), 1 deletion(-) create mode 100644 crates/ra_syntax/tests/data/parser/ok/0043_complex_assignment.rs create mode 100644 crates/ra_syntax/tests/data/parser/ok/0043_complex_assignment.txt diff --git a/crates/ra_syntax/src/grammar/expressions.rs b/crates/ra_syntax/src/grammar/expressions.rs index 7ee32fa7c..1604d9b5a 100644 --- a/crates/ra_syntax/src/grammar/expressions.rs +++ b/crates/ra_syntax/src/grammar/expressions.rs @@ -423,7 +423,7 @@ fn path_expr(p: &mut Parser, r: Restrictions) -> (CompletedMarker, BlockLike) { match p.current() { L_CURLY if !r.forbid_structs => { named_field_list(p); - (m.complete(p, STRUCT_LIT), BlockLike::Block) + (m.complete(p, STRUCT_LIT), BlockLike::NotBlock) } EXCL => { let block_like = items::macro_call_after_excl(p); diff --git a/crates/ra_syntax/tests/data/parser/ok/0043_complex_assignment.rs b/crates/ra_syntax/tests/data/parser/ok/0043_complex_assignment.rs new file mode 100644 index 000000000..7e4a28bf7 --- /dev/null +++ b/crates/ra_syntax/tests/data/parser/ok/0043_complex_assignment.rs @@ -0,0 +1,8 @@ +// https://github.com/rust-analyzer/rust-analyzer/issues/674 + +struct Repr { raw: [u8; 1] } + +fn abc() { + Repr { raw: [0] }.raw[0] = 0; + Repr{raw:[0]}(); +} diff --git a/crates/ra_syntax/tests/data/parser/ok/0043_complex_assignment.txt b/crates/ra_syntax/tests/data/parser/ok/0043_complex_assignment.txt new file mode 100644 index 000000000..2279c7966 --- /dev/null +++ b/crates/ra_syntax/tests/data/parser/ok/0043_complex_assignment.txt @@ -0,0 +1,109 @@ +SOURCE_FILE@[0; 160) + COMMENT@[0; 60) + WHITESPACE@[60; 62) + STRUCT_DEF@[62; 90) + STRUCT_KW@[62; 68) + WHITESPACE@[68; 69) + NAME@[69; 73) + IDENT@[69; 73) "Repr" + WHITESPACE@[73; 74) + NAMED_FIELD_DEF_LIST@[74; 90) + L_CURLY@[74; 75) + WHITESPACE@[75; 76) + NAMED_FIELD_DEF@[76; 88) + NAME@[76; 79) + IDENT@[76; 79) "raw" + COLON@[79; 80) + WHITESPACE@[80; 81) + ARRAY_TYPE@[81; 88) + L_BRACK@[81; 82) + PATH_TYPE@[82; 84) + PATH@[82; 84) + PATH_SEGMENT@[82; 84) + NAME_REF@[82; 84) + IDENT@[82; 84) "u8" + SEMI@[84; 85) + WHITESPACE@[85; 86) + LITERAL@[86; 87) + INT_NUMBER@[86; 87) "1" + R_BRACK@[87; 88) + WHITESPACE@[88; 89) + R_CURLY@[89; 90) + WHITESPACE@[90; 92) + FN_DEF@[92; 159) + FN_KW@[92; 94) + WHITESPACE@[94; 95) + NAME@[95; 98) + IDENT@[95; 98) "abc" + PARAM_LIST@[98; 100) + L_PAREN@[98; 99) + R_PAREN@[99; 100) + WHITESPACE@[100; 101) + BLOCK@[101; 159) + L_CURLY@[101; 102) + WHITESPACE@[102; 107) + EXPR_STMT@[107; 136) + BIN_EXPR@[107; 135) + INDEX_EXPR@[107; 131) + FIELD_EXPR@[107; 128) + STRUCT_LIT@[107; 124) + PATH@[107; 111) + PATH_SEGMENT@[107; 111) + NAME_REF@[107; 111) + IDENT@[107; 111) "Repr" + WHITESPACE@[111; 112) + NAMED_FIELD_LIST@[112; 124) + L_CURLY@[112; 113) + WHITESPACE@[113; 114) + NAMED_FIELD@[114; 122) + NAME_REF@[114; 117) + IDENT@[114; 117) "raw" + COLON@[117; 118) + WHITESPACE@[118; 119) + ARRAY_EXPR@[119; 122) + L_BRACK@[119; 120) + LITERAL@[120; 121) + INT_NUMBER@[120; 121) "0" + R_BRACK@[121; 122) + WHITESPACE@[122; 123) + R_CURLY@[123; 124) + DOT@[124; 125) + NAME_REF@[125; 128) + IDENT@[125; 128) "raw" + L_BRACK@[128; 129) + LITERAL@[129; 130) + INT_NUMBER@[129; 130) "0" + R_BRACK@[130; 131) + WHITESPACE@[131; 132) + EQ@[132; 133) + WHITESPACE@[133; 134) + LITERAL@[134; 135) + INT_NUMBER@[134; 135) "0" + SEMI@[135; 136) + WHITESPACE@[136; 141) + EXPR_STMT@[141; 157) + CALL_EXPR@[141; 156) + STRUCT_LIT@[141; 154) + PATH@[141; 145) + PATH_SEGMENT@[141; 145) + NAME_REF@[141; 145) + IDENT@[141; 145) "Repr" + NAMED_FIELD_LIST@[145; 154) + L_CURLY@[145; 146) + NAMED_FIELD@[146; 153) + NAME_REF@[146; 149) + IDENT@[146; 149) "raw" + COLON@[149; 150) + ARRAY_EXPR@[150; 153) + L_BRACK@[150; 151) + LITERAL@[151; 152) + INT_NUMBER@[151; 152) "0" + R_BRACK@[152; 153) + R_CURLY@[153; 154) + ARG_LIST@[154; 156) + L_PAREN@[154; 155) + R_PAREN@[155; 156) + SEMI@[156; 157) + WHITESPACE@[157; 158) + R_CURLY@[158; 159) + WHITESPACE@[159; 160) -- cgit v1.2.3