diff --git a/crates/parser/src/grammar/attributes.rs b/crates/parser/src/grammar/attributes.rs index a44c5e4841f..80d7b09b3e1 100644 --- a/crates/parser/src/grammar/attributes.rs +++ b/crates/parser/src/grammar/attributes.rs @@ -12,6 +12,28 @@ pub(super) fn outer_attrs(p: &mut Parser) { } } +fn attr(p: &mut Parser, inner: bool) { + assert!(p.at(T![#])); + + let attr = p.start(); + p.bump(T![#]); + + if inner { + p.bump(T![!]); + } + + if p.eat(T!['[']) { + meta(p); + + if !p.eat(T![']']) { + p.error("expected `]`"); + } + } else { + p.error("expected `[`"); + } + attr.complete(p, ATTR); +} + pub(super) fn meta(p: &mut Parser) { let meta = p.start(); paths::use_path(p); @@ -29,25 +51,3 @@ pub(super) fn meta(p: &mut Parser) { meta.complete(p, META); } - -fn attr(p: &mut Parser, inner: bool) { - let attr = p.start(); - assert!(p.at(T![#])); - p.bump(T![#]); - - if inner { - assert!(p.at(T![!])); - p.bump(T![!]); - } - - if p.eat(T!['[']) { - meta(p); - - if !p.eat(T![']']) { - p.error("expected `]`"); - } - } else { - p.error("expected `[`"); - } - attr.complete(p, ATTR); -} diff --git a/crates/parser/src/grammar/expressions.rs b/crates/parser/src/grammar/expressions.rs index 001be099e6e..12e62cddbc0 100644 --- a/crates/parser/src/grammar/expressions.rs +++ b/crates/parser/src/grammar/expressions.rs @@ -71,7 +71,7 @@ pub(super) fn stmt(p: &mut Parser, with_semi: StmtWithSemi, prefer_expr: bool) { // test block_items // fn a() { fn b() {} } - let m = match items::maybe_item(p, m) { + let m = match items::opt_item(p, m) { Ok(()) => return, Err(m) => m, }; diff --git a/crates/parser/src/grammar/items.rs b/crates/parser/src/grammar/items.rs index 3421078bba6..e0b740a8152 100644 --- a/crates/parser/src/grammar/items.rs +++ b/crates/parser/src/grammar/items.rs @@ -44,7 +44,8 @@ pub(super) const ITEM_RECOVERY_SET: TokenSet = TokenSet::new(&[ pub(super) fn item_or_macro(p: &mut Parser, stop_on_r_curly: bool) { let m = p.start(); attributes::outer_attrs(p); - let m = match maybe_item(p, m) { + + let m = match opt_item(p, m) { Ok(()) => { if p.at(T![;]) { p.err_and_bump( @@ -56,6 +57,7 @@ pub(super) fn item_or_macro(p: &mut Parser, stop_on_r_curly: bool) { } Err(m) => m, }; + if paths::is_use_path_start(p) { match macro_call(p) { BlockLike::Block => (), @@ -64,30 +66,30 @@ pub(super) fn item_or_macro(p: &mut Parser, stop_on_r_curly: bool) { } } m.complete(p, MACRO_CALL); - } else { - m.abandon(p); - if p.at(T!['{']) { - error_block(p, "expected an item"); - } else if p.at(T!['}']) && !stop_on_r_curly { + return; + } + + m.abandon(p); + match p.current() { + T!['{'] => error_block(p, "expected an item"), + T!['}'] if !stop_on_r_curly => { let e = p.start(); p.error("unmatched `}`"); p.bump(T!['}']); e.complete(p, ERROR); - } else if !p.at(EOF) && !p.at(T!['}']) { - p.err_and_bump("expected an item"); - } else { - p.error("expected an item"); } + EOF | T!['}'] => p.error("expected an item"), + _ => p.err_and_bump("expected an item"), } } /// Try to parse an item, completing `m` in case of success. -pub(super) fn maybe_item(p: &mut Parser, m: Marker) -> Result<(), Marker> { +pub(super) fn opt_item(p: &mut Parser, m: Marker) -> Result<(), Marker> { // test_err pub_expr // fn foo() { pub 92; } let has_visibility = opt_visibility(p); - let m = match items_without_modifiers(p, m) { + let m = match opt_item_without_modifiers(p, m) { Ok(()) => return Ok(()), Err(m) => m, }; @@ -235,48 +237,20 @@ pub(super) fn maybe_item(p: &mut Parser, m: Marker) -> Result<(), Marker> { Ok(()) } -fn items_without_modifiers(p: &mut Parser, m: Marker) -> Result<(), Marker> { +fn opt_item_without_modifiers(p: &mut Parser, m: Marker) -> Result<(), Marker> { let la = p.nth(1); match p.current() { - // test extern_crate - // extern crate foo; T![extern] if la == T![crate] => extern_crate(p, m), T![use] => use_item::use_(p, m), T![mod] => mod_item(p, m), T![type] => type_alias(p, m), - - T![struct] => { - // test struct_items - // struct Foo; - // struct Foo {} - // struct Foo(); - // struct Foo(String, usize); - // struct Foo { - // a: i32, - // b: f32, - // } - adt::strukt(p, m); - } + T![struct] => adt::strukt(p, m), T![enum] => adt::enum_(p, m), - IDENT if p.at_contextual_kw("union") && p.nth(1) == IDENT => { - // test union_items - // union Foo {} - // union Foo { - // a: i32, - // b: f32, - // } - adt::union(p, m); - } + IDENT if p.at_contextual_kw("union") && p.nth(1) == IDENT => adt::union(p, m), - // test pub_macro_def - // pub macro m($:ident) {} - T![macro] => { - macro_def(p, m); - } - IDENT if p.at_contextual_kw("macro_rules") && p.nth(1) == BANG => { - macro_rules(p, m); - } + T![macro] => macro_def(p, m), + IDENT if p.at_contextual_kw("macro_rules") && p.nth(1) == BANG => macro_rules(p, m), T![const] if (la == IDENT || la == T![_] || la == T![mut]) => consts::konst(p, m), T![static] => consts::static_(p, m), @@ -286,14 +260,15 @@ fn items_without_modifiers(p: &mut Parser, m: Marker) -> Result<(), Marker> { Ok(()) } +// test extern_crate +// extern crate foo; fn extern_crate(p: &mut Parser, m: Marker) { - assert!(p.at(T![extern])); p.bump(T![extern]); - - assert!(p.at(T![crate])); p.bump(T![crate]); if p.at(T![self]) { + // test extern_crate_self + // extern crate self; let m = p.start(); p.bump(T![self]); m.complete(p, NAME_REF); @@ -301,11 +276,62 @@ fn extern_crate(p: &mut Parser, m: Marker) { name_ref(p); } + // test extern_crate_rename + // extern crate foo as bar; opt_rename(p); p.expect(T![;]); m.complete(p, EXTERN_CRATE); } +// test mod_item +// mod a; +pub(crate) fn mod_item(p: &mut Parser, m: Marker) { + p.bump(T![mod]); + name(p); + if p.at(T!['{']) { + // test mod_item_curly + // mod b { } + item_list(p); + } else if !p.eat(T![;]) { + p.error("expected `;` or `{`"); + } + m.complete(p, MODULE); +} + +// test type_alias +// type Foo = Bar; +fn type_alias(p: &mut Parser, m: Marker) { + p.bump(T![type]); + + name(p); + + // test type_item_type_params + // type Result = (); + type_params::opt_generic_param_list(p); + + if p.at(T![:]) { + type_params::bounds(p); + } + + // test type_item_where_clause + // type Foo where Foo: Copy = (); + type_params::opt_where_clause(p); + if p.eat(T![=]) { + types::type_(p); + } + p.expect(T![;]); + m.complete(p, TYPE_ALIAS); +} + +pub(crate) fn item_list(p: &mut Parser) { + assert!(p.at(T!['{'])); + let m = p.start(); + p.bump(T!['{']); + mod_contents(p, true); + p.expect(T!['}']); + m.complete(p, ITEM_LIST); +} + pub(crate) fn extern_item_list(p: &mut Parser) { assert!(p.at(T!['{'])); let m = p.start(); @@ -347,54 +373,6 @@ fn fn_(p: &mut Parser) { } } -// test type_item -// type Foo = Bar; -fn type_alias(p: &mut Parser, m: Marker) { - assert!(p.at(T![type])); - p.bump(T![type]); - - name(p); - - // test type_item_type_params - // type Result = (); - type_params::opt_generic_param_list(p); - - if p.at(T![:]) { - type_params::bounds(p); - } - - // test type_item_where_clause - // type Foo where Foo: Copy = (); - type_params::opt_where_clause(p); - if p.eat(T![=]) { - types::type_(p); - } - p.expect(T![;]); - m.complete(p, TYPE_ALIAS); -} - -pub(crate) fn mod_item(p: &mut Parser, m: Marker) { - assert!(p.at(T![mod])); - p.bump(T![mod]); - - name(p); - if p.at(T!['{']) { - item_list(p); - } else if !p.eat(T![;]) { - p.error("expected `;` or `{`"); - } - m.complete(p, MODULE); -} - -pub(crate) fn item_list(p: &mut Parser) { - assert!(p.at(T!['{'])); - let m = p.start(); - p.bump(T!['{']); - mod_contents(p, true); - p.expect(T!['}']); - m.complete(p, ITEM_LIST); -} - fn macro_rules(p: &mut Parser, m: Marker) { assert!(p.at_contextual_kw("macro_rules")); p.bump_remap(T![macro_rules]); @@ -429,16 +407,15 @@ fn macro_rules(p: &mut Parser, m: Marker) { } // test macro_def -// macro m { ($i:ident) => {} } // macro m($i:ident) {} fn macro_def(p: &mut Parser, m: Marker) { p.expect(T![macro]); name_r(p, ITEM_RECOVERY_SET); if p.at(T!['{']) { + // test macro_def_curly + // macro m { ($i:ident) => {} } token_tree(p); - } else if !p.at(T!['(']) { - p.error("unmatched `(`"); - } else { + } else if p.at(T!['(']) { let m = p.start(); token_tree(p); match p.current() { @@ -446,6 +423,8 @@ fn macro_def(p: &mut Parser, m: Marker) { _ => p.error("expected `{`, `[`, `(`"), } m.complete(p, TOKEN_TREE); + } else { + p.error("unmatched `(`"); } m.complete(p, MACRO_DEF); diff --git a/crates/parser/src/grammar/items/adt.rs b/crates/parser/src/grammar/items/adt.rs index 386d3806c32..eaf16bc1a10 100644 --- a/crates/parser/src/grammar/items/adt.rs +++ b/crates/parser/src/grammar/items/adt.rs @@ -1,18 +1,21 @@ use super::*; +// test struct_item +// struct S {} pub(super) fn strukt(p: &mut Parser, m: Marker) { - assert!(p.at(T![struct])); p.bump(T![struct]); - struct_or_union(p, m, T![struct], STRUCT); + struct_or_union(p, m, true); } +// test union_item +// struct U { i: i32, f: f32 } pub(super) fn union(p: &mut Parser, m: Marker) { assert!(p.at_contextual_kw("union")); p.bump_remap(T![union]); - struct_or_union(p, m, T![union], UNION); + struct_or_union(p, m, false); } -fn struct_or_union(p: &mut Parser, m: Marker, kw: SyntaxKind, def: SyntaxKind) { +fn struct_or_union(p: &mut Parser, m: Marker, is_struct: bool) { name_r(p, ITEM_RECOVERY_SET); type_params::opt_generic_param_list(p); match p.current() { @@ -29,26 +32,24 @@ fn struct_or_union(p: &mut Parser, m: Marker, kw: SyntaxKind, def: SyntaxKind) { } } } - T![;] if kw == T![struct] => { + T!['{'] => record_field_list(p), + // test unit_struct + // struct S; + T![;] if is_struct => { p.bump(T![;]); } - T!['{'] => record_field_list(p), - T!['('] if kw == T![struct] => { + // test tuple_struct + // struct S(String, usize); + T!['('] if is_struct => { tuple_field_list(p); // test tuple_struct_where - // struct Test(T) where T: Clone; - // struct Test(T); + // struct S(T) where T: Clone; type_params::opt_where_clause(p); p.expect(T![;]); } - _ if kw == T![struct] => { - p.error("expected `;`, `{`, or `(`"); - } - _ => { - p.error("expected `{`"); - } + _ => p.error(if is_struct { "expected `;`, `{`, or `(`" } else { "expected `{`" }), } - m.complete(p, def); + m.complete(p, if is_struct { STRUCT } else { UNION }); } pub(super) fn enum_(p: &mut Parser, m: Marker) { @@ -102,6 +103,8 @@ pub(crate) fn variant_list(p: &mut Parser) { m.complete(p, VARIANT_LIST); } +// test record_field_list +// struct S { a: i32, b: f32 } pub(crate) fn record_field_list(p: &mut Parser) { assert!(p.at(T!['{'])); let m = p.start(); diff --git a/crates/syntax/test_data/parser/inline/ok/0068_union_items.rast b/crates/syntax/test_data/parser/inline/ok/0068_union_items.rast deleted file mode 100644 index 6589e479519..00000000000 --- a/crates/syntax/test_data/parser/inline/ok/0068_union_items.rast +++ /dev/null @@ -1,46 +0,0 @@ -SOURCE_FILE@0..51 - UNION@0..12 - UNION_KW@0..5 "union" - WHITESPACE@5..6 " " - NAME@6..9 - IDENT@6..9 "Foo" - WHITESPACE@9..10 " " - RECORD_FIELD_LIST@10..12 - L_CURLY@10..11 "{" - R_CURLY@11..12 "}" - WHITESPACE@12..13 "\n" - UNION@13..50 - UNION_KW@13..18 "union" - WHITESPACE@18..19 " " - NAME@19..22 - IDENT@19..22 "Foo" - WHITESPACE@22..23 " " - RECORD_FIELD_LIST@23..50 - L_CURLY@23..24 "{" - WHITESPACE@24..29 "\n " - RECORD_FIELD@29..35 - NAME@29..30 - IDENT@29..30 "a" - COLON@30..31 ":" - WHITESPACE@31..32 " " - PATH_TYPE@32..35 - PATH@32..35 - PATH_SEGMENT@32..35 - NAME_REF@32..35 - IDENT@32..35 "i32" - COMMA@35..36 "," - WHITESPACE@36..41 "\n " - RECORD_FIELD@41..47 - NAME@41..42 - IDENT@41..42 "b" - COLON@42..43 ":" - WHITESPACE@43..44 " " - PATH_TYPE@44..47 - PATH@44..47 - PATH_SEGMENT@44..47 - NAME_REF@44..47 - IDENT@44..47 "f32" - COMMA@47..48 "," - WHITESPACE@48..49 "\n" - R_CURLY@49..50 "}" - WHITESPACE@50..51 "\n" diff --git a/crates/syntax/test_data/parser/inline/ok/0068_union_items.rs b/crates/syntax/test_data/parser/inline/ok/0068_union_items.rs deleted file mode 100644 index b7dd610d80a..00000000000 --- a/crates/syntax/test_data/parser/inline/ok/0068_union_items.rs +++ /dev/null @@ -1,5 +0,0 @@ -union Foo {} -union Foo { - a: i32, - b: f32, -} diff --git a/crates/syntax/test_data/parser/inline/ok/0078_type_item.rast b/crates/syntax/test_data/parser/inline/ok/0078_type_alias.rast similarity index 100% rename from crates/syntax/test_data/parser/inline/ok/0078_type_item.rast rename to crates/syntax/test_data/parser/inline/ok/0078_type_alias.rast diff --git a/crates/syntax/test_data/parser/inline/ok/0078_type_item.rs b/crates/syntax/test_data/parser/inline/ok/0078_type_alias.rs similarity index 100% rename from crates/syntax/test_data/parser/inline/ok/0078_type_item.rs rename to crates/syntax/test_data/parser/inline/ok/0078_type_alias.rs diff --git a/crates/syntax/test_data/parser/inline/ok/0083_struct_items.rs b/crates/syntax/test_data/parser/inline/ok/0083_struct_items.rs deleted file mode 100644 index 693e3f3ee12..00000000000 --- a/crates/syntax/test_data/parser/inline/ok/0083_struct_items.rs +++ /dev/null @@ -1,8 +0,0 @@ -struct Foo; -struct Foo {} -struct Foo(); -struct Foo(String, usize); -struct Foo { - a: i32, - b: f32, -} diff --git a/crates/syntax/test_data/parser/inline/ok/0114_tuple_struct_where.rast b/crates/syntax/test_data/parser/inline/ok/0114_tuple_struct_where.rast index 0e1594dc485..31961113634 100644 --- a/crates/syntax/test_data/parser/inline/ok/0114_tuple_struct_where.rast +++ b/crates/syntax/test_data/parser/inline/ok/0114_tuple_struct_where.rast @@ -1,64 +1,42 @@ -SOURCE_FILE@0..53 - STRUCT@0..33 +SOURCE_FILE@0..31 + STRUCT@0..30 STRUCT_KW@0..6 "struct" WHITESPACE@6..7 " " - NAME@7..11 - IDENT@7..11 "Test" - GENERIC_PARAM_LIST@11..14 - L_ANGLE@11..12 "<" - TYPE_PARAM@12..13 - NAME@12..13 - IDENT@12..13 "T" - R_ANGLE@13..14 ">" - TUPLE_FIELD_LIST@14..17 - L_PAREN@14..15 "(" - TUPLE_FIELD@15..16 - PATH_TYPE@15..16 - PATH@15..16 - PATH_SEGMENT@15..16 - NAME_REF@15..16 - IDENT@15..16 "T" - R_PAREN@16..17 ")" - WHITESPACE@17..18 " " - WHERE_CLAUSE@18..32 - WHERE_KW@18..23 "where" - WHITESPACE@23..24 " " - WHERE_PRED@24..32 - PATH_TYPE@24..25 - PATH@24..25 - PATH_SEGMENT@24..25 - NAME_REF@24..25 - IDENT@24..25 "T" - COLON@25..26 ":" - WHITESPACE@26..27 " " - TYPE_BOUND_LIST@27..32 - TYPE_BOUND@27..32 - PATH_TYPE@27..32 - PATH@27..32 - PATH_SEGMENT@27..32 - NAME_REF@27..32 - IDENT@27..32 "Clone" - SEMICOLON@32..33 ";" - WHITESPACE@33..34 "\n" - STRUCT@34..52 - STRUCT_KW@34..40 "struct" - WHITESPACE@40..41 " " - NAME@41..45 - IDENT@41..45 "Test" - GENERIC_PARAM_LIST@45..48 - L_ANGLE@45..46 "<" - TYPE_PARAM@46..47 - NAME@46..47 - IDENT@46..47 "T" - R_ANGLE@47..48 ">" - TUPLE_FIELD_LIST@48..51 - L_PAREN@48..49 "(" - TUPLE_FIELD@49..50 - PATH_TYPE@49..50 - PATH@49..50 - PATH_SEGMENT@49..50 - NAME_REF@49..50 - IDENT@49..50 "T" - R_PAREN@50..51 ")" - SEMICOLON@51..52 ";" - WHITESPACE@52..53 "\n" + NAME@7..8 + IDENT@7..8 "S" + GENERIC_PARAM_LIST@8..11 + L_ANGLE@8..9 "<" + TYPE_PARAM@9..10 + NAME@9..10 + IDENT@9..10 "T" + R_ANGLE@10..11 ">" + TUPLE_FIELD_LIST@11..14 + L_PAREN@11..12 "(" + TUPLE_FIELD@12..13 + PATH_TYPE@12..13 + PATH@12..13 + PATH_SEGMENT@12..13 + NAME_REF@12..13 + IDENT@12..13 "T" + R_PAREN@13..14 ")" + WHITESPACE@14..15 " " + WHERE_CLAUSE@15..29 + WHERE_KW@15..20 "where" + WHITESPACE@20..21 " " + WHERE_PRED@21..29 + PATH_TYPE@21..22 + PATH@21..22 + PATH_SEGMENT@21..22 + NAME_REF@21..22 + IDENT@21..22 "T" + COLON@22..23 ":" + WHITESPACE@23..24 " " + TYPE_BOUND_LIST@24..29 + TYPE_BOUND@24..29 + PATH_TYPE@24..29 + PATH@24..29 + PATH_SEGMENT@24..29 + NAME_REF@24..29 + IDENT@24..29 "Clone" + SEMICOLON@29..30 ";" + WHITESPACE@30..31 "\n" diff --git a/crates/syntax/test_data/parser/inline/ok/0114_tuple_struct_where.rs b/crates/syntax/test_data/parser/inline/ok/0114_tuple_struct_where.rs index ddd59016dc6..a602e001827 100644 --- a/crates/syntax/test_data/parser/inline/ok/0114_tuple_struct_where.rs +++ b/crates/syntax/test_data/parser/inline/ok/0114_tuple_struct_where.rs @@ -1,2 +1 @@ -struct Test(T) where T: Clone; -struct Test(T); +struct S(T) where T: Clone; diff --git a/crates/syntax/test_data/parser/inline/ok/0147_macro_def.rast b/crates/syntax/test_data/parser/inline/ok/0147_macro_def.rast index 6655aeab139..4d7b78d5caa 100644 --- a/crates/syntax/test_data/parser/inline/ok/0147_macro_def.rast +++ b/crates/syntax/test_data/parser/inline/ok/0147_macro_def.rast @@ -1,45 +1,19 @@ -SOURCE_FILE@0..50 - MACRO_DEF@0..28 +SOURCE_FILE@0..21 + MACRO_DEF@0..20 MACRO_KW@0..5 "macro" WHITESPACE@5..6 " " NAME@6..7 IDENT@6..7 "m" - WHITESPACE@7..8 " " - TOKEN_TREE@8..28 - L_CURLY@8..9 "{" - WHITESPACE@9..10 " " - TOKEN_TREE@10..20 - L_PAREN@10..11 "(" - DOLLAR@11..12 "$" - IDENT@12..13 "i" - COLON@13..14 ":" - IDENT@14..19 "ident" - R_PAREN@19..20 ")" - WHITESPACE@20..21 " " - EQ@21..22 "=" - R_ANGLE@22..23 ">" - WHITESPACE@23..24 " " - TOKEN_TREE@24..26 - L_CURLY@24..25 "{" - R_CURLY@25..26 "}" - WHITESPACE@26..27 " " - R_CURLY@27..28 "}" - WHITESPACE@28..29 "\n" - MACRO_DEF@29..49 - MACRO_KW@29..34 "macro" - WHITESPACE@34..35 " " - NAME@35..36 - IDENT@35..36 "m" - TOKEN_TREE@36..49 - TOKEN_TREE@36..46 - L_PAREN@36..37 "(" - DOLLAR@37..38 "$" - IDENT@38..39 "i" - COLON@39..40 ":" - IDENT@40..45 "ident" - R_PAREN@45..46 ")" - WHITESPACE@46..47 " " - TOKEN_TREE@47..49 - L_CURLY@47..48 "{" - R_CURLY@48..49 "}" - WHITESPACE@49..50 "\n" + TOKEN_TREE@7..20 + TOKEN_TREE@7..17 + L_PAREN@7..8 "(" + DOLLAR@8..9 "$" + IDENT@9..10 "i" + COLON@10..11 ":" + IDENT@11..16 "ident" + R_PAREN@16..17 ")" + WHITESPACE@17..18 " " + TOKEN_TREE@18..20 + L_CURLY@18..19 "{" + R_CURLY@19..20 "}" + WHITESPACE@20..21 "\n" diff --git a/crates/syntax/test_data/parser/inline/ok/0147_macro_def.rs b/crates/syntax/test_data/parser/inline/ok/0147_macro_def.rs index 319a4e2aad2..a014ae5464e 100644 --- a/crates/syntax/test_data/parser/inline/ok/0147_macro_def.rs +++ b/crates/syntax/test_data/parser/inline/ok/0147_macro_def.rs @@ -1,2 +1 @@ -macro m { ($i:ident) => {} } macro m($i:ident) {} diff --git a/crates/syntax/test_data/parser/inline/ok/0148_pub_macro_def.rast b/crates/syntax/test_data/parser/inline/ok/0148_pub_macro_def.rast deleted file mode 100644 index 1c527f60b9c..00000000000 --- a/crates/syntax/test_data/parser/inline/ok/0148_pub_macro_def.rast +++ /dev/null @@ -1,21 +0,0 @@ -SOURCE_FILE@0..24 - MACRO_DEF@0..23 - VISIBILITY@0..3 - PUB_KW@0..3 "pub" - WHITESPACE@3..4 " " - MACRO_KW@4..9 "macro" - WHITESPACE@9..10 " " - NAME@10..11 - IDENT@10..11 "m" - TOKEN_TREE@11..23 - TOKEN_TREE@11..20 - L_PAREN@11..12 "(" - DOLLAR@12..13 "$" - COLON@13..14 ":" - IDENT@14..19 "ident" - R_PAREN@19..20 ")" - WHITESPACE@20..21 " " - TOKEN_TREE@21..23 - L_CURLY@21..22 "{" - R_CURLY@22..23 "}" - WHITESPACE@23..24 "\n" diff --git a/crates/syntax/test_data/parser/inline/ok/0148_pub_macro_def.rs b/crates/syntax/test_data/parser/inline/ok/0148_pub_macro_def.rs deleted file mode 100644 index 3b2be597fd8..00000000000 --- a/crates/syntax/test_data/parser/inline/ok/0148_pub_macro_def.rs +++ /dev/null @@ -1 +0,0 @@ -pub macro m($:ident) {} diff --git a/crates/syntax/test_data/parser/inline/ok/0168_extern_crate_rename.rast b/crates/syntax/test_data/parser/inline/ok/0168_extern_crate_rename.rast new file mode 100644 index 00000000000..87516e9fc40 --- /dev/null +++ b/crates/syntax/test_data/parser/inline/ok/0168_extern_crate_rename.rast @@ -0,0 +1,16 @@ +SOURCE_FILE@0..25 + EXTERN_CRATE@0..24 + EXTERN_KW@0..6 "extern" + WHITESPACE@6..7 " " + CRATE_KW@7..12 "crate" + WHITESPACE@12..13 " " + NAME_REF@13..16 + IDENT@13..16 "foo" + WHITESPACE@16..17 " " + RENAME@17..23 + AS_KW@17..19 "as" + WHITESPACE@19..20 " " + NAME@20..23 + IDENT@20..23 "bar" + SEMICOLON@23..24 ";" + WHITESPACE@24..25 "\n" diff --git a/crates/syntax/test_data/parser/inline/ok/0168_extern_crate_rename.rs b/crates/syntax/test_data/parser/inline/ok/0168_extern_crate_rename.rs new file mode 100644 index 00000000000..fc76e17dda4 --- /dev/null +++ b/crates/syntax/test_data/parser/inline/ok/0168_extern_crate_rename.rs @@ -0,0 +1 @@ +extern crate foo as bar; diff --git a/crates/syntax/test_data/parser/inline/ok/0168_extern_crate_self.rast b/crates/syntax/test_data/parser/inline/ok/0168_extern_crate_self.rast new file mode 100644 index 00000000000..26b4c0f1959 --- /dev/null +++ b/crates/syntax/test_data/parser/inline/ok/0168_extern_crate_self.rast @@ -0,0 +1,10 @@ +SOURCE_FILE@0..19 + EXTERN_CRATE@0..18 + EXTERN_KW@0..6 "extern" + WHITESPACE@6..7 " " + CRATE_KW@7..12 "crate" + WHITESPACE@12..13 " " + NAME_REF@13..17 + SELF_KW@13..17 "self" + SEMICOLON@17..18 ";" + WHITESPACE@18..19 "\n" diff --git a/crates/syntax/test_data/parser/inline/ok/0168_extern_crate_self.rs b/crates/syntax/test_data/parser/inline/ok/0168_extern_crate_self.rs new file mode 100644 index 00000000000..c969ed10936 --- /dev/null +++ b/crates/syntax/test_data/parser/inline/ok/0168_extern_crate_self.rs @@ -0,0 +1 @@ +extern crate self; diff --git a/crates/syntax/test_data/parser/inline/ok/0169_mod_item.rast b/crates/syntax/test_data/parser/inline/ok/0169_mod_item.rast new file mode 100644 index 00000000000..423eacf92e2 --- /dev/null +++ b/crates/syntax/test_data/parser/inline/ok/0169_mod_item.rast @@ -0,0 +1,8 @@ +SOURCE_FILE@0..7 + MODULE@0..6 + MOD_KW@0..3 "mod" + WHITESPACE@3..4 " " + NAME@4..5 + IDENT@4..5 "a" + SEMICOLON@5..6 ";" + WHITESPACE@6..7 "\n" diff --git a/crates/syntax/test_data/parser/inline/ok/0169_mod_item.rs b/crates/syntax/test_data/parser/inline/ok/0169_mod_item.rs new file mode 100644 index 00000000000..f21af614da0 --- /dev/null +++ b/crates/syntax/test_data/parser/inline/ok/0169_mod_item.rs @@ -0,0 +1 @@ +mod a; diff --git a/crates/syntax/test_data/parser/inline/ok/0170_mod_item_curly.rast b/crates/syntax/test_data/parser/inline/ok/0170_mod_item_curly.rast new file mode 100644 index 00000000000..33ad9c44f5c --- /dev/null +++ b/crates/syntax/test_data/parser/inline/ok/0170_mod_item_curly.rast @@ -0,0 +1,12 @@ +SOURCE_FILE@0..10 + MODULE@0..9 + MOD_KW@0..3 "mod" + WHITESPACE@3..4 " " + NAME@4..5 + IDENT@4..5 "b" + WHITESPACE@5..6 " " + ITEM_LIST@6..9 + L_CURLY@6..7 "{" + WHITESPACE@7..8 " " + R_CURLY@8..9 "}" + WHITESPACE@9..10 "\n" diff --git a/crates/syntax/test_data/parser/inline/ok/0170_mod_item_curly.rs b/crates/syntax/test_data/parser/inline/ok/0170_mod_item_curly.rs new file mode 100644 index 00000000000..16b1b43e877 --- /dev/null +++ b/crates/syntax/test_data/parser/inline/ok/0170_mod_item_curly.rs @@ -0,0 +1 @@ +mod b { } diff --git a/crates/syntax/test_data/parser/inline/ok/0170_tuple_struct.rast b/crates/syntax/test_data/parser/inline/ok/0170_tuple_struct.rast new file mode 100644 index 00000000000..935fd6e07be --- /dev/null +++ b/crates/syntax/test_data/parser/inline/ok/0170_tuple_struct.rast @@ -0,0 +1,25 @@ +SOURCE_FILE@0..25 + STRUCT@0..24 + STRUCT_KW@0..6 "struct" + WHITESPACE@6..7 " " + NAME@7..8 + IDENT@7..8 "S" + TUPLE_FIELD_LIST@8..23 + L_PAREN@8..9 "(" + TUPLE_FIELD@9..15 + PATH_TYPE@9..15 + PATH@9..15 + PATH_SEGMENT@9..15 + NAME_REF@9..15 + IDENT@9..15 "String" + COMMA@15..16 "," + WHITESPACE@16..17 " " + TUPLE_FIELD@17..22 + PATH_TYPE@17..22 + PATH@17..22 + PATH_SEGMENT@17..22 + NAME_REF@17..22 + IDENT@17..22 "usize" + R_PAREN@22..23 ")" + SEMICOLON@23..24 ";" + WHITESPACE@24..25 "\n" diff --git a/crates/syntax/test_data/parser/inline/ok/0170_tuple_struct.rs b/crates/syntax/test_data/parser/inline/ok/0170_tuple_struct.rs new file mode 100644 index 00000000000..b4e05717ed3 --- /dev/null +++ b/crates/syntax/test_data/parser/inline/ok/0170_tuple_struct.rs @@ -0,0 +1 @@ +struct S(String, usize); diff --git a/crates/syntax/test_data/parser/inline/ok/0171_struct_item.rast b/crates/syntax/test_data/parser/inline/ok/0171_struct_item.rast new file mode 100644 index 00000000000..3134482f0de --- /dev/null +++ b/crates/syntax/test_data/parser/inline/ok/0171_struct_item.rast @@ -0,0 +1,11 @@ +SOURCE_FILE@0..12 + STRUCT@0..11 + STRUCT_KW@0..6 "struct" + WHITESPACE@6..7 " " + NAME@7..8 + IDENT@7..8 "S" + WHITESPACE@8..9 " " + RECORD_FIELD_LIST@9..11 + L_CURLY@9..10 "{" + R_CURLY@10..11 "}" + WHITESPACE@11..12 "\n" diff --git a/crates/syntax/test_data/parser/inline/ok/0171_struct_item.rs b/crates/syntax/test_data/parser/inline/ok/0171_struct_item.rs new file mode 100644 index 00000000000..5f1a34f49b9 --- /dev/null +++ b/crates/syntax/test_data/parser/inline/ok/0171_struct_item.rs @@ -0,0 +1 @@ +struct S {} diff --git a/crates/syntax/test_data/parser/inline/ok/0172_record_field_list.rast b/crates/syntax/test_data/parser/inline/ok/0172_record_field_list.rast new file mode 100644 index 00000000000..ce1135c597d --- /dev/null +++ b/crates/syntax/test_data/parser/inline/ok/0172_record_field_list.rast @@ -0,0 +1,35 @@ +SOURCE_FILE@0..28 + STRUCT@0..27 + STRUCT_KW@0..6 "struct" + WHITESPACE@6..7 " " + NAME@7..8 + IDENT@7..8 "S" + WHITESPACE@8..9 " " + RECORD_FIELD_LIST@9..27 + L_CURLY@9..10 "{" + WHITESPACE@10..11 " " + RECORD_FIELD@11..17 + NAME@11..12 + IDENT@11..12 "a" + COLON@12..13 ":" + WHITESPACE@13..14 " " + PATH_TYPE@14..17 + PATH@14..17 + PATH_SEGMENT@14..17 + NAME_REF@14..17 + IDENT@14..17 "i32" + COMMA@17..18 "," + WHITESPACE@18..19 " " + RECORD_FIELD@19..25 + NAME@19..20 + IDENT@19..20 "b" + COLON@20..21 ":" + WHITESPACE@21..22 " " + PATH_TYPE@22..25 + PATH@22..25 + PATH_SEGMENT@22..25 + NAME_REF@22..25 + IDENT@22..25 "f32" + WHITESPACE@25..26 " " + R_CURLY@26..27 "}" + WHITESPACE@27..28 "\n" diff --git a/crates/syntax/test_data/parser/inline/ok/0172_record_field_list.rs b/crates/syntax/test_data/parser/inline/ok/0172_record_field_list.rs new file mode 100644 index 00000000000..a3bd7787db7 --- /dev/null +++ b/crates/syntax/test_data/parser/inline/ok/0172_record_field_list.rs @@ -0,0 +1 @@ +struct S { a: i32, b: f32 } diff --git a/crates/syntax/test_data/parser/inline/ok/0173_macro_def_curly.rast b/crates/syntax/test_data/parser/inline/ok/0173_macro_def_curly.rast new file mode 100644 index 00000000000..3ec00bf55a0 --- /dev/null +++ b/crates/syntax/test_data/parser/inline/ok/0173_macro_def_curly.rast @@ -0,0 +1,27 @@ +SOURCE_FILE@0..29 + MACRO_DEF@0..28 + MACRO_KW@0..5 "macro" + WHITESPACE@5..6 " " + NAME@6..7 + IDENT@6..7 "m" + WHITESPACE@7..8 " " + TOKEN_TREE@8..28 + L_CURLY@8..9 "{" + WHITESPACE@9..10 " " + TOKEN_TREE@10..20 + L_PAREN@10..11 "(" + DOLLAR@11..12 "$" + IDENT@12..13 "i" + COLON@13..14 ":" + IDENT@14..19 "ident" + R_PAREN@19..20 ")" + WHITESPACE@20..21 " " + EQ@21..22 "=" + R_ANGLE@22..23 ">" + WHITESPACE@23..24 " " + TOKEN_TREE@24..26 + L_CURLY@24..25 "{" + R_CURLY@25..26 "}" + WHITESPACE@26..27 " " + R_CURLY@27..28 "}" + WHITESPACE@28..29 "\n" diff --git a/crates/syntax/test_data/parser/inline/ok/0173_macro_def_curly.rs b/crates/syntax/test_data/parser/inline/ok/0173_macro_def_curly.rs new file mode 100644 index 00000000000..5ed0c777dc9 --- /dev/null +++ b/crates/syntax/test_data/parser/inline/ok/0173_macro_def_curly.rs @@ -0,0 +1 @@ +macro m { ($i:ident) => {} } diff --git a/crates/syntax/test_data/parser/inline/ok/0173_union_item.rast b/crates/syntax/test_data/parser/inline/ok/0173_union_item.rast new file mode 100644 index 00000000000..5d5c0d69bc0 --- /dev/null +++ b/crates/syntax/test_data/parser/inline/ok/0173_union_item.rast @@ -0,0 +1,35 @@ +SOURCE_FILE@0..28 + STRUCT@0..27 + STRUCT_KW@0..6 "struct" + WHITESPACE@6..7 " " + NAME@7..8 + IDENT@7..8 "U" + WHITESPACE@8..9 " " + RECORD_FIELD_LIST@9..27 + L_CURLY@9..10 "{" + WHITESPACE@10..11 " " + RECORD_FIELD@11..17 + NAME@11..12 + IDENT@11..12 "i" + COLON@12..13 ":" + WHITESPACE@13..14 " " + PATH_TYPE@14..17 + PATH@14..17 + PATH_SEGMENT@14..17 + NAME_REF@14..17 + IDENT@14..17 "i32" + COMMA@17..18 "," + WHITESPACE@18..19 " " + RECORD_FIELD@19..25 + NAME@19..20 + IDENT@19..20 "f" + COLON@20..21 ":" + WHITESPACE@21..22 " " + PATH_TYPE@22..25 + PATH@22..25 + PATH_SEGMENT@22..25 + NAME_REF@22..25 + IDENT@22..25 "f32" + WHITESPACE@25..26 " " + R_CURLY@26..27 "}" + WHITESPACE@27..28 "\n" diff --git a/crates/syntax/test_data/parser/inline/ok/0173_union_item.rs b/crates/syntax/test_data/parser/inline/ok/0173_union_item.rs new file mode 100644 index 00000000000..5edf50de3bd --- /dev/null +++ b/crates/syntax/test_data/parser/inline/ok/0173_union_item.rs @@ -0,0 +1 @@ +struct U { i: i32, f: f32 } diff --git a/crates/syntax/test_data/parser/inline/ok/0174_unit_struct.rast b/crates/syntax/test_data/parser/inline/ok/0174_unit_struct.rast new file mode 100644 index 00000000000..b20235889fc --- /dev/null +++ b/crates/syntax/test_data/parser/inline/ok/0174_unit_struct.rast @@ -0,0 +1,8 @@ +SOURCE_FILE@0..10 + STRUCT@0..9 + STRUCT_KW@0..6 "struct" + WHITESPACE@6..7 " " + NAME@7..8 + IDENT@7..8 "S" + SEMICOLON@8..9 ";" + WHITESPACE@9..10 "\n" diff --git a/crates/syntax/test_data/parser/inline/ok/0174_unit_struct.rs b/crates/syntax/test_data/parser/inline/ok/0174_unit_struct.rs new file mode 100644 index 00000000000..28377c2760b --- /dev/null +++ b/crates/syntax/test_data/parser/inline/ok/0174_unit_struct.rs @@ -0,0 +1 @@ +struct S; diff --git a/crates/syntax/test_data/parser/ok/0008_mod_item.rast b/crates/syntax/test_data/parser/ok/0008_mod_item.rast index 8b1e0a52da3..712e1534625 100644 --- a/crates/syntax/test_data/parser/ok/0008_mod_item.rast +++ b/crates/syntax/test_data/parser/ok/0008_mod_item.rast @@ -1,93 +1,76 @@ -SOURCE_FILE@0..118 - MODULE@0..6 +SOURCE_FILE@0..100 + MODULE@0..46 MOD_KW@0..3 "mod" WHITESPACE@3..4 " " NAME@4..5 - IDENT@4..5 "a" - SEMICOLON@5..6 ";" - WHITESPACE@6..8 "\n\n" - MODULE@8..17 - MOD_KW@8..11 "mod" - WHITESPACE@11..12 " " - NAME@12..13 - IDENT@12..13 "b" - WHITESPACE@13..14 " " - ITEM_LIST@14..17 - L_CURLY@14..15 "{" - WHITESPACE@15..16 "\n" - R_CURLY@16..17 "}" - WHITESPACE@17..19 "\n\n" - MODULE@19..65 - MOD_KW@19..22 "mod" - WHITESPACE@22..23 " " - NAME@23..24 - IDENT@23..24 "c" - WHITESPACE@24..25 " " - ITEM_LIST@25..65 - L_CURLY@25..26 "{" - WHITESPACE@26..31 "\n " - FN@31..47 - FN_KW@31..33 "fn" - WHITESPACE@33..34 " " - NAME@34..37 - IDENT@34..37 "foo" - PARAM_LIST@37..39 - L_PAREN@37..38 "(" - R_PAREN@38..39 ")" + IDENT@4..5 "c" + WHITESPACE@5..6 " " + ITEM_LIST@6..46 + L_CURLY@6..7 "{" + WHITESPACE@7..12 "\n " + FN@12..28 + FN_KW@12..14 "fn" + WHITESPACE@14..15 " " + NAME@15..18 + IDENT@15..18 "foo" + PARAM_LIST@18..20 + L_PAREN@18..19 "(" + R_PAREN@19..20 ")" + WHITESPACE@20..21 " " + BLOCK_EXPR@21..28 + L_CURLY@21..22 "{" + WHITESPACE@22..27 "\n " + R_CURLY@27..28 "}" + WHITESPACE@28..33 "\n " + STRUCT@33..44 + STRUCT_KW@33..39 "struct" WHITESPACE@39..40 " " - BLOCK_EXPR@40..47 - L_CURLY@40..41 "{" - WHITESPACE@41..46 "\n " - R_CURLY@46..47 "}" - WHITESPACE@47..52 "\n " - STRUCT@52..63 - STRUCT_KW@52..58 "struct" - WHITESPACE@58..59 " " - NAME@59..60 - IDENT@59..60 "S" - WHITESPACE@60..61 " " - RECORD_FIELD_LIST@61..63 - L_CURLY@61..62 "{" - R_CURLY@62..63 "}" - WHITESPACE@63..64 "\n" - R_CURLY@64..65 "}" - WHITESPACE@65..67 "\n\n" - MODULE@67..118 - MOD_KW@67..70 "mod" - WHITESPACE@70..71 " " - NAME@71..72 - IDENT@71..72 "d" - WHITESPACE@72..73 " " - ITEM_LIST@73..118 - L_CURLY@73..74 "{" - WHITESPACE@74..79 "\n " - ATTR@79..87 - POUND@79..80 "#" - BANG@80..81 "!" - L_BRACK@81..82 "[" - META@82..86 - PATH@82..86 - PATH_SEGMENT@82..86 - NAME_REF@82..86 - IDENT@82..86 "attr" - R_BRACK@86..87 "]" - WHITESPACE@87..92 "\n " - MODULE@92..98 - MOD_KW@92..95 "mod" - WHITESPACE@95..96 " " - NAME@96..97 - IDENT@96..97 "e" - SEMICOLON@97..98 ";" - WHITESPACE@98..103 "\n " - MODULE@103..116 - MOD_KW@103..106 "mod" - WHITESPACE@106..107 " " - NAME@107..108 - IDENT@107..108 "f" - WHITESPACE@108..109 " " - ITEM_LIST@109..116 - L_CURLY@109..110 "{" - WHITESPACE@110..115 "\n " - R_CURLY@115..116 "}" - WHITESPACE@116..117 "\n" - R_CURLY@117..118 "}" + NAME@40..41 + IDENT@40..41 "S" + WHITESPACE@41..42 " " + RECORD_FIELD_LIST@42..44 + L_CURLY@42..43 "{" + R_CURLY@43..44 "}" + WHITESPACE@44..45 "\n" + R_CURLY@45..46 "}" + WHITESPACE@46..48 "\n\n" + MODULE@48..99 + MOD_KW@48..51 "mod" + WHITESPACE@51..52 " " + NAME@52..53 + IDENT@52..53 "d" + WHITESPACE@53..54 " " + ITEM_LIST@54..99 + L_CURLY@54..55 "{" + WHITESPACE@55..60 "\n " + ATTR@60..68 + POUND@60..61 "#" + BANG@61..62 "!" + L_BRACK@62..63 "[" + META@63..67 + PATH@63..67 + PATH_SEGMENT@63..67 + NAME_REF@63..67 + IDENT@63..67 "attr" + R_BRACK@67..68 "]" + WHITESPACE@68..73 "\n " + MODULE@73..79 + MOD_KW@73..76 "mod" + WHITESPACE@76..77 " " + NAME@77..78 + IDENT@77..78 "e" + SEMICOLON@78..79 ";" + WHITESPACE@79..84 "\n " + MODULE@84..97 + MOD_KW@84..87 "mod" + WHITESPACE@87..88 " " + NAME@88..89 + IDENT@88..89 "f" + WHITESPACE@89..90 " " + ITEM_LIST@90..97 + L_CURLY@90..91 "{" + WHITESPACE@91..96 "\n " + R_CURLY@96..97 "}" + WHITESPACE@97..98 "\n" + R_CURLY@98..99 "}" + WHITESPACE@99..100 "\n" diff --git a/crates/syntax/test_data/parser/ok/0008_mod_item.rs b/crates/syntax/test_data/parser/ok/0008_mod_item.rs index d22993bc150..4ff0d9795c7 100644 --- a/crates/syntax/test_data/parser/ok/0008_mod_item.rs +++ b/crates/syntax/test_data/parser/ok/0008_mod_item.rs @@ -1,8 +1,3 @@ -mod a; - -mod b { -} - mod c { fn foo() { } @@ -14,4 +9,4 @@ mod d { mod e; mod f { } -} \ No newline at end of file +} diff --git a/crates/syntax/test_data/parser/ok/0012_visibility.rast b/crates/syntax/test_data/parser/ok/0012_visibility.rast index c5dbfb702a1..79dc9001a21 100644 --- a/crates/syntax/test_data/parser/ok/0012_visibility.rast +++ b/crates/syntax/test_data/parser/ok/0012_visibility.rast @@ -1,4 +1,4 @@ -SOURCE_FILE@0..98 +SOURCE_FILE@0..122 FN@0..9 FN_KW@0..2 "fn" WHITESPACE@2..3 " " @@ -28,81 +28,101 @@ SOURCE_FILE@0..98 L_CURLY@21..22 "{" R_CURLY@22..23 "}" WHITESPACE@23..24 "\n" - FN@24..44 - VISIBILITY@24..34 + MACRO_DEF@24..47 + VISIBILITY@24..27 PUB_KW@24..27 "pub" - L_PAREN@27..28 "(" - PATH@28..33 - PATH_SEGMENT@28..33 - NAME_REF@28..33 - CRATE_KW@28..33 "crate" - R_PAREN@33..34 ")" - WHITESPACE@34..35 " " - FN_KW@35..37 "fn" - WHITESPACE@37..38 " " - NAME@38..39 - IDENT@38..39 "c" - PARAM_LIST@39..41 - L_PAREN@39..40 "(" - R_PAREN@40..41 ")" - WHITESPACE@41..42 " " - BLOCK_EXPR@42..44 - L_CURLY@42..43 "{" - R_CURLY@43..44 "}" - WHITESPACE@44..45 "\n" - FN@45..65 - VISIBILITY@45..55 - PUB_KW@45..48 "pub" - L_PAREN@48..49 "(" - PATH@49..54 - PATH_SEGMENT@49..54 - NAME_REF@49..54 - SUPER_KW@49..54 "super" - R_PAREN@54..55 ")" - WHITESPACE@55..56 " " - FN_KW@56..58 "fn" + WHITESPACE@27..28 " " + MACRO_KW@28..33 "macro" + WHITESPACE@33..34 " " + NAME@34..35 + IDENT@34..35 "m" + TOKEN_TREE@35..47 + TOKEN_TREE@35..44 + L_PAREN@35..36 "(" + DOLLAR@36..37 "$" + COLON@37..38 ":" + IDENT@38..43 "ident" + R_PAREN@43..44 ")" + WHITESPACE@44..45 " " + TOKEN_TREE@45..47 + L_CURLY@45..46 "{" + R_CURLY@46..47 "}" + WHITESPACE@47..48 "\n" + FN@48..68 + VISIBILITY@48..58 + PUB_KW@48..51 "pub" + L_PAREN@51..52 "(" + PATH@52..57 + PATH_SEGMENT@52..57 + NAME_REF@52..57 + CRATE_KW@52..57 "crate" + R_PAREN@57..58 ")" WHITESPACE@58..59 " " - NAME@59..60 - IDENT@59..60 "d" - PARAM_LIST@60..62 - L_PAREN@60..61 "(" - R_PAREN@61..62 ")" - WHITESPACE@62..63 " " - BLOCK_EXPR@63..65 - L_CURLY@63..64 "{" - R_CURLY@64..65 "}" - WHITESPACE@65..66 "\n" - FN@66..97 - VISIBILITY@66..87 - PUB_KW@66..69 "pub" - L_PAREN@69..70 "(" - IN_KW@70..72 "in" - WHITESPACE@72..73 " " - PATH@73..86 - PATH@73..81 - PATH@73..76 - PATH_SEGMENT@73..76 - NAME_REF@73..76 - IDENT@73..76 "foo" - COLON2@76..78 "::" - PATH_SEGMENT@78..81 - NAME_REF@78..81 - IDENT@78..81 "bar" - COLON2@81..83 "::" - PATH_SEGMENT@83..86 - NAME_REF@83..86 - IDENT@83..86 "baz" - R_PAREN@86..87 ")" - WHITESPACE@87..88 " " - FN_KW@88..90 "fn" - WHITESPACE@90..91 " " - NAME@91..92 - IDENT@91..92 "e" - PARAM_LIST@92..94 - L_PAREN@92..93 "(" - R_PAREN@93..94 ")" - WHITESPACE@94..95 " " - BLOCK_EXPR@95..97 - L_CURLY@95..96 "{" - R_CURLY@96..97 "}" - WHITESPACE@97..98 "\n" + FN_KW@59..61 "fn" + WHITESPACE@61..62 " " + NAME@62..63 + IDENT@62..63 "c" + PARAM_LIST@63..65 + L_PAREN@63..64 "(" + R_PAREN@64..65 ")" + WHITESPACE@65..66 " " + BLOCK_EXPR@66..68 + L_CURLY@66..67 "{" + R_CURLY@67..68 "}" + WHITESPACE@68..69 "\n" + FN@69..89 + VISIBILITY@69..79 + PUB_KW@69..72 "pub" + L_PAREN@72..73 "(" + PATH@73..78 + PATH_SEGMENT@73..78 + NAME_REF@73..78 + SUPER_KW@73..78 "super" + R_PAREN@78..79 ")" + WHITESPACE@79..80 " " + FN_KW@80..82 "fn" + WHITESPACE@82..83 " " + NAME@83..84 + IDENT@83..84 "d" + PARAM_LIST@84..86 + L_PAREN@84..85 "(" + R_PAREN@85..86 ")" + WHITESPACE@86..87 " " + BLOCK_EXPR@87..89 + L_CURLY@87..88 "{" + R_CURLY@88..89 "}" + WHITESPACE@89..90 "\n" + FN@90..121 + VISIBILITY@90..111 + PUB_KW@90..93 "pub" + L_PAREN@93..94 "(" + IN_KW@94..96 "in" + WHITESPACE@96..97 " " + PATH@97..110 + PATH@97..105 + PATH@97..100 + PATH_SEGMENT@97..100 + NAME_REF@97..100 + IDENT@97..100 "foo" + COLON2@100..102 "::" + PATH_SEGMENT@102..105 + NAME_REF@102..105 + IDENT@102..105 "bar" + COLON2@105..107 "::" + PATH_SEGMENT@107..110 + NAME_REF@107..110 + IDENT@107..110 "baz" + R_PAREN@110..111 ")" + WHITESPACE@111..112 " " + FN_KW@112..114 "fn" + WHITESPACE@114..115 " " + NAME@115..116 + IDENT@115..116 "e" + PARAM_LIST@116..118 + L_PAREN@116..117 "(" + R_PAREN@117..118 ")" + WHITESPACE@118..119 " " + BLOCK_EXPR@119..121 + L_CURLY@119..120 "{" + R_CURLY@120..121 "}" + WHITESPACE@121..122 "\n" diff --git a/crates/syntax/test_data/parser/ok/0012_visibility.rs b/crates/syntax/test_data/parser/ok/0012_visibility.rs index 75b1db12134..129d486fae2 100644 --- a/crates/syntax/test_data/parser/ok/0012_visibility.rs +++ b/crates/syntax/test_data/parser/ok/0012_visibility.rs @@ -1,5 +1,6 @@ fn a() {} pub fn b() {} +pub macro m($:ident) {} pub(crate) fn c() {} pub(super) fn d() {} pub(in foo::bar::baz) fn e() {}