Nodes for type args
This commit is contained in:
parent
cd814fdf81
commit
63e2ed4e75
6 changed files with 84 additions and 12 deletions
|
|
@ -152,10 +152,13 @@ Grammar(
|
|||
"LET_STMT",
|
||||
"EXPR_STMT",
|
||||
|
||||
"TYPE_PARAM",
|
||||
"LIFETIME_PARAM",
|
||||
"TYPE_PARAM_LIST",
|
||||
"LIFETIME_PARAM",
|
||||
"TYPE_PARAM",
|
||||
"TYPE_ARG_LIST",
|
||||
"LIFETIME_ARG",
|
||||
"TYPE_ARG",
|
||||
"ASSOC_TYPE_ARG",
|
||||
|
||||
"PARAM_LIST",
|
||||
"SELF_PARAM",
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ pub(super) fn list(p: &mut Parser, colon_colon_required: bool) {
|
|||
};
|
||||
|
||||
while !p.at(EOF) && !p.at(R_ANGLE) {
|
||||
types::type_(p);
|
||||
type_arg(p);
|
||||
if !p.at(R_ANGLE) && !p.expect(COMMA) {
|
||||
break;
|
||||
}
|
||||
|
|
@ -24,3 +24,25 @@ pub(super) fn list(p: &mut Parser, colon_colon_required: bool) {
|
|||
p.expect(R_ANGLE);
|
||||
m.complete(p, TYPE_ARG_LIST);
|
||||
}
|
||||
|
||||
// test type_arg
|
||||
// type A = B<'static, i32, Item=u64>
|
||||
fn type_arg(p: &mut Parser) {
|
||||
let m = p.start();
|
||||
match p.current() {
|
||||
LIFETIME => {
|
||||
p.bump();
|
||||
m.complete(p, LIFETIME_ARG);
|
||||
},
|
||||
IDENT if p.nth(1) == EQ => {
|
||||
p.bump();
|
||||
p.bump();
|
||||
types::type_(p);
|
||||
m.complete(p, ASSOC_TYPE_ARG);
|
||||
},
|
||||
_ => {
|
||||
types::type_(p);
|
||||
m.complete(p, TYPE_ARG);
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -140,10 +140,13 @@ pub enum SyntaxKind {
|
|||
BLOCK,
|
||||
LET_STMT,
|
||||
EXPR_STMT,
|
||||
TYPE_PARAM,
|
||||
LIFETIME_PARAM,
|
||||
TYPE_PARAM_LIST,
|
||||
LIFETIME_PARAM,
|
||||
TYPE_PARAM,
|
||||
TYPE_ARG_LIST,
|
||||
LIFETIME_ARG,
|
||||
TYPE_ARG,
|
||||
ASSOC_TYPE_ARG,
|
||||
PARAM_LIST,
|
||||
SELF_PARAM,
|
||||
ARG_LIST,
|
||||
|
|
@ -294,10 +297,13 @@ impl SyntaxKind {
|
|||
BLOCK => &SyntaxInfo { name: "BLOCK" },
|
||||
LET_STMT => &SyntaxInfo { name: "LET_STMT" },
|
||||
EXPR_STMT => &SyntaxInfo { name: "EXPR_STMT" },
|
||||
TYPE_PARAM => &SyntaxInfo { name: "TYPE_PARAM" },
|
||||
LIFETIME_PARAM => &SyntaxInfo { name: "LIFETIME_PARAM" },
|
||||
TYPE_PARAM_LIST => &SyntaxInfo { name: "TYPE_PARAM_LIST" },
|
||||
LIFETIME_PARAM => &SyntaxInfo { name: "LIFETIME_PARAM" },
|
||||
TYPE_PARAM => &SyntaxInfo { name: "TYPE_PARAM" },
|
||||
TYPE_ARG_LIST => &SyntaxInfo { name: "TYPE_ARG_LIST" },
|
||||
LIFETIME_ARG => &SyntaxInfo { name: "LIFETIME_ARG" },
|
||||
TYPE_ARG => &SyntaxInfo { name: "TYPE_ARG" },
|
||||
ASSOC_TYPE_ARG => &SyntaxInfo { name: "ASSOC_TYPE_ARG" },
|
||||
PARAM_LIST => &SyntaxInfo { name: "PARAM_LIST" },
|
||||
SELF_PARAM => &SyntaxInfo { name: "SELF_PARAM" },
|
||||
ARG_LIST => &SyntaxInfo { name: "ARG_LIST" },
|
||||
|
|
|
|||
|
|
@ -63,11 +63,12 @@ FILE@[0; 68)
|
|||
TYPE_ARG_LIST@[59; 64)
|
||||
COLONCOLON@[59; 61)
|
||||
L_ANGLE@[61; 62)
|
||||
PATH_TYPE@[62; 63)
|
||||
PATH@[62; 63)
|
||||
PATH_SEGMENT@[62; 63)
|
||||
NAME_REF@[62; 63)
|
||||
IDENT@[62; 63) "b"
|
||||
TYPE_ARG@[62; 63)
|
||||
PATH_TYPE@[62; 63)
|
||||
PATH@[62; 63)
|
||||
PATH_SEGMENT@[62; 63)
|
||||
NAME_REF@[62; 63)
|
||||
IDENT@[62; 63) "b"
|
||||
R_ANGLE@[63; 64)
|
||||
SEMI@[64; 65)
|
||||
WHITESPACE@[65; 66)
|
||||
|
|
|
|||
1
tests/data/parser/inline/0058_type_arg.rs
Normal file
1
tests/data/parser/inline/0058_type_arg.rs
Normal file
|
|
@ -0,0 +1 @@
|
|||
type A = B<'static, i32, Item=u64>
|
||||
39
tests/data/parser/inline/0058_type_arg.txt
Normal file
39
tests/data/parser/inline/0058_type_arg.txt
Normal file
|
|
@ -0,0 +1,39 @@
|
|||
FILE@[0; 35)
|
||||
TYPE_ITEM@[0; 35)
|
||||
TYPE_KW@[0; 4)
|
||||
NAME@[4; 7)
|
||||
WHITESPACE@[4; 5)
|
||||
IDENT@[5; 6) "A"
|
||||
WHITESPACE@[6; 7)
|
||||
EQ@[7; 8)
|
||||
PATH_TYPE@[8; 35)
|
||||
PATH@[8; 35)
|
||||
PATH_SEGMENT@[8; 35)
|
||||
NAME_REF@[8; 10)
|
||||
WHITESPACE@[8; 9)
|
||||
IDENT@[9; 10) "B"
|
||||
TYPE_ARG_LIST@[10; 35)
|
||||
L_ANGLE@[10; 11)
|
||||
LIFETIME_ARG@[11; 18)
|
||||
LIFETIME@[11; 18) "'static"
|
||||
COMMA@[18; 19)
|
||||
TYPE_ARG@[19; 23)
|
||||
PATH_TYPE@[19; 23)
|
||||
PATH@[19; 23)
|
||||
PATH_SEGMENT@[19; 23)
|
||||
NAME_REF@[19; 23)
|
||||
WHITESPACE@[19; 20)
|
||||
IDENT@[20; 23) "i32"
|
||||
COMMA@[23; 24)
|
||||
ASSOC_TYPE_ARG@[24; 33)
|
||||
WHITESPACE@[24; 25)
|
||||
IDENT@[25; 29) "Item"
|
||||
EQ@[29; 30)
|
||||
PATH_TYPE@[30; 33)
|
||||
PATH@[30; 33)
|
||||
PATH_SEGMENT@[30; 33)
|
||||
NAME_REF@[30; 33)
|
||||
IDENT@[30; 33) "u64"
|
||||
R_ANGLE@[33; 34)
|
||||
WHITESPACE@[34; 35)
|
||||
err: `expected SEMI`
|
||||
Loading…
Add table
Add a link
Reference in a new issue