From a1c187eef3ba08076aedb5154929f7eda8d1b424 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Wed, 12 Aug 2020 18:26:51 +0200 Subject: Rename ra_syntax -> syntax --- .../err/0000_struct_field_missing_comma.rast | 34 ++ .../parser/err/0000_struct_field_missing_comma.rs | 4 + .../parser/err/0001_item_recovery_in_file.rast | 18 + .../parser/err/0001_item_recovery_in_file.rs | 3 + .../parser/err/0002_duplicate_shebang.rast | 39 +++ .../test_data/parser/err/0002_duplicate_shebang.rs | 2 + .../test_data/parser/err/0003_C++_semicolon.rast | 39 +++ .../test_data/parser/err/0003_C++_semicolon.rs | 4 + .../parser/err/0004_use_path_bad_segment.rast | 15 + .../parser/err/0004_use_path_bad_segment.rs | 1 + .../parser/err/0005_attribute_recover.rast | 59 ++++ .../test_data/parser/err/0005_attribute_recover.rs | 8 + .../parser/err/0006_named_field_recovery.rast | 74 ++++ .../parser/err/0006_named_field_recovery.rs | 7 + .../parser/err/0007_stray_curly_in_file.rast | 32 ++ .../parser/err/0007_stray_curly_in_file.rs | 9 + .../parser/err/0008_item_block_recovery.rast | 77 ++++ .../parser/err/0008_item_block_recovery.rs | 13 + .../err/0009_broken_struct_type_parameter.rast | 58 +++ .../err/0009_broken_struct_type_parameter.rs | 5 + .../parser/err/0010_unsafe_lambda_block.rast | 44 +++ .../parser/err/0010_unsafe_lambda_block.rs | 3 + .../test_data/parser/err/0011_extern_struct.rast | 13 + .../test_data/parser/err/0011_extern_struct.rs | 1 + .../test_data/parser/err/0012_broken_lambda.rast | 387 +++++++++++++++++++++ .../test_data/parser/err/0013_invalid_type.rast | 89 +++++ .../test_data/parser/err/0013_invalid_type.rs | 7 + .../test_data/parser/err/0014_where_no_bounds.rast | 31 ++ .../test_data/parser/err/0014_where_no_bounds.rs | 1 + .../test_data/parser/err/0015_curly_in_params.rast | 24 ++ .../test_data/parser/err/0015_curly_in_params.rs | 2 + .../test_data/parser/err/0016_missing_semi.rast | 43 +++ .../test_data/parser/err/0016_missing_semi.rs | 6 + .../parser/err/0017_incomplete_binexpr.rast | 46 +++ .../parser/err/0017_incomplete_binexpr.rs | 4 + .../test_data/parser/err/0018_incomplete_fn.rast | 131 +++++++ .../test_data/parser/err/0018_incomplete_fn.rs | 8 + .../test_data/parser/err/0019_let_recover.rast | 103 ++++++ .../test_data/parser/err/0019_let_recover.rs | 12 + .../test_data/parser/err/0020_fn_recover.rast | 20 ++ .../syntax/test_data/parser/err/0020_fn_recover.rs | 3 + .../parser/err/0021_incomplete_param.rast | 34 ++ .../test_data/parser/err/0021_incomplete_param.rs | 2 + .../test_data/parser/err/0022_bad_exprs.rast | 180 ++++++++++ .../syntax/test_data/parser/err/0022_bad_exprs.rs | 3 + .../parser/err/0023_mismatched_paren.rast | 43 +++ .../test_data/parser/err/0023_mismatched_paren.rs | 5 + .../parser/err/0024_many_type_parens.rast | 319 +++++++++++++++++ .../test_data/parser/err/0024_many_type_parens.rs | 7 + crates/syntax/test_data/parser/err/0025_nope.rast | 202 +++++++++++ crates/syntax/test_data/parser/err/0025_nope.rs | 31 ++ .../test_data/parser/err/0026_imp_recovery.rast | 49 +++ .../test_data/parser/err/0026_imp_recovery.rs | 2 + .../parser/err/0027_incomplere_where_for.rast | 27 ++ .../parser/err/0027_incomplere_where_for.rs | 3 + .../parser/err/0029_field_completion.rast | 35 ++ .../test_data/parser/err/0029_field_completion.rs | 3 + .../parser/err/0031_block_inner_attrs.rast | 121 +++++++ .../test_data/parser/err/0031_block_inner_attrs.rs | 15 + .../parser/err/0032_match_arms_inner_attrs.rast | 203 +++++++++++ .../parser/err/0032_match_arms_inner_attrs.rs | 20 ++ .../parser/err/0033_match_arms_outer_attrs.rast | 66 ++++ .../parser/err/0033_match_arms_outer_attrs.rs | 7 + .../test_data/parser/err/0034_bad_box_pattern.rast | 95 +++++ .../test_data/parser/err/0034_bad_box_pattern.rs | 6 + .../test_data/parser/err/0035_use_recover.rast | 53 +++ .../test_data/parser/err/0035_use_recover.rs | 5 + .../test_data/parser/err/0036_partial_use.rast | 51 +++ .../test_data/parser/err/0036_partial_use.rs | 2 + .../parser/err/0037_visibility_in_traits.rast | 97 ++++++ .../parser/err/0037_visibility_in_traits.rs | 6 + .../parser/err/0038_endless_inclusive_range.rast | 29 ++ .../parser/err/0038_endless_inclusive_range.rs | 4 + .../test_data/parser/err/0039_lambda_recovery.rast | 82 +++++ .../test_data/parser/err/0039_lambda_recovery.rs | 5 + .../parser/err/0040_illegal_crate_kw_location.rast | 91 +++++ .../parser/err/0040_illegal_crate_kw_location.rs | 4 + .../err/0041_illegal_super_keyword_location.rast | 70 ++++ .../err/0041_illegal_super_keyword_location.rs | 4 + .../err/0042_illegal_self_keyword_location.rast | 27 ++ .../err/0042_illegal_self_keyword_location.rs | 2 + .../test_data/parser/err/0043_weird_blocks.rast | 71 ++++ .../test_data/parser/err/0043_weird_blocks.rs | 6 + .../parser/err/0044_unexpected_for_type.rast | 240 +++++++++++++ .../parser/err/0044_unexpected_for_type.rs | 9 + .../test_data/parser/err/0045_item_modifiers.rast | 45 +++ .../test_data/parser/err/0045_item_modifiers.rs | 2 + 87 files changed, 3862 insertions(+) create mode 100644 crates/syntax/test_data/parser/err/0000_struct_field_missing_comma.rast create mode 100644 crates/syntax/test_data/parser/err/0000_struct_field_missing_comma.rs create mode 100644 crates/syntax/test_data/parser/err/0001_item_recovery_in_file.rast create mode 100644 crates/syntax/test_data/parser/err/0001_item_recovery_in_file.rs create mode 100644 crates/syntax/test_data/parser/err/0002_duplicate_shebang.rast create mode 100644 crates/syntax/test_data/parser/err/0002_duplicate_shebang.rs create mode 100644 crates/syntax/test_data/parser/err/0003_C++_semicolon.rast create mode 100644 crates/syntax/test_data/parser/err/0003_C++_semicolon.rs create mode 100644 crates/syntax/test_data/parser/err/0004_use_path_bad_segment.rast create mode 100644 crates/syntax/test_data/parser/err/0004_use_path_bad_segment.rs create mode 100644 crates/syntax/test_data/parser/err/0005_attribute_recover.rast create mode 100644 crates/syntax/test_data/parser/err/0005_attribute_recover.rs create mode 100644 crates/syntax/test_data/parser/err/0006_named_field_recovery.rast create mode 100644 crates/syntax/test_data/parser/err/0006_named_field_recovery.rs create mode 100644 crates/syntax/test_data/parser/err/0007_stray_curly_in_file.rast create mode 100644 crates/syntax/test_data/parser/err/0007_stray_curly_in_file.rs create mode 100644 crates/syntax/test_data/parser/err/0008_item_block_recovery.rast create mode 100644 crates/syntax/test_data/parser/err/0008_item_block_recovery.rs create mode 100644 crates/syntax/test_data/parser/err/0009_broken_struct_type_parameter.rast create mode 100644 crates/syntax/test_data/parser/err/0009_broken_struct_type_parameter.rs create mode 100644 crates/syntax/test_data/parser/err/0010_unsafe_lambda_block.rast create mode 100644 crates/syntax/test_data/parser/err/0010_unsafe_lambda_block.rs create mode 100644 crates/syntax/test_data/parser/err/0011_extern_struct.rast create mode 100644 crates/syntax/test_data/parser/err/0011_extern_struct.rs create mode 100644 crates/syntax/test_data/parser/err/0012_broken_lambda.rast create mode 100644 crates/syntax/test_data/parser/err/0013_invalid_type.rast create mode 100644 crates/syntax/test_data/parser/err/0013_invalid_type.rs create mode 100644 crates/syntax/test_data/parser/err/0014_where_no_bounds.rast create mode 100644 crates/syntax/test_data/parser/err/0014_where_no_bounds.rs create mode 100644 crates/syntax/test_data/parser/err/0015_curly_in_params.rast create mode 100644 crates/syntax/test_data/parser/err/0015_curly_in_params.rs create mode 100644 crates/syntax/test_data/parser/err/0016_missing_semi.rast create mode 100644 crates/syntax/test_data/parser/err/0016_missing_semi.rs create mode 100644 crates/syntax/test_data/parser/err/0017_incomplete_binexpr.rast create mode 100644 crates/syntax/test_data/parser/err/0017_incomplete_binexpr.rs create mode 100644 crates/syntax/test_data/parser/err/0018_incomplete_fn.rast create mode 100644 crates/syntax/test_data/parser/err/0018_incomplete_fn.rs create mode 100644 crates/syntax/test_data/parser/err/0019_let_recover.rast create mode 100644 crates/syntax/test_data/parser/err/0019_let_recover.rs create mode 100644 crates/syntax/test_data/parser/err/0020_fn_recover.rast create mode 100644 crates/syntax/test_data/parser/err/0020_fn_recover.rs create mode 100644 crates/syntax/test_data/parser/err/0021_incomplete_param.rast create mode 100644 crates/syntax/test_data/parser/err/0021_incomplete_param.rs create mode 100644 crates/syntax/test_data/parser/err/0022_bad_exprs.rast create mode 100644 crates/syntax/test_data/parser/err/0022_bad_exprs.rs create mode 100644 crates/syntax/test_data/parser/err/0023_mismatched_paren.rast create mode 100644 crates/syntax/test_data/parser/err/0023_mismatched_paren.rs create mode 100644 crates/syntax/test_data/parser/err/0024_many_type_parens.rast create mode 100644 crates/syntax/test_data/parser/err/0024_many_type_parens.rs create mode 100644 crates/syntax/test_data/parser/err/0025_nope.rast create mode 100644 crates/syntax/test_data/parser/err/0025_nope.rs create mode 100644 crates/syntax/test_data/parser/err/0026_imp_recovery.rast create mode 100644 crates/syntax/test_data/parser/err/0026_imp_recovery.rs create mode 100644 crates/syntax/test_data/parser/err/0027_incomplere_where_for.rast create mode 100644 crates/syntax/test_data/parser/err/0027_incomplere_where_for.rs create mode 100644 crates/syntax/test_data/parser/err/0029_field_completion.rast create mode 100644 crates/syntax/test_data/parser/err/0029_field_completion.rs create mode 100644 crates/syntax/test_data/parser/err/0031_block_inner_attrs.rast create mode 100644 crates/syntax/test_data/parser/err/0031_block_inner_attrs.rs create mode 100644 crates/syntax/test_data/parser/err/0032_match_arms_inner_attrs.rast create mode 100644 crates/syntax/test_data/parser/err/0032_match_arms_inner_attrs.rs create mode 100644 crates/syntax/test_data/parser/err/0033_match_arms_outer_attrs.rast create mode 100644 crates/syntax/test_data/parser/err/0033_match_arms_outer_attrs.rs create mode 100644 crates/syntax/test_data/parser/err/0034_bad_box_pattern.rast create mode 100644 crates/syntax/test_data/parser/err/0034_bad_box_pattern.rs create mode 100644 crates/syntax/test_data/parser/err/0035_use_recover.rast create mode 100644 crates/syntax/test_data/parser/err/0035_use_recover.rs create mode 100644 crates/syntax/test_data/parser/err/0036_partial_use.rast create mode 100644 crates/syntax/test_data/parser/err/0036_partial_use.rs create mode 100644 crates/syntax/test_data/parser/err/0037_visibility_in_traits.rast create mode 100644 crates/syntax/test_data/parser/err/0037_visibility_in_traits.rs create mode 100644 crates/syntax/test_data/parser/err/0038_endless_inclusive_range.rast create mode 100644 crates/syntax/test_data/parser/err/0038_endless_inclusive_range.rs create mode 100644 crates/syntax/test_data/parser/err/0039_lambda_recovery.rast create mode 100644 crates/syntax/test_data/parser/err/0039_lambda_recovery.rs create mode 100644 crates/syntax/test_data/parser/err/0040_illegal_crate_kw_location.rast create mode 100644 crates/syntax/test_data/parser/err/0040_illegal_crate_kw_location.rs create mode 100644 crates/syntax/test_data/parser/err/0041_illegal_super_keyword_location.rast create mode 100644 crates/syntax/test_data/parser/err/0041_illegal_super_keyword_location.rs create mode 100644 crates/syntax/test_data/parser/err/0042_illegal_self_keyword_location.rast create mode 100644 crates/syntax/test_data/parser/err/0042_illegal_self_keyword_location.rs create mode 100644 crates/syntax/test_data/parser/err/0043_weird_blocks.rast create mode 100644 crates/syntax/test_data/parser/err/0043_weird_blocks.rs create mode 100644 crates/syntax/test_data/parser/err/0044_unexpected_for_type.rast create mode 100644 crates/syntax/test_data/parser/err/0044_unexpected_for_type.rs create mode 100644 crates/syntax/test_data/parser/err/0045_item_modifiers.rast create mode 100644 crates/syntax/test_data/parser/err/0045_item_modifiers.rs (limited to 'crates/syntax/test_data/parser/err') diff --git a/crates/syntax/test_data/parser/err/0000_struct_field_missing_comma.rast b/crates/syntax/test_data/parser/err/0000_struct_field_missing_comma.rast new file mode 100644 index 000000000..bbbf496c8 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0000_struct_field_missing_comma.rast @@ -0,0 +1,34 @@ +SOURCE_FILE@0..34 + STRUCT@0..34 + STRUCT_KW@0..6 "struct" + WHITESPACE@6..7 " " + NAME@7..8 + IDENT@7..8 "S" + WHITESPACE@8..9 " " + RECORD_FIELD_LIST@9..34 + L_CURLY@9..10 "{" + WHITESPACE@10..15 "\n " + RECORD_FIELD@15..21 + NAME@15..16 + IDENT@15..16 "a" + COLON@16..17 ":" + WHITESPACE@17..18 " " + PATH_TYPE@18..21 + PATH@18..21 + PATH_SEGMENT@18..21 + NAME_REF@18..21 + IDENT@18..21 "u32" + WHITESPACE@21..26 "\n " + RECORD_FIELD@26..32 + NAME@26..27 + IDENT@26..27 "b" + COLON@27..28 ":" + WHITESPACE@28..29 " " + PATH_TYPE@29..32 + PATH@29..32 + PATH_SEGMENT@29..32 + NAME_REF@29..32 + IDENT@29..32 "u32" + WHITESPACE@32..33 "\n" + R_CURLY@33..34 "}" +error 21..21: expected COMMA diff --git a/crates/syntax/test_data/parser/err/0000_struct_field_missing_comma.rs b/crates/syntax/test_data/parser/err/0000_struct_field_missing_comma.rs new file mode 100644 index 000000000..fe5030d89 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0000_struct_field_missing_comma.rs @@ -0,0 +1,4 @@ +struct S { + a: u32 + b: u32 +} \ No newline at end of file diff --git a/crates/syntax/test_data/parser/err/0001_item_recovery_in_file.rast b/crates/syntax/test_data/parser/err/0001_item_recovery_in_file.rast new file mode 100644 index 000000000..6dc73bfdb --- /dev/null +++ b/crates/syntax/test_data/parser/err/0001_item_recovery_in_file.rast @@ -0,0 +1,18 @@ +SOURCE_FILE@0..21 + ERROR@0..2 + IF_KW@0..2 "if" + WHITESPACE@2..3 " " + ERROR@3..8 + MATCH_KW@3..8 "match" + WHITESPACE@8..10 "\n\n" + STRUCT@10..21 + STRUCT_KW@10..16 "struct" + WHITESPACE@16..17 " " + NAME@17..18 + IDENT@17..18 "S" + WHITESPACE@18..19 " " + RECORD_FIELD_LIST@19..21 + L_CURLY@19..20 "{" + R_CURLY@20..21 "}" +error 0..0: expected an item +error 3..3: expected an item diff --git a/crates/syntax/test_data/parser/err/0001_item_recovery_in_file.rs b/crates/syntax/test_data/parser/err/0001_item_recovery_in_file.rs new file mode 100644 index 000000000..98f23de1f --- /dev/null +++ b/crates/syntax/test_data/parser/err/0001_item_recovery_in_file.rs @@ -0,0 +1,3 @@ +if match + +struct S {} \ No newline at end of file diff --git a/crates/syntax/test_data/parser/err/0002_duplicate_shebang.rast b/crates/syntax/test_data/parser/err/0002_duplicate_shebang.rast new file mode 100644 index 000000000..4cfd1bce4 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0002_duplicate_shebang.rast @@ -0,0 +1,39 @@ +SOURCE_FILE@0..42 + SHEBANG@0..20 "#!/use/bin/env rusti" + WHITESPACE@20..21 "\n" + ATTR@21..23 + POUND@21..22 "#" + BANG@22..23 "!" + ERROR@23..24 + SLASH@23..24 "/" + USE@24..28 + USE_KW@24..27 "use" + ERROR@27..28 + SLASH@27..28 "/" + MACRO_CALL@28..31 + PATH@28..31 + PATH_SEGMENT@28..31 + NAME_REF@28..31 + IDENT@28..31 "bin" + ERROR@31..32 + SLASH@31..32 "/" + MACRO_CALL@32..41 + PATH@32..35 + PATH_SEGMENT@32..35 + NAME_REF@32..35 + IDENT@32..35 "env" + WHITESPACE@35..36 " " + NAME@36..41 + IDENT@36..41 "rusti" + WHITESPACE@41..42 "\n" +error 23..23: expected `[` +error 23..23: expected an item +error 27..27: expected one of `*`, `::`, `{`, `self`, `super` or an identifier +error 28..28: expected SEMICOLON +error 31..31: expected BANG +error 31..31: expected `{`, `[`, `(` +error 31..31: expected SEMICOLON +error 31..31: expected an item +error 35..35: expected BANG +error 41..41: expected `{`, `[`, `(` +error 41..41: expected SEMICOLON diff --git a/crates/syntax/test_data/parser/err/0002_duplicate_shebang.rs b/crates/syntax/test_data/parser/err/0002_duplicate_shebang.rs new file mode 100644 index 000000000..48a3a3980 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0002_duplicate_shebang.rs @@ -0,0 +1,2 @@ +#!/use/bin/env rusti +#!/use/bin/env rusti diff --git a/crates/syntax/test_data/parser/err/0003_C++_semicolon.rast b/crates/syntax/test_data/parser/err/0003_C++_semicolon.rast new file mode 100644 index 000000000..7763fad84 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0003_C++_semicolon.rast @@ -0,0 +1,39 @@ +SOURCE_FILE@0..40 + STRUCT@0..39 + STRUCT_KW@0..6 "struct" + WHITESPACE@6..7 " " + NAME@7..8 + IDENT@7..8 "S" + WHITESPACE@8..9 " " + RECORD_FIELD_LIST@9..39 + L_CURLY@9..10 "{" + WHITESPACE@10..15 "\n " + RECORD_FIELD@15..21 + NAME@15..16 + IDENT@15..16 "a" + COLON@16..17 ":" + WHITESPACE@17..18 " " + PATH_TYPE@18..21 + PATH@18..21 + PATH_SEGMENT@18..21 + NAME_REF@18..21 + IDENT@18..21 "i32" + COMMA@21..22 "," + WHITESPACE@22..27 "\n " + RECORD_FIELD@27..36 + NAME@27..28 + IDENT@27..28 "b" + COLON@28..29 ":" + WHITESPACE@29..30 " " + PATH_TYPE@30..36 + PATH@30..36 + PATH_SEGMENT@30..36 + NAME_REF@30..36 + IDENT@30..36 "String" + COMMA@36..37 "," + WHITESPACE@37..38 "\n" + R_CURLY@38..39 "}" + ERROR@39..40 + SEMICOLON@39..40 ";" +error 39..39: expected item, found `;` +consider removing this semicolon diff --git a/crates/syntax/test_data/parser/err/0003_C++_semicolon.rs b/crates/syntax/test_data/parser/err/0003_C++_semicolon.rs new file mode 100644 index 000000000..009312270 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0003_C++_semicolon.rs @@ -0,0 +1,4 @@ +struct S { + a: i32, + b: String, +}; \ No newline at end of file diff --git a/crates/syntax/test_data/parser/err/0004_use_path_bad_segment.rast b/crates/syntax/test_data/parser/err/0004_use_path_bad_segment.rast new file mode 100644 index 000000000..9a0f4665e --- /dev/null +++ b/crates/syntax/test_data/parser/err/0004_use_path_bad_segment.rast @@ -0,0 +1,15 @@ +SOURCE_FILE@0..12 + USE@0..12 + USE_KW@0..3 "use" + WHITESPACE@3..4 " " + USE_TREE@4..11 + PATH@4..11 + PATH@4..7 + PATH_SEGMENT@4..7 + NAME_REF@4..7 + IDENT@4..7 "foo" + COLON2@7..9 "::" + ERROR@9..11 + INT_NUMBER@9..11 "92" + SEMICOLON@11..12 ";" +error 9..9: expected identifier diff --git a/crates/syntax/test_data/parser/err/0004_use_path_bad_segment.rs b/crates/syntax/test_data/parser/err/0004_use_path_bad_segment.rs new file mode 100644 index 000000000..060e65d06 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0004_use_path_bad_segment.rs @@ -0,0 +1 @@ +use foo::92; \ No newline at end of file diff --git a/crates/syntax/test_data/parser/err/0005_attribute_recover.rast b/crates/syntax/test_data/parser/err/0005_attribute_recover.rast new file mode 100644 index 000000000..4845a6563 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0005_attribute_recover.rast @@ -0,0 +1,59 @@ +SOURCE_FILE@0..54 + FN@0..31 + ATTR@0..18 + POUND@0..1 "#" + L_BRACK@1..2 "[" + PATH@2..5 + PATH_SEGMENT@2..5 + NAME_REF@2..5 + IDENT@2..5 "foo" + TOKEN_TREE@5..17 + L_PAREN@5..6 "(" + IDENT@6..9 "foo" + COMMA@9..10 "," + WHITESPACE@10..11 " " + PLUS@11..12 "+" + COMMA@12..13 "," + WHITESPACE@13..14 " " + INT_NUMBER@14..16 "92" + R_PAREN@16..17 ")" + R_BRACK@17..18 "]" + WHITESPACE@18..19 "\n" + FN_KW@19..21 "fn" + WHITESPACE@21..22 " " + NAME@22..25 + IDENT@22..25 "foo" + PARAM_LIST@25..27 + L_PAREN@25..26 "(" + R_PAREN@26..27 ")" + WHITESPACE@27..28 " " + BLOCK_EXPR@28..31 + L_CURLY@28..29 "{" + WHITESPACE@29..30 "\n" + R_CURLY@30..31 "}" + WHITESPACE@31..34 "\n\n\n" + ATTR@34..53 + POUND@34..35 "#" + L_BRACK@35..36 "[" + PATH@36..39 + PATH_SEGMENT@36..39 + NAME_REF@36..39 + IDENT@36..39 "foo" + TOKEN_TREE@39..53 + L_PAREN@39..40 "(" + WHITESPACE@40..41 "\n" + FN_KW@41..43 "fn" + WHITESPACE@43..44 " " + IDENT@44..47 "foo" + TOKEN_TREE@47..49 + L_PAREN@47..48 "(" + R_PAREN@48..49 ")" + WHITESPACE@49..50 " " + TOKEN_TREE@50..53 + L_CURLY@50..51 "{" + WHITESPACE@51..52 "\n" + R_CURLY@52..53 "}" + WHITESPACE@53..54 "\n" +error 53..53: expected R_PAREN +error 53..53: expected `]` +error 53..53: expected an item diff --git a/crates/syntax/test_data/parser/err/0005_attribute_recover.rs b/crates/syntax/test_data/parser/err/0005_attribute_recover.rs new file mode 100644 index 000000000..de7f81628 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0005_attribute_recover.rs @@ -0,0 +1,8 @@ +#[foo(foo, +, 92)] +fn foo() { +} + + +#[foo( +fn foo() { +} diff --git a/crates/syntax/test_data/parser/err/0006_named_field_recovery.rast b/crates/syntax/test_data/parser/err/0006_named_field_recovery.rast new file mode 100644 index 000000000..5f85c3943 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0006_named_field_recovery.rast @@ -0,0 +1,74 @@ +SOURCE_FILE@0..74 + STRUCT@0..73 + STRUCT_KW@0..6 "struct" + WHITESPACE@6..7 " " + NAME@7..8 + IDENT@7..8 "S" + WHITESPACE@8..9 " " + RECORD_FIELD_LIST@9..73 + L_CURLY@9..10 "{" + WHITESPACE@10..15 "\n " + RECORD_FIELD@15..21 + NAME@15..16 + IDENT@15..16 "f" + COLON@16..17 ":" + WHITESPACE@17..18 " " + PATH_TYPE@18..21 + PATH@18..21 + PATH_SEGMENT@18..21 + NAME_REF@18..21 + IDENT@18..21 "u32" + COMMA@21..22 "," + WHITESPACE@22..27 "\n " + VISIBILITY@27..30 + PUB_KW@27..30 "pub" + WHITESPACE@30..31 " " + ERROR@31..33 + INT_NUMBER@31..33 "92" + WHITESPACE@33..38 "\n " + ERROR@38..39 + PLUS@38..39 "+" + WHITESPACE@39..40 " " + ERROR@40..41 + MINUS@40..41 "-" + WHITESPACE@41..42 " " + ERROR@42..43 + STAR@42..43 "*" + WHITESPACE@43..48 "\n " + RECORD_FIELD@48..58 + VISIBILITY@48..51 + PUB_KW@48..51 "pub" + WHITESPACE@51..52 " " + NAME@52..53 + IDENT@52..53 "x" + COLON@53..54 ":" + WHITESPACE@54..55 " " + PATH_TYPE@55..58 + PATH@55..58 + PATH_SEGMENT@55..58 + NAME_REF@55..58 + IDENT@55..58 "u32" + COMMA@58..59 "," + WHITESPACE@59..64 "\n " + RECORD_FIELD@64..70 + NAME@64..65 + IDENT@64..65 "z" + COLON@65..66 ":" + WHITESPACE@66..67 " " + PATH_TYPE@67..70 + PATH@67..70 + PATH_SEGMENT@67..70 + NAME_REF@67..70 + IDENT@67..70 "f64" + COMMA@70..71 "," + WHITESPACE@71..72 "\n" + R_CURLY@72..73 "}" + WHITESPACE@73..74 "\n" +error 31..31: expected field declaration +error 33..33: expected COMMA +error 38..38: expected field declaration +error 39..39: expected COMMA +error 40..40: expected field declaration +error 41..41: expected COMMA +error 42..42: expected field declaration +error 43..43: expected COMMA diff --git a/crates/syntax/test_data/parser/err/0006_named_field_recovery.rs b/crates/syntax/test_data/parser/err/0006_named_field_recovery.rs new file mode 100644 index 000000000..8069c111b --- /dev/null +++ b/crates/syntax/test_data/parser/err/0006_named_field_recovery.rs @@ -0,0 +1,7 @@ +struct S { + f: u32, + pub 92 + + - * + pub x: u32, + z: f64, +} diff --git a/crates/syntax/test_data/parser/err/0007_stray_curly_in_file.rast b/crates/syntax/test_data/parser/err/0007_stray_curly_in_file.rast new file mode 100644 index 000000000..560bfd751 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0007_stray_curly_in_file.rast @@ -0,0 +1,32 @@ +SOURCE_FILE@0..31 + ERROR@0..1 + R_CURLY@0..1 "}" + WHITESPACE@1..3 "\n\n" + STRUCT@3..12 + STRUCT_KW@3..9 "struct" + WHITESPACE@9..10 " " + NAME@10..11 + IDENT@10..11 "S" + SEMICOLON@11..12 ";" + WHITESPACE@12..14 "\n\n" + ERROR@14..15 + R_CURLY@14..15 "}" + WHITESPACE@15..17 "\n\n" + FN@17..27 + FN_KW@17..19 "fn" + WHITESPACE@19..20 " " + NAME@20..23 + IDENT@20..23 "foo" + PARAM_LIST@23..25 + L_PAREN@23..24 "(" + R_PAREN@24..25 ")" + BLOCK_EXPR@25..27 + L_CURLY@25..26 "{" + R_CURLY@26..27 "}" + WHITESPACE@27..29 "\n\n" + ERROR@29..30 + R_CURLY@29..30 "}" + WHITESPACE@30..31 "\n" +error 0..0: unmatched `}` +error 14..14: unmatched `}` +error 29..29: unmatched `}` diff --git a/crates/syntax/test_data/parser/err/0007_stray_curly_in_file.rs b/crates/syntax/test_data/parser/err/0007_stray_curly_in_file.rs new file mode 100644 index 000000000..dc869fb78 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0007_stray_curly_in_file.rs @@ -0,0 +1,9 @@ +} + +struct S; + +} + +fn foo(){} + +} diff --git a/crates/syntax/test_data/parser/err/0008_item_block_recovery.rast b/crates/syntax/test_data/parser/err/0008_item_block_recovery.rast new file mode 100644 index 000000000..1e9637c26 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0008_item_block_recovery.rast @@ -0,0 +1,77 @@ +SOURCE_FILE@0..95 + FN@0..12 + FN_KW@0..2 "fn" + WHITESPACE@2..3 " " + NAME@3..6 + IDENT@3..6 "foo" + PARAM_LIST@6..8 + L_PAREN@6..7 "(" + R_PAREN@7..8 ")" + WHITESPACE@8..9 " " + BLOCK_EXPR@9..12 + L_CURLY@9..10 "{" + WHITESPACE@10..11 "\n" + R_CURLY@11..12 "}" + WHITESPACE@12..14 "\n\n" + MACRO_CALL@14..19 + PATH@14..17 + PATH_SEGMENT@14..17 + NAME_REF@14..17 + IDENT@14..17 "bar" + TOKEN_TREE@17..19 + L_PAREN@17..18 "(" + R_PAREN@18..19 ")" + WHITESPACE@19..20 " " + ERROR@20..80 + L_CURLY@20..21 "{" + WHITESPACE@21..26 "\n " + IF_EXPR@26..78 + IF_KW@26..28 "if" + WHITESPACE@28..29 " " + CONDITION@29..33 + LITERAL@29..33 + TRUE_KW@29..33 "true" + WHITESPACE@33..34 " " + BLOCK_EXPR@34..51 + L_CURLY@34..35 "{" + WHITESPACE@35..44 "\n " + LITERAL@44..45 + INT_NUMBER@44..45 "1" + WHITESPACE@45..50 "\n " + R_CURLY@50..51 "}" + WHITESPACE@51..52 " " + ELSE_KW@52..56 "else" + WHITESPACE@56..57 " " + BLOCK_EXPR@57..78 + L_CURLY@57..58 "{" + WHITESPACE@58..67 "\n " + BIN_EXPR@67..72 + LITERAL@67..68 + INT_NUMBER@67..68 "2" + WHITESPACE@68..69 " " + PLUS@69..70 "+" + WHITESPACE@70..71 " " + LITERAL@71..72 + INT_NUMBER@71..72 "3" + WHITESPACE@72..77 "\n " + R_CURLY@77..78 "}" + WHITESPACE@78..79 "\n" + R_CURLY@79..80 "}" + WHITESPACE@80..82 "\n\n" + FN@82..94 + FN_KW@82..84 "fn" + WHITESPACE@84..85 " " + NAME@85..88 + IDENT@85..88 "baz" + PARAM_LIST@88..90 + L_PAREN@88..89 "(" + R_PAREN@89..90 ")" + WHITESPACE@90..91 " " + BLOCK_EXPR@91..94 + L_CURLY@91..92 "{" + WHITESPACE@92..93 "\n" + R_CURLY@93..94 "}" + WHITESPACE@94..95 "\n" +error 17..17: expected BANG +error 19..19: expected SEMICOLON +error 20..20: expected an item diff --git a/crates/syntax/test_data/parser/err/0008_item_block_recovery.rs b/crates/syntax/test_data/parser/err/0008_item_block_recovery.rs new file mode 100644 index 000000000..9fcac19b5 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0008_item_block_recovery.rs @@ -0,0 +1,13 @@ +fn foo() { +} + +bar() { + if true { + 1 + } else { + 2 + 3 + } +} + +fn baz() { +} diff --git a/crates/syntax/test_data/parser/err/0009_broken_struct_type_parameter.rast b/crates/syntax/test_data/parser/err/0009_broken_struct_type_parameter.rast new file mode 100644 index 000000000..dacf71aa1 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0009_broken_struct_type_parameter.rast @@ -0,0 +1,58 @@ +SOURCE_FILE@0..43 + STRUCT@0..11 + STRUCT_KW@0..6 "struct" + WHITESPACE@6..7 " " + NAME@7..8 + IDENT@7..8 "S" + GENERIC_PARAM_LIST@8..11 + L_ANGLE@8..9 "<" + ERROR@9..11 + INT_NUMBER@9..11 "90" + WHITESPACE@11..12 " " + ERROR@12..13 + PLUS@12..13 "+" + WHITESPACE@13..14 " " + ERROR@14..15 + INT_NUMBER@14..15 "2" + ERROR@15..16 + R_ANGLE@15..16 ">" + WHITESPACE@16..17 " " + ERROR@17..31 + L_CURLY@17..18 "{" + WHITESPACE@18..23 "\n " + EXPR_STMT@23..24 + PATH_EXPR@23..24 + PATH@23..24 + PATH_SEGMENT@23..24 + NAME_REF@23..24 + IDENT@23..24 "f" + EXPR_STMT@24..25 + ERROR@24..25 + COLON@24..25 ":" + WHITESPACE@25..26 " " + PATH_EXPR@26..29 + PATH@26..29 + PATH_SEGMENT@26..29 + NAME_REF@26..29 + IDENT@26..29 "u32" + WHITESPACE@29..30 "\n" + R_CURLY@30..31 "}" + WHITESPACE@31..33 "\n\n" + STRUCT@33..42 + STRUCT_KW@33..39 "struct" + WHITESPACE@39..40 " " + NAME@40..41 + IDENT@40..41 "T" + SEMICOLON@41..42 ";" + WHITESPACE@42..43 "\n" +error 9..9: expected type parameter +error 11..11: expected COMMA +error 11..11: expected R_ANGLE +error 11..11: expected `;`, `{`, or `(` +error 12..12: expected an item +error 14..14: expected an item +error 15..15: expected an item +error 17..17: expected an item +error 24..24: expected SEMICOLON +error 24..24: expected expression +error 25..25: expected SEMICOLON diff --git a/crates/syntax/test_data/parser/err/0009_broken_struct_type_parameter.rs b/crates/syntax/test_data/parser/err/0009_broken_struct_type_parameter.rs new file mode 100644 index 000000000..0dd30d0bd --- /dev/null +++ b/crates/syntax/test_data/parser/err/0009_broken_struct_type_parameter.rs @@ -0,0 +1,5 @@ +struct S<90 + 2> { + f: u32 +} + +struct T; diff --git a/crates/syntax/test_data/parser/err/0010_unsafe_lambda_block.rast b/crates/syntax/test_data/parser/err/0010_unsafe_lambda_block.rast new file mode 100644 index 000000000..e0f1d0c27 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0010_unsafe_lambda_block.rast @@ -0,0 +1,44 @@ +SOURCE_FILE@0..42 + FN@0..41 + 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..41 + L_CURLY@10..11 "{" + WHITESPACE@11..16 "\n " + EXPR_STMT@16..24 + CLOSURE_EXPR@16..24 + PARAM_LIST@16..18 + PIPE@16..17 "|" + PIPE@17..18 "|" + WHITESPACE@18..19 " " + RET_TYPE@19..24 + THIN_ARROW@19..21 "->" + WHITESPACE@21..22 " " + TUPLE_TYPE@22..24 + L_PAREN@22..23 "(" + R_PAREN@23..24 ")" + WHITESPACE@24..25 " " + EXPR_STMT@25..39 + EFFECT_EXPR@25..38 + UNSAFE_KW@25..31 "unsafe" + WHITESPACE@31..32 " " + BLOCK_EXPR@32..38 + L_CURLY@32..33 "{" + WHITESPACE@33..34 " " + TUPLE_EXPR@34..36 + L_PAREN@34..35 "(" + R_PAREN@35..36 ")" + WHITESPACE@36..37 " " + R_CURLY@37..38 "}" + SEMICOLON@38..39 ";" + WHITESPACE@39..40 "\n" + R_CURLY@40..41 "}" + WHITESPACE@41..42 "\n" +error 24..24: expected a block +error 24..24: expected SEMICOLON diff --git a/crates/syntax/test_data/parser/err/0010_unsafe_lambda_block.rs b/crates/syntax/test_data/parser/err/0010_unsafe_lambda_block.rs new file mode 100644 index 000000000..985775282 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0010_unsafe_lambda_block.rs @@ -0,0 +1,3 @@ +fn main() { + || -> () unsafe { () }; +} diff --git a/crates/syntax/test_data/parser/err/0011_extern_struct.rast b/crates/syntax/test_data/parser/err/0011_extern_struct.rast new file mode 100644 index 000000000..b02d390af --- /dev/null +++ b/crates/syntax/test_data/parser/err/0011_extern_struct.rast @@ -0,0 +1,13 @@ +SOURCE_FILE@0..19 + ERROR@0..6 + ABI@0..6 + EXTERN_KW@0..6 "extern" + WHITESPACE@6..7 " " + STRUCT@7..18 + STRUCT_KW@7..13 "struct" + WHITESPACE@13..14 " " + NAME@14..17 + IDENT@14..17 "Foo" + SEMICOLON@17..18 ";" + WHITESPACE@18..19 "\n" +error 6..6: expected existential, fn, trait or impl diff --git a/crates/syntax/test_data/parser/err/0011_extern_struct.rs b/crates/syntax/test_data/parser/err/0011_extern_struct.rs new file mode 100644 index 000000000..c1bd0a2d1 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0011_extern_struct.rs @@ -0,0 +1 @@ +extern struct Foo; diff --git a/crates/syntax/test_data/parser/err/0012_broken_lambda.rast b/crates/syntax/test_data/parser/err/0012_broken_lambda.rast new file mode 100644 index 000000000..f31c27633 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0012_broken_lambda.rast @@ -0,0 +1,387 @@ +SOURCE_FILE@0..389 + FN@0..389 + VISIBILITY@0..10 + PUB_KW@0..3 + L_PAREN@3..4 + SUPER_KW@4..9 + R_PAREN@9..10 + WHITESPACE@10..11 + FN_KW@11..13 + WHITESPACE@13..14 + NAME@14..21 + IDENT@14..21 "process" + GENERIC_PARAM_LIST@21..38 + L_ANGLE@21..22 + LIFETIME_PARAM@22..24 + LIFETIME@22..24 "'a" + COMMA@24..25 + WHITESPACE@25..26 + TYPE_PARAM@26..37 + NAME@26..27 + IDENT@26..27 "S" + COLON@27..28 + WHITESPACE@28..29 + PATH@29..37 + PATH_SEGMENT@29..37 + NAME_REF@29..33 + IDENT@29..33 "Sink" + GENERIC_ARG_LIST@33..37 + L_ANGLE@33..34 + LIFETIME_ARG@34..36 + LIFETIME@34..36 "'a" + R_ANGLE@36..37 + R_ANGLE@37..38 + PARAM_LIST@38..93 + L_PAREN@38..39 + PARAM@39..54 + IDENT_PAT@39..46 + NAME@39..46 + IDENT@39..46 "builder" + COLON@46..47 + WHITESPACE@47..48 + REF_TYPE@48..54 + AMP@48..49 + MUT_KW@49..52 + WHITESPACE@52..53 + PATH_TYPE@53..54 + PATH@53..54 + PATH_SEGMENT@53..54 + NAME_REF@53..54 + IDENT@53..54 "S" + COMMA@54..55 + WHITESPACE@55..56 + PARAM@56..72 + IDENT_PAT@56..62 + NAME@56..62 + IDENT@56..62 "tokens" + COLON@62..63 + WHITESPACE@63..64 + REF_TYPE@64..72 + AMP@64..65 + SLICE_TYPE@65..72 + L_BRACK@65..66 + PATH_TYPE@66..71 + PATH@66..71 + PATH_SEGMENT@66..71 + NAME_REF@66..71 + IDENT@66..71 "Token" + R_BRACK@71..72 + COMMA@72..73 + WHITESPACE@73..74 + PARAM@74..92 + IDENT_PAT@74..80 + NAME@74..80 + IDENT@74..80 "events" + COLON@80..81 + WHITESPACE@81..82 + PATH_TYPE@82..92 + PATH@82..92 + PATH_SEGMENT@82..92 + NAME_REF@82..85 + IDENT@82..85 "Vec" + GENERIC_ARG_LIST@85..92 + L_ANGLE@85..86 + TYPE_ARG@86..91 + PATH_TYPE@86..91 + PATH@86..91 + PATH_SEGMENT@86..91 + NAME_REF@86..91 + IDENT@86..91 "Event" + R_ANGLE@91..92 + R_PAREN@92..93 + WHITESPACE@93..94 + BLOCK_EXPR@94..389 + L_CURLY@94..95 + WHITESPACE@95..100 + LET_STMT@100..125 + LET_KW@100..103 + WHITESPACE@103..104 + IDENT_PAT@104..120 + MUT_KW@104..107 + WHITESPACE@107..108 + NAME@108..120 + IDENT@108..120 "next_tok_idx" + WHITESPACE@120..121 + EQ@121..122 + WHITESPACE@122..123 + LITERAL@123..124 + INT_NUMBER@123..124 "0" + SEMICOLON@124..125 + WHITESPACE@125..130 + LET_STMT@130..389 + LET_KW@130..133 + WHITESPACE@133..134 + IDENT_PAT@134..140 + NAME@134..140 + IDENT@134..140 "eat_ws" + WHITESPACE@140..141 + EQ@141..142 + WHITESPACE@142..143 + CLOSURE_EXPR@143..389 + PARAM_LIST@143..388 + PIPE@143..144 + PARAM@144..159 + IDENT_PAT@144..147 + NAME@144..147 + IDENT@144..147 "idx" + COLON@147..148 + WHITESPACE@148..149 + REF_TYPE@149..159 + AMP@149..150 + MUT_KW@150..153 + WHITESPACE@153..154 + PATH_TYPE@154..159 + PATH@154..159 + PATH_SEGMENT@154..159 + NAME_REF@154..159 + IDENT@154..159 "usize" + COMMA@159..160 + WHITESPACE@160..161 + PARAM@161..167 + REF_PAT@161..167 + AMP@161..162 + MUT_KW@162..165 + WHITESPACE@165..166 + err: `expected pattern` + ERROR@166..167 + PIPE@166..167 + err: `expected COMMA` + WHITESPACE@167..168 + err: `expected pattern` + PARAM@168..169 + ERROR@168..169 + L_CURLY@168..169 + err: `expected COMMA` + WHITESPACE@169..178 + err: `expected pattern` + PARAM@178..183 + ERROR@178..183 + WHILE_KW@178..183 + err: `expected COMMA` + WHITESPACE@183..184 + err: `expected pattern` + PARAM@184..187 + ERROR@184..187 + LET_KW@184..187 + err: `expected COMMA` + WHITESPACE@187..188 + PARAM@188..199 + TUPLE_STRUCT_PAT@188..199 + PATH@188..192 + PATH_SEGMENT@188..192 + NAME_REF@188..192 + IDENT@188..192 "Some" + L_PAREN@192..193 + IDENT_PAT@193..198 + NAME@193..198 + IDENT@193..198 "token" + R_PAREN@198..199 + err: `expected COMMA` + WHITESPACE@199..200 + err: `expected pattern` + PARAM@200..201 + ERROR@200..201 + EQ@200..201 + err: `expected COMMA` + WHITESPACE@201..202 + PARAM@202..208 + IDENT_PAT@202..208 + NAME@202..208 + IDENT@202..208 "tokens" + err: `expected COMMA` + err: `expected pattern` + PARAM@208..209 + ERROR@208..209 + DOT@208..209 + err: `expected COMMA` + PARAM@209..218 + TUPLE_STRUCT_PAT@209..218 + PATH@209..212 + PATH_SEGMENT@209..212 + NAME_REF@209..212 + IDENT@209..212 "get" + L_PAREN@212..213 + err: `expected pattern` + ERROR@213..214 + STAR@213..214 + err: `expected COMMA` + IDENT_PAT@214..217 + NAME@214..217 + IDENT@214..217 "idx" + R_PAREN@217..218 + err: `expected COMMA` + WHITESPACE@218..219 + err: `expected pattern` + PARAM@219..220 + ERROR@219..220 + L_CURLY@219..220 + err: `expected COMMA` + WHITESPACE@220..233 + err: `expected pattern` + PARAM@233..235 + ERROR@233..235 + IF_KW@233..235 + err: `expected COMMA` + WHITESPACE@235..236 + err: `expected pattern` + PARAM@236..237 + ERROR@236..237 + BANG@236..237 + err: `expected COMMA` + PARAM@237..242 + IDENT_PAT@237..242 + NAME@237..242 + IDENT@237..242 "token" + err: `expected COMMA` + err: `expected pattern` + PARAM@242..243 + ERROR@242..243 + DOT@242..243 + err: `expected COMMA` + PARAM@243..247 + IDENT_PAT@243..247 + NAME@243..247 + IDENT@243..247 "kind" + err: `expected COMMA` + err: `expected pattern` + PARAM@247..248 + ERROR@247..248 + DOT@247..248 + err: `expected COMMA` + PARAM@248..259 + TUPLE_STRUCT_PAT@248..259 + PATH@248..257 + PATH_SEGMENT@248..257 + NAME_REF@248..257 + IDENT@248..257 "is_trivia" + L_PAREN@257..258 + R_PAREN@258..259 + err: `expected COMMA` + WHITESPACE@259..260 + err: `expected pattern` + PARAM@260..261 + ERROR@260..261 + L_CURLY@260..261 + err: `expected COMMA` + WHITESPACE@261..278 + PARAM@278..283 + IDENT_PAT@278..283 + NAME@278..283 + IDENT@278..283 "break" + err: `expected COMMA` + err: `expected pattern` + PARAM@283..284 + ERROR@283..284 + SEMICOLON@283..284 + err: `expected COMMA` + WHITESPACE@284..297 + err: `expected pattern` + PARAM@297..298 + ERROR@297..298 + R_CURLY@297..298 + err: `expected COMMA` + WHITESPACE@298..311 + PARAM@311..318 + IDENT_PAT@311..318 + NAME@311..318 + IDENT@311..318 "builder" + err: `expected COMMA` + err: `expected pattern` + PARAM@318..319 + ERROR@318..319 + DOT@318..319 + err: `expected COMMA` + PARAM@319..346 + TUPLE_STRUCT_PAT@319..346 + PATH@319..323 + PATH_SEGMENT@319..323 + NAME_REF@319..323 + IDENT@319..323 "leaf" + L_PAREN@323..324 + IDENT_PAT@324..329 + NAME@324..329 + IDENT@324..329 "token" + err: `expected COMMA` + err: `expected pattern` + ERROR@329..330 + DOT@329..330 + err: `expected COMMA` + IDENT_PAT@330..334 + NAME@330..334 + IDENT@330..334 "kind" + COMMA@334..335 + WHITESPACE@335..336 + IDENT_PAT@336..341 + NAME@336..341 + IDENT@336..341 "token" + err: `expected COMMA` + err: `expected pattern` + ERROR@341..342 + DOT@341..342 + err: `expected COMMA` + IDENT_PAT@342..345 + NAME@342..345 + IDENT@342..345 "len" + R_PAREN@345..346 + err: `expected COMMA` + err: `expected pattern` + PARAM@346..347 + ERROR@346..347 + SEMICOLON@346..347 + err: `expected COMMA` + WHITESPACE@347..360 + err: `expected pattern` + PARAM@360..361 + ERROR@360..361 + STAR@360..361 + err: `expected COMMA` + PARAM@361..364 + IDENT_PAT@361..364 + NAME@361..364 + IDENT@361..364 "idx" + err: `expected COMMA` + WHITESPACE@364..365 + err: `expected pattern` + PARAM@365..366 + ERROR@365..366 + PLUS@365..366 + err: `expected COMMA` + err: `expected pattern` + PARAM@366..367 + ERROR@366..367 + EQ@366..367 + err: `expected COMMA` + WHITESPACE@367..368 + PARAM@368..369 + LITERAL@368..369 + INT_NUMBER@368..369 "1" + err: `expected COMMA` + WHITESPACE@369..378 + err: `expected pattern` + PARAM@378..379 + ERROR@378..379 + R_CURLY@378..379 + err: `expected COMMA` + WHITESPACE@379..384 + err: `expected pattern` + PARAM@384..385 + ERROR@384..385 + R_CURLY@384..385 + err: `expected COMMA` + err: `expected pattern` + PARAM@385..386 + ERROR@385..386 + SEMICOLON@385..386 + err: `expected COMMA` + WHITESPACE@386..387 + err: `expected pattern` + PARAM@387..388 + ERROR@387..388 + R_CURLY@387..388 + err: `expected COMMA` + err: `expected PIPE` + WHITESPACE@388..389 + err: `expected expression` + err: `expected SEMI` + err: `expected R_CURLY` + ERROR@389..389 diff --git a/crates/syntax/test_data/parser/err/0013_invalid_type.rast b/crates/syntax/test_data/parser/err/0013_invalid_type.rast new file mode 100644 index 000000000..f48ab6e71 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0013_invalid_type.rast @@ -0,0 +1,89 @@ +SOURCE_FILE@0..86 + STRUCT@0..72 + VISIBILITY@0..3 + PUB_KW@0..3 "pub" + WHITESPACE@3..4 " " + STRUCT_KW@4..10 "struct" + WHITESPACE@10..11 " " + NAME@11..16 + IDENT@11..16 "Cache" + TUPLE_FIELD_LIST@16..72 + L_PAREN@16..17 "(" + WHITESPACE@17..22 "\n " + TUPLE_FIELD@22..68 + PATH_TYPE@22..68 + PATH@22..68 + PATH_SEGMENT@22..68 + NAME_REF@22..29 + IDENT@22..29 "RefCell" + GENERIC_ARG_LIST@29..68 + L_ANGLE@29..30 "<" + TYPE_ARG@30..68 + PATH_TYPE@30..68 + PATH@30..68 + PATH_SEGMENT@30..68 + NAME_REF@30..37 + IDENT@30..37 "HashMap" + GENERIC_ARG_LIST@37..68 + L_ANGLE@37..38 "<" + WHITESPACE@38..47 "\n " + TYPE_ARG@47..53 + PATH_TYPE@47..53 + PATH@47..53 + PATH_SEGMENT@47..53 + NAME_REF@47..53 + IDENT@47..53 "TypeId" + COMMA@53..54 "," + WHITESPACE@54..63 "\n " + TYPE_ARG@63..68 + PATH_TYPE@63..68 + PATH@63..68 + PATH_SEGMENT@63..68 + NAME_REF@63..66 + IDENT@63..66 "Box" + GENERIC_ARG_LIST@66..68 + L_ANGLE@66..67 "<" + TYPE_ARG@67..68 + ERROR@67..68 + AT@67..68 "@" + WHITESPACE@68..69 " " + TUPLE_FIELD@69..72 + PATH_TYPE@69..72 + PATH@69..72 + PATH_SEGMENT@69..72 + NAME_REF@69..72 + IDENT@69..72 "Any" + ERROR@72..72 + ERROR@72..73 + R_ANGLE@72..73 ">" + ERROR@73..74 + COMMA@73..74 "," + WHITESPACE@74..79 "\n " + ERROR@79..80 + R_ANGLE@79..80 ">" + ERROR@80..81 + R_ANGLE@80..81 ">" + WHITESPACE@81..82 "\n" + ERROR@82..83 + R_PAREN@82..83 ")" + ERROR@83..84 + SEMICOLON@83..84 ";" + WHITESPACE@84..86 "\n\n" +error 67..67: expected type +error 68..68: expected COMMA +error 68..68: expected R_ANGLE +error 68..68: expected COMMA +error 68..68: expected R_ANGLE +error 68..68: expected COMMA +error 68..68: expected R_ANGLE +error 68..68: expected COMMA +error 72..72: expected COMMA +error 72..72: expected a type +error 72..72: expected R_PAREN +error 72..72: expected SEMICOLON +error 72..72: expected an item +error 73..73: expected an item +error 79..79: expected an item +error 80..80: expected an item +error 82..82: expected an item +error 83..83: expected an item diff --git a/crates/syntax/test_data/parser/err/0013_invalid_type.rs b/crates/syntax/test_data/parser/err/0013_invalid_type.rs new file mode 100644 index 000000000..20dde3bc3 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0013_invalid_type.rs @@ -0,0 +1,7 @@ +pub struct Cache( + RefCell, + >> +); + diff --git a/crates/syntax/test_data/parser/err/0014_where_no_bounds.rast b/crates/syntax/test_data/parser/err/0014_where_no_bounds.rast new file mode 100644 index 000000000..a1f39b22a --- /dev/null +++ b/crates/syntax/test_data/parser/err/0014_where_no_bounds.rast @@ -0,0 +1,31 @@ +SOURCE_FILE@0..23 + FN@0..22 + FN_KW@0..2 "fn" + WHITESPACE@2..3 " " + NAME@3..6 + IDENT@3..6 "foo" + GENERIC_PARAM_LIST@6..9 + L_ANGLE@6..7 "<" + TYPE_PARAM@7..8 + NAME@7..8 + IDENT@7..8 "T" + R_ANGLE@8..9 ">" + PARAM_LIST@9..11 + L_PAREN@9..10 "(" + R_PAREN@10..11 ")" + WHITESPACE@11..12 " " + WHERE_CLAUSE@12..19 + WHERE_KW@12..17 "where" + WHITESPACE@17..18 " " + WHERE_PRED@18..19 + PATH_TYPE@18..19 + PATH@18..19 + PATH_SEGMENT@18..19 + NAME_REF@18..19 + IDENT@18..19 "T" + WHITESPACE@19..20 " " + BLOCK_EXPR@20..22 + L_CURLY@20..21 "{" + R_CURLY@21..22 "}" + WHITESPACE@22..23 "\n" +error 19..19: expected colon diff --git a/crates/syntax/test_data/parser/err/0014_where_no_bounds.rs b/crates/syntax/test_data/parser/err/0014_where_no_bounds.rs new file mode 100644 index 000000000..75c1d2f98 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0014_where_no_bounds.rs @@ -0,0 +1 @@ +fn foo() where T {} diff --git a/crates/syntax/test_data/parser/err/0015_curly_in_params.rast b/crates/syntax/test_data/parser/err/0015_curly_in_params.rast new file mode 100644 index 000000000..a3c25b450 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0015_curly_in_params.rast @@ -0,0 +1,24 @@ +SOURCE_FILE@0..14 + FN@0..7 + FN_KW@0..2 "fn" + WHITESPACE@2..3 " " + NAME@3..6 + IDENT@3..6 "foo" + PARAM_LIST@6..7 + L_PAREN@6..7 "(" + ERROR@7..8 + R_CURLY@7..8 "}" + ERROR@8..9 + R_PAREN@8..9 ")" + WHITESPACE@9..10 " " + ERROR@10..13 + L_CURLY@10..11 "{" + WHITESPACE@11..12 "\n" + R_CURLY@12..13 "}" + WHITESPACE@13..14 "\n" +error 7..7: expected value parameter +error 7..7: expected R_PAREN +error 7..7: expected a block +error 7..7: unmatched `}` +error 8..8: expected an item +error 10..10: expected an item diff --git a/crates/syntax/test_data/parser/err/0015_curly_in_params.rs b/crates/syntax/test_data/parser/err/0015_curly_in_params.rs new file mode 100644 index 000000000..156e70251 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0015_curly_in_params.rs @@ -0,0 +1,2 @@ +fn foo(}) { +} diff --git a/crates/syntax/test_data/parser/err/0016_missing_semi.rast b/crates/syntax/test_data/parser/err/0016_missing_semi.rast new file mode 100644 index 000000000..66157c3dc --- /dev/null +++ b/crates/syntax/test_data/parser/err/0016_missing_semi.rast @@ -0,0 +1,43 @@ +SOURCE_FILE@0..56 + FN@0..55 + FN_KW@0..2 "fn" + WHITESPACE@2..3 " " + NAME@3..6 + IDENT@3..6 "foo" + PARAM_LIST@6..8 + L_PAREN@6..7 "(" + R_PAREN@7..8 ")" + WHITESPACE@8..9 " " + BLOCK_EXPR@9..55 + L_CURLY@9..10 "{" + WHITESPACE@10..15 "\n " + EXPR_STMT@15..38 + CALL_EXPR@15..38 + PATH_EXPR@15..18 + PATH@15..18 + PATH_SEGMENT@15..18 + NAME_REF@15..18 + IDENT@15..18 "foo" + ARG_LIST@18..38 + L_PAREN@18..19 "(" + WHITESPACE@19..28 "\n " + LITERAL@28..29 + INT_NUMBER@28..29 "1" + COMMA@29..30 "," + WHITESPACE@30..31 " " + LITERAL@31..32 + INT_NUMBER@31..32 "2" + WHITESPACE@32..37 "\n " + R_PAREN@37..38 ")" + WHITESPACE@38..43 "\n " + EXPR_STMT@43..53 + RETURN_EXPR@43..52 + RETURN_KW@43..49 "return" + WHITESPACE@49..50 " " + LITERAL@50..52 + INT_NUMBER@50..52 "92" + SEMICOLON@52..53 ";" + WHITESPACE@53..54 "\n" + R_CURLY@54..55 "}" + WHITESPACE@55..56 "\n" +error 38..38: expected SEMICOLON diff --git a/crates/syntax/test_data/parser/err/0016_missing_semi.rs b/crates/syntax/test_data/parser/err/0016_missing_semi.rs new file mode 100644 index 000000000..9ae857686 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0016_missing_semi.rs @@ -0,0 +1,6 @@ +fn foo() { + foo( + 1, 2 + ) + return 92; +} diff --git a/crates/syntax/test_data/parser/err/0017_incomplete_binexpr.rast b/crates/syntax/test_data/parser/err/0017_incomplete_binexpr.rast new file mode 100644 index 000000000..fe094f61c --- /dev/null +++ b/crates/syntax/test_data/parser/err/0017_incomplete_binexpr.rast @@ -0,0 +1,46 @@ +SOURCE_FILE@0..47 + FN@0..46 + FN_KW@0..2 "fn" + WHITESPACE@2..3 " " + NAME@3..6 + IDENT@3..6 "foo" + PARAM_LIST@6..16 + L_PAREN@6..7 "(" + PARAM@7..15 + IDENT_PAT@7..10 + NAME@7..10 + IDENT@7..10 "foo" + COLON@10..11 ":" + WHITESPACE@11..12 " " + PATH_TYPE@12..15 + PATH@12..15 + PATH_SEGMENT@12..15 + NAME_REF@12..15 + IDENT@12..15 "i32" + R_PAREN@15..16 ")" + WHITESPACE@16..17 " " + BLOCK_EXPR@17..46 + L_CURLY@17..18 "{" + WHITESPACE@18..23 "\n " + LET_STMT@23..36 + LET_KW@23..26 "let" + WHITESPACE@26..27 " " + IDENT_PAT@27..30 + NAME@27..30 + IDENT@27..30 "bar" + WHITESPACE@30..31 " " + EQ@31..32 "=" + WHITESPACE@32..33 " " + LITERAL@33..35 + INT_NUMBER@33..35 "92" + SEMICOLON@35..36 ";" + WHITESPACE@36..41 "\n " + BIN_EXPR@41..44 + LITERAL@41..42 + INT_NUMBER@41..42 "1" + WHITESPACE@42..43 " " + PLUS@43..44 "+" + WHITESPACE@44..45 "\n" + R_CURLY@45..46 "}" + WHITESPACE@46..47 "\n" +error 44..44: expected expression diff --git a/crates/syntax/test_data/parser/err/0017_incomplete_binexpr.rs b/crates/syntax/test_data/parser/err/0017_incomplete_binexpr.rs new file mode 100644 index 000000000..17bd49777 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0017_incomplete_binexpr.rs @@ -0,0 +1,4 @@ +fn foo(foo: i32) { + let bar = 92; + 1 + +} diff --git a/crates/syntax/test_data/parser/err/0018_incomplete_fn.rast b/crates/syntax/test_data/parser/err/0018_incomplete_fn.rast new file mode 100644 index 000000000..72939fc98 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0018_incomplete_fn.rast @@ -0,0 +1,131 @@ +SOURCE_FILE@0..183 + IMPL@0..182 + IMPL_KW@0..4 "impl" + WHITESPACE@4..5 " " + PATH_TYPE@5..13 + PATH@5..13 + PATH_SEGMENT@5..13 + NAME_REF@5..13 + IDENT@5..13 "FnScopes" + WHITESPACE@13..14 " " + ASSOC_ITEM_LIST@14..182 + L_CURLY@14..15 "{" + WHITESPACE@15..20 "\n " + FN@20..161 + FN_KW@20..22 "fn" + WHITESPACE@22..23 " " + NAME@23..32 + IDENT@23..32 "new_scope" + PARAM_LIST@32..35 + L_PAREN@32..33 "(" + PARAM@33..34 + REF_PAT@33..34 + AMP@33..34 "&" + R_PAREN@34..35 ")" + WHITESPACE@35..36 " " + RET_TYPE@36..46 + THIN_ARROW@36..38 "->" + WHITESPACE@38..39 " " + PATH_TYPE@39..46 + PATH@39..46 + PATH_SEGMENT@39..46 + NAME_REF@39..46 + IDENT@39..46 "ScopeId" + WHITESPACE@46..47 " " + BLOCK_EXPR@47..161 + L_CURLY@47..48 "{" + WHITESPACE@48..57 "\n " + LET_STMT@57..85 + LET_KW@57..60 "let" + WHITESPACE@60..61 " " + IDENT_PAT@61..64 + NAME@61..64 + IDENT@61..64 "res" + WHITESPACE@64..65 " " + EQ@65..66 "=" + WHITESPACE@66..67 " " + METHOD_CALL_EXPR@67..84 + FIELD_EXPR@67..78 + PATH_EXPR@67..71 + PATH@67..71 + PATH_SEGMENT@67..71 + SELF_KW@67..71 "self" + DOT@71..72 "." + NAME_REF@72..78 + IDENT@72..78 "scopes" + DOT@78..79 "." + NAME_REF@79..82 + IDENT@79..82 "len" + ARG_LIST@82..84 + L_PAREN@82..83 "(" + R_PAREN@83..84 ")" + SEMICOLON@84..85 ";" + WHITESPACE@85..94 "\n " + METHOD_CALL_EXPR@94..155 + FIELD_EXPR@94..105 + PATH_EXPR@94..98 + PATH@94..98 + PATH_SEGMENT@94..98 + SELF_KW@94..98 "self" + DOT@98..99 "." + NAME_REF@99..105 + IDENT@99..105 "scopes" + DOT@105..106 "." + NAME_REF@106..110 + IDENT@106..110 "push" + ARG_LIST@110..155 + L_PAREN@110..111 "(" + RECORD_EXPR@111..154 + PATH@111..120 + PATH_SEGMENT@111..120 + NAME_REF@111..120 + IDENT@111..120 "ScopeData" + WHITESPACE@120..121 " " + RECORD_EXPR_FIELD_LIST@121..154 + L_CURLY@121..122 "{" + WHITESPACE@122..123 " " + RECORD_EXPR_FIELD@123..135 + NAME_REF@123..129 + IDENT@123..129 "parent" + COLON@129..130 ":" + WHITESPACE@130..131 " " + PATH_EXPR@131..135 + PATH@131..135 + PATH_SEGMENT@131..135 + NAME_REF@131..135 + IDENT@131..135 "None" + COMMA@135..136 "," + WHITESPACE@136..137 " " + RECORD_EXPR_FIELD@137..152 + NAME_REF@137..144 + IDENT@137..144 "entries" + COLON@144..145 ":" + WHITESPACE@145..146 " " + MACRO_CALL@146..152 + PATH@146..149 + PATH_SEGMENT@146..149 + NAME_REF@146..149 + IDENT@146..149 "vec" + BANG@149..150 "!" + TOKEN_TREE@150..152 + L_BRACK@150..151 "[" + R_BRACK@151..152 "]" + WHITESPACE@152..153 " " + R_CURLY@153..154 "}" + R_PAREN@154..155 ")" + WHITESPACE@155..160 "\n " + R_CURLY@160..161 "}" + WHITESPACE@161..167 "\n\n " + FN@167..180 + FN_KW@167..169 "fn" + WHITESPACE@169..170 " " + NAME@170..180 + IDENT@170..180 "set_parent" + WHITESPACE@180..181 "\n" + R_CURLY@181..182 "}" + WHITESPACE@182..183 "\n" +error 34..34: expected pattern +error 34..34: expected COLON +error 34..34: expected type +error 180..180: expected function arguments +error 180..180: expected a block diff --git a/crates/syntax/test_data/parser/err/0018_incomplete_fn.rs b/crates/syntax/test_data/parser/err/0018_incomplete_fn.rs new file mode 100644 index 000000000..fe604006c --- /dev/null +++ b/crates/syntax/test_data/parser/err/0018_incomplete_fn.rs @@ -0,0 +1,8 @@ +impl FnScopes { + fn new_scope(&) -> ScopeId { + let res = self.scopes.len(); + self.scopes.push(ScopeData { parent: None, entries: vec![] }) + } + + fn set_parent +} diff --git a/crates/syntax/test_data/parser/err/0019_let_recover.rast b/crates/syntax/test_data/parser/err/0019_let_recover.rast new file mode 100644 index 000000000..72c05bd96 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0019_let_recover.rast @@ -0,0 +1,103 @@ +SOURCE_FILE@0..139 + FN@0..138 + FN_KW@0..2 "fn" + WHITESPACE@2..3 " " + NAME@3..6 + IDENT@3..6 "foo" + PARAM_LIST@6..8 + L_PAREN@6..7 "(" + R_PAREN@7..8 ")" + WHITESPACE@8..9 " " + BLOCK_EXPR@9..138 + L_CURLY@9..10 "{" + WHITESPACE@10..15 "\n " + LET_STMT@15..24 + LET_KW@15..18 "let" + WHITESPACE@18..19 " " + IDENT_PAT@19..22 + NAME@19..22 + IDENT@19..22 "foo" + WHITESPACE@22..23 " " + EQ@23..24 "=" + WHITESPACE@24..29 "\n " + LET_STMT@29..41 + LET_KW@29..32 "let" + WHITESPACE@32..33 " " + IDENT_PAT@33..36 + NAME@33..36 + IDENT@33..36 "bar" + WHITESPACE@36..37 " " + EQ@37..38 "=" + WHITESPACE@38..39 " " + LITERAL@39..40 + INT_NUMBER@39..40 "1" + SEMICOLON@40..41 ";" + WHITESPACE@41..46 "\n " + LET_STMT@46..49 + LET_KW@46..49 "let" + WHITESPACE@49..54 "\n " + LET_STMT@54..67 + LET_KW@54..57 "let" + WHITESPACE@57..58 " " + IDENT_PAT@58..61 + NAME@58..61 + IDENT@58..61 "baz" + WHITESPACE@61..62 " " + EQ@62..63 "=" + WHITESPACE@63..64 " " + LITERAL@64..66 + INT_NUMBER@64..66 "92" + SEMICOLON@66..67 ";" + WHITESPACE@67..72 "\n " + LET_STMT@72..75 + LET_KW@72..75 "let" + WHITESPACE@75..80 "\n " + EXPR_STMT@80..90 + IF_EXPR@80..90 + IF_KW@80..82 "if" + WHITESPACE@82..83 " " + CONDITION@83..87 + LITERAL@83..87 + TRUE_KW@83..87 "true" + WHITESPACE@87..88 " " + BLOCK_EXPR@88..90 + L_CURLY@88..89 "{" + R_CURLY@89..90 "}" + WHITESPACE@90..95 "\n " + LET_STMT@95..98 + LET_KW@95..98 "let" + WHITESPACE@98..103 "\n " + EXPR_STMT@103..116 + WHILE_EXPR@103..116 + WHILE_KW@103..108 "while" + WHITESPACE@108..109 " " + CONDITION@109..113 + LITERAL@109..113 + TRUE_KW@109..113 "true" + WHITESPACE@113..114 " " + BLOCK_EXPR@114..116 + L_CURLY@114..115 "{" + R_CURLY@115..116 "}" + WHITESPACE@116..121 "\n " + LET_STMT@121..124 + LET_KW@121..124 "let" + WHITESPACE@124..129 "\n " + LOOP_EXPR@129..136 + LOOP_KW@129..133 "loop" + WHITESPACE@133..134 " " + BLOCK_EXPR@134..136 + L_CURLY@134..135 "{" + R_CURLY@135..136 "}" + WHITESPACE@136..137 "\n" + R_CURLY@137..138 "}" + WHITESPACE@138..139 "\n" +error 24..24: expected expression +error 24..24: expected SEMICOLON +error 49..49: expected pattern +error 49..49: expected SEMICOLON +error 75..75: expected pattern +error 75..75: expected SEMICOLON +error 98..98: expected pattern +error 98..98: expected SEMICOLON +error 124..124: expected pattern +error 124..124: expected SEMICOLON diff --git a/crates/syntax/test_data/parser/err/0019_let_recover.rs b/crates/syntax/test_data/parser/err/0019_let_recover.rs new file mode 100644 index 000000000..48bf3d68b --- /dev/null +++ b/crates/syntax/test_data/parser/err/0019_let_recover.rs @@ -0,0 +1,12 @@ +fn foo() { + let foo = + let bar = 1; + let + let baz = 92; + let + if true {} + let + while true {} + let + loop {} +} diff --git a/crates/syntax/test_data/parser/err/0020_fn_recover.rast b/crates/syntax/test_data/parser/err/0020_fn_recover.rast new file mode 100644 index 000000000..6f6feba5a --- /dev/null +++ b/crates/syntax/test_data/parser/err/0020_fn_recover.rast @@ -0,0 +1,20 @@ +SOURCE_FILE@0..16 + FN@0..2 + FN_KW@0..2 "fn" + WHITESPACE@2..4 "\n\n" + FN@4..15 + FN_KW@4..6 "fn" + WHITESPACE@6..7 " " + NAME@7..10 + IDENT@7..10 "foo" + PARAM_LIST@10..12 + L_PAREN@10..11 "(" + R_PAREN@11..12 ")" + WHITESPACE@12..13 " " + BLOCK_EXPR@13..15 + L_CURLY@13..14 "{" + R_CURLY@14..15 "}" + WHITESPACE@15..16 "\n" +error 2..2: expected a name +error 2..2: expected function arguments +error 2..2: expected a block diff --git a/crates/syntax/test_data/parser/err/0020_fn_recover.rs b/crates/syntax/test_data/parser/err/0020_fn_recover.rs new file mode 100644 index 000000000..3393b668b --- /dev/null +++ b/crates/syntax/test_data/parser/err/0020_fn_recover.rs @@ -0,0 +1,3 @@ +fn + +fn foo() {} diff --git a/crates/syntax/test_data/parser/err/0021_incomplete_param.rast b/crates/syntax/test_data/parser/err/0021_incomplete_param.rast new file mode 100644 index 000000000..b32845537 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0021_incomplete_param.rast @@ -0,0 +1,34 @@ +SOURCE_FILE@0..22 + FN@0..21 + FN_KW@0..2 "fn" + WHITESPACE@2..3 " " + NAME@3..6 + IDENT@3..6 "foo" + PARAM_LIST@6..17 + L_PAREN@6..7 "(" + PARAM@7..13 + IDENT_PAT@7..8 + NAME@7..8 + IDENT@7..8 "x" + COLON@8..9 ":" + WHITESPACE@9..10 " " + PATH_TYPE@10..13 + PATH@10..13 + PATH_SEGMENT@10..13 + NAME_REF@10..13 + IDENT@10..13 "i32" + COMMA@13..14 "," + WHITESPACE@14..15 " " + PARAM@15..16 + IDENT_PAT@15..16 + NAME@15..16 + IDENT@15..16 "y" + R_PAREN@16..17 ")" + WHITESPACE@17..18 " " + BLOCK_EXPR@18..21 + L_CURLY@18..19 "{" + WHITESPACE@19..20 "\n" + R_CURLY@20..21 "}" + WHITESPACE@21..22 "\n" +error 16..16: expected COLON +error 16..16: expected type diff --git a/crates/syntax/test_data/parser/err/0021_incomplete_param.rs b/crates/syntax/test_data/parser/err/0021_incomplete_param.rs new file mode 100644 index 000000000..7a6c264f6 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0021_incomplete_param.rs @@ -0,0 +1,2 @@ +fn foo(x: i32, y) { +} diff --git a/crates/syntax/test_data/parser/err/0022_bad_exprs.rast b/crates/syntax/test_data/parser/err/0022_bad_exprs.rast new file mode 100644 index 000000000..71fb19783 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0022_bad_exprs.rast @@ -0,0 +1,180 @@ +SOURCE_FILE@0..112 + FN@0..33 + FN_KW@0..2 "fn" + WHITESPACE@2..3 " " + NAME@3..4 + IDENT@3..4 "a" + PARAM_LIST@4..6 + L_PAREN@4..5 "(" + R_PAREN@5..6 ")" + WHITESPACE@6..7 " " + BLOCK_EXPR@7..33 + L_CURLY@7..8 "{" + WHITESPACE@8..9 " " + EXPR_STMT@9..17 + ARRAY_EXPR@9..17 + L_BRACK@9..10 "[" + LITERAL@10..11 + INT_NUMBER@10..11 "1" + COMMA@11..12 "," + WHITESPACE@12..13 " " + LITERAL@13..14 + INT_NUMBER@13..14 "2" + COMMA@14..15 "," + WHITESPACE@15..16 " " + ERROR@16..17 + AT@16..17 "@" + EXPR_STMT@17..18 + ERROR@17..18 + COMMA@17..18 "," + WHITESPACE@18..19 " " + STRUCT@19..26 + STRUCT_KW@19..25 "struct" + ERROR@25..26 + COMMA@25..26 "," + WHITESPACE@26..27 " " + LET_STMT@27..31 + LET_KW@27..30 "let" + ERROR@30..31 + R_BRACK@30..31 "]" + WHITESPACE@31..32 " " + R_CURLY@32..33 "}" + WHITESPACE@33..34 "\n" + FN@34..68 + FN_KW@34..36 "fn" + WHITESPACE@36..37 " " + NAME@37..38 + IDENT@37..38 "b" + PARAM_LIST@38..40 + L_PAREN@38..39 "(" + R_PAREN@39..40 ")" + WHITESPACE@40..41 " " + BLOCK_EXPR@41..68 + L_CURLY@41..42 "{" + WHITESPACE@42..43 " " + EXPR_STMT@43..54 + CALL_EXPR@43..54 + PATH_EXPR@43..46 + PATH@43..46 + PATH_SEGMENT@43..46 + NAME_REF@43..46 + IDENT@43..46 "foo" + ARG_LIST@46..54 + L_PAREN@46..47 "(" + LITERAL@47..48 + INT_NUMBER@47..48 "1" + COMMA@48..49 "," + WHITESPACE@49..50 " " + LITERAL@50..51 + INT_NUMBER@50..51 "2" + COMMA@51..52 "," + WHITESPACE@52..53 " " + ERROR@53..54 + AT@53..54 "@" + EXPR_STMT@54..55 + ERROR@54..55 + COMMA@54..55 "," + WHITESPACE@55..56 " " + IMPL@56..60 + IMPL_KW@56..60 "impl" + EXPR_STMT@60..61 + ERROR@60..61 + COMMA@60..61 "," + WHITESPACE@61..62 " " + LET_STMT@62..65 + LET_KW@62..65 "let" + ERROR@65..66 + R_PAREN@65..66 ")" + WHITESPACE@66..67 " " + R_CURLY@67..68 "}" + WHITESPACE@68..69 "\n" + FN@69..111 + FN_KW@69..71 "fn" + WHITESPACE@71..72 " " + NAME@72..73 + IDENT@72..73 "c" + PARAM_LIST@73..75 + L_PAREN@73..74 "(" + R_PAREN@74..75 ")" + WHITESPACE@75..76 " " + BLOCK_EXPR@76..111 + L_CURLY@76..77 "{" + WHITESPACE@77..78 " " + EXPR_STMT@78..93 + METHOD_CALL_EXPR@78..93 + PATH_EXPR@78..81 + PATH@78..81 + PATH_SEGMENT@78..81 + NAME_REF@78..81 + IDENT@78..81 "foo" + DOT@81..82 "." + NAME_REF@82..85 + IDENT@82..85 "bar" + ARG_LIST@85..93 + L_PAREN@85..86 "(" + LITERAL@86..87 + INT_NUMBER@86..87 "1" + COMMA@87..88 "," + WHITESPACE@88..89 " " + LITERAL@89..90 + INT_NUMBER@89..90 "2" + COMMA@90..91 "," + WHITESPACE@91..92 " " + ERROR@92..93 + AT@92..93 "@" + EXPR_STMT@93..94 + ERROR@93..94 + COMMA@93..94 "," + WHITESPACE@94..95 " " + EXPR_STMT@95..96 + ERROR@95..96 + R_BRACK@95..96 "]" + EXPR_STMT@96..97 + ERROR@96..97 + COMMA@96..97 "," + WHITESPACE@97..98 " " + TRAIT@98..104 + TRAIT_KW@98..103 "trait" + ERROR@103..104 + COMMA@103..104 "," + WHITESPACE@104..105 " " + LET_STMT@105..108 + LET_KW@105..108 "let" + ERROR@108..109 + R_PAREN@108..109 ")" + WHITESPACE@109..110 " " + R_CURLY@110..111 "}" + WHITESPACE@111..112 "\n" +error 16..16: expected expression +error 17..17: expected R_BRACK +error 17..17: expected SEMICOLON +error 17..17: expected expression +error 18..18: expected SEMICOLON +error 25..25: expected a name +error 26..26: expected `;`, `{`, or `(` +error 30..30: expected pattern +error 31..31: expected SEMICOLON +error 53..53: expected expression +error 54..54: expected SEMICOLON +error 54..54: expected expression +error 55..55: expected SEMICOLON +error 60..60: expected type +error 60..60: expected `{` +error 60..60: expected expression +error 61..61: expected SEMICOLON +error 65..65: expected pattern +error 65..65: expected SEMICOLON +error 65..65: expected expression +error 92..92: expected expression +error 93..93: expected SEMICOLON +error 93..93: expected expression +error 94..94: expected SEMICOLON +error 95..95: expected expression +error 96..96: expected SEMICOLON +error 96..96: expected expression +error 97..97: expected SEMICOLON +error 103..103: expected a name +error 104..104: expected `{` +error 108..108: expected pattern +error 108..108: expected SEMICOLON +error 108..108: expected expression diff --git a/crates/syntax/test_data/parser/err/0022_bad_exprs.rs b/crates/syntax/test_data/parser/err/0022_bad_exprs.rs new file mode 100644 index 000000000..cd2d493a1 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0022_bad_exprs.rs @@ -0,0 +1,3 @@ +fn a() { [1, 2, @, struct, let] } +fn b() { foo(1, 2, @, impl, let) } +fn c() { foo.bar(1, 2, @, ], trait, let) } diff --git a/crates/syntax/test_data/parser/err/0023_mismatched_paren.rast b/crates/syntax/test_data/parser/err/0023_mismatched_paren.rast new file mode 100644 index 000000000..5ffefd742 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0023_mismatched_paren.rast @@ -0,0 +1,43 @@ +SOURCE_FILE@0..94 + FN@0..55 + 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..55 + L_CURLY@10..11 "{" + WHITESPACE@11..16 "\n " + MACRO_CALL@16..49 + PATH@16..19 + PATH_SEGMENT@16..19 + NAME_REF@16..19 + IDENT@16..19 "foo" + BANG@19..20 "!" + WHITESPACE@20..21 " " + TOKEN_TREE@21..49 + L_PAREN@21..22 "(" + WHITESPACE@22..31 "\n " + IDENT@31..34 "bar" + COMMA@34..35 "," + WHITESPACE@35..36 " " + STRING@36..41 "\"baz\"" + COMMA@41..42 "," + WHITESPACE@42..43 " " + INT_NUMBER@43..44 "1" + COMMA@44..45 "," + WHITESPACE@45..46 " " + FLOAT_NUMBER@46..49 "2.0" + WHITESPACE@49..54 "\n " + R_CURLY@54..55 "}" + WHITESPACE@55..56 " " + COMMENT@56..91 "//~ ERROR incorrect c ..." + WHITESPACE@91..92 "\n" + ERROR@92..93 + R_CURLY@92..93 "}" + WHITESPACE@93..94 "\n" +error 49..49: unmatched `}` +error 92..92: unmatched `}` diff --git a/crates/syntax/test_data/parser/err/0023_mismatched_paren.rs b/crates/syntax/test_data/parser/err/0023_mismatched_paren.rs new file mode 100644 index 000000000..0206d563e --- /dev/null +++ b/crates/syntax/test_data/parser/err/0023_mismatched_paren.rs @@ -0,0 +1,5 @@ +fn main() { + foo! ( + bar, "baz", 1, 2.0 + } //~ ERROR incorrect close delimiter +} diff --git a/crates/syntax/test_data/parser/err/0024_many_type_parens.rast b/crates/syntax/test_data/parser/err/0024_many_type_parens.rast new file mode 100644 index 000000000..e3be6b22e --- /dev/null +++ b/crates/syntax/test_data/parser/err/0024_many_type_parens.rast @@ -0,0 +1,319 @@ +SOURCE_FILE@0..240 + FN@0..53 + FN_KW@0..2 "fn" + WHITESPACE@2..3 " " + NAME@3..4 + IDENT@3..4 "f" + GENERIC_PARAM_LIST@4..48 + L_ANGLE@4..5 "<" + TYPE_PARAM@5..47 + NAME@5..6 + IDENT@5..6 "T" + COLON@6..7 ":" + WHITESPACE@7..8 " " + TYPE_BOUND_LIST@8..47 + TYPE_BOUND@8..14 + L_PAREN@8..9 "(" + PATH_TYPE@9..13 + PATH@9..13 + PATH_SEGMENT@9..13 + NAME_REF@9..13 + IDENT@9..13 "Copy" + R_PAREN@13..14 ")" + WHITESPACE@14..15 " " + PLUS@15..16 "+" + WHITESPACE@16..17 " " + TYPE_BOUND@17..25 + L_PAREN@17..18 "(" + QUESTION@18..19 "?" + PATH_TYPE@19..24 + PATH@19..24 + PATH_SEGMENT@19..24 + NAME_REF@19..24 + IDENT@19..24 "Sized" + R_PAREN@24..25 ")" + WHITESPACE@25..26 " " + PLUS@26..27 "+" + WHITESPACE@27..28 " " + TYPE_BOUND@28..47 + L_PAREN@28..29 "(" + FOR_TYPE@29..46 + FOR_KW@29..32 "for" + GENERIC_PARAM_LIST@32..36 + L_ANGLE@32..33 "<" + LIFETIME_PARAM@33..35 + LIFETIME@33..35 "\'a" + R_ANGLE@35..36 ">" + WHITESPACE@36..37 " " + PATH_TYPE@37..46 + PATH@37..46 + PATH_SEGMENT@37..46 + NAME_REF@37..42 + IDENT@37..42 "Trait" + GENERIC_ARG_LIST@42..46 + L_ANGLE@42..43 "<" + LIFETIME_ARG@43..45 + LIFETIME@43..45 "\'a" + R_ANGLE@45..46 ">" + R_PAREN@46..47 ")" + R_ANGLE@47..48 ">" + PARAM_LIST@48..50 + L_PAREN@48..49 "(" + R_PAREN@49..50 ")" + WHITESPACE@50..51 " " + BLOCK_EXPR@51..53 + L_CURLY@51..52 "{" + R_CURLY@52..53 "}" + WHITESPACE@53..55 "\n\n" + FN@55..239 + FN_KW@55..57 "fn" + WHITESPACE@57..58 " " + NAME@58..62 + IDENT@58..62 "main" + PARAM_LIST@62..64 + L_PAREN@62..63 "(" + R_PAREN@63..64 ")" + WHITESPACE@64..65 " " + BLOCK_EXPR@65..239 + L_CURLY@65..66 "{" + WHITESPACE@66..71 "\n " + LET_STMT@71..121 + LET_KW@71..74 "let" + WHITESPACE@74..75 " " + WILDCARD_PAT@75..76 + UNDERSCORE@75..76 "_" + COLON@76..77 ":" + WHITESPACE@77..78 " " + DYN_TRAIT_TYPE@78..121 + TYPE_BOUND_LIST@78..121 + TYPE_BOUND@78..88 + PATH_TYPE@78..88 + PATH@78..88 + PATH_SEGMENT@78..88 + NAME_REF@78..81 + IDENT@78..81 "Box" + GENERIC_ARG_LIST@81..88 + L_ANGLE@81..82 "<" + TYPE_ARG@82..88 + PAREN_TYPE@82..88 + L_PAREN@82..83 "(" + PATH_TYPE@83..87 + PATH@83..87 + PATH_SEGMENT@83..87 + NAME_REF@83..87 + IDENT@83..87 "Copy" + R_PAREN@87..88 ")" + WHITESPACE@88..89 " " + PLUS@89..90 "+" + WHITESPACE@90..91 " " + TYPE_BOUND@91..99 + L_PAREN@91..92 "(" + QUESTION@92..93 "?" + PATH_TYPE@93..98 + PATH@93..98 + PATH_SEGMENT@93..98 + NAME_REF@93..98 + IDENT@93..98 "Sized" + R_PAREN@98..99 ")" + WHITESPACE@99..100 " " + PLUS@100..101 "+" + WHITESPACE@101..102 " " + TYPE_BOUND@102..121 + L_PAREN@102..103 "(" + FOR_TYPE@103..120 + FOR_KW@103..106 "for" + GENERIC_PARAM_LIST@106..110 + L_ANGLE@106..107 "<" + LIFETIME_PARAM@107..109 + LIFETIME@107..109 "\'a" + R_ANGLE@109..110 ">" + WHITESPACE@110..111 " " + PATH_TYPE@111..120 + PATH@111..120 + PATH_SEGMENT@111..120 + NAME_REF@111..116 + IDENT@111..116 "Trait" + GENERIC_ARG_LIST@116..120 + L_ANGLE@116..117 "<" + LIFETIME_ARG@117..119 + LIFETIME@117..119 "\'a" + R_ANGLE@119..120 ">" + R_PAREN@120..121 ")" + EXPR_STMT@121..123 + ERROR@121..122 + R_ANGLE@121..122 ">" + SEMICOLON@122..123 ";" + WHITESPACE@123..128 "\n " + LET_STMT@128..141 + LET_KW@128..131 "let" + WHITESPACE@131..132 " " + WILDCARD_PAT@132..133 + UNDERSCORE@132..133 "_" + COLON@133..134 ":" + WHITESPACE@134..135 " " + PATH_TYPE@135..141 + PATH@135..141 + PATH_SEGMENT@135..141 + NAME_REF@135..138 + IDENT@135..138 "Box" + GENERIC_ARG_LIST@138..141 + L_ANGLE@138..139 "<" + TYPE_ARG@139..141 + PAREN_TYPE@139..141 + L_PAREN@139..140 "(" + ERROR@140..141 + QUESTION@140..141 "?" + EXPR_STMT@141..146 + PATH_EXPR@141..146 + PATH@141..146 + PATH_SEGMENT@141..146 + NAME_REF@141..146 + IDENT@141..146 "Sized" + EXPR_STMT@146..147 + ERROR@146..147 + R_PAREN@146..147 ")" + WHITESPACE@147..148 " " + EXPR_STMT@148..149 + ERROR@148..149 + PLUS@148..149 "+" + WHITESPACE@149..150 " " + EXPR_STMT@150..180 + TUPLE_EXPR@150..180 + L_PAREN@150..151 "(" + FOR_EXPR@151..180 + FOR_KW@151..154 "for" + PATH_PAT@154..158 + PATH@154..158 + PATH_SEGMENT@154..158 + L_ANGLE@154..155 "<" + ERROR@155..157 + LIFETIME@155..157 "\'a" + R_ANGLE@157..158 ">" + WHITESPACE@158..159 " " + 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 + SEMICOLON@179..180 ";" + WHITESPACE@180..185 "\n " + LET_STMT@185..235 + LET_KW@185..188 "let" + WHITESPACE@188..189 " " + WILDCARD_PAT@189..190 + UNDERSCORE@189..190 "_" + COLON@190..191 ":" + WHITESPACE@191..192 " " + DYN_TRAIT_TYPE@192..235 + TYPE_BOUND_LIST@192..235 + TYPE_BOUND@192..215 + PATH_TYPE@192..215 + PATH@192..215 + PATH_SEGMENT@192..215 + NAME_REF@192..195 + IDENT@192..195 "Box" + GENERIC_ARG_LIST@195..215 + L_ANGLE@195..196 "<" + TYPE_ARG@196..215 + PAREN_TYPE@196..215 + L_PAREN@196..197 "(" + FOR_TYPE@197..214 + FOR_KW@197..200 "for" + GENERIC_PARAM_LIST@200..204 + L_ANGLE@200..201 "<" + LIFETIME_PARAM@201..203 + LIFETIME@201..203 "\'a" + R_ANGLE@203..204 ">" + WHITESPACE@204..205 " " + PATH_TYPE@205..214 + PATH@205..214 + PATH_SEGMENT@205..214 + NAME_REF@205..210 + IDENT@205..210 "Trait" + GENERIC_ARG_LIST@210..214 + L_ANGLE@210..211 "<" + LIFETIME_ARG@211..213 + LIFETIME@211..213 "\'a" + R_ANGLE@213..214 ">" + R_PAREN@214..215 ")" + WHITESPACE@215..216 " " + PLUS@216..217 "+" + WHITESPACE@217..218 " " + TYPE_BOUND@218..224 + L_PAREN@218..219 "(" + PATH_TYPE@219..223 + PATH@219..223 + PATH_SEGMENT@219..223 + NAME_REF@219..223 + IDENT@219..223 "Copy" + R_PAREN@223..224 ")" + WHITESPACE@224..225 " " + PLUS@225..226 "+" + WHITESPACE@226..227 " " + TYPE_BOUND@227..235 + L_PAREN@227..228 "(" + QUESTION@228..229 "?" + PATH_TYPE@229..234 + PATH@229..234 + PATH_SEGMENT@229..234 + NAME_REF@229..234 + IDENT@229..234 "Sized" + R_PAREN@234..235 ")" + EXPR_STMT@235..237 + ERROR@235..236 + R_ANGLE@235..236 ">" + SEMICOLON@236..237 ";" + WHITESPACE@237..238 "\n" + R_CURLY@238..239 "}" + WHITESPACE@239..240 "\n" +error 88..88: expected COMMA +error 88..88: expected R_ANGLE +error 121..121: expected SEMICOLON +error 121..121: expected expression +error 140..140: expected type +error 141..141: expected R_PAREN +error 141..141: expected COMMA +error 141..141: expected R_ANGLE +error 141..141: expected SEMICOLON +error 146..146: expected SEMICOLON +error 146..146: expected expression +error 147..147: expected SEMICOLON +error 148..148: expected expression +error 149..149: expected SEMICOLON +error 155..155: expected type +error 158..158: expected IN_KW +error 165..165: expected expression +error 168..168: expected expression +error 179..179: expected expression +error 180..180: expected a block +error 180..180: expected COMMA +error 180..180: expected expression +error 180..180: expected R_PAREN +error 180..180: expected SEMICOLON +error 215..215: expected COMMA +error 215..215: expected R_ANGLE +error 235..235: expected SEMICOLON +error 235..235: expected expression diff --git a/crates/syntax/test_data/parser/err/0024_many_type_parens.rs b/crates/syntax/test_data/parser/err/0024_many_type_parens.rs new file mode 100644 index 000000000..6c2e95c02 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0024_many_type_parens.rs @@ -0,0 +1,7 @@ +fn f Trait<'a>)>() {} + +fn main() { + let _: Box<(Copy) + (?Sized) + (for<'a> Trait<'a>)>; + let _: Box<(?Sized) + (for<'a> Trait<'a>) + (Copy)>; + let _: Box<(for<'a> Trait<'a>) + (Copy) + (?Sized)>; +} diff --git a/crates/syntax/test_data/parser/err/0025_nope.rast b/crates/syntax/test_data/parser/err/0025_nope.rast new file mode 100644 index 000000000..83fc9fe77 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0025_nope.rast @@ -0,0 +1,202 @@ +SOURCE_FILE@0..575 + FN@0..574 + 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..574 + L_CURLY@10..11 "{" + WHITESPACE@11..16 "\n " + ENUM@16..152 + ENUM_KW@16..20 "enum" + WHITESPACE@20..21 " " + NAME@21..25 + IDENT@21..25 "Test" + WHITESPACE@25..26 " " + VARIANT_LIST@26..152 + L_CURLY@26..27 "{" + WHITESPACE@27..36 "\n " + VARIANT@36..40 + NAME@36..40 + IDENT@36..40 "Var1" + COMMA@40..41 "," + WHITESPACE@41..50 "\n " + VARIANT@50..62 + NAME@50..54 + IDENT@50..54 "Var2" + TUPLE_FIELD_LIST@54..62 + L_PAREN@54..55 "(" + TUPLE_FIELD@55..61 + PATH_TYPE@55..61 + PATH@55..61 + PATH_SEGMENT@55..61 + NAME_REF@55..61 + IDENT@55..61 "String" + R_PAREN@61..62 ")" + COMMA@62..63 "," + WHITESPACE@63..72 "\n " + VARIANT@72..145 + NAME@72..76 + IDENT@72..76 "Var3" + WHITESPACE@76..77 " " + RECORD_FIELD_LIST@77..145 + L_CURLY@77..78 "{" + WHITESPACE@78..91 "\n " + RECORD_FIELD@91..95 + NAME@91..94 + IDENT@91..94 "abc" + COLON@94..95 ":" + WHITESPACE@95..96 " " + ERROR@96..98 + L_CURLY@96..97 "{" + R_CURLY@97..98 "}" + ERROR@98..99 + COMMA@98..99 "," + WHITESPACE@99..100 " " + COMMENT@100..135 "//~ ERROR: expected t ..." + WHITESPACE@135..144 "\n " + R_CURLY@144..145 "}" + COMMA@145..146 "," + WHITESPACE@146..151 "\n " + R_CURLY@151..152 "}" + WHITESPACE@152..158 "\n\n " + COMMENT@158..171 "// recover..." + WHITESPACE@171..176 "\n " + LET_STMT@176..186 + LET_KW@176..179 "let" + WHITESPACE@179..180 " " + IDENT_PAT@180..181 + NAME@180..181 + IDENT@180..181 "a" + WHITESPACE@181..182 " " + EQ@182..183 "=" + WHITESPACE@183..184 " " + LITERAL@184..185 + INT_NUMBER@184..185 "1" + SEMICOLON@185..186 ";" + WHITESPACE@186..191 "\n " + ENUM@191..223 + ENUM_KW@191..195 "enum" + WHITESPACE@195..196 " " + NAME@196..201 + IDENT@196..201 "Test2" + WHITESPACE@201..202 " " + VARIANT_LIST@202..223 + L_CURLY@202..203 "{" + WHITESPACE@203..212 "\n " + VARIANT@212..216 + NAME@212..216 + IDENT@212..216 "Fine" + COMMA@216..217 "," + WHITESPACE@217..222 "\n " + R_CURLY@222..223 "}" + WHITESPACE@223..229 "\n\n " + ENUM@229..300 + ENUM_KW@229..233 "enum" + WHITESPACE@233..234 " " + NAME@234..239 + IDENT@234..239 "Test3" + WHITESPACE@239..240 " " + VARIANT_LIST@240..300 + L_CURLY@240..241 "{" + WHITESPACE@241..250 "\n " + VARIANT@250..293 + NAME@250..259 + IDENT@250..259 "StillFine" + WHITESPACE@259..260 " " + RECORD_FIELD_LIST@260..293 + L_CURLY@260..261 "{" + WHITESPACE@261..274 "\n " + RECORD_FIELD@274..282 + NAME@274..277 + IDENT@274..277 "def" + COLON@277..278 ":" + WHITESPACE@278..279 " " + PATH_TYPE@279..282 + PATH@279..282 + PATH_SEGMENT@279..282 + NAME_REF@279..282 + IDENT@279..282 "i32" + COMMA@282..283 "," + WHITESPACE@283..292 "\n " + R_CURLY@292..293 "}" + COMMA@293..294 "," + WHITESPACE@294..299 "\n " + R_CURLY@299..300 "}" + WHITESPACE@300..306 "\n\n " + EXPR_STMT@306..459 + BLOCK_EXPR@306..459 + L_CURLY@306..307 "{" + WHITESPACE@307..316 "\n " + ENUM@316..453 + COMMENT@316..329 "// fail again" + WHITESPACE@329..338 "\n " + ENUM_KW@338..342 "enum" + WHITESPACE@342..343 " " + NAME@343..348 + IDENT@343..348 "Test4" + WHITESPACE@348..349 " " + VARIANT_LIST@349..453 + L_CURLY@349..350 "{" + WHITESPACE@350..363 "\n " + VARIANT@363..372 + NAME@363..367 + IDENT@363..367 "Nope" + TUPLE_FIELD_LIST@367..372 + L_PAREN@367..368 "(" + TUPLE_FIELD@368..371 + PATH_TYPE@368..371 + PATH@368..371 + PATH_SEGMENT@368..371 + NAME_REF@368..371 + IDENT@368..371 "i32" + WHITESPACE@371..372 " " + ERROR@372..372 + ERROR@372..374 + L_CURLY@372..373 "{" + R_CURLY@373..374 "}" + ERROR@374..375 + R_PAREN@374..375 ")" + WHITESPACE@375..376 " " + COMMENT@376..396 "//~ ERROR: found `{`" + WHITESPACE@396..422 "\n ..." + COMMENT@422..443 "//~^ ERROR: found `{`" + WHITESPACE@443..452 "\n " + R_CURLY@452..453 "}" + WHITESPACE@453..458 "\n " + R_CURLY@458..459 "}" + WHITESPACE@459..464 "\n " + COMMENT@464..486 "// still recover later" + WHITESPACE@486..491 "\n " + LET_STMT@491..510 + LET_KW@491..494 "let" + WHITESPACE@494..495 " " + IDENT_PAT@495..505 + NAME@495..505 + IDENT@495..505 "bad_syntax" + WHITESPACE@505..506 " " + EQ@506..507 "=" + WHITESPACE@507..508 " " + ERROR@508..509 + UNDERSCORE@508..509 "_" + SEMICOLON@509..510 ";" + WHITESPACE@510..511 " " + COMMENT@511..572 "//~ ERROR: expected e ..." + WHITESPACE@572..573 "\n" + R_CURLY@573..574 "}" + WHITESPACE@574..575 "\n" +error 95..95: expected type +error 95..95: expected COMMA +error 96..96: expected field +error 98..98: expected field declaration +error 371..371: expected COMMA +error 372..372: expected a type +error 372..372: expected R_PAREN +error 372..372: expected COMMA +error 372..372: expected enum variant +error 374..374: expected enum variant +error 508..508: expected expression diff --git a/crates/syntax/test_data/parser/err/0025_nope.rs b/crates/syntax/test_data/parser/err/0025_nope.rs new file mode 100644 index 000000000..28726ed51 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0025_nope.rs @@ -0,0 +1,31 @@ +fn main() { + enum Test { + Var1, + Var2(String), + Var3 { + abc: {}, //~ ERROR: expected type, found `{` + }, + } + + // recover... + let a = 1; + enum Test2 { + Fine, + } + + enum Test3 { + StillFine { + def: i32, + }, + } + + { + // fail again + enum Test4 { + Nope(i32 {}) //~ ERROR: found `{` + //~^ ERROR: found `{` + } + } + // still recover later + let bad_syntax = _; //~ ERROR: expected expression, found reserved identifier `_` +} diff --git a/crates/syntax/test_data/parser/err/0026_imp_recovery.rast b/crates/syntax/test_data/parser/err/0026_imp_recovery.rast new file mode 100644 index 000000000..1b08c834e --- /dev/null +++ b/crates/syntax/test_data/parser/err/0026_imp_recovery.rast @@ -0,0 +1,49 @@ +SOURCE_FILE@0..38 + IMPL@0..14 + IMPL_KW@0..4 "impl" + GENERIC_PARAM_LIST@4..14 + L_ANGLE@4..5 "<" + TYPE_PARAM@5..13 + NAME@5..6 + IDENT@5..6 "T" + COLON@6..7 ":" + WHITESPACE@7..8 " " + TYPE_BOUND_LIST@8..13 + TYPE_BOUND@8..13 + PATH_TYPE@8..13 + PATH@8..13 + PATH_SEGMENT@8..13 + NAME_REF@8..13 + IDENT@8..13 "Clone" + R_ANGLE@13..14 ">" + WHITESPACE@14..15 "\n" + IMPL@15..37 + IMPL_KW@15..19 "impl" + GENERIC_PARAM_LIST@19..22 + L_ANGLE@19..20 "<" + TYPE_PARAM@20..21 + NAME@20..21 + IDENT@20..21 "T" + R_ANGLE@21..22 ">" + WHITESPACE@22..23 " " + PATH_TYPE@23..34 + PATH@23..34 + PATH_SEGMENT@23..34 + NAME_REF@23..31 + IDENT@23..31 "OnceCell" + GENERIC_ARG_LIST@31..34 + L_ANGLE@31..32 "<" + TYPE_ARG@32..33 + PATH_TYPE@32..33 + PATH@32..33 + PATH_SEGMENT@32..33 + NAME_REF@32..33 + IDENT@32..33 "T" + R_ANGLE@33..34 ">" + WHITESPACE@34..35 " " + ASSOC_ITEM_LIST@35..37 + L_CURLY@35..36 "{" + R_CURLY@36..37 "}" + WHITESPACE@37..38 "\n" +error 14..14: expected trait or type +error 14..14: expected `{` diff --git a/crates/syntax/test_data/parser/err/0026_imp_recovery.rs b/crates/syntax/test_data/parser/err/0026_imp_recovery.rs new file mode 100644 index 000000000..829ca1c4b --- /dev/null +++ b/crates/syntax/test_data/parser/err/0026_imp_recovery.rs @@ -0,0 +1,2 @@ +impl +impl OnceCell {} diff --git a/crates/syntax/test_data/parser/err/0027_incomplere_where_for.rast b/crates/syntax/test_data/parser/err/0027_incomplere_where_for.rast new file mode 100644 index 000000000..a8e42e6ea --- /dev/null +++ b/crates/syntax/test_data/parser/err/0027_incomplere_where_for.rast @@ -0,0 +1,27 @@ +SOURCE_FILE@0..30 + FN@0..29 + FN_KW@0..2 "fn" + WHITESPACE@2..3 " " + NAME@3..6 + IDENT@3..6 "foo" + PARAM_LIST@6..8 + L_PAREN@6..7 "(" + R_PAREN@7..8 ")" + WHITESPACE@8..13 "\n " + WHERE_CLAUSE@13..26 + WHERE_KW@13..18 "where" + WHITESPACE@18..19 " " + WHERE_PRED@19..26 + FOR_KW@19..22 "for" + GENERIC_PARAM_LIST@22..26 + L_ANGLE@22..23 "<" + LIFETIME_PARAM@23..25 + LIFETIME@23..25 "\'a" + R_ANGLE@25..26 ">" + WHITESPACE@26..27 "\n" + BLOCK_EXPR@27..29 + L_CURLY@27..28 "{" + R_CURLY@28..29 "}" + WHITESPACE@29..30 "\n" +error 26..26: expected type +error 26..26: expected colon diff --git a/crates/syntax/test_data/parser/err/0027_incomplere_where_for.rs b/crates/syntax/test_data/parser/err/0027_incomplere_where_for.rs new file mode 100644 index 000000000..2792c2084 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0027_incomplere_where_for.rs @@ -0,0 +1,3 @@ +fn foo() + where for<'a> +{} diff --git a/crates/syntax/test_data/parser/err/0029_field_completion.rast b/crates/syntax/test_data/parser/err/0029_field_completion.rast new file mode 100644 index 000000000..c6402cdd8 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0029_field_completion.rast @@ -0,0 +1,35 @@ +SOURCE_FILE@0..24 + FN@0..23 + FN_KW@0..2 "fn" + WHITESPACE@2..3 " " + NAME@3..6 + IDENT@3..6 "foo" + PARAM_LIST@6..12 + L_PAREN@6..7 "(" + PARAM@7..11 + IDENT_PAT@7..8 + NAME@7..8 + IDENT@7..8 "a" + COLON@8..9 ":" + WHITESPACE@9..10 " " + PATH_TYPE@10..11 + PATH@10..11 + PATH_SEGMENT@10..11 + NAME_REF@10..11 + IDENT@10..11 "A" + R_PAREN@11..12 ")" + WHITESPACE@12..13 " " + BLOCK_EXPR@13..23 + L_CURLY@13..14 "{" + WHITESPACE@14..19 "\n " + FIELD_EXPR@19..21 + PATH_EXPR@19..20 + PATH@19..20 + PATH_SEGMENT@19..20 + NAME_REF@19..20 + IDENT@19..20 "a" + DOT@20..21 "." + WHITESPACE@21..22 "\n" + R_CURLY@22..23 "}" + WHITESPACE@23..24 "\n" +error 21..21: expected field name or number diff --git a/crates/syntax/test_data/parser/err/0029_field_completion.rs b/crates/syntax/test_data/parser/err/0029_field_completion.rs new file mode 100644 index 000000000..a7cdc17bb --- /dev/null +++ b/crates/syntax/test_data/parser/err/0029_field_completion.rs @@ -0,0 +1,3 @@ +fn foo(a: A) { + a. +} diff --git a/crates/syntax/test_data/parser/err/0031_block_inner_attrs.rast b/crates/syntax/test_data/parser/err/0031_block_inner_attrs.rast new file mode 100644 index 000000000..a443b37db --- /dev/null +++ b/crates/syntax/test_data/parser/err/0031_block_inner_attrs.rast @@ -0,0 +1,121 @@ +SOURCE_FILE@0..350 + FN@0..349 + FN_KW@0..2 "fn" + WHITESPACE@2..3 " " + NAME@3..8 + IDENT@3..8 "block" + PARAM_LIST@8..10 + L_PAREN@8..9 "(" + R_PAREN@9..10 ")" + WHITESPACE@10..11 " " + BLOCK_EXPR@11..349 + L_CURLY@11..12 "{" + WHITESPACE@12..17 "\n " + LET_STMT@17..129 + LET_KW@17..20 "let" + WHITESPACE@20..21 " " + IDENT_PAT@21..26 + NAME@21..26 + IDENT@21..26 "inner" + WHITESPACE@26..27 " " + EQ@27..28 "=" + WHITESPACE@28..29 " " + BLOCK_EXPR@29..128 + L_CURLY@29..30 "{" + WHITESPACE@30..39 "\n " + ATTR@39..83 + POUND@39..40 "#" + BANG@40..41 "!" + L_BRACK@41..42 "[" + PATH@42..45 + PATH_SEGMENT@42..45 + NAME_REF@42..45 + IDENT@42..45 "doc" + TOKEN_TREE@45..82 + L_PAREN@45..46 "(" + STRING@46..81 "\"Inner attributes not ..." + R_PAREN@81..82 ")" + R_BRACK@82..83 "]" + WHITESPACE@83..92 "\n " + COMMENT@92..122 "//! Nor are ModuleDoc ..." + WHITESPACE@122..127 "\n " + R_CURLY@127..128 "}" + SEMICOLON@128..129 ";" + WHITESPACE@129..134 "\n " + EXPR_STMT@134..257 + IF_EXPR@134..257 + IF_KW@134..136 "if" + WHITESPACE@136..137 " " + CONDITION@137..141 + LITERAL@137..141 + TRUE_KW@137..141 "true" + WHITESPACE@141..142 " " + BLOCK_EXPR@142..257 + L_CURLY@142..143 "{" + WHITESPACE@143..152 "\n " + ATTR@152..171 + POUND@152..153 "#" + BANG@153..154 "!" + L_BRACK@154..155 "[" + PATH@155..158 + PATH_SEGMENT@155..158 + NAME_REF@155..158 + IDENT@155..158 "doc" + TOKEN_TREE@158..170 + L_PAREN@158..159 "(" + STRING@159..169 "\"Nor here\"" + R_PAREN@169..170 ")" + R_BRACK@170..171 "]" + WHITESPACE@171..180 "\n " + ATTR@180..212 + POUND@180..181 "#" + BANG@181..182 "!" + L_BRACK@182..183 "[" + PATH@183..186 + PATH_SEGMENT@183..186 + NAME_REF@183..186 + IDENT@183..186 "doc" + TOKEN_TREE@186..211 + L_PAREN@186..187 "(" + STRING@187..210 "\"We error on each attr\"" + R_PAREN@210..211 ")" + R_BRACK@211..212 "]" + WHITESPACE@212..221 "\n " + COMMENT@221..251 "//! Nor are ModuleDoc ..." + WHITESPACE@251..256 "\n " + R_CURLY@256..257 "}" + WHITESPACE@257..262 "\n " + WHILE_EXPR@262..347 + WHILE_KW@262..267 "while" + WHITESPACE@267..268 " " + CONDITION@268..272 + LITERAL@268..272 + TRUE_KW@268..272 "true" + WHITESPACE@272..273 " " + BLOCK_EXPR@273..347 + L_CURLY@273..274 "{" + WHITESPACE@274..283 "\n " + ATTR@283..302 + POUND@283..284 "#" + BANG@284..285 "!" + L_BRACK@285..286 "[" + PATH@286..289 + PATH_SEGMENT@286..289 + NAME_REF@286..289 + IDENT@286..289 "doc" + TOKEN_TREE@289..301 + L_PAREN@289..290 "(" + STRING@290..300 "\"Nor here\"" + R_PAREN@300..301 ")" + R_BRACK@301..302 "]" + WHITESPACE@302..311 "\n " + COMMENT@311..341 "//! Nor are ModuleDoc ..." + WHITESPACE@341..346 "\n " + R_CURLY@346..347 "}" + WHITESPACE@347..348 "\n" + R_CURLY@348..349 "}" + WHITESPACE@349..350 "\n" +error 39..83: A block in this position cannot accept inner attributes +error 152..171: A block in this position cannot accept inner attributes +error 180..212: A block in this position cannot accept inner attributes +error 283..302: A block in this position cannot accept inner attributes diff --git a/crates/syntax/test_data/parser/err/0031_block_inner_attrs.rs b/crates/syntax/test_data/parser/err/0031_block_inner_attrs.rs new file mode 100644 index 000000000..6a04f2d0a --- /dev/null +++ b/crates/syntax/test_data/parser/err/0031_block_inner_attrs.rs @@ -0,0 +1,15 @@ +fn block() { + let inner = { + #![doc("Inner attributes not allowed here")] + //! Nor are ModuleDoc comments + }; + if true { + #![doc("Nor here")] + #![doc("We error on each attr")] + //! Nor are ModuleDoc comments + } + while true { + #![doc("Nor here")] + //! Nor are ModuleDoc comments + } +} diff --git a/crates/syntax/test_data/parser/err/0032_match_arms_inner_attrs.rast b/crates/syntax/test_data/parser/err/0032_match_arms_inner_attrs.rast new file mode 100644 index 000000000..672dd054a --- /dev/null +++ b/crates/syntax/test_data/parser/err/0032_match_arms_inner_attrs.rast @@ -0,0 +1,203 @@ +SOURCE_FILE@0..293 + FN@0..292 + FN_KW@0..2 "fn" + WHITESPACE@2..3 " " + NAME@3..6 + IDENT@3..6 "foo" + PARAM_LIST@6..8 + L_PAREN@6..7 "(" + R_PAREN@7..8 ")" + WHITESPACE@8..9 " " + BLOCK_EXPR@9..292 + L_CURLY@9..10 "{" + WHITESPACE@10..15 "\n " + EXPR_STMT@15..101 + MATCH_EXPR@15..101 + MATCH_KW@15..20 "match" + WHITESPACE@20..21 " " + TUPLE_EXPR@21..23 + L_PAREN@21..22 "(" + R_PAREN@22..23 ")" + WHITESPACE@23..24 " " + MATCH_ARM_LIST@24..101 + L_CURLY@24..25 "{" + WHITESPACE@25..34 "\n " + MATCH_ARM@34..41 + WILDCARD_PAT@34..35 + UNDERSCORE@34..35 "_" + WHITESPACE@35..36 " " + FAT_ARROW@36..38 "=>" + WHITESPACE@38..39 " " + TUPLE_EXPR@39..41 + L_PAREN@39..40 "(" + R_PAREN@40..41 ")" + COMMA@41..42 "," + WHITESPACE@42..51 "\n " + MATCH_ARM@51..78 + ATTR@51..52 + POUND@51..52 "#" + ERROR@52..53 + BANG@52..53 "!" + ARRAY_EXPR@53..78 + L_BRACK@53..54 "[" + CALL_EXPR@54..77 + PATH_EXPR@54..57 + PATH@54..57 + PATH_SEGMENT@54..57 + NAME_REF@54..57 + IDENT@54..57 "doc" + ARG_LIST@57..77 + L_PAREN@57..58 "(" + LITERAL@58..76 + STRING@58..76 "\"Not allowed here\"" + R_PAREN@76..77 ")" + R_BRACK@77..78 "]" + WHITESPACE@78..87 "\n " + MATCH_ARM@87..94 + WILDCARD_PAT@87..88 + UNDERSCORE@87..88 "_" + WHITESPACE@88..89 " " + FAT_ARROW@89..91 "=>" + WHITESPACE@91..92 " " + TUPLE_EXPR@92..94 + L_PAREN@92..93 "(" + R_PAREN@93..94 ")" + COMMA@94..95 "," + WHITESPACE@95..100 "\n " + R_CURLY@100..101 "}" + WHITESPACE@101..107 "\n\n " + EXPR_STMT@107..185 + MATCH_EXPR@107..185 + MATCH_KW@107..112 "match" + WHITESPACE@112..113 " " + TUPLE_EXPR@113..115 + L_PAREN@113..114 "(" + R_PAREN@114..115 ")" + WHITESPACE@115..116 " " + MATCH_ARM_LIST@116..185 + L_CURLY@116..117 "{" + WHITESPACE@117..126 "\n " + MATCH_ARM@126..133 + WILDCARD_PAT@126..127 + UNDERSCORE@126..127 "_" + WHITESPACE@127..128 " " + FAT_ARROW@128..130 "=>" + WHITESPACE@130..131 " " + TUPLE_EXPR@131..133 + L_PAREN@131..132 "(" + R_PAREN@132..133 ")" + COMMA@133..134 "," + WHITESPACE@134..143 "\n " + MATCH_ARM@143..150 + WILDCARD_PAT@143..144 + UNDERSCORE@143..144 "_" + WHITESPACE@144..145 " " + FAT_ARROW@145..147 "=>" + WHITESPACE@147..148 " " + TUPLE_EXPR@148..150 + L_PAREN@148..149 "(" + R_PAREN@149..150 ")" + COMMA@150..151 "," + WHITESPACE@151..160 "\n " + MATCH_ARM@160..179 + ATTR@160..161 + POUND@160..161 "#" + ERROR@161..162 + BANG@161..162 "!" + ARRAY_EXPR@162..179 + L_BRACK@162..163 "[" + CALL_EXPR@163..178 + PATH_EXPR@163..166 + PATH@163..166 + PATH_SEGMENT@163..166 + NAME_REF@163..166 + IDENT@163..166 "doc" + ARG_LIST@166..178 + L_PAREN@166..167 "(" + LITERAL@167..177 + STRING@167..177 "\"Nor here\"" + R_PAREN@177..178 ")" + R_BRACK@178..179 "]" + WHITESPACE@179..184 "\n " + R_CURLY@184..185 "}" + WHITESPACE@185..191 "\n\n " + MATCH_EXPR@191..290 + MATCH_KW@191..196 "match" + WHITESPACE@196..197 " " + TUPLE_EXPR@197..199 + L_PAREN@197..198 "(" + R_PAREN@198..199 ")" + WHITESPACE@199..200 " " + MATCH_ARM_LIST@200..290 + L_CURLY@200..201 "{" + WHITESPACE@201..210 "\n " + MATCH_ARM@210..250 + ATTR@210..222 + POUND@210..211 "#" + L_BRACK@211..212 "[" + PATH@212..215 + PATH_SEGMENT@212..215 + NAME_REF@212..215 + IDENT@212..215 "cfg" + TOKEN_TREE@215..221 + L_PAREN@215..216 "(" + IDENT@216..220 "test" + R_PAREN@220..221 ")" + R_BRACK@221..222 "]" + WHITESPACE@222..231 "\n " + ATTR@231..232 + POUND@231..232 "#" + ERROR@232..233 + BANG@232..233 "!" + ARRAY_EXPR@233..250 + L_BRACK@233..234 "[" + CALL_EXPR@234..249 + PATH_EXPR@234..237 + PATH@234..237 + PATH_SEGMENT@234..237 + NAME_REF@234..237 + IDENT@234..237 "doc" + ARG_LIST@237..249 + L_PAREN@237..238 "(" + LITERAL@238..248 + STRING@238..248 "\"Nor here\"" + R_PAREN@248..249 ")" + R_BRACK@249..250 "]" + WHITESPACE@250..259 "\n " + MATCH_ARM@259..266 + WILDCARD_PAT@259..260 + UNDERSCORE@259..260 "_" + WHITESPACE@260..261 " " + FAT_ARROW@261..263 "=>" + WHITESPACE@263..264 " " + TUPLE_EXPR@264..266 + L_PAREN@264..265 "(" + R_PAREN@265..266 ")" + COMMA@266..267 "," + WHITESPACE@267..276 "\n " + MATCH_ARM@276..283 + WILDCARD_PAT@276..277 + UNDERSCORE@276..277 "_" + WHITESPACE@277..278 " " + FAT_ARROW@278..280 "=>" + WHITESPACE@280..281 " " + TUPLE_EXPR@281..283 + L_PAREN@281..282 "(" + R_PAREN@282..283 ")" + COMMA@283..284 "," + WHITESPACE@284..289 "\n " + R_CURLY@289..290 "}" + WHITESPACE@290..291 "\n" + R_CURLY@291..292 "}" + WHITESPACE@292..293 "\n" +error 52..52: expected `[` +error 52..52: expected pattern +error 53..53: expected FAT_ARROW +error 78..78: expected COMMA +error 161..161: expected `[` +error 161..161: expected pattern +error 162..162: expected FAT_ARROW +error 232..232: expected `[` +error 232..232: expected pattern +error 233..233: expected FAT_ARROW +error 250..250: expected COMMA diff --git a/crates/syntax/test_data/parser/err/0032_match_arms_inner_attrs.rs b/crates/syntax/test_data/parser/err/0032_match_arms_inner_attrs.rs new file mode 100644 index 000000000..06aa47770 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0032_match_arms_inner_attrs.rs @@ -0,0 +1,20 @@ +fn foo() { + match () { + _ => (), + #![doc("Not allowed here")] + _ => (), + } + + match () { + _ => (), + _ => (), + #![doc("Nor here")] + } + + match () { + #[cfg(test)] + #![doc("Nor here")] + _ => (), + _ => (), + } +} diff --git a/crates/syntax/test_data/parser/err/0033_match_arms_outer_attrs.rast b/crates/syntax/test_data/parser/err/0033_match_arms_outer_attrs.rast new file mode 100644 index 000000000..33bb085e9 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0033_match_arms_outer_attrs.rast @@ -0,0 +1,66 @@ +SOURCE_FILE@0..89 + FN@0..88 + FN_KW@0..2 "fn" + WHITESPACE@2..3 " " + NAME@3..6 + IDENT@3..6 "foo" + PARAM_LIST@6..8 + L_PAREN@6..7 "(" + R_PAREN@7..8 ")" + WHITESPACE@8..9 " " + BLOCK_EXPR@9..88 + L_CURLY@9..10 "{" + WHITESPACE@10..15 "\n " + MATCH_EXPR@15..86 + MATCH_KW@15..20 "match" + WHITESPACE@20..21 " " + TUPLE_EXPR@21..23 + L_PAREN@21..22 "(" + R_PAREN@22..23 ")" + WHITESPACE@23..24 " " + MATCH_ARM_LIST@24..86 + L_CURLY@24..25 "{" + WHITESPACE@25..34 "\n " + MATCH_ARM@34..41 + WILDCARD_PAT@34..35 + UNDERSCORE@34..35 "_" + WHITESPACE@35..36 " " + FAT_ARROW@36..38 "=>" + WHITESPACE@38..39 " " + TUPLE_EXPR@39..41 + L_PAREN@39..40 "(" + R_PAREN@40..41 ")" + COMMA@41..42 "," + WHITESPACE@42..51 "\n " + MATCH_ARM@51..58 + WILDCARD_PAT@51..52 + UNDERSCORE@51..52 "_" + WHITESPACE@52..53 " " + FAT_ARROW@53..55 "=>" + WHITESPACE@55..56 " " + TUPLE_EXPR@56..58 + L_PAREN@56..57 "(" + R_PAREN@57..58 ")" + COMMA@58..59 "," + WHITESPACE@59..68 "\n " + MATCH_ARM@68..80 + ATTR@68..80 + POUND@68..69 "#" + L_BRACK@69..70 "[" + PATH@70..73 + PATH_SEGMENT@70..73 + NAME_REF@70..73 + IDENT@70..73 "cfg" + TOKEN_TREE@73..79 + L_PAREN@73..74 "(" + IDENT@74..78 "test" + R_PAREN@78..79 ")" + R_BRACK@79..80 "]" + WHITESPACE@80..85 "\n " + R_CURLY@85..86 "}" + WHITESPACE@86..87 "\n" + R_CURLY@87..88 "}" + WHITESPACE@88..89 "\n" +error 80..80: expected pattern +error 80..80: expected FAT_ARROW +error 80..80: expected expression diff --git a/crates/syntax/test_data/parser/err/0033_match_arms_outer_attrs.rs b/crates/syntax/test_data/parser/err/0033_match_arms_outer_attrs.rs new file mode 100644 index 000000000..4635222da --- /dev/null +++ b/crates/syntax/test_data/parser/err/0033_match_arms_outer_attrs.rs @@ -0,0 +1,7 @@ +fn foo() { + match () { + _ => (), + _ => (), + #[cfg(test)] + } +} diff --git a/crates/syntax/test_data/parser/err/0034_bad_box_pattern.rast b/crates/syntax/test_data/parser/err/0034_bad_box_pattern.rast new file mode 100644 index 000000000..d9d49bfb5 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0034_bad_box_pattern.rast @@ -0,0 +1,95 @@ +SOURCE_FILE@0..91 + FN@0..89 + 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..89 + L_CURLY@10..11 "{" + WHITESPACE@11..16 "\n " + LET_STMT@16..27 + LET_KW@16..19 "let" + WHITESPACE@19..20 " " + IDENT_PAT@20..27 + REF_KW@20..23 "ref" + WHITESPACE@23..24 " " + ERROR@24..27 + BOX_KW@24..27 "box" + WHITESPACE@27..28 " " + EXPR_STMT@28..35 + BIN_EXPR@28..34 + PATH_EXPR@28..29 + PATH@28..29 + PATH_SEGMENT@28..29 + NAME_REF@28..29 + IDENT@28..29 "i" + WHITESPACE@29..30 " " + EQ@30..31 "=" + WHITESPACE@31..32 " " + TUPLE_EXPR@32..34 + L_PAREN@32..33 "(" + R_PAREN@33..34 ")" + SEMICOLON@34..35 ";" + WHITESPACE@35..40 "\n " + LET_STMT@40..51 + LET_KW@40..43 "let" + WHITESPACE@43..44 " " + IDENT_PAT@44..51 + MUT_KW@44..47 "mut" + WHITESPACE@47..48 " " + ERROR@48..51 + BOX_KW@48..51 "box" + WHITESPACE@51..52 " " + EXPR_STMT@52..59 + BIN_EXPR@52..58 + PATH_EXPR@52..53 + PATH@52..53 + PATH_SEGMENT@52..53 + NAME_REF@52..53 + IDENT@52..53 "i" + WHITESPACE@53..54 " " + EQ@54..55 "=" + WHITESPACE@55..56 " " + TUPLE_EXPR@56..58 + L_PAREN@56..57 "(" + R_PAREN@57..58 ")" + SEMICOLON@58..59 ";" + WHITESPACE@59..64 "\n " + LET_STMT@64..79 + LET_KW@64..67 "let" + WHITESPACE@67..68 " " + IDENT_PAT@68..79 + REF_KW@68..71 "ref" + WHITESPACE@71..72 " " + MUT_KW@72..75 "mut" + WHITESPACE@75..76 " " + ERROR@76..79 + BOX_KW@76..79 "box" + WHITESPACE@79..80 " " + EXPR_STMT@80..87 + BIN_EXPR@80..86 + PATH_EXPR@80..81 + PATH@80..81 + PATH_SEGMENT@80..81 + NAME_REF@80..81 + IDENT@80..81 "i" + WHITESPACE@81..82 " " + EQ@82..83 "=" + WHITESPACE@83..84 " " + TUPLE_EXPR@84..86 + L_PAREN@84..85 "(" + R_PAREN@85..86 ")" + SEMICOLON@86..87 ";" + WHITESPACE@87..88 "\n" + R_CURLY@88..89 "}" + WHITESPACE@89..91 "\n\n" +error 24..24: expected a name +error 27..27: expected SEMICOLON +error 48..48: expected a name +error 51..51: expected SEMICOLON +error 76..76: expected a name +error 79..79: expected SEMICOLON diff --git a/crates/syntax/test_data/parser/err/0034_bad_box_pattern.rs b/crates/syntax/test_data/parser/err/0034_bad_box_pattern.rs new file mode 100644 index 000000000..d3fa2e468 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0034_bad_box_pattern.rs @@ -0,0 +1,6 @@ +fn main() { + let ref box i = (); + let mut box i = (); + let ref mut box i = (); +} + diff --git a/crates/syntax/test_data/parser/err/0035_use_recover.rast b/crates/syntax/test_data/parser/err/0035_use_recover.rast new file mode 100644 index 000000000..2f03709eb --- /dev/null +++ b/crates/syntax/test_data/parser/err/0035_use_recover.rast @@ -0,0 +1,53 @@ +SOURCE_FILE@0..48 + USE@0..13 + USE_KW@0..3 "use" + WHITESPACE@3..4 " " + USE_TREE@4..12 + PATH@4..12 + PATH@4..7 + PATH_SEGMENT@4..7 + NAME_REF@4..7 + IDENT@4..7 "foo" + COLON2@7..9 "::" + PATH_SEGMENT@9..12 + NAME_REF@9..12 + IDENT@9..12 "bar" + SEMICOLON@12..13 ";" + WHITESPACE@13..14 "\n" + USE@14..17 + USE_KW@14..17 "use" + WHITESPACE@17..18 "\n" + USE@18..33 + USE_KW@18..21 "use" + WHITESPACE@21..22 " " + USE_TREE@22..32 + PATH@22..32 + PATH@22..27 + PATH_SEGMENT@22..27 + CRATE_KW@22..27 "crate" + COLON2@27..29 "::" + PATH_SEGMENT@29..32 + NAME_REF@29..32 + IDENT@29..32 "baz" + SEMICOLON@32..33 ";" + WHITESPACE@33..34 "\n" + USE@34..37 + USE_KW@34..37 "use" + WHITESPACE@37..38 "\n" + FN@38..47 + FN_KW@38..40 "fn" + WHITESPACE@40..41 " " + NAME@41..42 + IDENT@41..42 "f" + PARAM_LIST@42..44 + L_PAREN@42..43 "(" + R_PAREN@43..44 ")" + WHITESPACE@44..45 " " + BLOCK_EXPR@45..47 + L_CURLY@45..46 "{" + R_CURLY@46..47 "}" + WHITESPACE@47..48 "\n" +error 17..17: expected one of `*`, `::`, `{`, `self`, `super` or an identifier +error 17..17: expected SEMICOLON +error 37..37: expected one of `*`, `::`, `{`, `self`, `super` or an identifier +error 37..37: expected SEMICOLON diff --git a/crates/syntax/test_data/parser/err/0035_use_recover.rs b/crates/syntax/test_data/parser/err/0035_use_recover.rs new file mode 100644 index 000000000..4a2668126 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0035_use_recover.rs @@ -0,0 +1,5 @@ +use foo::bar; +use +use crate::baz; +use +fn f() {} diff --git a/crates/syntax/test_data/parser/err/0036_partial_use.rast b/crates/syntax/test_data/parser/err/0036_partial_use.rast new file mode 100644 index 000000000..ef6172f8a --- /dev/null +++ b/crates/syntax/test_data/parser/err/0036_partial_use.rast @@ -0,0 +1,51 @@ +SOURCE_FILE@0..37 + USE@0..36 + USE_KW@0..3 "use" + WHITESPACE@3..4 " " + USE_TREE@4..36 + PATH@4..7 + PATH_SEGMENT@4..7 + NAME_REF@4..7 + IDENT@4..7 "std" + COLON2@7..9 "::" + USE_TREE_LIST@9..36 + L_CURLY@9..10 "{" + USE_TREE@10..22 + PATH@10..22 + PATH@10..15 + PATH_SEGMENT@10..15 + NAME_REF@10..15 + IDENT@10..15 "error" + COLON2@15..17 "::" + PATH_SEGMENT@17..22 + NAME_REF@17..22 + IDENT@17..22 "Error" + ERROR@22..23 + SEMICOLON@22..23 ";" + WHITESPACE@23..24 "\n" + ERROR@24..27 + USE_KW@24..27 "use" + WHITESPACE@27..28 " " + USE_TREE@28..35 + PATH@28..35 + PATH@28..31 + PATH_SEGMENT@28..31 + NAME_REF@28..31 + IDENT@28..31 "std" + COLON2@31..33 "::" + PATH_SEGMENT@33..35 + NAME_REF@33..35 + IDENT@33..35 "io" + ERROR@35..36 + SEMICOLON@35..36 ";" + WHITESPACE@36..37 "\n" +error 22..22: expected COMMA +error 22..22: expected one of `*`, `::`, `{`, `self`, `super` or an identifier +error 23..23: expected COMMA +error 24..24: expected one of `*`, `::`, `{`, `self`, `super` or an identifier +error 27..27: expected COMMA +error 35..35: expected COMMA +error 35..35: expected one of `*`, `::`, `{`, `self`, `super` or an identifier +error 36..36: expected COMMA +error 36..36: expected R_CURLY +error 36..36: expected SEMICOLON diff --git a/crates/syntax/test_data/parser/err/0036_partial_use.rs b/crates/syntax/test_data/parser/err/0036_partial_use.rs new file mode 100644 index 000000000..d521a5bb2 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0036_partial_use.rs @@ -0,0 +1,2 @@ +use std::{error::Error; +use std::io; diff --git a/crates/syntax/test_data/parser/err/0037_visibility_in_traits.rast b/crates/syntax/test_data/parser/err/0037_visibility_in_traits.rast new file mode 100644 index 000000000..faf87d6e5 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0037_visibility_in_traits.rast @@ -0,0 +1,97 @@ +SOURCE_FILE@0..118 + IMPL@0..117 + IMPL_KW@0..4 "impl" + WHITESPACE@4..5 " " + PATH_TYPE@5..6 + PATH@5..6 + PATH_SEGMENT@5..6 + NAME_REF@5..6 + IDENT@5..6 "T" + WHITESPACE@6..7 " " + FOR_KW@7..10 "for" + WHITESPACE@10..11 " " + TUPLE_TYPE@11..13 + L_PAREN@11..12 "(" + R_PAREN@12..13 ")" + WHITESPACE@13..14 " " + ASSOC_ITEM_LIST@14..117 + L_CURLY@14..15 "{" + WHITESPACE@15..20 "\n " + FN@20..31 + FN_KW@20..22 "fn" + WHITESPACE@22..23 " " + NAME@23..26 + IDENT@23..26 "foo" + PARAM_LIST@26..28 + L_PAREN@26..27 "(" + R_PAREN@27..28 ")" + WHITESPACE@28..29 " " + BLOCK_EXPR@29..31 + L_CURLY@29..30 "{" + R_CURLY@30..31 "}" + WHITESPACE@31..36 "\n " + FN@36..51 + VISIBILITY@36..39 + PUB_KW@36..39 "pub" + WHITESPACE@39..40 " " + FN_KW@40..42 "fn" + WHITESPACE@42..43 " " + NAME@43..46 + IDENT@43..46 "bar" + PARAM_LIST@46..48 + L_PAREN@46..47 "(" + R_PAREN@47..48 ")" + WHITESPACE@48..49 " " + BLOCK_EXPR@49..51 + L_CURLY@49..50 "{" + R_CURLY@50..51 "}" + WHITESPACE@51..56 "\n " + TYPE_ALIAS@56..81 + VISIBILITY@56..66 + PUB_KW@56..59 "pub" + L_PAREN@59..60 "(" + CRATE_KW@60..65 "crate" + R_PAREN@65..66 ")" + WHITESPACE@66..67 " " + TYPE_KW@67..71 "type" + WHITESPACE@71..72 " " + NAME@72..75 + IDENT@72..75 "Baz" + WHITESPACE@75..76 " " + EQ@76..77 "=" + WHITESPACE@77..78 " " + TUPLE_TYPE@78..80 + L_PAREN@78..79 "(" + R_PAREN@79..80 ")" + SEMICOLON@80..81 ";" + WHITESPACE@81..86 "\n " + CONST@86..115 + VISIBILITY@86..96 + PUB_KW@86..89 "pub" + L_PAREN@89..90 "(" + CRATE_KW@90..95 "crate" + R_PAREN@95..96 ")" + WHITESPACE@96..97 " " + CONST_KW@97..102 "const" + WHITESPACE@102..103 " " + NAME@103..104 + IDENT@103..104 "C" + COLON@104..105 ":" + WHITESPACE@105..106 " " + PATH_TYPE@106..109 + PATH@106..109 + PATH_SEGMENT@106..109 + NAME_REF@106..109 + IDENT@106..109 "i32" + WHITESPACE@109..110 " " + EQ@110..111 "=" + WHITESPACE@111..112 " " + LITERAL@112..114 + INT_NUMBER@112..114 "92" + SEMICOLON@114..115 ";" + WHITESPACE@115..116 "\n" + R_CURLY@116..117 "}" + WHITESPACE@117..118 "\n" +error 36..39: Unnecessary visibility qualifier +error 56..66: Unnecessary visibility qualifier +error 86..96: Unnecessary visibility qualifier diff --git a/crates/syntax/test_data/parser/err/0037_visibility_in_traits.rs b/crates/syntax/test_data/parser/err/0037_visibility_in_traits.rs new file mode 100644 index 000000000..a43e7ef10 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0037_visibility_in_traits.rs @@ -0,0 +1,6 @@ +impl T for () { + fn foo() {} + pub fn bar() {} + pub(crate) type Baz = (); + pub(crate) const C: i32 = 92; +} diff --git a/crates/syntax/test_data/parser/err/0038_endless_inclusive_range.rast b/crates/syntax/test_data/parser/err/0038_endless_inclusive_range.rast new file mode 100644 index 000000000..bed7ad6c3 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0038_endless_inclusive_range.rast @@ -0,0 +1,29 @@ +SOURCE_FILE@0..33 + FN@0..32 + 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..32 + L_CURLY@10..11 "{" + WHITESPACE@11..16 "\n " + EXPR_STMT@16..21 + RANGE_EXPR@16..20 + LITERAL@16..17 + INT_NUMBER@16..17 "0" + DOT2EQ@17..20 "..=" + SEMICOLON@20..21 ";" + WHITESPACE@21..26 "\n " + EXPR_STMT@26..30 + RANGE_EXPR@26..29 + DOT2EQ@26..29 "..=" + SEMICOLON@29..30 ";" + WHITESPACE@30..31 "\n" + R_CURLY@31..32 "}" + WHITESPACE@32..33 "\n" +error 16..20: An inclusive range must have an end expression +error 26..29: An inclusive range must have an end expression diff --git a/crates/syntax/test_data/parser/err/0038_endless_inclusive_range.rs b/crates/syntax/test_data/parser/err/0038_endless_inclusive_range.rs new file mode 100644 index 000000000..0b4ed7a2b --- /dev/null +++ b/crates/syntax/test_data/parser/err/0038_endless_inclusive_range.rs @@ -0,0 +1,4 @@ +fn main() { + 0..=; + ..=; +} diff --git a/crates/syntax/test_data/parser/err/0039_lambda_recovery.rast b/crates/syntax/test_data/parser/err/0039_lambda_recovery.rast new file mode 100644 index 000000000..a9c5b70fd --- /dev/null +++ b/crates/syntax/test_data/parser/err/0039_lambda_recovery.rast @@ -0,0 +1,82 @@ +SOURCE_FILE@0..83 + FN@0..82 + FN_KW@0..2 "fn" + WHITESPACE@2..3 " " + NAME@3..6 + IDENT@3..6 "foo" + PARAM_LIST@6..8 + L_PAREN@6..7 "(" + R_PAREN@7..8 ")" + WHITESPACE@8..9 " " + RET_TYPE@9..15 + THIN_ARROW@9..11 "->" + WHITESPACE@11..12 " " + PATH_TYPE@12..15 + PATH@12..15 + PATH_SEGMENT@12..15 + NAME_REF@12..15 + IDENT@12..15 "i32" + WHITESPACE@15..16 " " + BLOCK_EXPR@16..82 + L_CURLY@16..17 "{" + WHITESPACE@17..22 "\n " + EXPR_STMT@22..80 + METHOD_CALL_EXPR@22..79 + METHOD_CALL_EXPR@22..57 + METHOD_CALL_EXPR@22..38 + ARRAY_EXPR@22..31 + L_BRACK@22..23 "[" + LITERAL@23..24 + INT_NUMBER@23..24 "1" + COMMA@24..25 "," + WHITESPACE@25..26 " " + LITERAL@26..27 + INT_NUMBER@26..27 "2" + COMMA@27..28 "," + WHITESPACE@28..29 " " + LITERAL@29..30 + INT_NUMBER@29..30 "3" + R_BRACK@30..31 "]" + DOT@31..32 "." + NAME_REF@32..36 + IDENT@32..36 "iter" + ARG_LIST@36..38 + L_PAREN@36..37 "(" + R_PAREN@37..38 ")" + WHITESPACE@38..47 "\n " + DOT@47..48 "." + NAME_REF@48..51 + IDENT@48..51 "map" + ARG_LIST@51..57 + L_PAREN@51..52 "(" + CLOSURE_EXPR@52..56 + PARAM_LIST@52..56 + PIPE@52..53 "|" + PARAM@53..55 + IDENT_PAT@53..55 + NAME@53..55 + IDENT@53..55 "it" + PIPE@55..56 "|" + R_PAREN@56..57 ")" + WHITESPACE@57..66 "\n " + DOT@66..67 "." + NAME_REF@67..70 + IDENT@67..70 "max" + GENERIC_ARG_LIST@70..77 + COLON2@70..72 "::" + L_ANGLE@72..73 "<" + TYPE_ARG@73..76 + PATH_TYPE@73..76 + PATH@73..76 + PATH_SEGMENT@73..76 + NAME_REF@73..76 + IDENT@73..76 "i32" + R_ANGLE@76..77 ">" + ARG_LIST@77..79 + L_PAREN@77..78 "(" + R_PAREN@78..79 ")" + SEMICOLON@79..80 ";" + WHITESPACE@80..81 "\n" + R_CURLY@81..82 "}" + WHITESPACE@82..83 "\n" +error 56..56: expected expression diff --git a/crates/syntax/test_data/parser/err/0039_lambda_recovery.rs b/crates/syntax/test_data/parser/err/0039_lambda_recovery.rs new file mode 100644 index 000000000..a2f74bd87 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0039_lambda_recovery.rs @@ -0,0 +1,5 @@ +fn foo() -> i32 { + [1, 2, 3].iter() + .map(|it|) + .max::(); +} diff --git a/crates/syntax/test_data/parser/err/0040_illegal_crate_kw_location.rast b/crates/syntax/test_data/parser/err/0040_illegal_crate_kw_location.rast new file mode 100644 index 000000000..284c8715b --- /dev/null +++ b/crates/syntax/test_data/parser/err/0040_illegal_crate_kw_location.rast @@ -0,0 +1,91 @@ +SOURCE_FILE@0..98 + USE@0..12 + USE_KW@0..3 "use" + WHITESPACE@3..4 " " + USE_TREE@4..11 + PATH@4..11 + PATH_SEGMENT@4..11 + COLON2@4..6 "::" + CRATE_KW@6..11 "crate" + SEMICOLON@11..12 ";" + WHITESPACE@12..13 "\n" + USE@13..54 + USE_KW@13..16 "use" + WHITESPACE@16..17 " " + USE_TREE@17..53 + USE_TREE_LIST@17..53 + L_CURLY@17..18 "{" + USE_TREE@18..23 + PATH@18..23 + PATH_SEGMENT@18..23 + CRATE_KW@18..23 "crate" + COMMA@23..24 "," + WHITESPACE@24..25 " " + USE_TREE@25..52 + PATH@25..28 + PATH_SEGMENT@25..28 + NAME_REF@25..28 + IDENT@25..28 "foo" + COLON2@28..30 "::" + USE_TREE_LIST@30..52 + L_CURLY@30..31 "{" + USE_TREE@31..51 + PATH@31..51 + PATH@31..46 + PATH@31..41 + PATH@31..36 + PATH_SEGMENT@31..36 + CRATE_KW@31..36 "crate" + COLON2@36..38 "::" + PATH_SEGMENT@38..41 + NAME_REF@38..41 + IDENT@38..41 "foo" + COLON2@41..43 "::" + PATH_SEGMENT@43..46 + NAME_REF@43..46 + IDENT@43..46 "bar" + COLON2@46..48 "::" + PATH_SEGMENT@48..51 + NAME_REF@48..51 + IDENT@48..51 "baz" + R_CURLY@51..52 "}" + R_CURLY@52..53 "}" + SEMICOLON@53..54 ";" + WHITESPACE@54..55 "\n" + USE@55..72 + USE_KW@55..58 "use" + WHITESPACE@58..59 " " + USE_TREE@59..71 + PATH@59..71 + PATH@59..64 + PATH_SEGMENT@59..64 + NAME_REF@59..64 + IDENT@59..64 "hello" + COLON2@64..66 "::" + PATH_SEGMENT@66..71 + CRATE_KW@66..71 "crate" + SEMICOLON@71..72 ";" + WHITESPACE@72..73 "\n" + USE@73..97 + USE_KW@73..76 "use" + WHITESPACE@76..77 " " + USE_TREE@77..96 + PATH@77..96 + PATH@77..89 + PATH@77..82 + PATH_SEGMENT@77..82 + NAME_REF@77..82 + IDENT@77..82 "hello" + COLON2@82..84 "::" + PATH_SEGMENT@84..89 + CRATE_KW@84..89 "crate" + COLON2@89..91 "::" + PATH_SEGMENT@91..96 + NAME_REF@91..96 + IDENT@91..96 "there" + SEMICOLON@96..97 ";" + WHITESPACE@97..98 "\n" +error 6..11: The `crate` keyword is only allowed as the first segment of a path +error 31..36: The `crate` keyword is only allowed as the first segment of a path +error 66..71: The `crate` keyword is only allowed as the first segment of a path +error 84..89: The `crate` keyword is only allowed as the first segment of a path diff --git a/crates/syntax/test_data/parser/err/0040_illegal_crate_kw_location.rs b/crates/syntax/test_data/parser/err/0040_illegal_crate_kw_location.rs new file mode 100644 index 000000000..508def2c7 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0040_illegal_crate_kw_location.rs @@ -0,0 +1,4 @@ +use ::crate; +use {crate, foo::{crate::foo::bar::baz}}; +use hello::crate; +use hello::crate::there; diff --git a/crates/syntax/test_data/parser/err/0041_illegal_super_keyword_location.rast b/crates/syntax/test_data/parser/err/0041_illegal_super_keyword_location.rast new file mode 100644 index 000000000..2049a9d72 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0041_illegal_super_keyword_location.rast @@ -0,0 +1,70 @@ +SOURCE_FILE@0..67 + USE@0..12 + USE_KW@0..3 "use" + WHITESPACE@3..4 " " + USE_TREE@4..11 + PATH@4..11 + PATH_SEGMENT@4..11 + COLON2@4..6 "::" + SUPER_KW@6..11 "super" + SEMICOLON@11..12 ";" + WHITESPACE@12..13 "\n" + USE@13..26 + USE_KW@13..16 "use" + WHITESPACE@16..17 " " + USE_TREE@17..25 + PATH@17..25 + PATH@17..18 + PATH_SEGMENT@17..18 + NAME_REF@17..18 + IDENT@17..18 "a" + COLON2@18..20 "::" + PATH_SEGMENT@20..25 + SUPER_KW@20..25 "super" + SEMICOLON@25..26 ";" + WHITESPACE@26..27 "\n" + USE@27..47 + USE_KW@27..30 "use" + WHITESPACE@30..31 " " + USE_TREE@31..46 + PATH@31..46 + PATH@31..39 + PATH@31..36 + PATH_SEGMENT@31..36 + SUPER_KW@31..36 "super" + COLON2@36..38 "::" + PATH_SEGMENT@38..39 + NAME_REF@38..39 + IDENT@38..39 "a" + COLON2@39..41 "::" + PATH_SEGMENT@41..46 + SUPER_KW@41..46 "super" + SEMICOLON@46..47 ";" + WHITESPACE@47..48 "\n" + USE@48..66 + USE_KW@48..51 "use" + WHITESPACE@51..52 " " + USE_TREE@52..65 + PATH@52..53 + PATH_SEGMENT@52..53 + NAME_REF@52..53 + IDENT@52..53 "a" + COLON2@53..55 "::" + USE_TREE_LIST@55..65 + L_CURLY@55..56 "{" + USE_TREE@56..64 + PATH@56..64 + PATH@56..61 + PATH_SEGMENT@56..61 + SUPER_KW@56..61 "super" + COLON2@61..63 "::" + PATH_SEGMENT@63..64 + NAME_REF@63..64 + IDENT@63..64 "b" + R_CURLY@64..65 "}" + SEMICOLON@65..66 ";" + WHITESPACE@66..67 "\n" +error 6..11: The `super` keyword may only be preceded by other `super`s +error 20..25: The `super` keyword may only be preceded by other `super`s +error 41..46: The `super` keyword may only be preceded by other `super`s +error 56..61: The `super` keyword may only be preceded by other `super`s diff --git a/crates/syntax/test_data/parser/err/0041_illegal_super_keyword_location.rs b/crates/syntax/test_data/parser/err/0041_illegal_super_keyword_location.rs new file mode 100644 index 000000000..bd4d58042 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0041_illegal_super_keyword_location.rs @@ -0,0 +1,4 @@ +use ::super; +use a::super; +use super::a::super; +use a::{super::b}; diff --git a/crates/syntax/test_data/parser/err/0042_illegal_self_keyword_location.rast b/crates/syntax/test_data/parser/err/0042_illegal_self_keyword_location.rast new file mode 100644 index 000000000..deadf56b4 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0042_illegal_self_keyword_location.rast @@ -0,0 +1,27 @@ +SOURCE_FILE@0..25 + USE@0..11 + USE_KW@0..3 "use" + WHITESPACE@3..4 " " + USE_TREE@4..10 + PATH@4..10 + PATH_SEGMENT@4..10 + COLON2@4..6 "::" + SELF_KW@6..10 "self" + SEMICOLON@10..11 ";" + WHITESPACE@11..12 "\n" + USE@12..24 + USE_KW@12..15 "use" + WHITESPACE@15..16 " " + USE_TREE@16..23 + PATH@16..23 + PATH@16..17 + PATH_SEGMENT@16..17 + NAME_REF@16..17 + IDENT@16..17 "a" + COLON2@17..19 "::" + PATH_SEGMENT@19..23 + SELF_KW@19..23 "self" + SEMICOLON@23..24 ";" + WHITESPACE@24..25 "\n" +error 6..10: The `self` keyword is only allowed as the first segment of a path +error 19..23: The `self` keyword is only allowed as the first segment of a path diff --git a/crates/syntax/test_data/parser/err/0042_illegal_self_keyword_location.rs b/crates/syntax/test_data/parser/err/0042_illegal_self_keyword_location.rs new file mode 100644 index 000000000..b9e1d7d8b --- /dev/null +++ b/crates/syntax/test_data/parser/err/0042_illegal_self_keyword_location.rs @@ -0,0 +1,2 @@ +use ::self; +use a::self; diff --git a/crates/syntax/test_data/parser/err/0043_weird_blocks.rast b/crates/syntax/test_data/parser/err/0043_weird_blocks.rast new file mode 100644 index 000000000..df29017e7 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0043_weird_blocks.rast @@ -0,0 +1,71 @@ +SOURCE_FILE@0..83 + FN@0..82 + 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..82 + L_CURLY@10..11 "{" + WHITESPACE@11..16 "\n " + EXPR_STMT@16..29 + BLOCK_EXPR@16..29 + L_CURLY@16..17 "{" + WHITESPACE@17..18 " " + ERROR@18..24 + UNSAFE_KW@18..24 "unsafe" + WHITESPACE@24..25 " " + LITERAL@25..27 + INT_NUMBER@25..27 "92" + WHITESPACE@27..28 " " + R_CURLY@28..29 "}" + WHITESPACE@29..34 "\n " + EXPR_STMT@34..46 + BLOCK_EXPR@34..46 + L_CURLY@34..35 "{" + WHITESPACE@35..36 " " + ERROR@36..41 + ASYNC_KW@36..41 "async" + WHITESPACE@41..42 " " + LITERAL@42..44 + INT_NUMBER@42..44 "92" + WHITESPACE@44..45 " " + R_CURLY@45..46 "}" + WHITESPACE@46..51 "\n " + EXPR_STMT@51..61 + BLOCK_EXPR@51..61 + L_CURLY@51..52 "{" + WHITESPACE@52..53 " " + EXPR_STMT@53..56 + EFFECT_EXPR@53..56 + TRY_KW@53..56 "try" + WHITESPACE@56..57 " " + LITERAL@57..59 + INT_NUMBER@57..59 "92" + WHITESPACE@59..60 " " + R_CURLY@60..61 "}" + WHITESPACE@61..66 "\n " + BLOCK_EXPR@66..80 + L_CURLY@66..67 "{" + WHITESPACE@67..68 " " + EXPR_STMT@68..75 + ERROR@68..75 + LABEL@68..75 + LIFETIME@68..74 "\'label" + COLON@74..75 ":" + WHITESPACE@75..76 " " + LITERAL@76..78 + INT_NUMBER@76..78 "92" + WHITESPACE@78..79 " " + R_CURLY@79..80 "}" + WHITESPACE@80..81 "\n" + R_CURLY@81..82 "}" + WHITESPACE@82..83 "\n" +error 24..24: expected existential, fn, trait or impl +error 41..41: expected existential, fn, trait or impl +error 56..56: expected a block +error 75..75: expected a loop +error 75..75: expected SEMICOLON diff --git a/crates/syntax/test_data/parser/err/0043_weird_blocks.rs b/crates/syntax/test_data/parser/err/0043_weird_blocks.rs new file mode 100644 index 000000000..8fa324c1a --- /dev/null +++ b/crates/syntax/test_data/parser/err/0043_weird_blocks.rs @@ -0,0 +1,6 @@ +fn main() { + { unsafe 92 } + { async 92 } + { try 92 } + { 'label: 92 } +} diff --git a/crates/syntax/test_data/parser/err/0044_unexpected_for_type.rast b/crates/syntax/test_data/parser/err/0044_unexpected_for_type.rast new file mode 100644 index 000000000..71aa86494 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0044_unexpected_for_type.rast @@ -0,0 +1,240 @@ +SOURCE_FILE@0..239 + TYPE_ALIAS@0..30 + TYPE_KW@0..4 "type" + WHITESPACE@4..5 " " + NAME@5..11 + IDENT@5..11 "ForRef" + WHITESPACE@11..12 " " + EQ@12..13 "=" + WHITESPACE@13..14 " " + FOR_TYPE@14..29 + FOR_KW@14..17 "for" + GENERIC_PARAM_LIST@17..21 + L_ANGLE@17..18 "<" + LIFETIME_PARAM@18..20 + LIFETIME@18..20 "\'a" + R_ANGLE@20..21 ">" + WHITESPACE@21..22 " " + REF_TYPE@22..29 + AMP@22..23 "&" + LIFETIME@23..25 "\'a" + WHITESPACE@25..26 " " + PATH_TYPE@26..29 + PATH@26..29 + PATH_SEGMENT@26..29 + NAME_REF@26..29 + IDENT@26..29 "u32" + SEMICOLON@29..30 ";" + WHITESPACE@30..31 "\n" + TYPE_ALIAS@31..64 + TYPE_KW@31..35 "type" + WHITESPACE@35..36 " " + NAME@36..42 + IDENT@36..42 "ForTup" + WHITESPACE@42..43 " " + EQ@43..44 "=" + WHITESPACE@44..45 " " + FOR_TYPE@45..63 + FOR_KW@45..48 "for" + GENERIC_PARAM_LIST@48..52 + L_ANGLE@48..49 "<" + LIFETIME_PARAM@49..51 + LIFETIME@49..51 "\'a" + R_ANGLE@51..52 ">" + WHITESPACE@52..53 " " + TUPLE_TYPE@53..63 + L_PAREN@53..54 "(" + REF_TYPE@54..61 + AMP@54..55 "&" + LIFETIME@55..57 "\'a" + WHITESPACE@57..58 " " + PATH_TYPE@58..61 + PATH@58..61 + PATH_SEGMENT@58..61 + NAME_REF@58..61 + IDENT@58..61 "u32" + COMMA@61..62 "," + R_PAREN@62..63 ")" + SEMICOLON@63..64 ";" + WHITESPACE@64..65 "\n" + TYPE_ALIAS@65..95 + TYPE_KW@65..69 "type" + WHITESPACE@69..70 " " + NAME@70..78 + IDENT@70..78 "ForSlice" + WHITESPACE@78..79 " " + EQ@79..80 "=" + WHITESPACE@80..81 " " + FOR_TYPE@81..94 + FOR_KW@81..84 "for" + GENERIC_PARAM_LIST@84..88 + L_ANGLE@84..85 "<" + LIFETIME_PARAM@85..87 + LIFETIME@85..87 "\'a" + R_ANGLE@87..88 ">" + WHITESPACE@88..89 " " + SLICE_TYPE@89..94 + L_BRACK@89..90 "[" + PATH_TYPE@90..93 + PATH@90..93 + PATH_SEGMENT@90..93 + NAME_REF@90..93 + IDENT@90..93 "u32" + R_BRACK@93..94 "]" + SEMICOLON@94..95 ";" + WHITESPACE@95..96 "\n" + TYPE_ALIAS@96..149 + TYPE_KW@96..100 "type" + WHITESPACE@100..101 " " + NAME@101..109 + IDENT@101..109 "ForForFn" + WHITESPACE@109..110 " " + EQ@110..111 "=" + WHITESPACE@111..112 " " + FOR_TYPE@112..148 + FOR_KW@112..115 "for" + GENERIC_PARAM_LIST@115..119 + L_ANGLE@115..116 "<" + LIFETIME_PARAM@116..118 + LIFETIME@116..118 "\'a" + R_ANGLE@118..119 ">" + WHITESPACE@119..120 " " + FOR_TYPE@120..148 + FOR_KW@120..123 "for" + GENERIC_PARAM_LIST@123..127 + L_ANGLE@123..124 "<" + LIFETIME_PARAM@124..126 + LIFETIME@124..126 "\'b" + R_ANGLE@126..127 ">" + WHITESPACE@127..128 " " + FN_PTR_TYPE@128..148 + FN_KW@128..130 "fn" + PARAM_LIST@130..148 + L_PAREN@130..131 "(" + PARAM@131..138 + REF_TYPE@131..138 + AMP@131..132 "&" + LIFETIME@132..134 "\'a" + WHITESPACE@134..135 " " + PATH_TYPE@135..138 + PATH@135..138 + PATH_SEGMENT@135..138 + NAME_REF@135..138 + IDENT@135..138 "i32" + COMMA@138..139 "," + WHITESPACE@139..140 " " + PARAM@140..147 + REF_TYPE@140..147 + AMP@140..141 "&" + LIFETIME@141..143 "\'b" + WHITESPACE@143..144 " " + PATH_TYPE@144..147 + PATH@144..147 + PATH_SEGMENT@144..147 + NAME_REF@144..147 + IDENT@144..147 "i32" + R_PAREN@147..148 ")" + SEMICOLON@148..149 ";" + WHITESPACE@149..150 "\n" + FN@150..238 + FN_KW@150..152 "fn" + WHITESPACE@152..153 " " + NAME@153..164 + IDENT@153..164 "for_for_for" + GENERIC_PARAM_LIST@164..167 + L_ANGLE@164..165 "<" + TYPE_PARAM@165..166 + NAME@165..166 + IDENT@165..166 "T" + R_ANGLE@166..167 ">" + PARAM_LIST@167..169 + L_PAREN@167..168 "(" + R_PAREN@168..169 ")" + WHITESPACE@169..170 "\n" + WHERE_CLAUSE@170..234 + WHERE_KW@170..175 "where" + WHITESPACE@175..180 "\n " + WHERE_PRED@180..233 + FOR_KW@180..183 "for" + GENERIC_PARAM_LIST@183..187 + L_ANGLE@183..184 "<" + LIFETIME_PARAM@184..186 + LIFETIME@184..186 "\'a" + R_ANGLE@186..187 ">" + WHITESPACE@187..188 " " + FOR_TYPE@188..227 + FOR_KW@188..191 "for" + GENERIC_PARAM_LIST@191..195 + L_ANGLE@191..192 "<" + LIFETIME_PARAM@192..194 + LIFETIME@192..194 "\'b" + R_ANGLE@194..195 ">" + WHITESPACE@195..196 " " + FOR_TYPE@196..227 + FOR_KW@196..199 "for" + GENERIC_PARAM_LIST@199..203 + L_ANGLE@199..200 "<" + LIFETIME_PARAM@200..202 + LIFETIME@200..202 "\'c" + R_ANGLE@202..203 ">" + WHITESPACE@203..204 " " + FN_PTR_TYPE@204..227 + FN_KW@204..206 "fn" + PARAM_LIST@206..227 + L_PAREN@206..207 "(" + PARAM@207..212 + REF_TYPE@207..212 + AMP@207..208 "&" + LIFETIME@208..210 "\'a" + WHITESPACE@210..211 " " + PATH_TYPE@211..212 + PATH@211..212 + PATH_SEGMENT@211..212 + NAME_REF@211..212 + IDENT@211..212 "T" + COMMA@212..213 "," + WHITESPACE@213..214 " " + PARAM@214..219 + REF_TYPE@214..219 + AMP@214..215 "&" + LIFETIME@215..217 "\'b" + WHITESPACE@217..218 " " + PATH_TYPE@218..219 + PATH@218..219 + PATH_SEGMENT@218..219 + NAME_REF@218..219 + IDENT@218..219 "T" + COMMA@219..220 "," + WHITESPACE@220..221 " " + PARAM@221..226 + REF_TYPE@221..226 + AMP@221..222 "&" + LIFETIME@222..224 "\'c" + WHITESPACE@224..225 " " + PATH_TYPE@225..226 + PATH@225..226 + PATH_SEGMENT@225..226 + NAME_REF@225..226 + IDENT@225..226 "T" + R_PAREN@226..227 ")" + COLON@227..228 ":" + WHITESPACE@228..229 " " + TYPE_BOUND_LIST@229..233 + TYPE_BOUND@229..233 + PATH_TYPE@229..233 + PATH@229..233 + PATH_SEGMENT@229..233 + NAME_REF@229..233 + IDENT@229..233 "Copy" + COMMA@233..234 "," + WHITESPACE@234..235 "\n" + BLOCK_EXPR@235..238 + L_CURLY@235..236 "{" + WHITESPACE@236..237 "\n" + R_CURLY@237..238 "}" + WHITESPACE@238..239 "\n" +error 21..21: expected a function pointer or path +error 52..52: expected a function pointer or path +error 88..88: expected a function pointer or path +error 119..119: expected a function pointer or path +error 195..195: expected a function pointer or path diff --git a/crates/syntax/test_data/parser/err/0044_unexpected_for_type.rs b/crates/syntax/test_data/parser/err/0044_unexpected_for_type.rs new file mode 100644 index 000000000..0e9f8ccb4 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0044_unexpected_for_type.rs @@ -0,0 +1,9 @@ +type ForRef = for<'a> &'a u32; +type ForTup = for<'a> (&'a u32,); +type ForSlice = for<'a> [u32]; +type ForForFn = for<'a> for<'b> fn(&'a i32, &'b i32); +fn for_for_for() +where + for<'a> for<'b> for<'c> fn(&'a T, &'b T, &'c T): Copy, +{ +} diff --git a/crates/syntax/test_data/parser/err/0045_item_modifiers.rast b/crates/syntax/test_data/parser/err/0045_item_modifiers.rast new file mode 100644 index 000000000..a6e6552a9 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0045_item_modifiers.rast @@ -0,0 +1,45 @@ +SOURCE_FILE@0..50 + ERROR@0..6 + UNSAFE_KW@0..6 "unsafe" + WHITESPACE@6..7 " " + FN@7..24 + ASYNC_KW@7..12 "async" + WHITESPACE@12..13 " " + FN_KW@13..15 "fn" + WHITESPACE@15..16 " " + NAME@16..19 + IDENT@16..19 "foo" + PARAM_LIST@19..21 + L_PAREN@19..20 "(" + R_PAREN@20..21 ")" + WHITESPACE@21..22 " " + BLOCK_EXPR@22..24 + L_CURLY@22..23 "{" + R_CURLY@23..24 "}" + WHITESPACE@24..25 "\n" + CONST@25..46 + UNSAFE_KW@25..31 "unsafe" + WHITESPACE@31..32 " " + CONST_KW@32..37 "const" + WHITESPACE@37..38 " " + ERROR@38..40 + FN_KW@38..40 "fn" + WHITESPACE@40..41 " " + PATH_TYPE@41..46 + PATH@41..46 + PATH_SEGMENT@41..46 + NAME_REF@41..44 + IDENT@41..44 "bar" + PARAM_LIST@44..46 + L_PAREN@44..45 "(" + R_PAREN@45..46 ")" + WHITESPACE@46..47 " " + ERROR@47..49 + L_CURLY@47..48 "{" + R_CURLY@48..49 "}" + WHITESPACE@49..50 "\n" +error 6..6: expected existential, fn, trait or impl +error 38..38: expected a name +error 40..40: expected COLON +error 46..46: expected SEMICOLON +error 47..47: expected an item diff --git a/crates/syntax/test_data/parser/err/0045_item_modifiers.rs b/crates/syntax/test_data/parser/err/0045_item_modifiers.rs new file mode 100644 index 000000000..731e58013 --- /dev/null +++ b/crates/syntax/test_data/parser/err/0045_item_modifiers.rs @@ -0,0 +1,2 @@ +unsafe async fn foo() {} +unsafe const fn bar() {} -- cgit v1.2.3