generate testsuite for impl_type

This commit is contained in:
csmoe 2018-09-26 10:01:42 +08:00
parent edf1cc3582
commit 8b710e9535
5 changed files with 94 additions and 13 deletions

View file

@ -57,7 +57,7 @@ pub(super) fn impl_item(p: &mut Parser) {
p.eat(EXCL);
impl_type(p);
if p.eat(FOR_KW) {
types::type_(p);
impl_type(p);
}
type_params::opt_where_clause(p);
if p.at(L_CURLY) {
@ -116,10 +116,11 @@ fn choose_type_params_over_qpath(p: &Parser) -> bool {
&& (p.nth(2) == R_ANGLE || p.nth(2) == COMMA || p.nth(2) == COLON || p.nth(2) == EQ)
}
// test impl_type
// impl Type {}
// ^^^^
// impl Trait for T {}
// ^^^^^
// impl Trait1 for T {}
// impl impl NotType {}
// impl Trait2 for impl NotType {}
pub(crate) fn impl_type(p: &mut Parser) {
if p.at(IMPL_KW) {
p.error("expected trait or type");
@ -128,4 +129,3 @@ pub(crate) fn impl_type(p: &mut Parser) {
types::type_(p);
}

View file

@ -1,3 +1,2 @@
impl<T: Clone>
impl<T> OnceCell<T> {
}
impl<T> OnceCell<T> {}

View file

@ -1,4 +1,4 @@
ROOT@[0; 39)
ROOT@[0; 38)
IMPL_ITEM@[0; 14)
IMPL_KW@[0; 4)
TYPE_PARAM_LIST@[4; 14)
@ -17,7 +17,7 @@ ROOT@[0; 39)
err: `expected trait or type`
err: `expected `{``
WHITESPACE@[14; 15)
IMPL_ITEM@[15; 38)
IMPL_ITEM@[15; 37)
IMPL_KW@[15; 19)
TYPE_PARAM_LIST@[19; 22)
L_ANGLE@[19; 20)
@ -41,8 +41,7 @@ ROOT@[0; 39)
IDENT@[32; 33) "T"
R_ANGLE@[33; 34)
WHITESPACE@[34; 35)
ITEM_LIST@[35; 38)
ITEM_LIST@[35; 37)
L_CURLY@[35; 36)
WHITESPACE@[36; 37)
R_CURLY@[37; 38)
WHITESPACE@[38; 39)
R_CURLY@[36; 37)
WHITESPACE@[37; 38)

View file

@ -0,0 +1,4 @@
impl Type {}
impl Trait1 for T {}
impl impl NotType {}
impl Trait2 for impl NotType {}

View file

@ -0,0 +1,79 @@
ROOT@[0; 87)
IMPL_ITEM@[0; 12)
IMPL_KW@[0; 4)
WHITESPACE@[4; 5)
PATH_TYPE@[5; 9)
PATH@[5; 9)
PATH_SEGMENT@[5; 9)
NAME_REF@[5; 9)
IDENT@[5; 9) "Type"
WHITESPACE@[9; 10)
ITEM_LIST@[10; 12)
L_CURLY@[10; 11)
R_CURLY@[11; 12)
WHITESPACE@[12; 13)
IMPL_ITEM@[13; 33)
IMPL_KW@[13; 17)
WHITESPACE@[17; 18)
PATH_TYPE@[18; 24)
PATH@[18; 24)
PATH_SEGMENT@[18; 24)
NAME_REF@[18; 24)
IDENT@[18; 24) "Trait1"
WHITESPACE@[24; 25)
FOR_KW@[25; 28)
WHITESPACE@[28; 29)
PATH_TYPE@[29; 30)
PATH@[29; 30)
PATH_SEGMENT@[29; 30)
NAME_REF@[29; 30)
IDENT@[29; 30) "T"
WHITESPACE@[30; 31)
ITEM_LIST@[31; 33)
L_CURLY@[31; 32)
R_CURLY@[32; 33)
WHITESPACE@[33; 34)
IMPL_ITEM@[34; 38)
IMPL_KW@[34; 38)
err: `expected trait or type`
err: `expected `{``
WHITESPACE@[38; 39)
IMPL_ITEM@[39; 54)
IMPL_KW@[39; 43)
WHITESPACE@[43; 44)
PATH_TYPE@[44; 51)
PATH@[44; 51)
PATH_SEGMENT@[44; 51)
NAME_REF@[44; 51)
IDENT@[44; 51) "NotType"
WHITESPACE@[51; 52)
ITEM_LIST@[52; 54)
L_CURLY@[52; 53)
R_CURLY@[53; 54)
WHITESPACE@[54; 55)
IMPL_ITEM@[55; 70)
IMPL_KW@[55; 59)
WHITESPACE@[59; 60)
PATH_TYPE@[60; 66)
PATH@[60; 66)
PATH_SEGMENT@[60; 66)
NAME_REF@[60; 66)
IDENT@[60; 66) "Trait2"
WHITESPACE@[66; 67)
FOR_KW@[67; 70)
err: `expected trait or type`
err: `expected `{``
WHITESPACE@[70; 71)
IMPL_ITEM@[71; 86)
IMPL_KW@[71; 75)
WHITESPACE@[75; 76)
PATH_TYPE@[76; 83)
PATH@[76; 83)
PATH_SEGMENT@[76; 83)
NAME_REF@[76; 83)
IDENT@[76; 83) "NotType"
WHITESPACE@[83; 84)
ITEM_LIST@[84; 86)
L_CURLY@[84; 85)
R_CURLY@[85; 86)
WHITESPACE@[86; 87)