mirror of
https://github.com/rust-lang/rust-analyzer
synced 2025-01-13 05:38:46 +00:00
for types in bounds
This commit is contained in:
parent
3a017aaa52
commit
e44a6bcc82
17 changed files with 311 additions and 192 deletions
|
@ -70,15 +70,15 @@ pub(super) fn bounds_without_colon(p: &mut Parser) {
|
||||||
loop {
|
loop {
|
||||||
let has_paren = p.eat(L_PAREN);
|
let has_paren = p.eat(L_PAREN);
|
||||||
p.eat(QUESTION);
|
p.eat(QUESTION);
|
||||||
if p.at(FOR_KW) {
|
match p.current() {
|
||||||
//TODO
|
LIFETIME => p.bump(),
|
||||||
}
|
FOR_KW => {
|
||||||
if p.at(LIFETIME) {
|
types::for_type(p)
|
||||||
p.bump();
|
}
|
||||||
} else if paths::is_path_start(p) {
|
_ if paths::is_path_start(p) => {
|
||||||
paths::type_path(p);
|
types::path_type(p)
|
||||||
} else {
|
}
|
||||||
break;
|
_ => break,
|
||||||
}
|
}
|
||||||
if has_paren {
|
if has_paren {
|
||||||
p.expect(R_PAREN);
|
p.expect(R_PAREN);
|
||||||
|
|
|
@ -191,12 +191,17 @@ fn fn_pointer_type(p: &mut Parser) {
|
||||||
|
|
||||||
// test for_type
|
// test for_type
|
||||||
// type A = for<'a> fn() -> ();
|
// type A = for<'a> fn() -> ();
|
||||||
fn for_type(p: &mut Parser) {
|
pub(super) fn for_type(p: &mut Parser) {
|
||||||
assert!(p.at(FOR_KW));
|
assert!(p.at(FOR_KW));
|
||||||
let m = p.start();
|
let m = p.start();
|
||||||
p.bump();
|
p.bump();
|
||||||
type_params::opt_type_param_list(p);
|
type_params::opt_type_param_list(p);
|
||||||
type_(p);
|
match p.current() {
|
||||||
|
FN_KW | UNSAFE_KW | EXTERN_KW => fn_pointer_type(p),
|
||||||
|
_ if paths::is_path_start(p) => path_type_(p, false),
|
||||||
|
_ => p.error("expected a path"),
|
||||||
|
|
||||||
|
}
|
||||||
m.complete(p, FOR_TYPE);
|
m.complete(p, FOR_TYPE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -226,12 +231,16 @@ fn dyn_trait_type(p: &mut Parser) {
|
||||||
// type C = self::Foo;
|
// type C = self::Foo;
|
||||||
// type D = super::Foo;
|
// type D = super::Foo;
|
||||||
pub(super) fn path_type(p: &mut Parser) {
|
pub(super) fn path_type(p: &mut Parser) {
|
||||||
|
path_type_(p, true)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub(super) fn path_type_(p: &mut Parser, allow_bounds: bool) {
|
||||||
assert!(paths::is_path_start(p) || p.at(L_ANGLE));
|
assert!(paths::is_path_start(p) || p.at(L_ANGLE));
|
||||||
let m = p.start();
|
let m = p.start();
|
||||||
paths::type_path(p);
|
paths::type_path(p);
|
||||||
// test path_type_with_bounds
|
// test path_type_with_bounds
|
||||||
// fn foo() -> Box<T + 'f> {}
|
// fn foo() -> Box<T + 'f> {}
|
||||||
if p.eat(PLUS) {
|
if allow_bounds && p.eat(PLUS) {
|
||||||
type_params::bounds_without_colon(p);
|
type_params::bounds_without_colon(p);
|
||||||
}
|
}
|
||||||
m.complete(p, PATH_TYPE);
|
m.complete(p, PATH_TYPE);
|
||||||
|
|
|
@ -16,11 +16,12 @@ ROOT@[0; 31)
|
||||||
IDENT@[15; 18) "Foo"
|
IDENT@[15; 18) "Foo"
|
||||||
COLON@[18; 19)
|
COLON@[18; 19)
|
||||||
WHITESPACE@[19; 20)
|
WHITESPACE@[19; 20)
|
||||||
PATH@[20; 24)
|
PATH_TYPE@[20; 24)
|
||||||
PATH_SEGMENT@[20; 24)
|
PATH@[20; 24)
|
||||||
NAME_REF@[20; 24)
|
PATH_SEGMENT@[20; 24)
|
||||||
IDENT@[20; 24) "Copy"
|
NAME_REF@[20; 24)
|
||||||
err: `expected COMMA`
|
IDENT@[20; 24) "Copy"
|
||||||
|
err: `expected COMMA`
|
||||||
WHITESPACE@[24; 25)
|
WHITESPACE@[24; 25)
|
||||||
EQ@[25; 26)
|
EQ@[25; 26)
|
||||||
WHITESPACE@[26; 27)
|
WHITESPACE@[26; 27)
|
||||||
|
|
|
@ -16,19 +16,21 @@ ROOT@[0; 35)
|
||||||
PLUS@[15; 16)
|
PLUS@[15; 16)
|
||||||
WHITESPACE@[16; 17)
|
WHITESPACE@[16; 17)
|
||||||
QUESTION@[17; 18)
|
QUESTION@[17; 18)
|
||||||
PATH@[18; 23)
|
PATH_TYPE@[18; 32)
|
||||||
PATH_SEGMENT@[18; 23)
|
PATH@[18; 23)
|
||||||
NAME_REF@[18; 23)
|
PATH_SEGMENT@[18; 23)
|
||||||
IDENT@[18; 23) "Sized"
|
NAME_REF@[18; 23)
|
||||||
WHITESPACE@[23; 24)
|
IDENT@[18; 23) "Sized"
|
||||||
PLUS@[24; 25)
|
WHITESPACE@[23; 24)
|
||||||
WHITESPACE@[25; 26)
|
PLUS@[24; 25)
|
||||||
L_PAREN@[26; 27)
|
WHITESPACE@[25; 26)
|
||||||
PATH@[27; 31)
|
L_PAREN@[26; 27)
|
||||||
PATH_SEGMENT@[27; 31)
|
PATH_TYPE@[27; 31)
|
||||||
NAME_REF@[27; 31)
|
PATH@[27; 31)
|
||||||
IDENT@[27; 31) "Copy"
|
PATH_SEGMENT@[27; 31)
|
||||||
R_PAREN@[31; 32)
|
NAME_REF@[27; 31)
|
||||||
|
IDENT@[27; 31) "Copy"
|
||||||
|
R_PAREN@[31; 32)
|
||||||
R_ANGLE@[32; 33)
|
R_ANGLE@[32; 33)
|
||||||
SEMI@[33; 34)
|
SEMI@[33; 34)
|
||||||
WHITESPACE@[34; 35)
|
WHITESPACE@[34; 35)
|
||||||
|
|
|
@ -18,10 +18,11 @@ ROOT@[0; 83)
|
||||||
IDENT@[18; 19) "A"
|
IDENT@[18; 19) "A"
|
||||||
COLON@[19; 20)
|
COLON@[19; 20)
|
||||||
WHITESPACE@[20; 21)
|
WHITESPACE@[20; 21)
|
||||||
PATH@[21; 26)
|
PATH_TYPE@[21; 26)
|
||||||
PATH_SEGMENT@[21; 26)
|
PATH@[21; 26)
|
||||||
NAME_REF@[21; 26)
|
PATH_SEGMENT@[21; 26)
|
||||||
IDENT@[21; 26) "Clone"
|
NAME_REF@[21; 26)
|
||||||
|
IDENT@[21; 26) "Clone"
|
||||||
SEMI@[26; 27)
|
SEMI@[26; 27)
|
||||||
WHITESPACE@[27; 32)
|
WHITESPACE@[27; 32)
|
||||||
CONST_DEF@[32; 45)
|
CONST_DEF@[32; 45)
|
||||||
|
|
|
@ -12,17 +12,19 @@ ROOT@[0; 42)
|
||||||
R_ANGLE@[9; 10)
|
R_ANGLE@[9; 10)
|
||||||
COLON@[10; 11)
|
COLON@[10; 11)
|
||||||
WHITESPACE@[11; 12)
|
WHITESPACE@[11; 12)
|
||||||
PATH@[12; 16)
|
PATH_TYPE@[12; 24)
|
||||||
PATH_SEGMENT@[12; 16)
|
PATH@[12; 16)
|
||||||
NAME_REF@[12; 16)
|
PATH_SEGMENT@[12; 16)
|
||||||
IDENT@[12; 16) "Hash"
|
NAME_REF@[12; 16)
|
||||||
WHITESPACE@[16; 17)
|
IDENT@[12; 16) "Hash"
|
||||||
PLUS@[17; 18)
|
WHITESPACE@[16; 17)
|
||||||
WHITESPACE@[18; 19)
|
PLUS@[17; 18)
|
||||||
PATH@[19; 24)
|
WHITESPACE@[18; 19)
|
||||||
PATH_SEGMENT@[19; 24)
|
PATH_TYPE@[19; 24)
|
||||||
NAME_REF@[19; 24)
|
PATH@[19; 24)
|
||||||
IDENT@[19; 24) "Clone"
|
PATH_SEGMENT@[19; 24)
|
||||||
|
NAME_REF@[19; 24)
|
||||||
|
IDENT@[19; 24) "Clone"
|
||||||
WHITESPACE@[24; 25)
|
WHITESPACE@[24; 25)
|
||||||
WHERE_CLAUSE@[25; 38)
|
WHERE_CLAUSE@[25; 38)
|
||||||
WHERE_KW@[25; 30)
|
WHERE_KW@[25; 30)
|
||||||
|
@ -35,10 +37,11 @@ ROOT@[0; 42)
|
||||||
IDENT@[31; 32) "U"
|
IDENT@[31; 32) "U"
|
||||||
COLON@[32; 33)
|
COLON@[32; 33)
|
||||||
WHITESPACE@[33; 34)
|
WHITESPACE@[33; 34)
|
||||||
PATH@[34; 38)
|
PATH_TYPE@[34; 38)
|
||||||
PATH_SEGMENT@[34; 38)
|
PATH@[34; 38)
|
||||||
NAME_REF@[34; 38)
|
PATH_SEGMENT@[34; 38)
|
||||||
IDENT@[34; 38) "Copy"
|
NAME_REF@[34; 38)
|
||||||
|
IDENT@[34; 38) "Copy"
|
||||||
WHITESPACE@[38; 39)
|
WHITESPACE@[38; 39)
|
||||||
ITEM_LIST@[39; 41)
|
ITEM_LIST@[39; 41)
|
||||||
L_CURLY@[39; 40)
|
L_CURLY@[39; 40)
|
||||||
|
|
|
@ -25,10 +25,11 @@ ROOT@[0; 29)
|
||||||
IDENT@[18; 19) "T"
|
IDENT@[18; 19) "T"
|
||||||
COLON@[19; 20)
|
COLON@[19; 20)
|
||||||
WHITESPACE@[20; 21)
|
WHITESPACE@[20; 21)
|
||||||
PATH@[21; 25)
|
PATH_TYPE@[21; 25)
|
||||||
PATH_SEGMENT@[21; 25)
|
PATH@[21; 25)
|
||||||
NAME_REF@[21; 25)
|
PATH_SEGMENT@[21; 25)
|
||||||
IDENT@[21; 25) "Copy"
|
NAME_REF@[21; 25)
|
||||||
|
IDENT@[21; 25) "Copy"
|
||||||
WHITESPACE@[25; 26)
|
WHITESPACE@[25; 26)
|
||||||
BLOCK@[26; 28)
|
BLOCK@[26; 28)
|
||||||
L_CURLY@[26; 27)
|
L_CURLY@[26; 27)
|
||||||
|
|
|
@ -11,17 +11,19 @@ ROOT@[0; 28)
|
||||||
IDENT@[7; 8) "T"
|
IDENT@[7; 8) "T"
|
||||||
COLON@[8; 9)
|
COLON@[8; 9)
|
||||||
WHITESPACE@[9; 10)
|
WHITESPACE@[9; 10)
|
||||||
PATH@[10; 15)
|
PATH_TYPE@[10; 22)
|
||||||
PATH_SEGMENT@[10; 15)
|
PATH@[10; 15)
|
||||||
NAME_REF@[10; 15)
|
PATH_SEGMENT@[10; 15)
|
||||||
IDENT@[10; 15) "Clone"
|
NAME_REF@[10; 15)
|
||||||
WHITESPACE@[15; 16)
|
IDENT@[10; 15) "Clone"
|
||||||
PLUS@[16; 17)
|
WHITESPACE@[15; 16)
|
||||||
WHITESPACE@[17; 18)
|
PLUS@[16; 17)
|
||||||
PATH@[18; 22)
|
WHITESPACE@[17; 18)
|
||||||
PATH_SEGMENT@[18; 22)
|
PATH_TYPE@[18; 22)
|
||||||
NAME_REF@[18; 22)
|
PATH@[18; 22)
|
||||||
IDENT@[18; 22) "Copy"
|
PATH_SEGMENT@[18; 22)
|
||||||
|
NAME_REF@[18; 22)
|
||||||
|
IDENT@[18; 22) "Copy"
|
||||||
R_ANGLE@[22; 23)
|
R_ANGLE@[22; 23)
|
||||||
PARAM_LIST@[23; 25)
|
PARAM_LIST@[23; 25)
|
||||||
L_PAREN@[23; 24)
|
L_PAREN@[23; 24)
|
||||||
|
|
|
@ -10,30 +10,31 @@ ROOT@[0; 43)
|
||||||
IMPL_TRAIT_TYPE@[9; 41)
|
IMPL_TRAIT_TYPE@[9; 41)
|
||||||
IMPL_KW@[9; 13)
|
IMPL_KW@[9; 13)
|
||||||
WHITESPACE@[13; 14)
|
WHITESPACE@[13; 14)
|
||||||
PATH@[14; 36)
|
PATH_TYPE@[14; 41)
|
||||||
PATH_SEGMENT@[14; 36)
|
PATH@[14; 36)
|
||||||
NAME_REF@[14; 22)
|
PATH_SEGMENT@[14; 36)
|
||||||
IDENT@[14; 22) "Iterator"
|
NAME_REF@[14; 22)
|
||||||
TYPE_ARG_LIST@[22; 36)
|
IDENT@[14; 22) "Iterator"
|
||||||
L_ANGLE@[22; 23)
|
TYPE_ARG_LIST@[22; 36)
|
||||||
ASSOC_TYPE_ARG@[23; 35)
|
L_ANGLE@[22; 23)
|
||||||
NAME_REF@[23; 27)
|
ASSOC_TYPE_ARG@[23; 35)
|
||||||
IDENT@[23; 27) "Item"
|
NAME_REF@[23; 27)
|
||||||
EQ@[27; 28)
|
IDENT@[23; 27) "Item"
|
||||||
PATH_TYPE@[28; 35)
|
EQ@[27; 28)
|
||||||
PATH@[28; 35)
|
PATH_TYPE@[28; 35)
|
||||||
PATH_SEGMENT@[28; 35)
|
PATH@[28; 35)
|
||||||
NAME_REF@[28; 31)
|
PATH_SEGMENT@[28; 35)
|
||||||
IDENT@[28; 31) "Foo"
|
NAME_REF@[28; 31)
|
||||||
TYPE_ARG_LIST@[31; 35)
|
IDENT@[28; 31) "Foo"
|
||||||
L_ANGLE@[31; 32)
|
TYPE_ARG_LIST@[31; 35)
|
||||||
LIFETIME_ARG@[32; 34)
|
L_ANGLE@[31; 32)
|
||||||
LIFETIME@[32; 34) "'a"
|
LIFETIME_ARG@[32; 34)
|
||||||
R_ANGLE@[34; 35)
|
LIFETIME@[32; 34) "'a"
|
||||||
R_ANGLE@[35; 36)
|
R_ANGLE@[34; 35)
|
||||||
WHITESPACE@[36; 37)
|
R_ANGLE@[35; 36)
|
||||||
PLUS@[37; 38)
|
WHITESPACE@[36; 37)
|
||||||
WHITESPACE@[38; 39)
|
PLUS@[37; 38)
|
||||||
LIFETIME@[39; 41) "'a"
|
WHITESPACE@[38; 39)
|
||||||
|
LIFETIME@[39; 41) "'a"
|
||||||
SEMI@[41; 42)
|
SEMI@[41; 42)
|
||||||
WHITESPACE@[42; 43)
|
WHITESPACE@[42; 43)
|
||||||
|
|
|
@ -11,28 +11,29 @@ ROOT@[0; 35)
|
||||||
IDENT@[7; 8) "F"
|
IDENT@[7; 8) "F"
|
||||||
COLON@[8; 9)
|
COLON@[8; 9)
|
||||||
WHITESPACE@[9; 10)
|
WHITESPACE@[9; 10)
|
||||||
PATH@[10; 29)
|
PATH_TYPE@[10; 29)
|
||||||
PATH_SEGMENT@[10; 29)
|
PATH@[10; 29)
|
||||||
NAME_REF@[10; 15)
|
PATH_SEGMENT@[10; 29)
|
||||||
IDENT@[10; 15) "FnMut"
|
NAME_REF@[10; 15)
|
||||||
PARAM_LIST@[15; 29)
|
IDENT@[10; 15) "FnMut"
|
||||||
L_PAREN@[15; 16)
|
PARAM_LIST@[15; 29)
|
||||||
PARAM@[16; 28)
|
L_PAREN@[15; 16)
|
||||||
REFERENCE_TYPE@[16; 28)
|
PARAM@[16; 28)
|
||||||
AMP@[16; 17)
|
REFERENCE_TYPE@[16; 28)
|
||||||
MUT_KW@[17; 20)
|
AMP@[16; 17)
|
||||||
WHITESPACE@[20; 21)
|
MUT_KW@[17; 20)
|
||||||
PATH_TYPE@[21; 28)
|
WHITESPACE@[20; 21)
|
||||||
PATH@[21; 28)
|
PATH_TYPE@[21; 28)
|
||||||
PATH_SEGMENT@[21; 28)
|
PATH@[21; 28)
|
||||||
NAME_REF@[21; 24)
|
PATH_SEGMENT@[21; 28)
|
||||||
IDENT@[21; 24) "Foo"
|
NAME_REF@[21; 24)
|
||||||
TYPE_ARG_LIST@[24; 28)
|
IDENT@[21; 24) "Foo"
|
||||||
L_ANGLE@[24; 25)
|
TYPE_ARG_LIST@[24; 28)
|
||||||
LIFETIME_ARG@[25; 27)
|
L_ANGLE@[24; 25)
|
||||||
LIFETIME@[25; 27) "'a"
|
LIFETIME_ARG@[25; 27)
|
||||||
R_ANGLE@[27; 28)
|
LIFETIME@[25; 27) "'a"
|
||||||
R_PAREN@[28; 29)
|
R_ANGLE@[27; 28)
|
||||||
|
R_PAREN@[28; 29)
|
||||||
R_ANGLE@[29; 30)
|
R_ANGLE@[29; 30)
|
||||||
PARAM_LIST@[30; 32)
|
PARAM_LIST@[30; 32)
|
||||||
L_PAREN@[30; 31)
|
L_PAREN@[30; 31)
|
||||||
|
|
|
@ -30,21 +30,23 @@ ROOT@[0; 87)
|
||||||
IDENT@[34; 35) "T"
|
IDENT@[34; 35) "T"
|
||||||
COLON@[35; 36)
|
COLON@[35; 36)
|
||||||
WHITESPACE@[36; 37)
|
WHITESPACE@[36; 37)
|
||||||
PATH@[37; 42)
|
PATH_TYPE@[37; 59)
|
||||||
PATH_SEGMENT@[37; 42)
|
PATH@[37; 42)
|
||||||
NAME_REF@[37; 42)
|
PATH_SEGMENT@[37; 42)
|
||||||
IDENT@[37; 42) "Clone"
|
NAME_REF@[37; 42)
|
||||||
WHITESPACE@[42; 43)
|
IDENT@[37; 42) "Clone"
|
||||||
PLUS@[43; 44)
|
WHITESPACE@[42; 43)
|
||||||
WHITESPACE@[44; 45)
|
PLUS@[43; 44)
|
||||||
PATH@[45; 49)
|
WHITESPACE@[44; 45)
|
||||||
PATH_SEGMENT@[45; 49)
|
PATH_TYPE@[45; 59)
|
||||||
NAME_REF@[45; 49)
|
PATH@[45; 49)
|
||||||
IDENT@[45; 49) "Copy"
|
PATH_SEGMENT@[45; 49)
|
||||||
WHITESPACE@[49; 50)
|
NAME_REF@[45; 49)
|
||||||
PLUS@[50; 51)
|
IDENT@[45; 49) "Copy"
|
||||||
WHITESPACE@[51; 52)
|
WHITESPACE@[49; 50)
|
||||||
LIFETIME@[52; 59) "'static"
|
PLUS@[50; 51)
|
||||||
|
WHITESPACE@[51; 52)
|
||||||
|
LIFETIME@[52; 59) "'static"
|
||||||
COMMA@[59; 60)
|
COMMA@[59; 60)
|
||||||
WHITESPACE@[60; 64)
|
WHITESPACE@[60; 64)
|
||||||
WHERE_PRED@[64; 82)
|
WHERE_PRED@[64; 82)
|
||||||
|
|
|
@ -10,30 +10,31 @@ ROOT@[0; 42)
|
||||||
DYN_TRAIT_TYPE@[9; 40)
|
DYN_TRAIT_TYPE@[9; 40)
|
||||||
DYN_KW@[9; 12)
|
DYN_KW@[9; 12)
|
||||||
WHITESPACE@[12; 13)
|
WHITESPACE@[12; 13)
|
||||||
PATH@[13; 35)
|
PATH_TYPE@[13; 40)
|
||||||
PATH_SEGMENT@[13; 35)
|
PATH@[13; 35)
|
||||||
NAME_REF@[13; 21)
|
PATH_SEGMENT@[13; 35)
|
||||||
IDENT@[13; 21) "Iterator"
|
NAME_REF@[13; 21)
|
||||||
TYPE_ARG_LIST@[21; 35)
|
IDENT@[13; 21) "Iterator"
|
||||||
L_ANGLE@[21; 22)
|
TYPE_ARG_LIST@[21; 35)
|
||||||
ASSOC_TYPE_ARG@[22; 34)
|
L_ANGLE@[21; 22)
|
||||||
NAME_REF@[22; 26)
|
ASSOC_TYPE_ARG@[22; 34)
|
||||||
IDENT@[22; 26) "Item"
|
NAME_REF@[22; 26)
|
||||||
EQ@[26; 27)
|
IDENT@[22; 26) "Item"
|
||||||
PATH_TYPE@[27; 34)
|
EQ@[26; 27)
|
||||||
PATH@[27; 34)
|
PATH_TYPE@[27; 34)
|
||||||
PATH_SEGMENT@[27; 34)
|
PATH@[27; 34)
|
||||||
NAME_REF@[27; 30)
|
PATH_SEGMENT@[27; 34)
|
||||||
IDENT@[27; 30) "Foo"
|
NAME_REF@[27; 30)
|
||||||
TYPE_ARG_LIST@[30; 34)
|
IDENT@[27; 30) "Foo"
|
||||||
L_ANGLE@[30; 31)
|
TYPE_ARG_LIST@[30; 34)
|
||||||
LIFETIME_ARG@[31; 33)
|
L_ANGLE@[30; 31)
|
||||||
LIFETIME@[31; 33) "'a"
|
LIFETIME_ARG@[31; 33)
|
||||||
R_ANGLE@[33; 34)
|
LIFETIME@[31; 33) "'a"
|
||||||
R_ANGLE@[34; 35)
|
R_ANGLE@[33; 34)
|
||||||
WHITESPACE@[35; 36)
|
R_ANGLE@[34; 35)
|
||||||
PLUS@[36; 37)
|
WHITESPACE@[35; 36)
|
||||||
WHITESPACE@[37; 38)
|
PLUS@[36; 37)
|
||||||
LIFETIME@[38; 40) "'a"
|
WHITESPACE@[37; 38)
|
||||||
|
LIFETIME@[38; 40) "'a"
|
||||||
SEMI@[40; 41)
|
SEMI@[40; 41)
|
||||||
WHITESPACE@[41; 42)
|
WHITESPACE@[41; 42)
|
||||||
|
|
|
@ -11,10 +11,11 @@ ROOT@[0; 32)
|
||||||
IDENT@[9; 10) "T"
|
IDENT@[9; 10) "T"
|
||||||
COLON@[10; 11)
|
COLON@[10; 11)
|
||||||
WHITESPACE@[11; 12)
|
WHITESPACE@[11; 12)
|
||||||
PATH@[12; 16)
|
PATH_TYPE@[12; 16)
|
||||||
PATH_SEGMENT@[12; 16)
|
PATH@[12; 16)
|
||||||
NAME_REF@[12; 16)
|
PATH_SEGMENT@[12; 16)
|
||||||
IDENT@[12; 16) "Copy"
|
NAME_REF@[12; 16)
|
||||||
|
IDENT@[12; 16) "Copy"
|
||||||
R_ANGLE@[16; 17)
|
R_ANGLE@[16; 17)
|
||||||
WHITESPACE@[17; 18)
|
WHITESPACE@[17; 18)
|
||||||
NAMED_FIELD_DEF_LIST@[18; 31)
|
NAMED_FIELD_DEF_LIST@[18; 31)
|
||||||
|
|
|
@ -102,10 +102,11 @@ ROOT@[0; 200)
|
||||||
WHITESPACE@[106; 107)
|
WHITESPACE@[106; 107)
|
||||||
PLUS@[107; 108)
|
PLUS@[107; 108)
|
||||||
WHITESPACE@[108; 109)
|
WHITESPACE@[108; 109)
|
||||||
PATH@[109; 114)
|
PATH_TYPE@[109; 114)
|
||||||
PATH_SEGMENT@[109; 114)
|
PATH@[109; 114)
|
||||||
NAME_REF@[109; 114)
|
PATH_SEGMENT@[109; 114)
|
||||||
IDENT@[109; 114) "Clone"
|
NAME_REF@[109; 114)
|
||||||
|
IDENT@[109; 114) "Clone"
|
||||||
R_ANGLE@[114; 115)
|
R_ANGLE@[114; 115)
|
||||||
SEMI@[115; 116)
|
SEMI@[115; 116)
|
||||||
WHITESPACE@[116; 117)
|
WHITESPACE@[116; 117)
|
||||||
|
@ -121,17 +122,19 @@ ROOT@[0; 200)
|
||||||
IDENT@[126; 127) "T"
|
IDENT@[126; 127) "T"
|
||||||
COLON@[127; 128)
|
COLON@[127; 128)
|
||||||
WHITESPACE@[128; 129)
|
WHITESPACE@[128; 129)
|
||||||
PATH@[129; 134)
|
PATH_TYPE@[129; 141)
|
||||||
PATH_SEGMENT@[129; 134)
|
PATH@[129; 134)
|
||||||
NAME_REF@[129; 134)
|
PATH_SEGMENT@[129; 134)
|
||||||
IDENT@[129; 134) "Clone"
|
NAME_REF@[129; 134)
|
||||||
WHITESPACE@[134; 135)
|
IDENT@[129; 134) "Clone"
|
||||||
PLUS@[135; 136)
|
WHITESPACE@[134; 135)
|
||||||
WHITESPACE@[136; 137)
|
PLUS@[135; 136)
|
||||||
PATH@[137; 141)
|
WHITESPACE@[136; 137)
|
||||||
PATH_SEGMENT@[137; 141)
|
PATH_TYPE@[137; 141)
|
||||||
NAME_REF@[137; 141)
|
PATH@[137; 141)
|
||||||
IDENT@[137; 141) "Copy"
|
PATH_SEGMENT@[137; 141)
|
||||||
|
NAME_REF@[137; 141)
|
||||||
|
IDENT@[137; 141) "Copy"
|
||||||
R_ANGLE@[141; 142)
|
R_ANGLE@[141; 142)
|
||||||
SEMI@[142; 143)
|
SEMI@[142; 143)
|
||||||
WHITESPACE@[143; 144)
|
WHITESPACE@[143; 144)
|
||||||
|
@ -147,26 +150,28 @@ ROOT@[0; 200)
|
||||||
IDENT@[153; 154) "T"
|
IDENT@[153; 154) "T"
|
||||||
COLON@[154; 155)
|
COLON@[154; 155)
|
||||||
WHITESPACE@[155; 156)
|
WHITESPACE@[155; 156)
|
||||||
PATH@[156; 161)
|
PATH_TYPE@[156; 178)
|
||||||
PATH_SEGMENT@[156; 161)
|
PATH@[156; 161)
|
||||||
COLONCOLON@[156; 158)
|
PATH_SEGMENT@[156; 161)
|
||||||
NAME_REF@[158; 161)
|
COLONCOLON@[156; 158)
|
||||||
IDENT@[158; 161) "Foo"
|
NAME_REF@[158; 161)
|
||||||
WHITESPACE@[161; 162)
|
IDENT@[158; 161) "Foo"
|
||||||
PLUS@[162; 163)
|
WHITESPACE@[161; 162)
|
||||||
WHITESPACE@[163; 164)
|
PLUS@[162; 163)
|
||||||
PATH@[164; 173)
|
WHITESPACE@[163; 164)
|
||||||
PATH@[164; 168)
|
PATH_TYPE@[164; 178)
|
||||||
PATH_SEGMENT@[164; 168)
|
PATH@[164; 173)
|
||||||
SELF_KW@[164; 168)
|
PATH@[164; 168)
|
||||||
COLONCOLON@[168; 170)
|
PATH_SEGMENT@[164; 168)
|
||||||
PATH_SEGMENT@[170; 173)
|
SELF_KW@[164; 168)
|
||||||
NAME_REF@[170; 173)
|
COLONCOLON@[168; 170)
|
||||||
IDENT@[170; 173) "Bar"
|
PATH_SEGMENT@[170; 173)
|
||||||
WHITESPACE@[173; 174)
|
NAME_REF@[170; 173)
|
||||||
PLUS@[174; 175)
|
IDENT@[170; 173) "Bar"
|
||||||
WHITESPACE@[175; 176)
|
WHITESPACE@[173; 174)
|
||||||
LIFETIME@[176; 178) "'a"
|
PLUS@[174; 175)
|
||||||
|
WHITESPACE@[175; 176)
|
||||||
|
LIFETIME@[176; 178) "'a"
|
||||||
R_ANGLE@[178; 179)
|
R_ANGLE@[178; 179)
|
||||||
SEMI@[179; 180)
|
SEMI@[179; 180)
|
||||||
WHITESPACE@[180; 181)
|
WHITESPACE@[180; 181)
|
||||||
|
|
4
crates/libsyntax2/tests/data/parser/ok/0032_where_for.rs
Normal file
4
crates/libsyntax2/tests/data/parser/ok/0032_where_for.rs
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
fn test_serialization<SER>()
|
||||||
|
where
|
||||||
|
SER: Serialize + for<'de> Deserialize<'de> + PartialEq + std::fmt::Debug,
|
||||||
|
{}
|
85
crates/libsyntax2/tests/data/parser/ok/0032_where_for.txt
Normal file
85
crates/libsyntax2/tests/data/parser/ok/0032_where_for.txt
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
ROOT@[0; 116)
|
||||||
|
FN_DEF@[0; 115)
|
||||||
|
FN_KW@[0; 2)
|
||||||
|
WHITESPACE@[2; 3)
|
||||||
|
NAME@[3; 21)
|
||||||
|
IDENT@[3; 21) "test_serialization"
|
||||||
|
TYPE_PARAM_LIST@[21; 26)
|
||||||
|
L_ANGLE@[21; 22)
|
||||||
|
TYPE_PARAM@[22; 25)
|
||||||
|
NAME@[22; 25)
|
||||||
|
IDENT@[22; 25) "SER"
|
||||||
|
R_ANGLE@[25; 26)
|
||||||
|
PARAM_LIST@[26; 28)
|
||||||
|
L_PAREN@[26; 27)
|
||||||
|
R_PAREN@[27; 28)
|
||||||
|
WHITESPACE@[28; 29)
|
||||||
|
WHERE_CLAUSE@[29; 112)
|
||||||
|
WHERE_KW@[29; 34)
|
||||||
|
WHITESPACE@[34; 39)
|
||||||
|
WHERE_PRED@[39; 111)
|
||||||
|
PATH_TYPE@[39; 42)
|
||||||
|
PATH@[39; 42)
|
||||||
|
PATH_SEGMENT@[39; 42)
|
||||||
|
NAME_REF@[39; 42)
|
||||||
|
IDENT@[39; 42) "SER"
|
||||||
|
COLON@[42; 43)
|
||||||
|
WHITESPACE@[43; 44)
|
||||||
|
PATH_TYPE@[44; 111)
|
||||||
|
PATH@[44; 53)
|
||||||
|
PATH_SEGMENT@[44; 53)
|
||||||
|
NAME_REF@[44; 53)
|
||||||
|
IDENT@[44; 53) "Serialize"
|
||||||
|
WHITESPACE@[53; 54)
|
||||||
|
PLUS@[54; 55)
|
||||||
|
WHITESPACE@[55; 56)
|
||||||
|
FOR_TYPE@[56; 81)
|
||||||
|
FOR_KW@[56; 59)
|
||||||
|
TYPE_PARAM_LIST@[59; 64)
|
||||||
|
L_ANGLE@[59; 60)
|
||||||
|
LIFETIME_PARAM@[60; 63)
|
||||||
|
LIFETIME@[60; 63) "'de"
|
||||||
|
R_ANGLE@[63; 64)
|
||||||
|
WHITESPACE@[64; 65)
|
||||||
|
PATH_TYPE@[65; 81)
|
||||||
|
PATH@[65; 81)
|
||||||
|
PATH_SEGMENT@[65; 81)
|
||||||
|
NAME_REF@[65; 76)
|
||||||
|
IDENT@[65; 76) "Deserialize"
|
||||||
|
TYPE_ARG_LIST@[76; 81)
|
||||||
|
L_ANGLE@[76; 77)
|
||||||
|
LIFETIME_ARG@[77; 80)
|
||||||
|
LIFETIME@[77; 80) "'de"
|
||||||
|
R_ANGLE@[80; 81)
|
||||||
|
WHITESPACE@[81; 82)
|
||||||
|
PLUS@[82; 83)
|
||||||
|
WHITESPACE@[83; 84)
|
||||||
|
PATH_TYPE@[84; 111)
|
||||||
|
PATH@[84; 93)
|
||||||
|
PATH_SEGMENT@[84; 93)
|
||||||
|
NAME_REF@[84; 93)
|
||||||
|
IDENT@[84; 93) "PartialEq"
|
||||||
|
WHITESPACE@[93; 94)
|
||||||
|
PLUS@[94; 95)
|
||||||
|
WHITESPACE@[95; 96)
|
||||||
|
PATH_TYPE@[96; 111)
|
||||||
|
PATH@[96; 111)
|
||||||
|
PATH@[96; 104)
|
||||||
|
PATH@[96; 99)
|
||||||
|
PATH_SEGMENT@[96; 99)
|
||||||
|
NAME_REF@[96; 99)
|
||||||
|
IDENT@[96; 99) "std"
|
||||||
|
COLONCOLON@[99; 101)
|
||||||
|
PATH_SEGMENT@[101; 104)
|
||||||
|
NAME_REF@[101; 104)
|
||||||
|
IDENT@[101; 104) "fmt"
|
||||||
|
COLONCOLON@[104; 106)
|
||||||
|
PATH_SEGMENT@[106; 111)
|
||||||
|
NAME_REF@[106; 111)
|
||||||
|
IDENT@[106; 111) "Debug"
|
||||||
|
COMMA@[111; 112)
|
||||||
|
WHITESPACE@[112; 113)
|
||||||
|
BLOCK@[113; 115)
|
||||||
|
L_CURLY@[113; 114)
|
||||||
|
R_CURLY@[114; 115)
|
||||||
|
WHITESPACE@[115; 116)
|
|
@ -99,8 +99,8 @@ mod test {
|
||||||
#[test]
|
#[test]
|
||||||
fn test_resolve() {
|
fn test_resolve() {
|
||||||
let mut m = PathMap::new();
|
let mut m = PathMap::new();
|
||||||
let id1 = m.get_or_insert(PathBuf::from("/foo"));
|
let id1 = m.get_or_insert(PathBuf::from("/foo"), Root::Workspace);
|
||||||
let id2 = m.get_or_insert(PathBuf::from("/foo/bar.rs"));
|
let id2 = m.get_or_insert(PathBuf::from("/foo/bar.rs"), Root::Workspace);
|
||||||
assert_eq!(
|
assert_eq!(
|
||||||
m.resolve(id1, &RelativePath::new("bar.rs")),
|
m.resolve(id1, &RelativePath::new("bar.rs")),
|
||||||
Some(id2),
|
Some(id2),
|
||||||
|
|
Loading…
Reference in a new issue