for types in bounds

This commit is contained in:
Aleksey Kladov 2018-09-04 12:25:23 +03:00
parent 3a017aaa52
commit e44a6bcc82
17 changed files with 311 additions and 192 deletions

View file

@ -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);

View file

@ -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);

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

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

View file

@ -0,0 +1,4 @@
fn test_serialization<SER>()
where
SER: Serialize + for<'de> Deserialize<'de> + PartialEq + std::fmt::Debug,
{}

View 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)

View file

@ -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),