Unnamed repository; edit this file 'description' to name the repository.
Update tests
Unfortunately, we lost some recovery for expressions.
27 files changed, 616 insertions, 796 deletions
diff --git a/crates/hir_def/src/body/scope.rs b/crates/hir_def/src/body/scope.rs index 505d33fa48..fc36f1ae52 100644 --- a/crates/hir_def/src/body/scope.rs +++ b/crates/hir_def/src/body/scope.rs @@ -542,4 +542,26 @@ fn test() { 93, ); } + + #[test] + fn let_chains_can_reference_previous_lets() { + do_check_local_name( + r#" +fn test() { + let foo: Option<i32> = None; + if let Some(spam) = foo && spa$0m > 1 && let Some(spam) = foo && spam > 1 {} +} +"#, + 61, + ); + do_check_local_name( + r#" +fn test() { + let foo: Option<i32> = None; + if let Some(spam) = foo && spam > 1 && let Some(spam) = foo && sp$0am > 1 {} +} +"#, + 100, + ); + } } diff --git a/crates/hir_ty/src/tests/macros.rs b/crates/hir_ty/src/tests/macros.rs index a61175f273..344e7293c5 100644 --- a/crates/hir_ty/src/tests/macros.rs +++ b/crates/hir_ty/src/tests/macros.rs @@ -190,7 +190,6 @@ fn expr_macro_def_expanded_in_various_places() { !0..6 '1isize': isize !0..6 '1isize': isize !0..6 '1isize': isize - !0..6 '1isize': isize 39..442 '{ ...!(); }': () 73..94 'spam!(...am!())': {unknown} 100..119 'for _ ...!() {}': () @@ -198,6 +197,7 @@ fn expr_macro_def_expanded_in_various_places() { 117..119 '{}': () 124..134 '|| spam!()': || -> isize 140..156 'while ...!() {}': () + 146..153 'spam!()': bool 154..156 '{}': () 161..174 'break spam!()': ! 180..194 'return spam!()': ! @@ -271,7 +271,6 @@ fn expr_macro_rules_expanded_in_various_places() { !0..6 '1isize': isize !0..6 '1isize': isize !0..6 '1isize': isize - !0..6 '1isize': isize 53..456 '{ ...!(); }': () 87..108 'spam!(...am!())': {unknown} 114..133 'for _ ...!() {}': () @@ -279,6 +278,7 @@ fn expr_macro_rules_expanded_in_various_places() { 131..133 '{}': () 138..148 '|| spam!()': || -> isize 154..170 'while ...!() {}': () + 160..167 'spam!()': bool 168..170 '{}': () 175..188 'break spam!()': ! 194..208 'return spam!()': ! diff --git a/crates/ide_assists/src/handlers/move_guard.rs b/crates/ide_assists/src/handlers/move_guard.rs index 6554940859..5c05cb921d 100644 --- a/crates/ide_assists/src/handlers/move_guard.rs +++ b/crates/ide_assists/src/handlers/move_guard.rs @@ -267,6 +267,31 @@ fn main() { } #[test] + fn move_let_guard_to_arm_body_works() { + check_assist( + move_guard_to_arm_body, + r#" +fn main() { + match 92 { + x $0if (let 1 = x) => false, + _ => true + } +} +"#, + r#" +fn main() { + match 92 { + x => if (let 1 = x) { + false + }, + _ => true + } +} +"#, + ); + } + + #[test] fn move_guard_to_arm_body_works_complex_match() { check_assist( move_guard_to_arm_body, @@ -426,13 +451,21 @@ fn main() { } #[test] - fn move_arm_cond_to_match_guard_if_let_not_works() { - check_assist_not_applicable( + fn move_arm_cond_to_match_guard_if_let_works() { + check_assist( move_arm_cond_to_match_guard, r#" fn main() { match 92 { - x => if let 62 = x { $0false }, + x => if let 62 = x && true { $0false }, + _ => true + } +} +"#, + r#" +fn main() { + match 92 { + x if let 62 = x && true => false, _ => true } } @@ -884,7 +917,7 @@ fn main() { #[test] fn move_arm_cond_to_match_guard_elseif_iflet() { - check_assist_not_applicable( + check_assist( move_arm_cond_to_match_guard, r#" fn main() { @@ -901,9 +934,21 @@ fn main() { 4 }, } -} -"#, - ) +}"#, + r#" +fn main() { + match 92 { + 3 => 0, + x if x > 10 => 1, + x if x > 5 => 2, + x if let 4 = 4 => { + 42; + 3 + } + x => 4, + } +}"#, + ); } #[test] diff --git a/crates/ide_assists/src/handlers/replace_if_let_with_match.rs b/crates/ide_assists/src/handlers/replace_if_let_with_match.rs index 3be14d7d95..2f35f74c5a 100644 --- a/crates/ide_assists/src/handlers/replace_if_let_with_match.rs +++ b/crates/ide_assists/src/handlers/replace_if_let_with_match.rs @@ -382,6 +382,18 @@ impl VariantData { } #[test] + fn test_if_let_with_match_let_chain() { + check_assist_not_applicable( + replace_if_let_with_match, + r#" +fn main() { + if $0let true = true && let Some(1) = None {} +} +"#, + ) + } + + #[test] fn test_if_let_with_match_basic() { check_assist( replace_if_let_with_match, diff --git a/crates/parser/src/tests/top_entries.rs b/crates/parser/src/tests/top_entries.rs index 24e41b46f8..eb640dc7fc 100644 --- a/crates/parser/src/tests/top_entries.rs +++ b/crates/parser/src/tests/top_entries.rs @@ -289,17 +289,19 @@ fn expr() { TopEntryPoint::Expr, "let _ = 0;", expect![[r#" - ERROR - LET_KW "let" - WHITESPACE " " - UNDERSCORE "_" - WHITESPACE " " - EQ "=" - WHITESPACE " " - INT_NUMBER "0" - SEMICOLON ";" - error 0: expected expression - "#]], + ERROR + LET_EXPR + LET_KW "let" + WHITESPACE " " + WILDCARD_PAT + UNDERSCORE "_" + WHITESPACE " " + EQ "=" + WHITESPACE " " + LITERAL + INT_NUMBER "0" + SEMICOLON ";" + "#]], ); } diff --git a/crates/parser/test_data/parser/err/0008_item_block_recovery.txt b/crates/parser/test_data/parser/err/0008_item_block_recovery.txt index 6dd70e7cd9..60b2fe9875 100644 --- a/crates/parser/test_data/parser/err/0008_item_block_recovery.txt +++ b/crates/parser/test_data/parser/err/0008_item_block_recovery.txt @@ -29,9 +29,8 @@ SOURCE_FILE IF_EXPR IF_KW "if" WHITESPACE " " - CONDITION - LITERAL - TRUE_KW "true" + LITERAL + TRUE_KW "true" WHITESPACE " " BLOCK_EXPR STMT_LIST diff --git a/crates/parser/test_data/parser/err/0019_let_recover.rs b/crates/parser/test_data/parser/err/0019_let_recover.rs index 48bf3d68bd..5108d5a49b 100644 --- a/crates/parser/test_data/parser/err/0019_let_recover.rs +++ b/crates/parser/test_data/parser/err/0019_let_recover.rs @@ -1,5 +1,5 @@ fn foo() { - let foo = + let foo = 11 let bar = 1; let let baz = 92; diff --git a/crates/parser/test_data/parser/err/0019_let_recover.txt b/crates/parser/test_data/parser/err/0019_let_recover.txt index 25722b1355..7d62e0cc14 100644 --- a/crates/parser/test_data/parser/err/0019_let_recover.txt +++ b/crates/parser/test_data/parser/err/0019_let_recover.txt @@ -20,6 +20,9 @@ SOURCE_FILE IDENT "foo" WHITESPACE " " EQ "=" + WHITESPACE " " + LITERAL + INT_NUMBER "11" WHITESPACE "\n " LET_STMT LET_KW "let" @@ -57,9 +60,8 @@ SOURCE_FILE IF_EXPR IF_KW "if" WHITESPACE " " - CONDITION - LITERAL - TRUE_KW "true" + LITERAL + TRUE_KW "true" WHITESPACE " " BLOCK_EXPR STMT_LIST @@ -73,9 +75,8 @@ SOURCE_FILE WHILE_EXPR WHILE_KW "while" WHITESPACE " " - CONDITION - LITERAL - TRUE_KW "true" + LITERAL + TRUE_KW "true" WHITESPACE " " BLOCK_EXPR STMT_LIST @@ -95,13 +96,12 @@ SOURCE_FILE WHITESPACE "\n" R_CURLY "}" WHITESPACE "\n" -error 24: expected expression -error 24: expected SEMICOLON -error 49: expected pattern -error 49: expected SEMICOLON -error 75: expected pattern -error 75: expected SEMICOLON -error 98: expected pattern -error 98: expected SEMICOLON -error 124: expected pattern -error 124: expected SEMICOLON +error 27: expected SEMICOLON +error 52: expected pattern +error 52: expected SEMICOLON +error 78: expected pattern +error 78: expected SEMICOLON +error 101: expected pattern +error 101: expected SEMICOLON +error 127: expected pattern +error 127: expected SEMICOLON diff --git a/crates/parser/test_data/parser/err/0024_many_type_parens.txt b/crates/parser/test_data/parser/err/0024_many_type_parens.txt index 446e1a8233..82e6a11249 100644 --- a/crates/parser/test_data/parser/err/0024_many_type_parens.txt +++ b/crates/parser/test_data/parser/err/0024_many_type_parens.txt @@ -180,116 +180,118 @@ SOURCE_FILE ERROR PLUS "+" WHITESPACE " " - EXPR_STMT - TUPLE_EXPR - L_PAREN "(" - FOR_EXPR - FOR_KW "for" - PATH_PAT - PATH - PATH_SEGMENT - L_ANGLE "<" - ERROR - LIFETIME_IDENT "'a" - R_ANGLE ">" - WHITESPACE " " + TUPLE_EXPR + L_PAREN "(" + FOR_EXPR + FOR_KW "for" + PATH_PAT + PATH + PATH_SEGMENT + L_ANGLE "<" + ERROR + LIFETIME_IDENT "'a" + R_ANGLE ">" + WHITESPACE " " + BIN_EXPR BIN_EXPR BIN_EXPR BIN_EXPR - BIN_EXPR - PATH_EXPR - PATH - PATH_SEGMENT - NAME_REF - IDENT "Trait" - L_ANGLE "<" - ERROR - LIFETIME_IDENT "'a" - R_ANGLE ">" - ERROR - R_PAREN ")" - WHITESPACE " " - PLUS "+" - WHITESPACE " " - PAREN_EXPR - L_PAREN "(" PATH_EXPR PATH PATH_SEGMENT NAME_REF - IDENT "Copy" + IDENT "Trait" + L_ANGLE "<" + ERROR + LIFETIME_IDENT "'a" + R_ANGLE ">" + ERROR R_PAREN ")" - R_ANGLE ">" - ERROR - SEMICOLON ";" - WHITESPACE "\n " - LET_STMT - LET_KW "let" - WHITESPACE " " - WILDCARD_PAT - UNDERSCORE "_" - COLON ":" + WHITESPACE " " + PLUS "+" + WHITESPACE " " + PAREN_EXPR + L_PAREN "(" + PATH_EXPR + PATH + PATH_SEGMENT + NAME_REF + IDENT "Copy" + R_PAREN ")" + R_ANGLE ">" + ERROR + SEMICOLON ";" + WHITESPACE "\n " + LET_EXPR + LET_KW "let" + WHITESPACE " " + WILDCARD_PAT + UNDERSCORE "_" + ERROR + COLON ":" WHITESPACE " " - DYN_TRAIT_TYPE - TYPE_BOUND_LIST - TYPE_BOUND - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - IDENT "Box" - GENERIC_ARG_LIST - L_ANGLE "<" - TYPE_ARG - PAREN_TYPE - L_PAREN "(" - FOR_TYPE - FOR_KW "for" - GENERIC_PARAM_LIST - L_ANGLE "<" - LIFETIME_PARAM - LIFETIME - LIFETIME_IDENT "'a" - R_ANGLE ">" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - IDENT "Trait" - GENERIC_ARG_LIST - L_ANGLE "<" - LIFETIME_ARG - LIFETIME - LIFETIME_IDENT "'a" - R_ANGLE ">" - R_PAREN ")" - WHITESPACE " " - PLUS "+" - WHITESPACE " " - TYPE_BOUND - L_PAREN "(" - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - IDENT "Copy" - R_PAREN ")" - WHITESPACE " " - PLUS "+" - WHITESPACE " " - TYPE_BOUND + BIN_EXPR + BIN_EXPR + PATH_EXPR + PATH + PATH_SEGMENT + NAME_REF + IDENT "Box" + L_ANGLE "<" + TUPLE_EXPR L_PAREN "(" - QUESTION "?" - PATH_TYPE + FOR_EXPR + FOR_KW "for" + PATH_PAT + PATH + PATH_SEGMENT + L_ANGLE "<" + ERROR + LIFETIME_IDENT "'a" + R_ANGLE ">" + WHITESPACE " " + BIN_EXPR + BIN_EXPR + BIN_EXPR + BIN_EXPR + PATH_EXPR + PATH + PATH_SEGMENT + NAME_REF + IDENT "Trait" + L_ANGLE "<" + ERROR + LIFETIME_IDENT "'a" + R_ANGLE ">" + ERROR + R_PAREN ")" + WHITESPACE " " + PLUS "+" + WHITESPACE " " + PAREN_EXPR + L_PAREN "(" + PATH_EXPR + PATH + PATH_SEGMENT + NAME_REF + IDENT "Copy" + R_PAREN ")" + WHITESPACE " " + PLUS "+" + WHITESPACE " " + PAREN_EXPR + L_PAREN "(" + ERROR + QUESTION "?" + PATH_EXPR PATH PATH_SEGMENT NAME_REF IDENT "Sized" R_PAREN ")" - ERROR - R_ANGLE ">" - SEMICOLON ";" + R_ANGLE ">" + ERROR + SEMICOLON ";" WHITESPACE "\n" R_CURLY "}" WHITESPACE "\n" @@ -312,10 +314,18 @@ error 168: expected expression error 179: expected expression error 180: expected a block error 180: expected COMMA -error 180: expected expression -error 180: expected R_PAREN -error 180: expected SEMICOLON -error 215: expected COMMA -error 215: expected R_ANGLE -error 235: expected SEMICOLON -error 235: expected expression +error 190: expected EQ +error 190: expected expression +error 191: expected COMMA +error 201: expected type +error 204: expected IN_KW +error 211: expected expression +error 214: expected expression +error 228: expected expression +error 229: expected R_PAREN +error 229: expected a block +error 229: expected COMMA +error 236: expected expression +error 237: expected COMMA +error 237: expected expression +error 237: expected R_PAREN diff --git a/crates/parser/test_data/parser/inline/ok/0030_cond.rast b/crates/parser/test_data/parser/inline/ok/0030_cond.rast deleted file mode 100644 index 3aa330f55d..0000000000 --- a/crates/parser/test_data/parser/inline/ok/0030_cond.rast +++ /dev/null @@ -1,209 +0,0 @@ - [email protected] "fn" - [email protected] " " - [email protected] "foo" - [email protected] "(" - [email protected] ")" - [email protected] " " - [email protected] "{" - [email protected] " " - [email protected] "if" - [email protected] " " - [email protected] "let" - [email protected] " " - [email protected] "Some" - [email protected] "(" - [email protected] "_" - [email protected] ")" - [email protected] " " - [email protected] "=" - [email protected] " " - [email protected] "None" - [email protected] " " - [email protected] "{" - [email protected] "}" - [email protected] " " - [email protected] "}" - [email protected] "\n" - [email protected] "fn" - [email protected] " " - [email protected] "bar" - [email protected] "(" - [email protected] ")" - [email protected] " " - [email protected] "{" - [email protected] "\n " - [email protected] "if" - [email protected] " " - [email protected] "let" - [email protected] " " - [email protected] "Some" - [email protected] "(" - [email protected] "_" - [email protected] ")" - [email protected] " " - [email protected] "|" - [email protected] " " - [email protected] "Some" - [email protected] "(" - [email protected] "_" - [email protected] ")" - [email protected] " " - [email protected] "=" - [email protected] " " - [email protected] "None" - [email protected] " " - [email protected] "{" - [email protected] "}" - [email protected] "\n " - [email protected] "if" - [email protected] " " - [email protected] "let" - [email protected] " " - [email protected] "|" - [email protected] " " - [email protected] "Some" - [email protected] "(" - [email protected] "_" - [email protected] ")" - [email protected] " " - [email protected] "=" - [email protected] " " - [email protected] "None" - [email protected] " " - [email protected] "{" - [email protected] "}" - [email protected] "\n " - [email protected] "while" - [email protected] " " - [email protected] "let" - [email protected] " " - [email protected] "Some" - [email protected] "(" - [email protected] "_" - [email protected] ")" - [email protected] " " - [email protected] "|" - [email protected] " " - [email protected] "Some" - [email protected] "(" - [email protected] "_" - [email protected] ")" - [email protected] " " - [email protected] "=" - [email protected] " " - [email protected] "None" - [email protected] " " - [email protected] "{" - [email protected] "}" - [email protected] "\n " - [email protected] "while" - [email protected] " " - [email protected] "let" - [email protected] " " - [email protected] "|" - [email protected] " " - [email protected] "Some" - [email protected] "(" - [email protected] "_" - [email protected] ")" - [email protected] " " - [email protected] "=" - [email protected] " " - [email protected] "None" - [email protected] " " - [email protected] "{" - [email protected] "}" - [email protected] "\n" - [email protected] "}" - [email protected] "\n" diff --git a/crates/parser/test_data/parser/inline/ok/0030_cond.rs b/crates/parser/test_data/parser/inline/ok/0030_cond.rs deleted file mode 100644 index 2552a2621f..0000000000 --- a/crates/parser/test_data/parser/inline/ok/0030_cond.rs +++ /dev/null @@ -1,7 +0,0 @@ -fn foo() { if let Some(_) = None {} } -fn bar() { - if let Some(_) | Some(_) = None {} - if let | Some(_) = None {} - while let Some(_) | Some(_) = None {} - while let | Some(_) = None {} -} diff --git a/crates/parser/test_data/parser/inline/ok/0030_cond.txt b/crates/parser/test_data/parser/inline/ok/0030_cond.txt deleted file mode 100644 index 5b89937013..0000000000 --- a/crates/parser/test_data/parser/inline/ok/0030_cond.txt +++ /dev/null @@ -1,209 +0,0 @@ -SOURCE_FILE - FN - FN_KW "fn" - WHITESPACE " " - NAME - IDENT "foo" - PARAM_LIST - L_PAREN "(" - R_PAREN ")" - WHITESPACE " " - BLOCK_EXPR - STMT_LIST - L_CURLY "{" - WHITESPACE " " - IF_EXPR - IF_KW "if" - WHITESPACE " " - CONDITION - LET_KW "let" - WHITESPACE " " - TUPLE_STRUCT_PAT - PATH - PATH_SEGMENT - NAME_REF - IDENT "Some" - L_PAREN "(" - WILDCARD_PAT - UNDERSCORE "_" - R_PAREN ")" - WHITESPACE " " - EQ "=" - WHITESPACE " " - PATH_EXPR - PATH - PATH_SEGMENT - NAME_REF - IDENT "None" - WHITESPACE " " - BLOCK_EXPR - STMT_LIST - L_CURLY "{" - R_CURLY "}" - WHITESPACE " " - R_CURLY "}" - WHITESPACE "\n" - FN - FN_KW "fn" - WHITESPACE " " - NAME - IDENT "bar" - PARAM_LIST - L_PAREN "(" - R_PAREN ")" - WHITESPACE " " - BLOCK_EXPR - STMT_LIST - L_CURLY "{" - WHITESPACE "\n " - EXPR_STMT - IF_EXPR - IF_KW "if" - WHITESPACE " " - CONDITION - LET_KW "let" - WHITESPACE " " - OR_PAT - TUPLE_STRUCT_PAT - PATH - PATH_SEGMENT - NAME_REF - IDENT "Some" - L_PAREN "(" - WILDCARD_PAT - UNDERSCORE "_" - R_PAREN ")" - WHITESPACE " " - PIPE "|" - WHITESPACE " " - TUPLE_STRUCT_PAT - PATH - PATH_SEGMENT - NAME_REF - IDENT "Some" - L_PAREN "(" - WILDCARD_PAT - UNDERSCORE "_" - R_PAREN ")" - WHITESPACE " " - EQ "=" - WHITESPACE " " - PATH_EXPR - PATH - PATH_SEGMENT - NAME_REF - IDENT "None" - WHITESPACE " " - BLOCK_EXPR - STMT_LIST - L_CURLY "{" - R_CURLY "}" - WHITESPACE "\n " - EXPR_STMT - IF_EXPR - IF_KW "if" - WHITESPACE " " - CONDITION - LET_KW "let" - WHITESPACE " " - PIPE "|" - WHITESPACE " " - TUPLE_STRUCT_PAT - PATH - PATH_SEGMENT - NAME_REF - IDENT "Some" - L_PAREN "(" - WILDCARD_PAT - UNDERSCORE "_" - R_PAREN ")" - WHITESPACE " " - EQ "=" - WHITESPACE " " - PATH_EXPR - PATH - PATH_SEGMENT - NAME_REF - IDENT "None" - WHITESPACE " " - BLOCK_EXPR - STMT_LIST - L_CURLY "{" - R_CURLY "}" - WHITESPACE "\n " - EXPR_STMT - WHILE_EXPR - WHILE_KW "while" - WHITESPACE " " - CONDITION - LET_KW "let" - WHITESPACE " " - OR_PAT - TUPLE_STRUCT_PAT - PATH - PATH_SEGMENT - NAME_REF - IDENT "Some" - L_PAREN "(" - WILDCARD_PAT - UNDERSCORE "_" - R_PAREN ")" - WHITESPACE " " - PIPE "|" - WHITESPACE " " - TUPLE_STRUCT_PAT - PATH - PATH_SEGMENT - NAME_REF - IDENT "Some" - L_PAREN "(" - WILDCARD_PAT - UNDERSCORE "_" - R_PAREN ")" - WHITESPACE " " - EQ "=" - WHITESPACE " " - PATH_EXPR - PATH - PATH_SEGMENT - NAME_REF - IDENT "None" - WHITESPACE " " - BLOCK_EXPR - STMT_LIST - L_CURLY "{" - R_CURLY "}" - WHITESPACE "\n " - WHILE_EXPR - WHILE_KW "while" - WHITESPACE " " - CONDITION - LET_KW "let" - WHITESPACE " " - PIPE "|" - WHITESPACE " " - TUPLE_STRUCT_PAT - PATH - PATH_SEGMENT - NAME_REF - IDENT "Some" - L_PAREN "(" - WILDCARD_PAT - UNDERSCORE "_" - R_PAREN ")" - WHITESPACE " " - EQ "=" - WHITESPACE " " - PATH_EXPR - PATH - PATH_SEGMENT - NAME_REF - IDENT "None" - WHITESPACE " " - BLOCK_EXPR - STMT_LIST - L_CURLY "{" - R_CURLY "}" - WHITESPACE "\n" - R_CURLY "}" - WHITESPACE "\n" diff --git a/crates/parser/test_data/parser/inline/ok/0030_let_expr.rast b/crates/parser/test_data/parser/inline/ok/0030_let_expr.rast new file mode 100644 index 0000000000..dcffcb1ce2 --- /dev/null +++ b/crates/parser/test_data/parser/inline/ok/0030_let_expr.rast @@ -0,0 +1,90 @@ +SOURCE_FILE + FN + FN_KW "fn" + WHITESPACE " " + NAME + IDENT "foo" + PARAM_LIST + L_PAREN "(" + R_PAREN ")" + WHITESPACE " " + BLOCK_EXPR + STMT_LIST + L_CURLY "{" + WHITESPACE "\n " + EXPR_STMT + IF_EXPR + IF_KW "if" + WHITESPACE " " + BIN_EXPR + LET_EXPR + LET_KW "let" + WHITESPACE " " + TUPLE_STRUCT_PAT + PATH + PATH_SEGMENT + NAME_REF + IDENT "Some" + L_PAREN "(" + WILDCARD_PAT + UNDERSCORE "_" + R_PAREN ")" + WHITESPACE " " + EQ "=" + WHITESPACE " " + PATH_EXPR + PATH + PATH_SEGMENT + NAME_REF + IDENT "None" + WHITESPACE " " + AMP2 "&&" + WHITESPACE " " + LITERAL + TRUE_KW "true" + WHITESPACE " " + BLOCK_EXPR + STMT_LIST + L_CURLY "{" + R_CURLY "}" + WHITESPACE "\n " + WHILE_EXPR + WHILE_KW "while" + WHITESPACE " " + BIN_EXPR + BIN_EXPR + LITERAL + INT_NUMBER "1" + WHITESPACE " " + EQ2 "==" + WHITESPACE " " + LITERAL + INT_NUMBER "5" + WHITESPACE " " + AMP2 "&&" + WHITESPACE " " + PAREN_EXPR + L_PAREN "(" + LET_EXPR + LET_KW "let" + WHITESPACE " " + IDENT_PAT + NAME + IDENT "None" + WHITESPACE " " + EQ "=" + WHITESPACE " " + PATH_EXPR + PATH + PATH_SEGMENT + NAME_REF + IDENT "None" + R_PAREN ")" + WHITESPACE " " + BLOCK_EXPR + STMT_LIST + L_CURLY "{" + R_CURLY "}" + WHITESPACE "\n" + R_CURLY "}" + WHITESPACE "\n" diff --git a/crates/parser/test_data/parser/inline/ok/0030_let_expr.rs b/crates/parser/test_data/parser/inline/ok/0030_let_expr.rs new file mode 100644 index 0000000000..0131d5e338 --- /dev/null +++ b/crates/parser/test_data/parser/inline/ok/0030_let_expr.rs @@ -0,0 +1,4 @@ +fn foo() { + if let Some(_) = None && true {} + while 1 == 5 && (let None = None) {} +} diff --git a/crates/parser/test_data/parser/inline/ok/0030_let_expr.txt b/crates/parser/test_data/parser/inline/ok/0030_let_expr.txt new file mode 100644 index 0000000000..dcffcb1ce2 --- /dev/null +++ b/crates/parser/test_data/parser/inline/ok/0030_let_expr.txt @@ -0,0 +1,90 @@ +SOURCE_FILE + FN + FN_KW "fn" + WHITESPACE " " + NAME + IDENT "foo" + PARAM_LIST + L_PAREN "(" + R_PAREN ")" + WHITESPACE " " + BLOCK_EXPR + STMT_LIST + L_CURLY "{" + WHITESPACE "\n " + EXPR_STMT + IF_EXPR + IF_KW "if" + WHITESPACE " " + BIN_EXPR + LET_EXPR + LET_KW "let" + WHITESPACE " " + TUPLE_STRUCT_PAT + PATH + PATH_SEGMENT + NAME_REF + IDENT "Some" + L_PAREN "(" + WILDCARD_PAT + UNDERSCORE "_" + R_PAREN ")" + WHITESPACE " " + EQ "=" + WHITESPACE " " + PATH_EXPR + PATH + PATH_SEGMENT + NAME_REF + IDENT "None" + WHITESPACE " " + AMP2 "&&" + WHITESPACE " " + LITERAL + TRUE_KW "true" + WHITESPACE " " + BLOCK_EXPR + STMT_LIST + L_CURLY "{" + R_CURLY "}" + WHITESPACE "\n " + WHILE_EXPR + WHILE_KW "while" + WHITESPACE " " + BIN_EXPR + BIN_EXPR + LITERAL + INT_NUMBER "1" + WHITESPACE " " + EQ2 "==" + WHITESPACE " " + LITERAL + INT_NUMBER "5" + WHITESPACE " " + AMP2 "&&" + WHITESPACE " " + PAREN_EXPR + L_PAREN "(" + LET_EXPR + LET_KW "let" + WHITESPACE " " + IDENT_PAT + NAME + IDENT "None" + WHITESPACE " " + EQ "=" + WHITESPACE " " + PATH_EXPR + PATH + PATH_SEGMENT + NAME_REF + IDENT "None" + R_PAREN ")" + WHITESPACE " " + BLOCK_EXPR + STMT_LIST + L_CURLY "{" + R_CURLY "}" + WHITESPACE "\n" + R_CURLY "}" + WHITESPACE "\n" diff --git a/crates/parser/test_data/parser/inline/ok/0031_while_expr.txt b/crates/parser/test_data/parser/inline/ok/0031_while_expr.txt index fc1ca4934c..16c522414a 100644 --- a/crates/parser/test_data/parser/inline/ok/0031_while_expr.txt +++ b/crates/parser/test_data/parser/inline/ok/0031_while_expr.txt @@ -16,9 +16,8 @@ SOURCE_FILE WHILE_EXPR WHILE_KW "while" WHITESPACE " " - CONDITION - LITERAL - TRUE_KW "true" + LITERAL + TRUE_KW "true" WHITESPACE " " BLOCK_EXPR STMT_LIST @@ -30,7 +29,7 @@ SOURCE_FILE WHILE_EXPR WHILE_KW "while" WHITESPACE " " - CONDITION + LET_EXPR LET_KW "let" WHITESPACE " " TUPLE_STRUCT_PAT @@ -69,15 +68,14 @@ SOURCE_FILE WHILE_EXPR WHILE_KW "while" WHITESPACE " " - CONDITION - BLOCK_EXPR - STMT_LIST - L_CURLY "{" - WHITESPACE " " - LITERAL - TRUE_KW "true" - WHITESPACE " " - R_CURLY "}" + BLOCK_EXPR + STMT_LIST + L_CURLY "{" + WHITESPACE " " + LITERAL + TRUE_KW "true" + WHITESPACE " " + R_CURLY "}" WHITESPACE " " BLOCK_EXPR STMT_LIST diff --git a/crates/parser/test_data/parser/inline/ok/0064_if_expr.txt b/crates/parser/test_data/parser/inline/ok/0064_if_expr.txt index c1f8381271..e2e964e44d 100644 --- a/crates/parser/test_data/parser/inline/ok/0064_if_expr.txt +++ b/crates/parser/test_data/parser/inline/ok/0064_if_expr.txt @@ -16,9 +16,8 @@ SOURCE_FILE IF_EXPR IF_KW "if" WHITESPACE " " - CONDITION - LITERAL - TRUE_KW "true" + LITERAL + TRUE_KW "true" WHITESPACE " " BLOCK_EXPR STMT_LIST @@ -30,9 +29,8 @@ SOURCE_FILE IF_EXPR IF_KW "if" WHITESPACE " " - CONDITION - LITERAL - TRUE_KW "true" + LITERAL + TRUE_KW "true" WHITESPACE " " BLOCK_EXPR STMT_LIST @@ -51,9 +49,8 @@ SOURCE_FILE IF_EXPR IF_KW "if" WHITESPACE " " - CONDITION - LITERAL - TRUE_KW "true" + LITERAL + TRUE_KW "true" WHITESPACE " " BLOCK_EXPR STMT_LIST @@ -65,9 +62,8 @@ SOURCE_FILE IF_EXPR IF_KW "if" WHITESPACE " " - CONDITION - LITERAL - FALSE_KW "false" + LITERAL + FALSE_KW "false" WHITESPACE " " BLOCK_EXPR STMT_LIST @@ -86,12 +82,11 @@ SOURCE_FILE IF_EXPR IF_KW "if" WHITESPACE " " - CONDITION - PATH_EXPR - PATH - PATH_SEGMENT - NAME_REF - IDENT "S" + PATH_EXPR + PATH + PATH_SEGMENT + NAME_REF + IDENT "S" WHITESPACE " " BLOCK_EXPR STMT_LIST @@ -103,15 +98,14 @@ SOURCE_FILE IF_EXPR IF_KW "if" WHITESPACE " " - CONDITION - BLOCK_EXPR - STMT_LIST - L_CURLY "{" - WHITESPACE " " - LITERAL - TRUE_KW "true" - WHITESPACE " " - R_CURLY "}" + BLOCK_EXPR + STMT_LIST + L_CURLY "{" + WHITESPACE " " + LITERAL + TRUE_KW "true" + WHITESPACE " " + R_CURLY "}" WHITESPACE " " BLOCK_EXPR STMT_LIST diff --git a/crates/parser/test_data/parser/inline/ok/0088_break_ambiguity.txt b/crates/parser/test_data/parser/inline/ok/0088_break_ambiguity.txt index 50ce9933b9..cbf5e84e8c 100644 --- a/crates/parser/test_data/parser/inline/ok/0088_break_ambiguity.txt +++ b/crates/parser/test_data/parser/inline/ok/0088_break_ambiguity.txt @@ -15,9 +15,8 @@ SOURCE_FILE IF_EXPR IF_KW "if" WHITESPACE " " - CONDITION - BREAK_EXPR - BREAK_KW "break" + BREAK_EXPR + BREAK_KW "break" WHITESPACE " " BLOCK_EXPR STMT_LIST @@ -28,9 +27,8 @@ SOURCE_FILE WHILE_EXPR WHILE_KW "while" WHITESPACE " " - CONDITION - BREAK_EXPR - BREAK_KW "break" + BREAK_EXPR + BREAK_KW "break" WHITESPACE " " BLOCK_EXPR STMT_LIST diff --git a/crates/parser/test_data/parser/inline/ok/0096_no_semi_after_block.txt b/crates/parser/test_data/parser/inline/ok/0096_no_semi_after_block.txt index 2a85371393..e4e215593e 100644 --- a/crates/parser/test_data/parser/inline/ok/0096_no_semi_after_block.txt +++ b/crates/parser/test_data/parser/inline/ok/0096_no_semi_after_block.txt @@ -16,9 +16,8 @@ SOURCE_FILE IF_EXPR IF_KW "if" WHITESPACE " " - CONDITION - LITERAL - TRUE_KW "true" + LITERAL + TRUE_KW "true" WHITESPACE " " BLOCK_EXPR STMT_LIST @@ -50,9 +49,8 @@ SOURCE_FILE WHILE_EXPR WHILE_KW "while" WHITESPACE " " - CONDITION - LITERAL - TRUE_KW "true" + LITERAL + TRUE_KW "true" WHITESPACE " " BLOCK_EXPR STMT_LIST diff --git a/crates/parser/test_data/parser/inline/ok/0109_label.txt b/crates/parser/test_data/parser/inline/ok/0109_label.txt index bd57fa9d4a..48d0bde845 100644 --- a/crates/parser/test_data/parser/inline/ok/0109_label.txt +++ b/crates/parser/test_data/parser/inline/ok/0109_label.txt @@ -35,9 +35,8 @@ SOURCE_FILE WHITESPACE " " WHILE_KW "while" WHITESPACE " " - CONDITION - LITERAL - TRUE_KW "true" + LITERAL + TRUE_KW "true" WHITESPACE " " BLOCK_EXPR STMT_LIST diff --git a/crates/parser/test_data/parser/inline/ok/0118_match_guard.txt b/crates/parser/test_data/parser/inline/ok/0118_match_guard.txt index a28b6ea5d1..96318b5219 100644 --- a/crates/parser/test_data/parser/inline/ok/0118_match_guard.txt +++ b/crates/parser/test_data/parser/inline/ok/0118_match_guard.txt @@ -49,19 +49,20 @@ SOURCE_FILE MATCH_GUARD IF_KW "if" WHITESPACE " " - LET_KW "let" - WHITESPACE " " - IDENT_PAT - NAME - IDENT "foo" - WHITESPACE " " - EQ "=" - WHITESPACE " " - PATH_EXPR - PATH - PATH_SEGMENT - NAME_REF - IDENT "bar" + LET_EXPR + LET_KW "let" + WHITESPACE " " + IDENT_PAT + NAME + IDENT "foo" + WHITESPACE " " + EQ "=" + WHITESPACE " " + PATH_EXPR + PATH + PATH_SEGMENT + NAME_REF + IDENT "bar" WHITESPACE " " FAT_ARROW "=>" WHITESPACE " " diff --git a/crates/parser/test_data/parser/ok/0033_label_break.txt b/crates/parser/test_data/parser/ok/0033_label_break.txt index 9807bf0d9a..df1acd6b83 100644 --- a/crates/parser/test_data/parser/ok/0033_label_break.txt +++ b/crates/parser/test_data/parser/ok/0033_label_break.txt @@ -51,16 +51,15 @@ SOURCE_FILE IF_EXPR IF_KW "if" WHITESPACE " " - CONDITION - CALL_EXPR - PATH_EXPR - PATH - PATH_SEGMENT - NAME_REF - IDENT "condition_not_met" - ARG_LIST - L_PAREN "(" - R_PAREN ")" + CALL_EXPR + PATH_EXPR + PATH + PATH_SEGMENT + NAME_REF + IDENT "condition_not_met" + ARG_LIST + L_PAREN "(" + R_PAREN ")" WHITESPACE " " BLOCK_EXPR STMT_LIST @@ -92,16 +91,15 @@ SOURCE_FILE IF_EXPR IF_KW "if" WHITESPACE " " - CONDITION - CALL_EXPR - PATH_EXPR - PATH - PATH_SEGMENT - NAME_REF - IDENT "condition_not_met" - ARG_LIST - L_PAREN "(" - R_PAREN ")" + CALL_EXPR + PATH_EXPR + PATH + PATH_SEGMENT + NAME_REF + IDENT "condition_not_met" + ARG_LIST + L_PAREN "(" + R_PAREN ")" WHITESPACE " " BLOCK_EXPR STMT_LIST @@ -153,16 +151,15 @@ SOURCE_FILE IF_EXPR IF_KW "if" WHITESPACE " " - CONDITION - CALL_EXPR - PATH_EXPR - PATH - PATH_SEGMENT - NAME_REF - IDENT "foo" - ARG_LIST - L_PAREN "(" - R_PAREN ")" + CALL_EXPR + PATH_EXPR + PATH + PATH_SEGMENT + NAME_REF + IDENT "foo" + ARG_LIST + L_PAREN "(" + R_PAREN ")" WHITESPACE " " BLOCK_EXPR STMT_LIST @@ -187,16 +184,15 @@ SOURCE_FILE IF_EXPR IF_KW "if" WHITESPACE " " - CONDITION - CALL_EXPR - PATH_EXPR - PATH - PATH_SEGMENT - NAME_REF - IDENT "bar" - ARG_LIST - L_PAREN "(" - R_PAREN ")" + CALL_EXPR + PATH_EXPR + PATH + PATH_SEGMENT + NAME_REF + IDENT "bar" + ARG_LIST + L_PAREN "(" + R_PAREN ")" WHITESPACE " " BLOCK_EXPR STMT_LIST diff --git a/crates/parser/test_data/parser/ok/0035_weird_exprs.txt b/crates/parser/test_data/parser/ok/0035_weird_exprs.txt index 5f62748c47..4ec703e517 100644 --- a/crates/parser/test_data/parser/ok/0035_weird_exprs.txt +++ b/crates/parser/test_data/parser/ok/0035_weird_exprs.txt @@ -280,21 +280,20 @@ SOURCE_FILE WHILE_EXPR WHILE_KW "while" WHITESPACE " " - CONDITION - PREFIX_EXPR - BANG "!" - METHOD_CALL_EXPR - PATH_EXPR - PATH - PATH_SEGMENT - NAME_REF - IDENT "x" - DOT "." - NAME_REF - IDENT "get" - ARG_LIST - L_PAREN "(" - R_PAREN ")" + PREFIX_EXPR + BANG "!" + METHOD_CALL_EXPR + PATH_EXPR + PATH + PATH_SEGMENT + NAME_REF + IDENT "x" + DOT "." + NAME_REF + IDENT "get" + ARG_LIST + L_PAREN "(" + R_PAREN ")" WHITESPACE " " BLOCK_EXPR STMT_LIST @@ -443,12 +442,11 @@ SOURCE_FILE WHILE_EXPR WHILE_KW "while" WHITESPACE " " - CONDITION - PAREN_EXPR - L_PAREN "(" - RETURN_EXPR - RETURN_KW "return" - R_PAREN ")" + PAREN_EXPR + L_PAREN "(" + RETURN_EXPR + RETURN_KW "return" + R_PAREN ")" WHITESPACE " " BLOCK_EXPR STMT_LIST @@ -457,12 +455,11 @@ SOURCE_FILE IF_EXPR IF_KW "if" WHITESPACE " " - CONDITION - PAREN_EXPR - L_PAREN "(" - RETURN_EXPR - RETURN_KW "return" - R_PAREN ")" + PAREN_EXPR + L_PAREN "(" + RETURN_EXPR + RETURN_KW "return" + R_PAREN ")" WHITESPACE " " BLOCK_EXPR STMT_LIST @@ -495,12 +492,11 @@ SOURCE_FILE IF_EXPR IF_KW "if" WHITESPACE " " - CONDITION - PAREN_EXPR - L_PAREN "(" - RETURN_EXPR - RETURN_KW "return" - R_PAREN ")" + PAREN_EXPR + L_PAREN "(" + RETURN_EXPR + RETURN_KW "return" + R_PAREN ")" WHITESPACE " " BLOCK_EXPR STMT_LIST @@ -549,12 +545,11 @@ SOURCE_FILE IF_EXPR IF_KW "if" WHITESPACE " " - CONDITION - PAREN_EXPR - L_PAREN "(" - RETURN_EXPR - RETURN_KW "return" - R_PAREN ")" + PAREN_EXPR + L_PAREN "(" + RETURN_EXPR + RETURN_KW "return" + R_PAREN ")" WHITESPACE " " BLOCK_EXPR STMT_LIST @@ -572,12 +567,11 @@ SOURCE_FILE IF_EXPR IF_KW "if" WHITESPACE " " - CONDITION - PAREN_EXPR - L_PAREN "(" - RETURN_EXPR - RETURN_KW "return" - R_PAREN ")" + PAREN_EXPR + L_PAREN "(" + RETURN_EXPR + RETURN_KW "return" + R_PAREN ")" WHITESPACE " " BLOCK_EXPR STMT_LIST @@ -1037,9 +1031,8 @@ SOURCE_FILE IF_EXPR IF_KW "if" WHITESPACE " " - CONDITION - BREAK_EXPR - BREAK_KW "break" + BREAK_EXPR + BREAK_KW "break" WHITESPACE " " BLOCK_EXPR STMT_LIST @@ -1089,18 +1082,17 @@ SOURCE_FILE IF_EXPR IF_KW "if" WHITESPACE " " - CONDITION - BIN_EXPR - PATH_EXPR - PATH - PATH_SEGMENT - NAME_REF - IDENT "i" - WHITESPACE " " - EQ2 "==" - WHITESPACE " " - LITERAL - INT_NUMBER "1" + BIN_EXPR + PATH_EXPR + PATH + PATH_SEGMENT + NAME_REF + IDENT "i" + WHITESPACE " " + EQ2 "==" + WHITESPACE " " + LITERAL + INT_NUMBER "1" WHITESPACE " " BLOCK_EXPR STMT_LIST @@ -1344,18 +1336,17 @@ SOURCE_FILE IF_EXPR IF_KW "if" WHITESPACE " " - CONDITION - BIN_EXPR - PATH_EXPR - PATH - PATH_SEGMENT - NAME_REF - IDENT "u8" - WHITESPACE " " - NEQ "!=" - WHITESPACE " " - LITERAL - INT_NUMBER "0u8" + BIN_EXPR + PATH_EXPR + PATH + PATH_SEGMENT + NAME_REF + IDENT "u8" + WHITESPACE " " + NEQ "!=" + WHITESPACE " " + LITERAL + INT_NUMBER "0u8" WHITESPACE " " BLOCK_EXPR STMT_LIST diff --git a/crates/parser/test_data/parser/ok/0047_minus_in_inner_pattern.txt b/crates/parser/test_data/parser/ok/0047_minus_in_inner_pattern.txt index ac23e7d1d9..aecc71d482 100644 --- a/crates/parser/test_data/parser/ok/0047_minus_in_inner_pattern.txt +++ b/crates/parser/test_data/parser/ok/0047_minus_in_inner_pattern.txt @@ -219,7 +219,7 @@ SOURCE_FILE IF_EXPR IF_KW "if" WHITESPACE " " - CONDITION + LET_EXPR LET_KW "let" WHITESPACE " " TUPLE_STRUCT_PAT diff --git a/crates/parser/test_data/parser/ok/0056_neq_in_type.txt b/crates/parser/test_data/parser/ok/0056_neq_in_type.txt index 2d78eaffc5..55ce31275f 100644 --- a/crates/parser/test_data/parser/ok/0056_neq_in_type.txt +++ b/crates/parser/test_data/parser/ok/0056_neq_in_type.txt @@ -15,47 +15,46 @@ SOURCE_FILE IF_EXPR IF_KW "if" WHITESPACE " " - CONDITION - BIN_EXPR - CAST_EXPR - METHOD_CALL_EXPR - LITERAL - FLOAT_NUMBER "1.0f32" - DOT "." - NAME_REF - IDENT "floor" - ARG_LIST - L_PAREN "(" - R_PAREN ")" - WHITESPACE " " - AS_KW "as" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - IDENT "i64" + BIN_EXPR + CAST_EXPR + METHOD_CALL_EXPR + LITERAL + FLOAT_NUMBER "1.0f32" + DOT "." + NAME_REF + IDENT "floor" + ARG_LIST + L_PAREN "(" + R_PAREN ")" WHITESPACE " " - NEQ "!=" + AS_KW "as" WHITESPACE " " - CAST_EXPR - METHOD_CALL_EXPR - LITERAL - FLOAT_NUMBER "1.0f32" - DOT "." - NAME_REF - IDENT "floor" - ARG_LIST - L_PAREN "(" - R_PAREN ")" - WHITESPACE " " - AS_KW "as" - WHITESPACE " " - PATH_TYPE - PATH - PATH_SEGMENT - NAME_REF - IDENT "i64" + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + IDENT "i64" + WHITESPACE " " + NEQ "!=" + WHITESPACE " " + CAST_EXPR + METHOD_CALL_EXPR + LITERAL + FLOAT_NUMBER "1.0f32" + DOT "." + NAME_REF + IDENT "floor" + ARG_LIST + L_PAREN "(" + R_PAREN ")" + WHITESPACE " " + AS_KW "as" + WHITESPACE " " + PATH_TYPE + PATH + PATH_SEGMENT + NAME_REF + IDENT "i64" WHITESPACE " " BLOCK_EXPR STMT_LIST diff --git a/crates/parser/test_data/parser/ok/0059_loops_in_parens.txt b/crates/parser/test_data/parser/ok/0059_loops_in_parens.txt index 1eeb6c957f..79bc7f971d 100644 --- a/crates/parser/test_data/parser/ok/0059_loops_in_parens.txt +++ b/crates/parser/test_data/parser/ok/0059_loops_in_parens.txt @@ -86,9 +86,8 @@ SOURCE_FILE WHILE_EXPR WHILE_KW "while" WHITESPACE " " - CONDITION - LITERAL - TRUE_KW "true" + LITERAL + TRUE_KW "true" WHITESPACE " " BLOCK_EXPR STMT_LIST diff --git a/crates/syntax/test_data/parser/validation/0031_block_inner_attrs.rast b/crates/syntax/test_data/parser/validation/0031_block_inner_attrs.rast index d4963979c8..50057a02d8 100644 --- a/crates/syntax/test_data/parser/validation/0031_block_inner_attrs.rast +++ b/crates/syntax/test_data/parser/validation/0031_block_inner_attrs.rast @@ -49,9 +49,8 @@ [email protected] [email protected] "if" - [email protected] "true" + [email protected] "true" @@ -94,9 +93,8 @@ [email protected] [email protected] "while" - [email protected] "true" + [email protected] "true" |