mirror of
https://github.com/rust-lang/rust-analyzer
synced 2024-11-17 02:08:30 +00:00
Merge #2108
2108: fix parsing of for loops inside expressions r=matklad a=matklad Co-authored-by: Aleksey Kladov <aleksey.kladov@gmail.com>
This commit is contained in:
commit
1ca41f2118
4 changed files with 151 additions and 49 deletions
|
@ -56,7 +56,8 @@ pub(super) const ATOM_EXPR_FIRST: TokenSet =
|
|||
LIFETIME,
|
||||
ASYNC_KW,
|
||||
TRY_KW,
|
||||
LOOP_KW
|
||||
LOOP_KW,
|
||||
FOR_KW,
|
||||
]);
|
||||
|
||||
const EXPR_RECOVERY_SET: TokenSet = token_set![LET_KW];
|
||||
|
|
|
@ -179,50 +179,47 @@ SOURCE_FILE@[0; 240)
|
|||
ERROR@[148; 149)
|
||||
PLUS@[148; 149) "+"
|
||||
WHITESPACE@[149; 150) " "
|
||||
EXPR_STMT@[150; 151)
|
||||
PAREN_EXPR@[150; 151)
|
||||
EXPR_STMT@[150; 180)
|
||||
TUPLE_EXPR@[150; 180)
|
||||
L_PAREN@[150; 151) "("
|
||||
EXPR_STMT@[151; 157)
|
||||
FOR_EXPR@[151; 157)
|
||||
FOR_KW@[151; 154) "for"
|
||||
ERROR@[154; 155)
|
||||
L_ANGLE@[154; 155) "<"
|
||||
ERROR@[155; 157)
|
||||
LIFETIME@[155; 157) "\'a"
|
||||
EXPR_STMT@[157; 158)
|
||||
ERROR@[157; 158)
|
||||
R_ANGLE@[157; 158) ">"
|
||||
WHITESPACE@[158; 159) " "
|
||||
EXPR_STMT@[159; 180)
|
||||
BIN_EXPR@[159; 180)
|
||||
BIN_EXPR@[159; 178)
|
||||
BIN_EXPR@[159; 169)
|
||||
BIN_EXPR@[159; 167)
|
||||
PATH_EXPR@[159; 164)
|
||||
PATH@[159; 164)
|
||||
PATH_SEGMENT@[159; 164)
|
||||
NAME_REF@[159; 164)
|
||||
IDENT@[159; 164) "Trait"
|
||||
L_ANGLE@[164; 165) "<"
|
||||
ERROR@[165; 167)
|
||||
LIFETIME@[165; 167) "\'a"
|
||||
R_ANGLE@[167; 168) ">"
|
||||
ERROR@[168; 169)
|
||||
R_PAREN@[168; 169) ")"
|
||||
WHITESPACE@[169; 170) " "
|
||||
PLUS@[170; 171) "+"
|
||||
WHITESPACE@[171; 172) " "
|
||||
PAREN_EXPR@[172; 178)
|
||||
L_PAREN@[172; 173) "("
|
||||
PATH_EXPR@[173; 177)
|
||||
PATH@[173; 177)
|
||||
PATH_SEGMENT@[173; 177)
|
||||
NAME_REF@[173; 177)
|
||||
IDENT@[173; 177) "Copy"
|
||||
R_PAREN@[177; 178) ")"
|
||||
R_ANGLE@[178; 179) ">"
|
||||
ERROR@[179; 180)
|
||||
SEMI@[179; 180) ";"
|
||||
BIN_EXPR@[151; 180)
|
||||
BIN_EXPR@[151; 178)
|
||||
BIN_EXPR@[151; 169)
|
||||
BIN_EXPR@[151; 167)
|
||||
BIN_EXPR@[151; 164)
|
||||
FOR_EXPR@[151; 157)
|
||||
FOR_KW@[151; 154) "for"
|
||||
ERROR@[154; 155)
|
||||
L_ANGLE@[154; 155) "<"
|
||||
ERROR@[155; 157)
|
||||
LIFETIME@[155; 157) "\'a"
|
||||
R_ANGLE@[157; 158) ">"
|
||||
WHITESPACE@[158; 159) " "
|
||||
PATH_EXPR@[159; 164)
|
||||
PATH@[159; 164)
|
||||
PATH_SEGMENT@[159; 164)
|
||||
NAME_REF@[159; 164)
|
||||
IDENT@[159; 164) "Trait"
|
||||
L_ANGLE@[164; 165) "<"
|
||||
ERROR@[165; 167)
|
||||
LIFETIME@[165; 167) "\'a"
|
||||
R_ANGLE@[167; 168) ">"
|
||||
ERROR@[168; 169)
|
||||
R_PAREN@[168; 169) ")"
|
||||
WHITESPACE@[169; 170) " "
|
||||
PLUS@[170; 171) "+"
|
||||
WHITESPACE@[171; 172) " "
|
||||
PAREN_EXPR@[172; 178)
|
||||
L_PAREN@[172; 173) "("
|
||||
PATH_EXPR@[173; 177)
|
||||
PATH@[173; 177)
|
||||
PATH_SEGMENT@[173; 177)
|
||||
NAME_REF@[173; 177)
|
||||
IDENT@[173; 177) "Copy"
|
||||
R_PAREN@[177; 178) ")"
|
||||
R_ANGLE@[178; 179) ">"
|
||||
ERROR@[179; 180)
|
||||
SEMI@[179; 180) ";"
|
||||
WHITESPACE@[180; 185) "\n "
|
||||
LET_STMT@[185; 235)
|
||||
LET_KW@[185; 188) "let"
|
||||
|
@ -307,18 +304,16 @@ error 146: expected expression
|
|||
error 147: expected SEMI
|
||||
error 148: expected expression
|
||||
error 149: expected SEMI
|
||||
error 151: expected expression
|
||||
error 151: expected R_PAREN
|
||||
error 151: expected SEMI
|
||||
error 154: expected pattern
|
||||
error 155: expected IN_KW
|
||||
error 155: expected expression
|
||||
error 157: expected a block
|
||||
error 157: expected expression
|
||||
error 158: expected SEMI
|
||||
error 165: expected expression
|
||||
error 168: expected expression
|
||||
error 179: expected expression
|
||||
error 180: expected COMMA
|
||||
error 180: expected expression
|
||||
error 180: expected R_PAREN
|
||||
error 180: expected SEMI
|
||||
error 215: expected COMMA
|
||||
error 215: expected R_ANGLE
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
fn main() {
|
||||
Some(for _ in [1].into_iter() {});
|
||||
Some(loop { break; });
|
||||
Some(while true {});
|
||||
}
|
101
crates/ra_syntax/test_data/parser/ok/0059_loops_in_parens.txt
Normal file
101
crates/ra_syntax/test_data/parser/ok/0059_loops_in_parens.txt
Normal file
|
@ -0,0 +1,101 @@
|
|||
SOURCE_FILE@[0; 105)
|
||||
FN_DEF@[0; 104)
|
||||
FN_KW@[0; 2) "fn"
|
||||
WHITESPACE@[2; 3) " "
|
||||
NAME@[3; 7)
|
||||
IDENT@[3; 7) "main"
|
||||
PARAM_LIST@[7; 9)
|
||||
L_PAREN@[7; 8) "("
|
||||
R_PAREN@[8; 9) ")"
|
||||
WHITESPACE@[9; 10) " "
|
||||
BLOCK_EXPR@[10; 104)
|
||||
BLOCK@[10; 104)
|
||||
L_CURLY@[10; 11) "{"
|
||||
WHITESPACE@[11; 16) "\n "
|
||||
EXPR_STMT@[16; 50)
|
||||
CALL_EXPR@[16; 49)
|
||||
PATH_EXPR@[16; 20)
|
||||
PATH@[16; 20)
|
||||
PATH_SEGMENT@[16; 20)
|
||||
NAME_REF@[16; 20)
|
||||
IDENT@[16; 20) "Some"
|
||||
ARG_LIST@[20; 49)
|
||||
L_PAREN@[20; 21) "("
|
||||
FOR_EXPR@[21; 48)
|
||||
FOR_KW@[21; 24) "for"
|
||||
WHITESPACE@[24; 25) " "
|
||||
PLACEHOLDER_PAT@[25; 26)
|
||||
UNDERSCORE@[25; 26) "_"
|
||||
WHITESPACE@[26; 27) " "
|
||||
IN_KW@[27; 29) "in"
|
||||
WHITESPACE@[29; 30) " "
|
||||
METHOD_CALL_EXPR@[30; 45)
|
||||
ARRAY_EXPR@[30; 33)
|
||||
L_BRACK@[30; 31) "["
|
||||
LITERAL@[31; 32)
|
||||
INT_NUMBER@[31; 32) "1"
|
||||
R_BRACK@[32; 33) "]"
|
||||
DOT@[33; 34) "."
|
||||
NAME_REF@[34; 43)
|
||||
IDENT@[34; 43) "into_iter"
|
||||
ARG_LIST@[43; 45)
|
||||
L_PAREN@[43; 44) "("
|
||||
R_PAREN@[44; 45) ")"
|
||||
WHITESPACE@[45; 46) " "
|
||||
BLOCK_EXPR@[46; 48)
|
||||
BLOCK@[46; 48)
|
||||
L_CURLY@[46; 47) "{"
|
||||
R_CURLY@[47; 48) "}"
|
||||
R_PAREN@[48; 49) ")"
|
||||
SEMI@[49; 50) ";"
|
||||
WHITESPACE@[50; 55) "\n "
|
||||
EXPR_STMT@[55; 77)
|
||||
CALL_EXPR@[55; 76)
|
||||
PATH_EXPR@[55; 59)
|
||||
PATH@[55; 59)
|
||||
PATH_SEGMENT@[55; 59)
|
||||
NAME_REF@[55; 59)
|
||||
IDENT@[55; 59) "Some"
|
||||
ARG_LIST@[59; 76)
|
||||
L_PAREN@[59; 60) "("
|
||||
LOOP_EXPR@[60; 75)
|
||||
LOOP_KW@[60; 64) "loop"
|
||||
WHITESPACE@[64; 65) " "
|
||||
BLOCK_EXPR@[65; 75)
|
||||
BLOCK@[65; 75)
|
||||
L_CURLY@[65; 66) "{"
|
||||
WHITESPACE@[66; 67) " "
|
||||
EXPR_STMT@[67; 73)
|
||||
BREAK_EXPR@[67; 72)
|
||||
BREAK_KW@[67; 72) "break"
|
||||
SEMI@[72; 73) ";"
|
||||
WHITESPACE@[73; 74) " "
|
||||
R_CURLY@[74; 75) "}"
|
||||
R_PAREN@[75; 76) ")"
|
||||
SEMI@[76; 77) ";"
|
||||
WHITESPACE@[77; 82) "\n "
|
||||
EXPR_STMT@[82; 102)
|
||||
CALL_EXPR@[82; 101)
|
||||
PATH_EXPR@[82; 86)
|
||||
PATH@[82; 86)
|
||||
PATH_SEGMENT@[82; 86)
|
||||
NAME_REF@[82; 86)
|
||||
IDENT@[82; 86) "Some"
|
||||
ARG_LIST@[86; 101)
|
||||
L_PAREN@[86; 87) "("
|
||||
WHILE_EXPR@[87; 100)
|
||||
WHILE_KW@[87; 92) "while"
|
||||
WHITESPACE@[92; 93) " "
|
||||
CONDITION@[93; 97)
|
||||
LITERAL@[93; 97)
|
||||
TRUE_KW@[93; 97) "true"
|
||||
WHITESPACE@[97; 98) " "
|
||||
BLOCK_EXPR@[98; 100)
|
||||
BLOCK@[98; 100)
|
||||
L_CURLY@[98; 99) "{"
|
||||
R_CURLY@[99; 100) "}"
|
||||
R_PAREN@[100; 101) ")"
|
||||
SEMI@[101; 102) ";"
|
||||
WHITESPACE@[102; 103) "\n"
|
||||
R_CURLY@[103; 104) "}"
|
||||
WHITESPACE@[104; 105) "\n"
|
Loading…
Reference in a new issue