internal: more local test for mod item

This commit is contained in:
Aleksey Kladov 2021-09-17 21:53:24 +03:00
parent 715cd8d938
commit 55078c81e0
7 changed files with 119 additions and 117 deletions

View File

@ -309,6 +309,30 @@ fn extern_crate(p: &mut Parser, m: Marker) {
m.complete(p, EXTERN_CRATE); 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);
}
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) { pub(crate) fn extern_item_list(p: &mut Parser) {
assert!(p.at(T!['{'])); assert!(p.at(T!['{']));
let m = p.start(); let m = p.start();
@ -376,28 +400,6 @@ fn type_alias(p: &mut Parser, m: Marker) {
m.complete(p, TYPE_ALIAS); 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) { fn macro_rules(p: &mut Parser, m: Marker) {
assert!(p.at_contextual_kw("macro_rules")); assert!(p.at_contextual_kw("macro_rules"));
p.bump_remap(T![macro_rules]); p.bump_remap(T![macro_rules]);

View File

@ -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"

View File

@ -0,0 +1 @@
mod a;

View File

@ -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"

View File

@ -0,0 +1 @@
mod b { }

View File

@ -1,93 +1,76 @@
SOURCE_FILE@0..118 SOURCE_FILE@0..100
MODULE@0..6 MODULE@0..46
MOD_KW@0..3 "mod" MOD_KW@0..3 "mod"
WHITESPACE@3..4 " " WHITESPACE@3..4 " "
NAME@4..5 NAME@4..5
IDENT@4..5 "a" IDENT@4..5 "c"
SEMICOLON@5..6 ";" WHITESPACE@5..6 " "
WHITESPACE@6..8 "\n\n" ITEM_LIST@6..46
MODULE@8..17 L_CURLY@6..7 "{"
MOD_KW@8..11 "mod" WHITESPACE@7..12 "\n "
WHITESPACE@11..12 " " FN@12..28
NAME@12..13 FN_KW@12..14 "fn"
IDENT@12..13 "b" WHITESPACE@14..15 " "
WHITESPACE@13..14 " " NAME@15..18
ITEM_LIST@14..17 IDENT@15..18 "foo"
L_CURLY@14..15 "{" PARAM_LIST@18..20
WHITESPACE@15..16 "\n" L_PAREN@18..19 "("
R_CURLY@16..17 "}" R_PAREN@19..20 ")"
WHITESPACE@17..19 "\n\n" WHITESPACE@20..21 " "
MODULE@19..65 BLOCK_EXPR@21..28
MOD_KW@19..22 "mod" L_CURLY@21..22 "{"
WHITESPACE@22..23 " " WHITESPACE@22..27 "\n "
NAME@23..24 R_CURLY@27..28 "}"
IDENT@23..24 "c" WHITESPACE@28..33 "\n "
WHITESPACE@24..25 " " STRUCT@33..44
ITEM_LIST@25..65 STRUCT_KW@33..39 "struct"
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 ")"
WHITESPACE@39..40 " " WHITESPACE@39..40 " "
BLOCK_EXPR@40..47 NAME@40..41
L_CURLY@40..41 "{" IDENT@40..41 "S"
WHITESPACE@41..46 "\n " WHITESPACE@41..42 " "
R_CURLY@46..47 "}" RECORD_FIELD_LIST@42..44
WHITESPACE@47..52 "\n " L_CURLY@42..43 "{"
STRUCT@52..63 R_CURLY@43..44 "}"
STRUCT_KW@52..58 "struct" WHITESPACE@44..45 "\n"
WHITESPACE@58..59 " " R_CURLY@45..46 "}"
NAME@59..60 WHITESPACE@46..48 "\n\n"
IDENT@59..60 "S" MODULE@48..99
WHITESPACE@60..61 " " MOD_KW@48..51 "mod"
RECORD_FIELD_LIST@61..63 WHITESPACE@51..52 " "
L_CURLY@61..62 "{" NAME@52..53
R_CURLY@62..63 "}" IDENT@52..53 "d"
WHITESPACE@63..64 "\n" WHITESPACE@53..54 " "
R_CURLY@64..65 "}" ITEM_LIST@54..99
WHITESPACE@65..67 "\n\n" L_CURLY@54..55 "{"
MODULE@67..118 WHITESPACE@55..60 "\n "
MOD_KW@67..70 "mod" ATTR@60..68
WHITESPACE@70..71 " " POUND@60..61 "#"
NAME@71..72 BANG@61..62 "!"
IDENT@71..72 "d" L_BRACK@62..63 "["
WHITESPACE@72..73 " " META@63..67
ITEM_LIST@73..118 PATH@63..67
L_CURLY@73..74 "{" PATH_SEGMENT@63..67
WHITESPACE@74..79 "\n " NAME_REF@63..67
ATTR@79..87 IDENT@63..67 "attr"
POUND@79..80 "#" R_BRACK@67..68 "]"
BANG@80..81 "!" WHITESPACE@68..73 "\n "
L_BRACK@81..82 "[" MODULE@73..79
META@82..86 MOD_KW@73..76 "mod"
PATH@82..86 WHITESPACE@76..77 " "
PATH_SEGMENT@82..86 NAME@77..78
NAME_REF@82..86 IDENT@77..78 "e"
IDENT@82..86 "attr" SEMICOLON@78..79 ";"
R_BRACK@86..87 "]" WHITESPACE@79..84 "\n "
WHITESPACE@87..92 "\n " MODULE@84..97
MODULE@92..98 MOD_KW@84..87 "mod"
MOD_KW@92..95 "mod" WHITESPACE@87..88 " "
WHITESPACE@95..96 " " NAME@88..89
NAME@96..97 IDENT@88..89 "f"
IDENT@96..97 "e" WHITESPACE@89..90 " "
SEMICOLON@97..98 ";" ITEM_LIST@90..97
WHITESPACE@98..103 "\n " L_CURLY@90..91 "{"
MODULE@103..116 WHITESPACE@91..96 "\n "
MOD_KW@103..106 "mod" R_CURLY@96..97 "}"
WHITESPACE@106..107 " " WHITESPACE@97..98 "\n"
NAME@107..108 R_CURLY@98..99 "}"
IDENT@107..108 "f" WHITESPACE@99..100 "\n"
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 "}"

View File

@ -1,8 +1,3 @@
mod a;
mod b {
}
mod c { mod c {
fn foo() { fn foo() {
} }