From fc0a9e266b9d663b1eeca3963495c68ca3384be2 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 10 Feb 2018 14:00:23 +0300 Subject: G: introduce names --- grammar.ron | 2 ++ src/parser/grammar/items/mod.rs | 5 +++-- src/parser/grammar/mod.rs | 12 +++++++++++- src/syntax_kinds.rs | 4 ++++ tests/data/parser/inline/0005_extern_crate.txt | 5 +++-- tests/data/parser/ok/0007_extern_crate.txt | 17 ++++++++++------- tests/data/parser/ok/0015_use_tree.txt | 15 +++++++++------ 7 files changed, 42 insertions(+), 18 deletions(-) diff --git a/grammar.ron b/grammar.ron index c38bf654d..0130b7b37 100644 --- a/grammar.ron +++ b/grammar.ron @@ -118,5 +118,7 @@ Grammar( "LIFETIME_PARAM", "TYPE_PARAM", "ABI", + "NAME", + "NAME_REF", ] ) diff --git a/src/parser/grammar/items/mod.rs b/src/parser/grammar/items/mod.rs index ffe86fa97..d671568b1 100644 --- a/src/parser/grammar/items/mod.rs +++ b/src/parser/grammar/items/mod.rs @@ -196,8 +196,9 @@ fn extern_crate_item(p: &mut Parser) { p.bump(); assert!(p.at(CRATE_KW)); p.bump(); - - p.expect(IDENT) && alias(p) && p.expect(SEMI); + name(p); + alias(p); + p.expect(SEMI); } fn extern_block(p: &mut Parser) { diff --git a/src/parser/grammar/mod.rs b/src/parser/grammar/mod.rs index b949583ff..6e82d7c69 100644 --- a/src/parser/grammar/mod.rs +++ b/src/parser/grammar/mod.rs @@ -44,12 +44,22 @@ fn alias(p: &mut Parser) -> bool { if p.at(AS_KW) { let alias = p.start(); p.bump(); - p.expect(IDENT); + name(p); alias.complete(p, ALIAS); } true //FIXME: return false if three are errors } +fn name(p: &mut Parser) { + if p.at(IDENT) { + let m = p.start(); + p.bump(); + m.complete(p, NAME); + } else { + p.error("expected a name"); + } +} + fn error_block(p: &mut Parser, message: &str) { assert!(p.at(L_CURLY)); let err = p.start(); diff --git a/src/syntax_kinds.rs b/src/syntax_kinds.rs index dc287f0f4..7450f9d6f 100644 --- a/src/syntax_kinds.rs +++ b/src/syntax_kinds.rs @@ -116,6 +116,8 @@ pub enum SyntaxKind { LIFETIME_PARAM, TYPE_PARAM, ABI, + NAME, + NAME_REF, // Technical SyntaxKinds: they appear temporally during parsing, // but never end up in the final tree @@ -239,6 +241,8 @@ impl SyntaxKind { LIFETIME_PARAM => &SyntaxInfo { name: "LIFETIME_PARAM" }, TYPE_PARAM => &SyntaxInfo { name: "TYPE_PARAM" }, ABI => &SyntaxInfo { name: "ABI" }, + NAME => &SyntaxInfo { name: "NAME" }, + NAME_REF => &SyntaxInfo { name: "NAME_REF" }, TOMBSTONE => &SyntaxInfo { name: "TOMBSTONE" }, EOF => &SyntaxInfo { name: "EOF" }, diff --git a/tests/data/parser/inline/0005_extern_crate.txt b/tests/data/parser/inline/0005_extern_crate.txt index 07cc47875..cbdf5aba1 100644 --- a/tests/data/parser/inline/0005_extern_crate.txt +++ b/tests/data/parser/inline/0005_extern_crate.txt @@ -3,7 +3,8 @@ FILE@[0; 18) EXTERN_KW@[0; 6) WHITESPACE@[6; 7) CRATE_KW@[7; 12) - WHITESPACE@[12; 13) - IDENT@[13; 16) "foo" + NAME@[12; 16) + WHITESPACE@[12; 13) + IDENT@[13; 16) "foo" SEMI@[16; 17) WHITESPACE@[17; 18) diff --git a/tests/data/parser/ok/0007_extern_crate.txt b/tests/data/parser/ok/0007_extern_crate.txt index aff70131b..33ce2ae65 100644 --- a/tests/data/parser/ok/0007_extern_crate.txt +++ b/tests/data/parser/ok/0007_extern_crate.txt @@ -3,20 +3,23 @@ FILE@[0; 43) EXTERN_KW@[0; 6) WHITESPACE@[6; 7) CRATE_KW@[7; 12) - WHITESPACE@[12; 13) - IDENT@[13; 16) "foo" + NAME@[12; 16) + WHITESPACE@[12; 13) + IDENT@[13; 16) "foo" SEMI@[16; 17) WHITESPACE@[17; 18) EXTERN_CRATE_ITEM@[18; 43) EXTERN_KW@[18; 24) WHITESPACE@[24; 25) CRATE_KW@[25; 30) - WHITESPACE@[30; 31) - IDENT@[31; 34) "foo" - ALIAS@[34; 41) + NAME@[30; 35) + WHITESPACE@[30; 31) + IDENT@[31; 34) "foo" WHITESPACE@[34; 35) + ALIAS@[35; 41) AS_KW@[35; 37) - WHITESPACE@[37; 38) - IDENT@[38; 41) "bar" + NAME@[37; 41) + WHITESPACE@[37; 38) + IDENT@[38; 41) "bar" SEMI@[41; 42) WHITESPACE@[42; 43) diff --git a/tests/data/parser/ok/0015_use_tree.txt b/tests/data/parser/ok/0015_use_tree.txt index 10bdef5fe..28f5f789e 100644 --- a/tests/data/parser/ok/0015_use_tree.txt +++ b/tests/data/parser/ok/0015_use_tree.txt @@ -9,8 +9,9 @@ FILE@[0; 55) WHITESPACE@[7; 8) ALIAS@[8; 14) AS_KW@[8; 10) - WHITESPACE@[10; 11) - IDENT@[11; 14) "bar" + NAME@[10; 14) + WHITESPACE@[10; 11) + IDENT@[11; 14) "bar" SEMI@[14; 15) WHITESPACE@[15; 16) USE_ITEM@[16; 55) @@ -29,8 +30,9 @@ FILE@[0; 55) WHITESPACE@[27; 28) ALIAS@[28; 32) AS_KW@[28; 30) - WHITESPACE@[30; 31) - IDENT@[31; 32) "b" + NAME@[30; 32) + WHITESPACE@[30; 31) + IDENT@[31; 32) "b" COMMA@[32; 33) USE_TREE@[33; 35) WHITESPACE@[33; 34) @@ -50,8 +52,9 @@ FILE@[0; 55) WHITESPACE@[47; 48) ALIAS@[48; 52) AS_KW@[48; 50) - WHITESPACE@[50; 51) - IDENT@[51; 52) "x" + NAME@[50; 52) + WHITESPACE@[50; 51) + IDENT@[51; 52) "x" R_CURLY@[52; 53) SEMI@[53; 54) WHITESPACE@[54; 55) -- cgit v1.2.3 From 3c9d8ff42357711775c3aeb3af03f528ee779932 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 10 Feb 2018 14:04:31 +0300 Subject: G: names for fns --- src/parser/grammar/items/mod.rs | 2 +- tests/data/parser/err/0005_attribute_recover.txt | 10 +++++---- tests/data/parser/err/0007_stray_curly_in_file.txt | 5 +++-- tests/data/parser/err/0008_item_block_recovery.txt | 10 +++++---- tests/data/parser/inline/0001_const_unsafe_fn.txt | 5 +++-- tests/data/parser/inline/0002_const_fn.txt | 5 +++-- tests/data/parser/inline/0004_extern_fn.txt | 5 +++-- tests/data/parser/inline/0011_unsafe_fn.txt | 5 +++-- tests/data/parser/inline/0012_unsafe_extern_fn.txt | 5 +++-- .../parser/inline/0013_unsafe_block_in_mod.txt | 10 +++++---- tests/data/parser/ok/0005_fn_item.txt | 5 +++-- tests/data/parser/ok/0008_mod_item.txt | 5 +++-- tests/data/parser/ok/0011_outer_attribute.txt | 5 +++-- tests/data/parser/ok/0012_visibility.txt | 25 +++++++++++++--------- tests/data/parser/ok/0017_attr_trailing_comma.txt | 5 +++-- tests/data/parser/ok/0021_extern_fn.txt | 15 +++++++------ 16 files changed, 73 insertions(+), 49 deletions(-) diff --git a/src/parser/grammar/items/mod.rs b/src/parser/grammar/items/mod.rs index d671568b1..61ebc740f 100644 --- a/src/parser/grammar/items/mod.rs +++ b/src/parser/grammar/items/mod.rs @@ -211,7 +211,7 @@ fn fn_item(p: &mut Parser) { assert!(p.at(FN_KW)); p.bump(); - p.expect(IDENT); + name(p); if p.at(L_PAREN) { fn_value_parameters(p); } else { diff --git a/tests/data/parser/err/0005_attribute_recover.txt b/tests/data/parser/err/0005_attribute_recover.txt index 00a534af1..15e77f63b 100644 --- a/tests/data/parser/err/0005_attribute_recover.txt +++ b/tests/data/parser/err/0005_attribute_recover.txt @@ -23,8 +23,9 @@ FILE@[0; 54) R_BRACK@[17; 18) WHITESPACE@[18; 19) FN_KW@[19; 21) - WHITESPACE@[21; 22) - IDENT@[22; 25) "foo" + NAME@[21; 25) + WHITESPACE@[21; 22) + IDENT@[22; 25) "foo" L_PAREN@[25; 26) R_PAREN@[26; 27) WHITESPACE@[27; 28) @@ -43,8 +44,9 @@ FILE@[0; 54) WHITESPACE@[40; 41) err: `expected R_BRACK` FN_KW@[41; 43) - WHITESPACE@[43; 44) - IDENT@[44; 47) "foo" + NAME@[43; 47) + WHITESPACE@[43; 44) + IDENT@[44; 47) "foo" L_PAREN@[47; 48) R_PAREN@[48; 49) WHITESPACE@[49; 50) diff --git a/tests/data/parser/err/0007_stray_curly_in_file.txt b/tests/data/parser/err/0007_stray_curly_in_file.txt index b4da4464d..6460d06d8 100644 --- a/tests/data/parser/err/0007_stray_curly_in_file.txt +++ b/tests/data/parser/err/0007_stray_curly_in_file.txt @@ -15,8 +15,9 @@ FILE@[0; 31) WHITESPACE@[15; 17) FN_ITEM@[17; 29) FN_KW@[17; 19) - WHITESPACE@[19; 20) - IDENT@[20; 23) "foo" + NAME@[19; 23) + WHITESPACE@[19; 20) + IDENT@[20; 23) "foo" L_PAREN@[23; 24) R_PAREN@[24; 25) L_CURLY@[25; 26) diff --git a/tests/data/parser/err/0008_item_block_recovery.txt b/tests/data/parser/err/0008_item_block_recovery.txt index c6386fd73..ddfb4b4dc 100644 --- a/tests/data/parser/err/0008_item_block_recovery.txt +++ b/tests/data/parser/err/0008_item_block_recovery.txt @@ -1,8 +1,9 @@ FILE@[0; 95) FN_ITEM@[0; 14) FN_KW@[0; 2) - WHITESPACE@[2; 3) - IDENT@[3; 6) "foo" + NAME@[2; 6) + WHITESPACE@[2; 3) + IDENT@[3; 6) "foo" L_PAREN@[6; 7) R_PAREN@[7; 8) WHITESPACE@[8; 9) @@ -50,8 +51,9 @@ FILE@[0; 95) WHITESPACE@[80; 82) FN_ITEM@[82; 95) FN_KW@[82; 84) - WHITESPACE@[84; 85) - IDENT@[85; 88) "baz" + NAME@[84; 88) + WHITESPACE@[84; 85) + IDENT@[85; 88) "baz" L_PAREN@[88; 89) R_PAREN@[89; 90) WHITESPACE@[90; 91) diff --git a/tests/data/parser/inline/0001_const_unsafe_fn.txt b/tests/data/parser/inline/0001_const_unsafe_fn.txt index 1f0865cb0..59bf89ddb 100644 --- a/tests/data/parser/inline/0001_const_unsafe_fn.txt +++ b/tests/data/parser/inline/0001_const_unsafe_fn.txt @@ -5,8 +5,9 @@ FILE@[0; 25) UNSAFE_KW@[6; 12) WHITESPACE@[12; 13) FN_KW@[13; 15) - WHITESPACE@[15; 16) - IDENT@[16; 19) "foo" + NAME@[15; 19) + WHITESPACE@[15; 16) + IDENT@[16; 19) "foo" L_PAREN@[19; 20) R_PAREN@[20; 21) WHITESPACE@[21; 22) diff --git a/tests/data/parser/inline/0002_const_fn.txt b/tests/data/parser/inline/0002_const_fn.txt index 2d360d78b..2e9d18f7f 100644 --- a/tests/data/parser/inline/0002_const_fn.txt +++ b/tests/data/parser/inline/0002_const_fn.txt @@ -3,8 +3,9 @@ FILE@[0; 18) CONST_KW@[0; 5) WHITESPACE@[5; 6) FN_KW@[6; 8) - WHITESPACE@[8; 9) - IDENT@[9; 12) "foo" + NAME@[8; 12) + WHITESPACE@[8; 9) + IDENT@[9; 12) "foo" L_PAREN@[12; 13) R_PAREN@[13; 14) WHITESPACE@[14; 15) diff --git a/tests/data/parser/inline/0004_extern_fn.txt b/tests/data/parser/inline/0004_extern_fn.txt index 096c3bf4f..70a909ccf 100644 --- a/tests/data/parser/inline/0004_extern_fn.txt +++ b/tests/data/parser/inline/0004_extern_fn.txt @@ -4,8 +4,9 @@ FILE@[0; 19) EXTERN_KW@[0; 6) WHITESPACE@[6; 7) FN_KW@[7; 9) - WHITESPACE@[9; 10) - IDENT@[10; 13) "foo" + NAME@[9; 13) + WHITESPACE@[9; 10) + IDENT@[10; 13) "foo" L_PAREN@[13; 14) R_PAREN@[14; 15) WHITESPACE@[15; 16) diff --git a/tests/data/parser/inline/0011_unsafe_fn.txt b/tests/data/parser/inline/0011_unsafe_fn.txt index 23eca1d65..ed790fe22 100644 --- a/tests/data/parser/inline/0011_unsafe_fn.txt +++ b/tests/data/parser/inline/0011_unsafe_fn.txt @@ -3,8 +3,9 @@ FILE@[0; 19) UNSAFE_KW@[0; 6) WHITESPACE@[6; 7) FN_KW@[7; 9) - WHITESPACE@[9; 10) - IDENT@[10; 13) "foo" + NAME@[9; 13) + WHITESPACE@[9; 10) + IDENT@[10; 13) "foo" L_PAREN@[13; 14) R_PAREN@[14; 15) WHITESPACE@[15; 16) diff --git a/tests/data/parser/inline/0012_unsafe_extern_fn.txt b/tests/data/parser/inline/0012_unsafe_extern_fn.txt index 547cb499d..3c8a15d12 100644 --- a/tests/data/parser/inline/0012_unsafe_extern_fn.txt +++ b/tests/data/parser/inline/0012_unsafe_extern_fn.txt @@ -8,8 +8,9 @@ FILE@[0; 30) STRING@[14; 17) WHITESPACE@[17; 18) FN_KW@[18; 20) - WHITESPACE@[20; 21) - IDENT@[21; 24) "foo" + NAME@[20; 24) + WHITESPACE@[20; 21) + IDENT@[21; 24) "foo" L_PAREN@[24; 25) R_PAREN@[25; 26) WHITESPACE@[26; 27) diff --git a/tests/data/parser/inline/0013_unsafe_block_in_mod.txt b/tests/data/parser/inline/0013_unsafe_block_in_mod.txt index 2e319be73..305e3058d 100644 --- a/tests/data/parser/inline/0013_unsafe_block_in_mod.txt +++ b/tests/data/parser/inline/0013_unsafe_block_in_mod.txt @@ -1,8 +1,9 @@ FILE@[0; 33) FN_ITEM@[0; 11) FN_KW@[0; 2) - WHITESPACE@[2; 3) - IDENT@[3; 6) "foo" + NAME@[2; 6) + WHITESPACE@[2; 3) + IDENT@[3; 6) "foo" L_PAREN@[6; 7) R_PAREN@[7; 8) L_CURLY@[8; 9) @@ -18,8 +19,9 @@ FILE@[0; 33) WHITESPACE@[21; 22) FN_ITEM@[22; 33) FN_KW@[22; 24) - WHITESPACE@[24; 25) - IDENT@[25; 28) "bar" + NAME@[24; 28) + WHITESPACE@[24; 25) + IDENT@[25; 28) "bar" L_PAREN@[28; 29) R_PAREN@[29; 30) L_CURLY@[30; 31) diff --git a/tests/data/parser/ok/0005_fn_item.txt b/tests/data/parser/ok/0005_fn_item.txt index 113359351..0324ae3ee 100644 --- a/tests/data/parser/ok/0005_fn_item.txt +++ b/tests/data/parser/ok/0005_fn_item.txt @@ -1,8 +1,9 @@ FILE@[0; 13) FN_ITEM@[0; 13) FN_KW@[0; 2) - WHITESPACE@[2; 3) - IDENT@[3; 6) "foo" + NAME@[2; 6) + WHITESPACE@[2; 3) + IDENT@[3; 6) "foo" L_PAREN@[6; 7) R_PAREN@[7; 8) WHITESPACE@[8; 9) diff --git a/tests/data/parser/ok/0008_mod_item.txt b/tests/data/parser/ok/0008_mod_item.txt index 06e11807d..aacf1ffc7 100644 --- a/tests/data/parser/ok/0008_mod_item.txt +++ b/tests/data/parser/ok/0008_mod_item.txt @@ -23,8 +23,9 @@ FILE@[0; 118) FN_ITEM@[26; 52) WHITESPACE@[26; 31) FN_KW@[31; 33) - WHITESPACE@[33; 34) - IDENT@[34; 37) "foo" + NAME@[33; 37) + WHITESPACE@[33; 34) + IDENT@[34; 37) "foo" L_PAREN@[37; 38) R_PAREN@[38; 39) WHITESPACE@[39; 40) diff --git a/tests/data/parser/ok/0011_outer_attribute.txt b/tests/data/parser/ok/0011_outer_attribute.txt index 4839d8e67..49023e7f3 100644 --- a/tests/data/parser/ok/0011_outer_attribute.txt +++ b/tests/data/parser/ok/0011_outer_attribute.txt @@ -19,8 +19,9 @@ FILE@[0; 35) R_BRACK@[21; 22) WHITESPACE@[22; 23) FN_KW@[23; 25) - WHITESPACE@[25; 26) - IDENT@[26; 29) "foo" + NAME@[25; 29) + WHITESPACE@[25; 26) + IDENT@[26; 29) "foo" L_PAREN@[29; 30) R_PAREN@[30; 31) WHITESPACE@[31; 32) diff --git a/tests/data/parser/ok/0012_visibility.txt b/tests/data/parser/ok/0012_visibility.txt index ed22b265b..8f7ba697d 100644 --- a/tests/data/parser/ok/0012_visibility.txt +++ b/tests/data/parser/ok/0012_visibility.txt @@ -1,8 +1,9 @@ FILE@[0; 98) FN_ITEM@[0; 10) FN_KW@[0; 2) - WHITESPACE@[2; 3) - IDENT@[3; 4) "a" + NAME@[2; 4) + WHITESPACE@[2; 3) + IDENT@[3; 4) "a" L_PAREN@[4; 5) R_PAREN@[5; 6) WHITESPACE@[6; 7) @@ -14,8 +15,9 @@ FILE@[0; 98) PUB_KW@[10; 13) WHITESPACE@[13; 14) FN_KW@[14; 16) - WHITESPACE@[16; 17) - IDENT@[17; 18) "b" + NAME@[16; 18) + WHITESPACE@[16; 17) + IDENT@[17; 18) "b" L_PAREN@[18; 19) R_PAREN@[19; 20) WHITESPACE@[20; 21) @@ -30,8 +32,9 @@ FILE@[0; 98) R_PAREN@[33; 34) WHITESPACE@[34; 35) FN_KW@[35; 37) - WHITESPACE@[37; 38) - IDENT@[38; 39) "c" + NAME@[37; 39) + WHITESPACE@[37; 38) + IDENT@[38; 39) "c" L_PAREN@[39; 40) R_PAREN@[40; 41) WHITESPACE@[41; 42) @@ -46,8 +49,9 @@ FILE@[0; 98) R_PAREN@[54; 55) WHITESPACE@[55; 56) FN_KW@[56; 58) - WHITESPACE@[58; 59) - IDENT@[59; 60) "d" + NAME@[58; 60) + WHITESPACE@[58; 59) + IDENT@[59; 60) "d" L_PAREN@[60; 61) R_PAREN@[61; 62) WHITESPACE@[62; 63) @@ -74,8 +78,9 @@ FILE@[0; 98) R_PAREN@[86; 87) WHITESPACE@[87; 88) FN_KW@[88; 90) - WHITESPACE@[90; 91) - IDENT@[91; 92) "e" + NAME@[90; 92) + WHITESPACE@[90; 91) + IDENT@[91; 92) "e" L_PAREN@[92; 93) R_PAREN@[93; 94) WHITESPACE@[94; 95) diff --git a/tests/data/parser/ok/0017_attr_trailing_comma.txt b/tests/data/parser/ok/0017_attr_trailing_comma.txt index 304417ed9..a4a6b8807 100644 --- a/tests/data/parser/ok/0017_attr_trailing_comma.txt +++ b/tests/data/parser/ok/0017_attr_trailing_comma.txt @@ -13,8 +13,9 @@ FILE@[0; 23) R_BRACK@[9; 10) WHITESPACE@[10; 11) FN_KW@[11; 13) - WHITESPACE@[13; 14) - IDENT@[14; 17) "foo" + NAME@[13; 17) + WHITESPACE@[13; 14) + IDENT@[14; 17) "foo" L_PAREN@[17; 18) R_PAREN@[18; 19) WHITESPACE@[19; 20) diff --git a/tests/data/parser/ok/0021_extern_fn.txt b/tests/data/parser/ok/0021_extern_fn.txt index 43575bdf3..8ed7f2a25 100644 --- a/tests/data/parser/ok/0021_extern_fn.txt +++ b/tests/data/parser/ok/0021_extern_fn.txt @@ -4,8 +4,9 @@ FILE@[0; 71) EXTERN_KW@[0; 6) WHITESPACE@[6; 7) FN_KW@[7; 9) - WHITESPACE@[9; 10) - IDENT@[10; 13) "foo" + NAME@[9; 13) + WHITESPACE@[9; 10) + IDENT@[10; 13) "foo" L_PAREN@[13; 14) R_PAREN@[14; 15) WHITESPACE@[15; 16) @@ -20,8 +21,9 @@ FILE@[0; 71) STRING@[28; 31) WHITESPACE@[31; 32) FN_KW@[32; 34) - WHITESPACE@[34; 35) - IDENT@[35; 38) "bar" + NAME@[34; 38) + WHITESPACE@[34; 35) + IDENT@[35; 38) "bar" L_PAREN@[38; 39) R_PAREN@[39; 40) WHITESPACE@[40; 41) @@ -36,8 +38,9 @@ FILE@[0; 71) RAW_STRING@[53; 57) WHITESPACE@[57; 58) FN_KW@[58; 60) - WHITESPACE@[60; 61) - IDENT@[61; 64) "baz" + NAME@[60; 64) + WHITESPACE@[60; 61) + IDENT@[61; 64) "baz" L_PAREN@[64; 65) R_PAREN@[65; 66) WHITESPACE@[66; 67) -- cgit v1.2.3 From 1401f5af4a3f13984da1237b3ad896eb50eada73 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 10 Feb 2018 14:06:47 +0300 Subject: Allow to update files en masse --- tests/testutils/src/lib.rs | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/tests/testutils/src/lib.rs b/tests/testutils/src/lib.rs index d181e455b..abd28f26d 100644 --- a/tests/testutils/src/lib.rs +++ b/tests/testutils/src/lib.rs @@ -22,8 +22,8 @@ fn read_text(path: &Path) -> String { } pub fn dir_tests(paths: &[&str], f: F) -where - F: Fn(&str) -> String, + where + F: Fn(&str) -> String, { for path in collect_tests(paths) { let actual = { @@ -73,16 +73,24 @@ fn test_from_dir(dir: &Path) -> Vec { acc } +const REWRITE: bool = false; + fn print_difference(expected: &str, actual: &str, path: &Path) { let dir = project_dir(); let path = path.strip_prefix(&dir).unwrap_or_else(|_| path); if expected.trim() == actual.trim() { println!("whitespace difference, rewriting"); + println!("file: {}\n", path.display()); + file::put_text(path, actual).unwrap(); + return; + } + if REWRITE { + println!("rewriting {}", path.display()); file::put_text(path, actual).unwrap(); - } else { - let changeset = Changeset::new(actual, expected, "\n"); - print!("{}", changeset); + return; } + let changeset = Changeset::new(actual, expected, "\n"); + print!("{}", changeset); println!("file: {}\n", path.display()); panic!("Comparison failed") } -- cgit v1.2.3 From f746fb6a93a4f0493fc8f5602372c267befe4e48 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 10 Feb 2018 14:08:46 +0300 Subject: G: use names in consts --- src/parser/grammar/items/consts.rs | 2 +- tests/data/parser/ok/0023_static_items.txt | 10 ++++++---- tests/data/parser/ok/0024_const_item.txt | 10 ++++++---- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/src/parser/grammar/items/consts.rs b/src/parser/grammar/items/consts.rs index c9881d681..8117af706 100644 --- a/src/parser/grammar/items/consts.rs +++ b/src/parser/grammar/items/consts.rs @@ -12,7 +12,7 @@ fn const_or_static(p: &mut Parser, kw: SyntaxKind) { assert!(p.at(kw)); p.bump(); p.eat(MUT_KW); // TODO: validator to forbid const mut - p.expect(IDENT); + name(p); p.expect(COLON); types::type_ref(p); p.expect(EQ); diff --git a/tests/data/parser/ok/0023_static_items.txt b/tests/data/parser/ok/0023_static_items.txt index 7cd2228fa..8872520c5 100644 --- a/tests/data/parser/ok/0023_static_items.txt +++ b/tests/data/parser/ok/0023_static_items.txt @@ -1,8 +1,9 @@ FILE@[0; 47) STATIC_ITEM@[0; 21) STATIC_KW@[0; 6) - WHITESPACE@[6; 7) - IDENT@[7; 10) "FOO" + NAME@[6; 10) + WHITESPACE@[6; 7) + IDENT@[7; 10) "FOO" COLON@[10; 11) WHITESPACE@[11; 12) IDENT@[12; 15) "u32" @@ -17,8 +18,9 @@ FILE@[0; 47) STATIC_KW@[21; 27) WHITESPACE@[27; 28) MUT_KW@[28; 31) - WHITESPACE@[31; 32) - IDENT@[32; 35) "BAR" + NAME@[31; 35) + WHITESPACE@[31; 32) + IDENT@[32; 35) "BAR" COLON@[35; 36) WHITESPACE@[36; 37) IDENT@[37; 40) "i32" diff --git a/tests/data/parser/ok/0024_const_item.txt b/tests/data/parser/ok/0024_const_item.txt index 588e001f5..0f31d19d3 100644 --- a/tests/data/parser/ok/0024_const_item.txt +++ b/tests/data/parser/ok/0024_const_item.txt @@ -1,8 +1,9 @@ FILE@[0; 46) CONST_ITEM@[0; 21) CONST_KW@[0; 5) - WHITESPACE@[5; 6) - IDENT@[6; 9) "FOO" + NAME@[5; 9) + WHITESPACE@[5; 6) + IDENT@[6; 9) "FOO" COLON@[9; 10) WHITESPACE@[10; 11) IDENT@[11; 14) "u32" @@ -17,8 +18,9 @@ FILE@[0; 46) CONST_KW@[21; 26) WHITESPACE@[26; 27) MUT_KW@[27; 30) - WHITESPACE@[30; 31) - IDENT@[31; 34) "BAR" + NAME@[30; 34) + WHITESPACE@[30; 31) + IDENT@[31; 34) "BAR" COLON@[34; 35) WHITESPACE@[35; 36) IDENT@[36; 39) "u32" -- cgit v1.2.3 From ca6e93f091bc6f2e9dc26e842fc87d614089cf9d Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 10 Feb 2018 14:10:02 +0300 Subject: G: use names in structs --- src/parser/grammar/items/structs.rs | 4 +- .../parser/err/0000_struct_field_missing_comma.txt | 7 +- .../data/parser/err/0001_item_recovery_in_file.txt | 7 +- tests/data/parser/err/0003_C++_semicolon.txt | 7 +- .../data/parser/err/0006_named_field_recovery.txt | 7 +- tests/data/parser/err/0007_stray_curly_in_file.txt | 5 +- .../err/0009_broken_struct_type_parameter.txt | 10 +-- tests/data/parser/inline/0006_extern_struct.txt | 5 +- tests/data/parser/ok/0001_struct_item.txt | 7 +- tests/data/parser/ok/0002_struct_item_field.txt | 7 +- tests/data/parser/ok/0008_mod_item.txt | 7 +- tests/data/parser/ok/0016_struct_flavors.txt | 29 +++++---- tests/data/parser/ok/0018_struct_type_params.txt | 75 +++++++++++++--------- tests/data/parser/ok/0020_type_param_bounds.txt | 45 +++++++------ 14 files changed, 130 insertions(+), 92 deletions(-) diff --git a/src/parser/grammar/items/structs.rs b/src/parser/grammar/items/structs.rs index 640b940e4..3b1f8a38c 100644 --- a/src/parser/grammar/items/structs.rs +++ b/src/parser/grammar/items/structs.rs @@ -4,9 +4,7 @@ pub(super) fn struct_item(p: &mut Parser) { assert!(p.at(STRUCT_KW)); p.bump(); - if !p.expect(IDENT) { - return; - } + name(p); type_params::list(p); match p.current() { WHERE_KW => { diff --git a/tests/data/parser/err/0000_struct_field_missing_comma.txt b/tests/data/parser/err/0000_struct_field_missing_comma.txt index d94b4fd9e..2c761694c 100644 --- a/tests/data/parser/err/0000_struct_field_missing_comma.txt +++ b/tests/data/parser/err/0000_struct_field_missing_comma.txt @@ -1,9 +1,10 @@ FILE@[0; 34) STRUCT_ITEM@[0; 34) STRUCT_KW@[0; 6) - WHITESPACE@[6; 7) - IDENT@[7; 8) "S" - WHITESPACE@[8; 9) + NAME@[6; 9) + WHITESPACE@[6; 7) + IDENT@[7; 8) "S" + WHITESPACE@[8; 9) L_CURLY@[9; 10) NAMED_FIELD@[10; 26) WHITESPACE@[10; 15) diff --git a/tests/data/parser/err/0001_item_recovery_in_file.txt b/tests/data/parser/err/0001_item_recovery_in_file.txt index c33113c6d..e41ddc009 100644 --- a/tests/data/parser/err/0001_item_recovery_in_file.txt +++ b/tests/data/parser/err/0001_item_recovery_in_file.txt @@ -9,8 +9,9 @@ FILE@[0; 21) WHITESPACE@[8; 10) STRUCT_ITEM@[10; 21) STRUCT_KW@[10; 16) - WHITESPACE@[16; 17) - IDENT@[17; 18) "S" - WHITESPACE@[18; 19) + NAME@[16; 19) + WHITESPACE@[16; 17) + IDENT@[17; 18) "S" + WHITESPACE@[18; 19) L_CURLY@[19; 20) R_CURLY@[20; 21) diff --git a/tests/data/parser/err/0003_C++_semicolon.txt b/tests/data/parser/err/0003_C++_semicolon.txt index d77c06378..e567b0775 100644 --- a/tests/data/parser/err/0003_C++_semicolon.txt +++ b/tests/data/parser/err/0003_C++_semicolon.txt @@ -1,9 +1,10 @@ FILE@[0; 40) STRUCT_ITEM@[0; 39) STRUCT_KW@[0; 6) - WHITESPACE@[6; 7) - IDENT@[7; 8) "S" - WHITESPACE@[8; 9) + NAME@[6; 9) + WHITESPACE@[6; 7) + IDENT@[7; 8) "S" + WHITESPACE@[8; 9) L_CURLY@[9; 10) NAMED_FIELD@[10; 21) WHITESPACE@[10; 15) diff --git a/tests/data/parser/err/0006_named_field_recovery.txt b/tests/data/parser/err/0006_named_field_recovery.txt index 0437bf2e7..7886beeb8 100644 --- a/tests/data/parser/err/0006_named_field_recovery.txt +++ b/tests/data/parser/err/0006_named_field_recovery.txt @@ -1,9 +1,10 @@ FILE@[0; 74) STRUCT_ITEM@[0; 74) STRUCT_KW@[0; 6) - WHITESPACE@[6; 7) - IDENT@[7; 8) "S" - WHITESPACE@[8; 9) + NAME@[6; 9) + WHITESPACE@[6; 7) + IDENT@[7; 8) "S" + WHITESPACE@[8; 9) L_CURLY@[9; 10) NAMED_FIELD@[10; 21) WHITESPACE@[10; 15) diff --git a/tests/data/parser/err/0007_stray_curly_in_file.txt b/tests/data/parser/err/0007_stray_curly_in_file.txt index 6460d06d8..f20807bfe 100644 --- a/tests/data/parser/err/0007_stray_curly_in_file.txt +++ b/tests/data/parser/err/0007_stray_curly_in_file.txt @@ -5,8 +5,9 @@ FILE@[0; 31) WHITESPACE@[1; 3) STRUCT_ITEM@[3; 14) STRUCT_KW@[3; 9) - WHITESPACE@[9; 10) - IDENT@[10; 11) "S" + NAME@[9; 11) + WHITESPACE@[9; 10) + IDENT@[10; 11) "S" SEMI@[11; 12) WHITESPACE@[12; 14) ERROR@[14; 17) diff --git a/tests/data/parser/err/0009_broken_struct_type_parameter.txt b/tests/data/parser/err/0009_broken_struct_type_parameter.txt index f329735b6..9434a764a 100644 --- a/tests/data/parser/err/0009_broken_struct_type_parameter.txt +++ b/tests/data/parser/err/0009_broken_struct_type_parameter.txt @@ -1,8 +1,9 @@ FILE@[0; 43) STRUCT_ITEM@[0; 12) STRUCT_KW@[0; 6) - WHITESPACE@[6; 7) - IDENT@[7; 8) "S" + NAME@[6; 8) + WHITESPACE@[6; 7) + IDENT@[7; 8) "S" TYPE_PARAM_LIST@[8; 12) L_ANGLE@[8; 9) ERROR@[9; 12) @@ -36,7 +37,8 @@ FILE@[0; 43) WHITESPACE@[31; 33) STRUCT_ITEM@[33; 43) STRUCT_KW@[33; 39) - WHITESPACE@[39; 40) - IDENT@[40; 41) "T" + NAME@[39; 41) + WHITESPACE@[39; 40) + IDENT@[40; 41) "T" SEMI@[41; 42) WHITESPACE@[42; 43) diff --git a/tests/data/parser/inline/0006_extern_struct.txt b/tests/data/parser/inline/0006_extern_struct.txt index 13917d7f3..93a5b0477 100644 --- a/tests/data/parser/inline/0006_extern_struct.txt +++ b/tests/data/parser/inline/0006_extern_struct.txt @@ -5,7 +5,8 @@ FILE@[0; 19) err: `expected `fn` or `{`` STRUCT_ITEM@[7; 19) STRUCT_KW@[7; 13) - WHITESPACE@[13; 14) - IDENT@[14; 17) "Foo" + NAME@[13; 17) + WHITESPACE@[13; 14) + IDENT@[14; 17) "Foo" SEMI@[17; 18) WHITESPACE@[18; 19) diff --git a/tests/data/parser/ok/0001_struct_item.txt b/tests/data/parser/ok/0001_struct_item.txt index c280a434f..b0195c316 100644 --- a/tests/data/parser/ok/0001_struct_item.txt +++ b/tests/data/parser/ok/0001_struct_item.txt @@ -1,9 +1,10 @@ FILE@[0; 13) STRUCT_ITEM@[0; 13) STRUCT_KW@[0; 6) - WHITESPACE@[6; 7) - IDENT@[7; 8) "S" - WHITESPACE@[8; 9) + NAME@[6; 9) + WHITESPACE@[6; 7) + IDENT@[7; 8) "S" + WHITESPACE@[8; 9) L_CURLY@[9; 10) WHITESPACE@[10; 12) R_CURLY@[12; 13) diff --git a/tests/data/parser/ok/0002_struct_item_field.txt b/tests/data/parser/ok/0002_struct_item_field.txt index 5a7bfbaec..285e6a8ef 100644 --- a/tests/data/parser/ok/0002_struct_item_field.txt +++ b/tests/data/parser/ok/0002_struct_item_field.txt @@ -1,9 +1,10 @@ FILE@[0; 25) STRUCT_ITEM@[0; 25) STRUCT_KW@[0; 6) - WHITESPACE@[6; 7) - IDENT@[7; 8) "S" - WHITESPACE@[8; 9) + NAME@[6; 9) + WHITESPACE@[6; 7) + IDENT@[7; 8) "S" + WHITESPACE@[8; 9) L_CURLY@[9; 10) NAMED_FIELD@[10; 24) WHITESPACE@[10; 15) diff --git a/tests/data/parser/ok/0008_mod_item.txt b/tests/data/parser/ok/0008_mod_item.txt index aacf1ffc7..99cc30e98 100644 --- a/tests/data/parser/ok/0008_mod_item.txt +++ b/tests/data/parser/ok/0008_mod_item.txt @@ -35,9 +35,10 @@ FILE@[0; 118) WHITESPACE@[47; 52) STRUCT_ITEM@[52; 64) STRUCT_KW@[52; 58) - WHITESPACE@[58; 59) - IDENT@[59; 60) "S" - WHITESPACE@[60; 61) + NAME@[58; 61) + WHITESPACE@[58; 59) + IDENT@[59; 60) "S" + WHITESPACE@[60; 61) L_CURLY@[61; 62) R_CURLY@[62; 63) WHITESPACE@[63; 64) diff --git a/tests/data/parser/ok/0016_struct_flavors.txt b/tests/data/parser/ok/0016_struct_flavors.txt index d5d3a0183..445559250 100644 --- a/tests/data/parser/ok/0016_struct_flavors.txt +++ b/tests/data/parser/ok/0016_struct_flavors.txt @@ -1,31 +1,35 @@ FILE@[0; 97) STRUCT_ITEM@[0; 10) STRUCT_KW@[0; 6) - WHITESPACE@[6; 7) - IDENT@[7; 8) "A" + NAME@[6; 8) + WHITESPACE@[6; 7) + IDENT@[7; 8) "A" SEMI@[8; 9) WHITESPACE@[9; 10) STRUCT_ITEM@[10; 22) STRUCT_KW@[10; 16) - WHITESPACE@[16; 17) - IDENT@[17; 18) "B" - WHITESPACE@[18; 19) + NAME@[16; 19) + WHITESPACE@[16; 17) + IDENT@[17; 18) "B" + WHITESPACE@[18; 19) L_CURLY@[19; 20) R_CURLY@[20; 21) WHITESPACE@[21; 22) STRUCT_ITEM@[22; 35) STRUCT_KW@[22; 28) - WHITESPACE@[28; 29) - IDENT@[29; 30) "C" + NAME@[28; 30) + WHITESPACE@[28; 29) + IDENT@[29; 30) "C" L_PAREN@[30; 31) R_PAREN@[31; 32) SEMI@[32; 33) WHITESPACE@[33; 35) STRUCT_ITEM@[35; 76) STRUCT_KW@[35; 41) - WHITESPACE@[41; 42) - IDENT@[42; 43) "D" - WHITESPACE@[43; 44) + NAME@[41; 44) + WHITESPACE@[41; 42) + IDENT@[42; 43) "D" + WHITESPACE@[43; 44) L_CURLY@[44; 45) NAMED_FIELD@[45; 56) WHITESPACE@[45; 50) @@ -48,8 +52,9 @@ FILE@[0; 97) WHITESPACE@[74; 76) STRUCT_ITEM@[76; 97) STRUCT_KW@[76; 82) - WHITESPACE@[82; 83) - IDENT@[83; 84) "E" + NAME@[82; 84) + WHITESPACE@[82; 83) + IDENT@[83; 84) "E" L_PAREN@[84; 85) POS_FIELD@[85; 90) VISIBILITY@[85; 89) diff --git a/tests/data/parser/ok/0018_struct_type_params.txt b/tests/data/parser/ok/0018_struct_type_params.txt index 6df786f42..34b73e8fd 100644 --- a/tests/data/parser/ok/0018_struct_type_params.txt +++ b/tests/data/parser/ok/0018_struct_type_params.txt @@ -1,8 +1,9 @@ FILE@[0; 290) STRUCT_ITEM@[0; 14) STRUCT_KW@[0; 6) - WHITESPACE@[6; 7) - IDENT@[7; 9) "S1" + NAME@[6; 9) + WHITESPACE@[6; 7) + IDENT@[7; 9) "S1" TYPE_PARAM_LIST@[9; 12) L_ANGLE@[9; 10) TYPE_PARAM@[10; 11) @@ -12,8 +13,9 @@ FILE@[0; 290) WHITESPACE@[13; 14) STRUCT_ITEM@[14; 33) STRUCT_KW@[14; 20) - WHITESPACE@[20; 21) - IDENT@[21; 23) "S2" + NAME@[20; 23) + WHITESPACE@[20; 21) + IDENT@[21; 23) "S2" TYPE_PARAM_LIST@[23; 26) L_ANGLE@[23; 24) TYPE_PARAM@[24; 25) @@ -27,8 +29,9 @@ FILE@[0; 290) WHITESPACE@[32; 33) STRUCT_ITEM@[33; 58) STRUCT_KW@[33; 39) - WHITESPACE@[39; 40) - IDENT@[40; 42) "S3" + NAME@[39; 42) + WHITESPACE@[39; 40) + IDENT@[40; 42) "S3" TYPE_PARAM_LIST@[42; 46) L_ANGLE@[42; 43) TYPE_PARAM@[43; 44) @@ -47,8 +50,9 @@ FILE@[0; 290) WHITESPACE@[56; 58) STRUCT_ITEM@[58; 71) STRUCT_KW@[58; 64) - WHITESPACE@[64; 65) - IDENT@[65; 67) "S4" + NAME@[64; 67) + WHITESPACE@[64; 65) + IDENT@[65; 67) "S4" TYPE_PARAM_LIST@[67; 69) L_ANGLE@[67; 68) R_ANGLE@[68; 69) @@ -56,8 +60,9 @@ FILE@[0; 290) WHITESPACE@[70; 71) STRUCT_ITEM@[71; 86) STRUCT_KW@[71; 77) - WHITESPACE@[77; 78) - IDENT@[78; 80) "S5" + NAME@[77; 80) + WHITESPACE@[77; 78) + IDENT@[78; 80) "S5" TYPE_PARAM_LIST@[80; 84) L_ANGLE@[80; 81) LIFETIME_PARAM@[81; 83) @@ -67,8 +72,9 @@ FILE@[0; 290) WHITESPACE@[85; 86) STRUCT_ITEM@[86; 102) STRUCT_KW@[86; 92) - WHITESPACE@[92; 93) - IDENT@[93; 95) "S6" + NAME@[92; 95) + WHITESPACE@[92; 93) + IDENT@[93; 95) "S6" TYPE_PARAM_LIST@[95; 100) L_ANGLE@[95; 96) LIFETIME_PARAM@[96; 99) @@ -79,8 +85,9 @@ FILE@[0; 290) WHITESPACE@[101; 102) STRUCT_ITEM@[102; 121) STRUCT_KW@[102; 108) - WHITESPACE@[108; 109) - IDENT@[109; 111) "S7" + NAME@[108; 111) + WHITESPACE@[108; 109) + IDENT@[109; 111) "S7" TYPE_PARAM_LIST@[111; 119) L_ANGLE@[111; 112) LIFETIME_PARAM@[112; 118) @@ -93,8 +100,9 @@ FILE@[0; 290) WHITESPACE@[120; 121) STRUCT_ITEM@[121; 143) STRUCT_KW@[121; 127) - WHITESPACE@[127; 128) - IDENT@[128; 130) "S8" + NAME@[127; 130) + WHITESPACE@[127; 128) + IDENT@[128; 130) "S8" TYPE_PARAM_LIST@[130; 141) L_ANGLE@[130; 131) LIFETIME_PARAM@[131; 140) @@ -110,8 +118,9 @@ FILE@[0; 290) WHITESPACE@[142; 143) STRUCT_ITEM@[143; 167) STRUCT_KW@[143; 149) - WHITESPACE@[149; 150) - IDENT@[150; 152) "S9" + NAME@[149; 152) + WHITESPACE@[149; 150) + IDENT@[150; 152) "S9" TYPE_PARAM_LIST@[152; 165) L_ANGLE@[152; 153) LIFETIME_PARAM@[153; 164) @@ -128,8 +137,9 @@ FILE@[0; 290) WHITESPACE@[166; 167) STRUCT_ITEM@[167; 184) STRUCT_KW@[167; 173) - WHITESPACE@[173; 174) - IDENT@[174; 177) "S10" + NAME@[173; 177) + WHITESPACE@[173; 174) + IDENT@[174; 177) "S10" TYPE_PARAM_LIST@[177; 182) L_ANGLE@[177; 178) LIFETIME_PARAM@[178; 180) @@ -140,8 +150,9 @@ FILE@[0; 290) WHITESPACE@[183; 184) STRUCT_ITEM@[184; 204) STRUCT_KW@[184; 190) - WHITESPACE@[190; 191) - IDENT@[191; 194) "S11" + NAME@[190; 194) + WHITESPACE@[190; 191) + IDENT@[191; 194) "S11" TYPE_PARAM_LIST@[194; 202) L_ANGLE@[194; 195) LIFETIME_PARAM@[195; 197) @@ -155,8 +166,9 @@ FILE@[0; 290) WHITESPACE@[203; 204) STRUCT_ITEM@[204; 235) STRUCT_KW@[204; 210) - WHITESPACE@[210; 211) - IDENT@[211; 214) "S12" + NAME@[210; 214) + WHITESPACE@[210; 211) + IDENT@[211; 214) "S12" TYPE_PARAM_LIST@[214; 232) L_ANGLE@[214; 215) LIFETIME_PARAM@[215; 222) @@ -178,8 +190,9 @@ FILE@[0; 290) WHITESPACE@[233; 235) STRUCT_ITEM@[235; 250) STRUCT_KW@[235; 241) - WHITESPACE@[241; 242) - IDENT@[242; 245) "S13" + NAME@[241; 245) + WHITESPACE@[241; 242) + IDENT@[242; 245) "S13" TYPE_PARAM_LIST@[245; 248) L_ANGLE@[245; 246) TYPE_PARAM@[246; 247) @@ -189,8 +202,9 @@ FILE@[0; 290) WHITESPACE@[249; 250) STRUCT_ITEM@[250; 268) STRUCT_KW@[250; 256) - WHITESPACE@[256; 257) - IDENT@[257; 260) "S14" + NAME@[256; 260) + WHITESPACE@[256; 257) + IDENT@[257; 260) "S14" TYPE_PARAM_LIST@[260; 266) L_ANGLE@[260; 261) TYPE_PARAM@[261; 262) @@ -204,8 +218,9 @@ FILE@[0; 290) WHITESPACE@[267; 268) STRUCT_ITEM@[268; 290) STRUCT_KW@[268; 274) - WHITESPACE@[274; 275) - IDENT@[275; 278) "S15" + NAME@[274; 278) + WHITESPACE@[274; 275) + IDENT@[275; 278) "S15" TYPE_PARAM_LIST@[278; 288) L_ANGLE@[278; 279) LIFETIME_PARAM@[279; 281) diff --git a/tests/data/parser/ok/0020_type_param_bounds.txt b/tests/data/parser/ok/0020_type_param_bounds.txt index 6f65d150a..a1c0cbc37 100644 --- a/tests/data/parser/ok/0020_type_param_bounds.txt +++ b/tests/data/parser/ok/0020_type_param_bounds.txt @@ -1,8 +1,9 @@ FILE@[0; 200) STRUCT_ITEM@[0; 13) STRUCT_KW@[0; 6) - WHITESPACE@[6; 7) - IDENT@[7; 8) "A" + NAME@[6; 8) + WHITESPACE@[6; 7) + IDENT@[7; 8) "A" TYPE_PARAM_LIST@[8; 11) L_ANGLE@[8; 9) TYPE_PARAM@[9; 10) @@ -12,8 +13,9 @@ FILE@[0; 200) WHITESPACE@[12; 13) STRUCT_ITEM@[13; 27) STRUCT_KW@[13; 19) - WHITESPACE@[19; 20) - IDENT@[20; 21) "B" + NAME@[19; 21) + WHITESPACE@[19; 20) + IDENT@[20; 21) "B" TYPE_PARAM_LIST@[21; 25) L_ANGLE@[21; 22) TYPE_PARAM@[22; 24) @@ -24,8 +26,9 @@ FILE@[0; 200) WHITESPACE@[26; 27) STRUCT_ITEM@[27; 44) STRUCT_KW@[27; 33) - WHITESPACE@[33; 34) - IDENT@[34; 35) "C" + NAME@[33; 35) + WHITESPACE@[33; 34) + IDENT@[34; 35) "C" TYPE_PARAM_LIST@[35; 42) L_ANGLE@[35; 36) TYPE_PARAM@[36; 41) @@ -38,8 +41,9 @@ FILE@[0; 200) WHITESPACE@[43; 44) STRUCT_ITEM@[44; 64) STRUCT_KW@[44; 50) - WHITESPACE@[50; 51) - IDENT@[51; 52) "D" + NAME@[50; 52) + WHITESPACE@[50; 51) + IDENT@[51; 52) "D" TYPE_PARAM_LIST@[52; 62) L_ANGLE@[52; 53) TYPE_PARAM@[53; 61) @@ -55,8 +59,9 @@ FILE@[0; 200) WHITESPACE@[63; 64) STRUCT_ITEM@[64; 87) STRUCT_KW@[64; 70) - WHITESPACE@[70; 71) - IDENT@[71; 72) "E" + NAME@[70; 72) + WHITESPACE@[70; 71) + IDENT@[71; 72) "E" TYPE_PARAM_LIST@[72; 85) L_ANGLE@[72; 73) TYPE_PARAM@[73; 84) @@ -74,8 +79,9 @@ FILE@[0; 200) WHITESPACE@[86; 87) STRUCT_ITEM@[87; 117) STRUCT_KW@[87; 93) - WHITESPACE@[93; 94) - IDENT@[94; 95) "F" + NAME@[93; 95) + WHITESPACE@[93; 94) + IDENT@[94; 95) "F" TYPE_PARAM_LIST@[95; 115) L_ANGLE@[95; 96) TYPE_PARAM@[96; 114) @@ -98,8 +104,9 @@ FILE@[0; 200) WHITESPACE@[116; 117) STRUCT_ITEM@[117; 144) STRUCT_KW@[117; 123) - WHITESPACE@[123; 124) - IDENT@[124; 125) "G" + NAME@[123; 125) + WHITESPACE@[123; 124) + IDENT@[124; 125) "G" TYPE_PARAM_LIST@[125; 142) L_ANGLE@[125; 126) TYPE_PARAM@[126; 141) @@ -120,8 +127,9 @@ FILE@[0; 200) WHITESPACE@[143; 144) STRUCT_ITEM@[144; 181) STRUCT_KW@[144; 150) - WHITESPACE@[150; 151) - IDENT@[151; 152) "H" + NAME@[150; 152) + WHITESPACE@[150; 151) + IDENT@[151; 152) "H" TYPE_PARAM_LIST@[152; 179) L_ANGLE@[152; 153) TYPE_PARAM@[153; 178) @@ -151,8 +159,9 @@ FILE@[0; 200) WHITESPACE@[180; 181) STRUCT_ITEM@[181; 200) STRUCT_KW@[181; 187) - WHITESPACE@[187; 188) - IDENT@[188; 189) "I" + NAME@[187; 189) + WHITESPACE@[187; 188) + IDENT@[188; 189) "I" TYPE_PARAM_LIST@[189; 198) L_ANGLE@[189; 190) TYPE_PARAM@[190; 192) -- cgit v1.2.3 From 8a735b667295f8390394b2536337698cb9a384ce Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 10 Feb 2018 14:10:50 +0300 Subject: G: use names in enums --- src/parser/grammar/items/structs.rs | 2 +- tests/data/parser/ok/0019_enums.txt | 33 +++++++++++++++++++-------------- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/src/parser/grammar/items/structs.rs b/src/parser/grammar/items/structs.rs index 3b1f8a38c..3c122a56f 100644 --- a/src/parser/grammar/items/structs.rs +++ b/src/parser/grammar/items/structs.rs @@ -41,7 +41,7 @@ pub(super) fn struct_item(p: &mut Parser) { pub(super) fn enum_item(p: &mut Parser) { assert!(p.at(ENUM_KW)); p.bump(); - p.expect(IDENT); + name(p); type_params::list(p); type_params::where_clause(p); if p.expect(L_CURLY) { diff --git a/tests/data/parser/ok/0019_enums.txt b/tests/data/parser/ok/0019_enums.txt index dfb8e1f0c..c1588a86e 100644 --- a/tests/data/parser/ok/0019_enums.txt +++ b/tests/data/parser/ok/0019_enums.txt @@ -1,17 +1,19 @@ FILE@[0; 182) ENUM_ITEM@[0; 13) ENUM_KW@[0; 4) - WHITESPACE@[4; 5) - IDENT@[5; 7) "E1" - WHITESPACE@[7; 8) + NAME@[4; 8) + WHITESPACE@[4; 5) + IDENT@[5; 7) "E1" + WHITESPACE@[7; 8) L_CURLY@[8; 9) WHITESPACE@[9; 10) R_CURLY@[10; 11) WHITESPACE@[11; 13) ENUM_ITEM@[13; 29) ENUM_KW@[13; 17) - WHITESPACE@[17; 18) - IDENT@[18; 20) "E2" + NAME@[17; 20) + WHITESPACE@[17; 18) + IDENT@[18; 20) "E2" TYPE_PARAM_LIST@[20; 24) L_ANGLE@[20; 21) TYPE_PARAM@[21; 22) @@ -24,9 +26,10 @@ FILE@[0; 182) WHITESPACE@[27; 29) ENUM_ITEM@[29; 48) ENUM_KW@[29; 33) - WHITESPACE@[33; 34) - IDENT@[34; 36) "E3" - WHITESPACE@[36; 37) + NAME@[33; 37) + WHITESPACE@[33; 34) + IDENT@[34; 36) "E3" + WHITESPACE@[36; 37) L_CURLY@[37; 38) ENUM_VARIANT@[38; 45) WHITESPACE@[38; 43) @@ -36,9 +39,10 @@ FILE@[0; 182) WHITESPACE@[46; 48) ENUM_ITEM@[48; 68) ENUM_KW@[48; 52) - WHITESPACE@[52; 53) - IDENT@[53; 55) "E4" - WHITESPACE@[55; 56) + NAME@[52; 56) + WHITESPACE@[52; 53) + IDENT@[53; 55) "E4" + WHITESPACE@[55; 56) L_CURLY@[56; 57) ENUM_VARIANT@[57; 63) WHITESPACE@[57; 62) @@ -49,9 +53,10 @@ FILE@[0; 182) WHITESPACE@[66; 68) ENUM_ITEM@[68; 182) ENUM_KW@[68; 72) - WHITESPACE@[72; 73) - IDENT@[73; 75) "E5" - WHITESPACE@[75; 76) + NAME@[72; 76) + WHITESPACE@[72; 73) + IDENT@[73; 75) "E5" + WHITESPACE@[75; 76) L_CURLY@[76; 77) ENUM_VARIANT@[77; 83) WHITESPACE@[77; 82) -- cgit v1.2.3 From c13e6db774acca952577fa7a18599b75b407f3c2 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 10 Feb 2018 14:13:30 +0300 Subject: G: use names in fields --- src/parser/grammar/items/structs.rs | 3 ++- tests/data/parser/err/0000_struct_field_missing_comma.txt | 8 +++++--- tests/data/parser/err/0003_C++_semicolon.txt | 10 ++++++---- tests/data/parser/err/0006_named_field_recovery.txt | 15 +++++++++------ tests/data/parser/ok/0002_struct_item_field.txt | 5 +++-- tests/data/parser/ok/0016_struct_flavors.txt | 8 +++++--- tests/data/parser/ok/0018_struct_type_params.txt | 5 +++-- tests/data/parser/ok/0019_enums.txt | 8 +++++--- 8 files changed, 38 insertions(+), 24 deletions(-) diff --git a/src/parser/grammar/items/structs.rs b/src/parser/grammar/items/structs.rs index 3c122a56f..eca0d2e64 100644 --- a/src/parser/grammar/items/structs.rs +++ b/src/parser/grammar/items/structs.rs @@ -86,7 +86,8 @@ fn named_fields(p: &mut Parser) { fn named_field(p: &mut Parser) { let field = p.start(); visibility(p); - if p.expect(IDENT) { + if p.at(IDENT) { + name(p); p.expect(COLON); types::type_ref(p); field.complete(p, NAMED_FIELD); diff --git a/tests/data/parser/err/0000_struct_field_missing_comma.txt b/tests/data/parser/err/0000_struct_field_missing_comma.txt index 2c761694c..f1c772b8d 100644 --- a/tests/data/parser/err/0000_struct_field_missing_comma.txt +++ b/tests/data/parser/err/0000_struct_field_missing_comma.txt @@ -7,15 +7,17 @@ FILE@[0; 34) WHITESPACE@[8; 9) L_CURLY@[9; 10) NAMED_FIELD@[10; 26) - WHITESPACE@[10; 15) - IDENT@[15; 16) "a" + NAME@[10; 16) + WHITESPACE@[10; 15) + IDENT@[15; 16) "a" COLON@[16; 17) WHITESPACE@[17; 18) IDENT@[18; 21) "u32" WHITESPACE@[21; 26) err: `expected COMMA` NAMED_FIELD@[26; 33) - IDENT@[26; 27) "b" + NAME@[26; 27) + IDENT@[26; 27) "b" COLON@[27; 28) WHITESPACE@[28; 29) IDENT@[29; 32) "u32" diff --git a/tests/data/parser/err/0003_C++_semicolon.txt b/tests/data/parser/err/0003_C++_semicolon.txt index e567b0775..c835a1474 100644 --- a/tests/data/parser/err/0003_C++_semicolon.txt +++ b/tests/data/parser/err/0003_C++_semicolon.txt @@ -7,15 +7,17 @@ FILE@[0; 40) WHITESPACE@[8; 9) L_CURLY@[9; 10) NAMED_FIELD@[10; 21) - WHITESPACE@[10; 15) - IDENT@[15; 16) "a" + NAME@[10; 16) + WHITESPACE@[10; 15) + IDENT@[15; 16) "a" COLON@[16; 17) WHITESPACE@[17; 18) IDENT@[18; 21) "i32" COMMA@[21; 22) NAMED_FIELD@[22; 36) - WHITESPACE@[22; 27) - IDENT@[27; 28) "b" + NAME@[22; 28) + WHITESPACE@[22; 27) + IDENT@[27; 28) "b" COLON@[28; 29) WHITESPACE@[29; 30) IDENT@[30; 36) "String" diff --git a/tests/data/parser/err/0006_named_field_recovery.txt b/tests/data/parser/err/0006_named_field_recovery.txt index 7886beeb8..b772671e9 100644 --- a/tests/data/parser/err/0006_named_field_recovery.txt +++ b/tests/data/parser/err/0006_named_field_recovery.txt @@ -7,8 +7,9 @@ FILE@[0; 74) WHITESPACE@[8; 9) L_CURLY@[9; 10) NAMED_FIELD@[10; 21) - WHITESPACE@[10; 15) - IDENT@[15; 16) "f" + NAME@[10; 16) + WHITESPACE@[10; 15) + IDENT@[15; 16) "f" COLON@[16; 17) WHITESPACE@[17; 18) IDENT@[18; 21) "u32" @@ -17,11 +18,11 @@ FILE@[0; 74) WHITESPACE@[22; 27) PUB_KW@[27; 30) WHITESPACE@[30; 31) - err: `expected IDENT` ERROR@[31; 38) err: `expected field declaration` INT_NUMBER@[31; 33) WHITESPACE@[33; 38) + err: `expected COMMA` ERROR@[38; 40) err: `expected field declaration` PLUS@[38; 39) @@ -38,14 +39,16 @@ FILE@[0; 74) VISIBILITY@[48; 52) PUB_KW@[48; 51) WHITESPACE@[51; 52) - IDENT@[52; 53) "x" + NAME@[52; 53) + IDENT@[52; 53) "x" COLON@[53; 54) WHITESPACE@[54; 55) IDENT@[55; 58) "u32" COMMA@[58; 59) NAMED_FIELD@[59; 70) - WHITESPACE@[59; 64) - IDENT@[64; 65) "z" + NAME@[59; 65) + WHITESPACE@[59; 64) + IDENT@[64; 65) "z" COLON@[65; 66) WHITESPACE@[66; 67) IDENT@[67; 70) "f64" diff --git a/tests/data/parser/ok/0002_struct_item_field.txt b/tests/data/parser/ok/0002_struct_item_field.txt index 285e6a8ef..31d3508db 100644 --- a/tests/data/parser/ok/0002_struct_item_field.txt +++ b/tests/data/parser/ok/0002_struct_item_field.txt @@ -7,8 +7,9 @@ FILE@[0; 25) WHITESPACE@[8; 9) L_CURLY@[9; 10) NAMED_FIELD@[10; 24) - WHITESPACE@[10; 15) - IDENT@[15; 18) "foo" + NAME@[10; 18) + WHITESPACE@[10; 15) + IDENT@[15; 18) "foo" COLON@[18; 19) WHITESPACE@[19; 20) IDENT@[20; 23) "u32" diff --git a/tests/data/parser/ok/0016_struct_flavors.txt b/tests/data/parser/ok/0016_struct_flavors.txt index 445559250..15462b9b9 100644 --- a/tests/data/parser/ok/0016_struct_flavors.txt +++ b/tests/data/parser/ok/0016_struct_flavors.txt @@ -32,8 +32,9 @@ FILE@[0; 97) WHITESPACE@[43; 44) L_CURLY@[44; 45) NAMED_FIELD@[45; 56) - WHITESPACE@[45; 50) - IDENT@[50; 51) "a" + NAME@[45; 51) + WHITESPACE@[45; 50) + IDENT@[50; 51) "a" COLON@[51; 52) WHITESPACE@[52; 53) IDENT@[53; 56) "u32" @@ -43,7 +44,8 @@ FILE@[0; 97) WHITESPACE@[57; 62) PUB_KW@[62; 65) WHITESPACE@[65; 66) - IDENT@[66; 67) "b" + NAME@[66; 67) + IDENT@[66; 67) "b" COLON@[67; 68) WHITESPACE@[68; 69) IDENT@[69; 72) "u32" diff --git a/tests/data/parser/ok/0018_struct_type_params.txt b/tests/data/parser/ok/0018_struct_type_params.txt index 34b73e8fd..fe14effce 100644 --- a/tests/data/parser/ok/0018_struct_type_params.txt +++ b/tests/data/parser/ok/0018_struct_type_params.txt @@ -40,8 +40,9 @@ FILE@[0; 290) WHITESPACE@[45; 46) L_CURLY@[46; 47) NAMED_FIELD@[47; 55) - WHITESPACE@[47; 48) - IDENT@[48; 49) "u" + NAME@[47; 49) + WHITESPACE@[47; 48) + IDENT@[48; 49) "u" COLON@[49; 50) WHITESPACE@[50; 51) IDENT@[51; 54) "u32" diff --git a/tests/data/parser/ok/0019_enums.txt b/tests/data/parser/ok/0019_enums.txt index c1588a86e..bad12bee3 100644 --- a/tests/data/parser/ok/0019_enums.txt +++ b/tests/data/parser/ok/0019_enums.txt @@ -77,8 +77,9 @@ FILE@[0; 182) WHITESPACE@[102; 103) L_CURLY@[103; 104) NAMED_FIELD@[104; 119) - WHITESPACE@[104; 113) - IDENT@[113; 114) "a" + NAME@[104; 114) + WHITESPACE@[104; 113) + IDENT@[113; 114) "a" COLON@[114; 115) WHITESPACE@[115; 116) IDENT@[116; 119) "u32" @@ -88,7 +89,8 @@ FILE@[0; 182) WHITESPACE@[120; 129) PUB_KW@[129; 132) WHITESPACE@[132; 133) - IDENT@[133; 134) "b" + NAME@[133; 134) + IDENT@[133; 134) "b" COLON@[134; 135) WHITESPACE@[135; 136) IDENT@[136; 139) "f64" -- cgit v1.2.3 From fa2131365e8ff2a6fa4fcb47aa04e6d51a32943e Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 10 Feb 2018 14:15:04 +0300 Subject: G: use names in traits --- src/parser/grammar/items/traits.rs | 2 +- tests/data/parser/inline/0007_unsafe_trait.txt | 7 ++++--- tests/data/parser/inline/0009_unsafe_auto_trait.txt | 7 ++++--- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/parser/grammar/items/traits.rs b/src/parser/grammar/items/traits.rs index 3bef9639f..9961a88fe 100644 --- a/src/parser/grammar/items/traits.rs +++ b/src/parser/grammar/items/traits.rs @@ -3,7 +3,7 @@ use super::*; pub(super) fn trait_item(p: &mut Parser) { assert!(p.at(TRAIT_KW)); p.bump(); - p.expect(IDENT); + name(p); p.expect(L_CURLY); p.expect(R_CURLY); } diff --git a/tests/data/parser/inline/0007_unsafe_trait.txt b/tests/data/parser/inline/0007_unsafe_trait.txt index d6f6a4cfa..9e2f82587 100644 --- a/tests/data/parser/inline/0007_unsafe_trait.txt +++ b/tests/data/parser/inline/0007_unsafe_trait.txt @@ -3,9 +3,10 @@ FILE@[0; 18) UNSAFE_KW@[0; 6) WHITESPACE@[6; 7) TRAIT_KW@[7; 12) - WHITESPACE@[12; 13) - IDENT@[13; 14) "T" - WHITESPACE@[14; 15) + NAME@[12; 15) + WHITESPACE@[12; 13) + IDENT@[13; 14) "T" + WHITESPACE@[14; 15) L_CURLY@[15; 16) R_CURLY@[16; 17) WHITESPACE@[17; 18) diff --git a/tests/data/parser/inline/0009_unsafe_auto_trait.txt b/tests/data/parser/inline/0009_unsafe_auto_trait.txt index 0a9a1e117..aa1c99168 100644 --- a/tests/data/parser/inline/0009_unsafe_auto_trait.txt +++ b/tests/data/parser/inline/0009_unsafe_auto_trait.txt @@ -5,9 +5,10 @@ FILE@[0; 23) AUTO_KW@[7; 11) WHITESPACE@[11; 12) TRAIT_KW@[12; 17) - WHITESPACE@[17; 18) - IDENT@[18; 19) "T" - WHITESPACE@[19; 20) + NAME@[17; 20) + WHITESPACE@[17; 18) + IDENT@[18; 19) "T" + WHITESPACE@[19; 20) L_CURLY@[20; 21) R_CURLY@[21; 22) WHITESPACE@[22; 23) -- cgit v1.2.3 From e792ec3eca6214329d053715a6477cc4f7a05672 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 10 Feb 2018 14:17:38 +0300 Subject: G: use name refs in paths --- src/parser/grammar/mod.rs | 10 ++++++++ src/parser/grammar/paths.rs | 3 ++- .../data/parser/err/0004_use_path_bad_segment.txt | 5 ++-- tests/data/parser/ok/0009_use_item.txt | 8 ++++--- tests/data/parser/ok/0010_use_path_segments.txt | 20 ++++++++++------ tests/data/parser/ok/0012_visibility.txt | 11 +++++---- tests/data/parser/ok/0013_use_path_self_super.txt | 12 ++++++---- tests/data/parser/ok/0014_use_tree.txt | 26 +++++++++++++-------- tests/data/parser/ok/0015_use_tree.txt | 22 ++++++++++-------- tests/data/parser/ok/0020_type_param_bounds.txt | 27 +++++++++++++--------- 10 files changed, 93 insertions(+), 51 deletions(-) diff --git a/src/parser/grammar/mod.rs b/src/parser/grammar/mod.rs index 6e82d7c69..abf9fe86c 100644 --- a/src/parser/grammar/mod.rs +++ b/src/parser/grammar/mod.rs @@ -60,6 +60,16 @@ fn name(p: &mut Parser) { } } +fn name_ref(p: &mut Parser) { + if p.at(IDENT) { + let m = p.start(); + p.bump(); + m.complete(p, NAME_REF); + } else { + p.error("expected identifier"); + } +} + fn error_block(p: &mut Parser, message: &str) { assert!(p.at(L_CURLY)); let err = p.start(); diff --git a/src/parser/grammar/paths.rs b/src/parser/grammar/paths.rs index a7fc90774..6ed315c3d 100644 --- a/src/parser/grammar/paths.rs +++ b/src/parser/grammar/paths.rs @@ -42,7 +42,8 @@ fn path_segment(p: &mut Parser, first: bool) { p.eat(COLONCOLON); } match p.current() { - IDENT | SELF_KW | SUPER_KW => p.bump(), + IDENT => name_ref(p), + SELF_KW | SUPER_KW => p.bump(), _ => { p.error("expected identifier"); } diff --git a/tests/data/parser/err/0004_use_path_bad_segment.txt b/tests/data/parser/err/0004_use_path_bad_segment.txt index 7f43611eb..0a67002ac 100644 --- a/tests/data/parser/err/0004_use_path_bad_segment.txt +++ b/tests/data/parser/err/0004_use_path_bad_segment.txt @@ -5,8 +5,9 @@ FILE@[0; 12) PATH@[3; 9) PATH@[3; 7) PATH_SEGMENT@[3; 7) - WHITESPACE@[3; 4) - IDENT@[4; 7) "foo" + NAME_REF@[3; 7) + WHITESPACE@[3; 4) + IDENT@[4; 7) "foo" COLONCOLON@[7; 9) PATH_SEGMENT@[9; 9) err: `expected identifier` diff --git a/tests/data/parser/ok/0009_use_item.txt b/tests/data/parser/ok/0009_use_item.txt index 08ae990d9..8daf4be0d 100644 --- a/tests/data/parser/ok/0009_use_item.txt +++ b/tests/data/parser/ok/0009_use_item.txt @@ -4,8 +4,9 @@ FILE@[0; 19) USE_TREE@[3; 7) PATH@[3; 7) PATH_SEGMENT@[3; 7) - WHITESPACE@[3; 4) - IDENT@[4; 7) "foo" + NAME_REF@[3; 7) + WHITESPACE@[3; 4) + IDENT@[4; 7) "foo" SEMI@[7; 8) WHITESPACE@[8; 9) USE_ITEM@[9; 19) @@ -15,5 +16,6 @@ FILE@[0; 19) PATH_SEGMENT@[12; 18) WHITESPACE@[12; 13) COLONCOLON@[13; 15) - IDENT@[15; 18) "bar" + NAME_REF@[15; 18) + IDENT@[15; 18) "bar" SEMI@[18; 19) diff --git a/tests/data/parser/ok/0010_use_path_segments.txt b/tests/data/parser/ok/0010_use_path_segments.txt index 37e3dfdbf..96d10d741 100644 --- a/tests/data/parser/ok/0010_use_path_segments.txt +++ b/tests/data/parser/ok/0010_use_path_segments.txt @@ -8,13 +8,16 @@ FILE@[0; 40) PATH_SEGMENT@[3; 9) WHITESPACE@[3; 4) COLONCOLON@[4; 6) - IDENT@[6; 9) "foo" + NAME_REF@[6; 9) + IDENT@[6; 9) "foo" COLONCOLON@[9; 11) PATH_SEGMENT@[11; 14) - IDENT@[11; 14) "bar" + NAME_REF@[11; 14) + IDENT@[11; 14) "bar" COLONCOLON@[14; 16) PATH_SEGMENT@[16; 19) - IDENT@[16; 19) "baz" + NAME_REF@[16; 19) + IDENT@[16; 19) "baz" SEMI@[19; 20) WHITESPACE@[20; 21) USE_ITEM@[21; 40) @@ -24,13 +27,16 @@ FILE@[0; 40) PATH@[24; 33) PATH@[24; 28) PATH_SEGMENT@[24; 28) - WHITESPACE@[24; 25) - IDENT@[25; 28) "foo" + NAME_REF@[24; 28) + WHITESPACE@[24; 25) + IDENT@[25; 28) "foo" COLONCOLON@[28; 30) PATH_SEGMENT@[30; 33) - IDENT@[30; 33) "bar" + NAME_REF@[30; 33) + IDENT@[30; 33) "bar" COLONCOLON@[33; 35) PATH_SEGMENT@[35; 38) - IDENT@[35; 38) "baz" + NAME_REF@[35; 38) + IDENT@[35; 38) "baz" SEMI@[38; 39) WHITESPACE@[39; 40) diff --git a/tests/data/parser/ok/0012_visibility.txt b/tests/data/parser/ok/0012_visibility.txt index 8f7ba697d..c138b73f3 100644 --- a/tests/data/parser/ok/0012_visibility.txt +++ b/tests/data/parser/ok/0012_visibility.txt @@ -67,14 +67,17 @@ FILE@[0; 98) PATH@[72; 81) PATH@[72; 76) PATH_SEGMENT@[72; 76) - WHITESPACE@[72; 73) - IDENT@[73; 76) "foo" + NAME_REF@[72; 76) + WHITESPACE@[72; 73) + IDENT@[73; 76) "foo" COLONCOLON@[76; 78) PATH_SEGMENT@[78; 81) - IDENT@[78; 81) "bar" + NAME_REF@[78; 81) + IDENT@[78; 81) "bar" COLONCOLON@[81; 83) PATH_SEGMENT@[83; 86) - IDENT@[83; 86) "baz" + NAME_REF@[83; 86) + IDENT@[83; 86) "baz" R_PAREN@[86; 87) WHITESPACE@[87; 88) FN_KW@[88; 90) diff --git a/tests/data/parser/ok/0013_use_path_self_super.txt b/tests/data/parser/ok/0013_use_path_self_super.txt index f3dfaba4b..3542b2164 100644 --- a/tests/data/parser/ok/0013_use_path_self_super.txt +++ b/tests/data/parser/ok/0013_use_path_self_super.txt @@ -9,7 +9,8 @@ FILE@[0; 65) SELF_KW@[4; 8) COLONCOLON@[8; 10) PATH_SEGMENT@[10; 13) - IDENT@[10; 13) "foo" + NAME_REF@[10; 13) + IDENT@[10; 13) "foo" SEMI@[13; 14) WHITESPACE@[14; 15) USE_ITEM@[15; 38) @@ -26,7 +27,8 @@ FILE@[0; 65) SUPER_KW@[26; 31) COLONCOLON@[31; 33) PATH_SEGMENT@[33; 36) - IDENT@[33; 36) "bar" + NAME_REF@[33; 36) + IDENT@[33; 36) "bar" SEMI@[36; 37) WHITESPACE@[37; 38) USE_ITEM@[38; 65) @@ -42,12 +44,14 @@ FILE@[0; 65) SELF_KW@[44; 48) COLONCOLON@[48; 50) PATH_SEGMENT@[50; 51) - IDENT@[50; 51) "a" + NAME_REF@[50; 51) + IDENT@[50; 51) "a" COLONCOLON@[51; 53) PATH_SEGMENT@[53; 58) SUPER_KW@[53; 58) COLONCOLON@[58; 60) PATH_SEGMENT@[60; 63) - IDENT@[60; 63) "bar" + NAME_REF@[60; 63) + IDENT@[60; 63) "bar" SEMI@[63; 64) WHITESPACE@[64; 65) diff --git a/tests/data/parser/ok/0014_use_tree.txt b/tests/data/parser/ok/0014_use_tree.txt index cddaa5462..a7326214d 100644 --- a/tests/data/parser/ok/0014_use_tree.txt +++ b/tests/data/parser/ok/0014_use_tree.txt @@ -36,8 +36,9 @@ FILE@[0; 81) USE_TREE@[37; 44) PATH@[37; 41) PATH_SEGMENT@[37; 41) - WHITESPACE@[37; 38) - IDENT@[38; 41) "foo" + NAME_REF@[37; 41) + WHITESPACE@[37; 38) + IDENT@[38; 41) "foo" COLONCOLON@[41; 43) STAR@[43; 44) SEMI@[44; 45) @@ -47,8 +48,9 @@ FILE@[0; 81) USE_TREE@[49; 57) PATH@[49; 53) PATH_SEGMENT@[49; 53) - WHITESPACE@[49; 50) - IDENT@[50; 53) "foo" + NAME_REF@[49; 53) + WHITESPACE@[49; 50) + IDENT@[50; 53) "foo" COLONCOLON@[53; 55) L_CURLY@[55; 56) R_CURLY@[56; 57) @@ -61,25 +63,29 @@ FILE@[0; 81) PATH_SEGMENT@[62; 68) WHITESPACE@[62; 63) COLONCOLON@[63; 65) - IDENT@[65; 68) "foo" + NAME_REF@[65; 68) + IDENT@[65; 68) "foo" COLONCOLON@[68; 70) L_CURLY@[70; 71) USE_TREE@[71; 72) PATH@[71; 72) PATH_SEGMENT@[71; 72) - IDENT@[71; 72) "a" + NAME_REF@[71; 72) + IDENT@[71; 72) "a" COMMA@[72; 73) USE_TREE@[73; 75) PATH@[73; 75) PATH_SEGMENT@[73; 75) - WHITESPACE@[73; 74) - IDENT@[74; 75) "b" + NAME_REF@[73; 75) + WHITESPACE@[73; 74) + IDENT@[74; 75) "b" COMMA@[75; 76) USE_TREE@[76; 78) PATH@[76; 78) PATH_SEGMENT@[76; 78) - WHITESPACE@[76; 77) - IDENT@[77; 78) "c" + NAME_REF@[76; 78) + WHITESPACE@[76; 77) + IDENT@[77; 78) "c" R_CURLY@[78; 79) SEMI@[79; 80) WHITESPACE@[80; 81) diff --git a/tests/data/parser/ok/0015_use_tree.txt b/tests/data/parser/ok/0015_use_tree.txt index 28f5f789e..2ba15bbee 100644 --- a/tests/data/parser/ok/0015_use_tree.txt +++ b/tests/data/parser/ok/0015_use_tree.txt @@ -4,9 +4,10 @@ FILE@[0; 55) USE_TREE@[3; 14) PATH@[3; 8) PATH_SEGMENT@[3; 8) - WHITESPACE@[3; 4) - IDENT@[4; 7) "foo" - WHITESPACE@[7; 8) + NAME_REF@[3; 8) + WHITESPACE@[3; 4) + IDENT@[4; 7) "foo" + WHITESPACE@[7; 8) ALIAS@[8; 14) AS_KW@[8; 10) NAME@[10; 14) @@ -19,15 +20,17 @@ FILE@[0; 55) USE_TREE@[19; 53) PATH@[19; 23) PATH_SEGMENT@[19; 23) - WHITESPACE@[19; 20) - IDENT@[20; 23) "foo" + NAME_REF@[19; 23) + WHITESPACE@[19; 20) + IDENT@[20; 23) "foo" COLONCOLON@[23; 25) L_CURLY@[25; 26) USE_TREE@[26; 32) PATH@[26; 28) PATH_SEGMENT@[26; 28) - IDENT@[26; 27) "a" - WHITESPACE@[27; 28) + NAME_REF@[26; 28) + IDENT@[26; 27) "a" + WHITESPACE@[27; 28) ALIAS@[28; 32) AS_KW@[28; 30) NAME@[30; 32) @@ -48,8 +51,9 @@ FILE@[0; 55) PATH_SEGMENT@[41; 48) WHITESPACE@[41; 42) COLONCOLON@[42; 44) - IDENT@[44; 47) "foo" - WHITESPACE@[47; 48) + NAME_REF@[44; 48) + IDENT@[44; 47) "foo" + WHITESPACE@[47; 48) ALIAS@[48; 52) AS_KW@[48; 50) NAME@[50; 52) diff --git a/tests/data/parser/ok/0020_type_param_bounds.txt b/tests/data/parser/ok/0020_type_param_bounds.txt index a1c0cbc37..7132eec6e 100644 --- a/tests/data/parser/ok/0020_type_param_bounds.txt +++ b/tests/data/parser/ok/0020_type_param_bounds.txt @@ -97,8 +97,9 @@ FILE@[0; 200) PLUS@[107; 108) PATH@[108; 114) PATH_SEGMENT@[108; 114) - WHITESPACE@[108; 109) - IDENT@[109; 114) "Clone" + NAME_REF@[108; 114) + WHITESPACE@[108; 109) + IDENT@[109; 114) "Clone" R_ANGLE@[114; 115) SEMI@[115; 116) WHITESPACE@[116; 117) @@ -114,14 +115,16 @@ FILE@[0; 200) COLON@[127; 128) PATH@[128; 135) PATH_SEGMENT@[128; 135) - WHITESPACE@[128; 129) - IDENT@[129; 134) "Clone" - WHITESPACE@[134; 135) + NAME_REF@[128; 135) + WHITESPACE@[128; 129) + IDENT@[129; 134) "Clone" + WHITESPACE@[134; 135) PLUS@[135; 136) PATH@[136; 141) PATH_SEGMENT@[136; 141) - WHITESPACE@[136; 137) - IDENT@[137; 141) "Copy" + NAME_REF@[136; 141) + WHITESPACE@[136; 137) + IDENT@[137; 141) "Copy" R_ANGLE@[141; 142) SEMI@[142; 143) WHITESPACE@[143; 144) @@ -139,8 +142,9 @@ FILE@[0; 200) PATH_SEGMENT@[155; 162) WHITESPACE@[155; 156) COLONCOLON@[156; 158) - IDENT@[158; 161) "Foo" - WHITESPACE@[161; 162) + NAME_REF@[158; 162) + IDENT@[158; 161) "Foo" + WHITESPACE@[161; 162) PLUS@[162; 163) PATH@[163; 174) PATH@[163; 168) @@ -149,8 +153,9 @@ FILE@[0; 200) SELF_KW@[164; 168) COLONCOLON@[168; 170) PATH_SEGMENT@[170; 174) - IDENT@[170; 173) "Bar" - WHITESPACE@[173; 174) + NAME_REF@[170; 174) + IDENT@[170; 173) "Bar" + WHITESPACE@[173; 174) PLUS@[174; 175) WHITESPACE@[175; 176) LIFETIME@[176; 178) "'a" -- cgit v1.2.3 From 3aec74bc5b3b1a6fea37a8c60f74906a177bd03f Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 10 Feb 2018 14:18:38 +0300 Subject: Reformat --- tests/testutils/src/lib.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/testutils/src/lib.rs b/tests/testutils/src/lib.rs index abd28f26d..b50e70849 100644 --- a/tests/testutils/src/lib.rs +++ b/tests/testutils/src/lib.rs @@ -22,8 +22,8 @@ fn read_text(path: &Path) -> String { } pub fn dir_tests(paths: &[&str], f: F) - where - F: Fn(&str) -> String, +where + F: Fn(&str) -> String, { for path in collect_tests(paths) { let actual = { -- cgit v1.2.3 From d68a187eb5adf489b5e1eef6aa23768b819d0e65 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 10 Feb 2018 14:22:31 +0300 Subject: G: use name in types --- src/parser/grammar/items/mod.rs | 2 +- tests/data/parser/inline/0014_type_item_type_params.txt | 5 +++-- tests/data/parser/inline/0015_type_item.txt | 7 ++++--- tests/data/parser/inline/0016_type_item_where_clause.txt | 7 ++++--- 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/parser/grammar/items/mod.rs b/src/parser/grammar/items/mod.rs index 61ebc740f..2d9580991 100644 --- a/src/parser/grammar/items/mod.rs +++ b/src/parser/grammar/items/mod.rs @@ -236,7 +236,7 @@ fn type_item(p: &mut Parser) { assert!(p.at(TYPE_KW)); p.bump(); - p.expect(IDENT); + name(p); // test type_item_type_params // type Result = (); diff --git a/tests/data/parser/inline/0014_type_item_type_params.txt b/tests/data/parser/inline/0014_type_item_type_params.txt index b0f0f8337..ca32faa42 100644 --- a/tests/data/parser/inline/0014_type_item_type_params.txt +++ b/tests/data/parser/inline/0014_type_item_type_params.txt @@ -1,8 +1,9 @@ FILE@[0; 21) TYPE_ITEM@[0; 21) TYPE_KW@[0; 4) - WHITESPACE@[4; 5) - IDENT@[5; 11) "Result" + NAME@[4; 11) + WHITESPACE@[4; 5) + IDENT@[5; 11) "Result" TYPE_PARAM_LIST@[11; 15) L_ANGLE@[11; 12) TYPE_PARAM@[12; 13) diff --git a/tests/data/parser/inline/0015_type_item.txt b/tests/data/parser/inline/0015_type_item.txt index 382d7ece0..3818fe25d 100644 --- a/tests/data/parser/inline/0015_type_item.txt +++ b/tests/data/parser/inline/0015_type_item.txt @@ -1,9 +1,10 @@ FILE@[0; 16) TYPE_ITEM@[0; 16) TYPE_KW@[0; 4) - WHITESPACE@[4; 5) - IDENT@[5; 8) "Foo" - WHITESPACE@[8; 9) + NAME@[4; 9) + WHITESPACE@[4; 5) + IDENT@[5; 8) "Foo" + WHITESPACE@[8; 9) EQ@[9; 10) WHITESPACE@[10; 11) IDENT@[11; 14) "Bar" diff --git a/tests/data/parser/inline/0016_type_item_where_clause.txt b/tests/data/parser/inline/0016_type_item_where_clause.txt index ddd335870..12bbc752a 100644 --- a/tests/data/parser/inline/0016_type_item_where_clause.txt +++ b/tests/data/parser/inline/0016_type_item_where_clause.txt @@ -1,10 +1,11 @@ FILE@[0; 31) TYPE_ITEM@[0; 31) TYPE_KW@[0; 4) - WHITESPACE@[4; 5) - IDENT@[5; 8) "Foo" - WHERE_CLAUSE@[8; 25) + NAME@[4; 9) + WHITESPACE@[4; 5) + IDENT@[5; 8) "Foo" WHITESPACE@[8; 9) + WHERE_CLAUSE@[9; 25) WHERE_KW@[9; 14) WHITESPACE@[14; 15) IDENT@[15; 18) "Foo" -- cgit v1.2.3 From 199b3a1604095beee9eaeec541c8f158e85493ea Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 10 Feb 2018 14:23:18 +0300 Subject: G: use name in mods --- src/parser/grammar/items/mod.rs | 3 ++- tests/data/parser/ok/0008_mod_item.txt | 38 ++++++++++++++++++++-------------- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/parser/grammar/items/mod.rs b/src/parser/grammar/items/mod.rs index 2d9580991..8bb821fb6 100644 --- a/src/parser/grammar/items/mod.rs +++ b/src/parser/grammar/items/mod.rs @@ -255,7 +255,8 @@ fn mod_item(p: &mut Parser) { assert!(p.at(MOD_KW)); p.bump(); - if p.expect(IDENT) && !p.eat(SEMI) { + name(p); + if !p.eat(SEMI) { if p.expect(L_CURLY) { mod_contents(p, true); p.expect(R_CURLY); diff --git a/tests/data/parser/ok/0008_mod_item.txt b/tests/data/parser/ok/0008_mod_item.txt index 99cc30e98..20321051c 100644 --- a/tests/data/parser/ok/0008_mod_item.txt +++ b/tests/data/parser/ok/0008_mod_item.txt @@ -1,24 +1,27 @@ FILE@[0; 118) MOD_ITEM@[0; 8) MOD_KW@[0; 3) - WHITESPACE@[3; 4) - IDENT@[4; 5) "a" + NAME@[3; 5) + WHITESPACE@[3; 4) + IDENT@[4; 5) "a" SEMI@[5; 6) WHITESPACE@[6; 8) MOD_ITEM@[8; 19) MOD_KW@[8; 11) - WHITESPACE@[11; 12) - IDENT@[12; 13) "b" - WHITESPACE@[13; 14) + NAME@[11; 14) + WHITESPACE@[11; 12) + IDENT@[12; 13) "b" + WHITESPACE@[13; 14) L_CURLY@[14; 15) WHITESPACE@[15; 16) R_CURLY@[16; 17) WHITESPACE@[17; 19) MOD_ITEM@[19; 67) MOD_KW@[19; 22) - WHITESPACE@[22; 23) - IDENT@[23; 24) "c" - WHITESPACE@[24; 25) + NAME@[22; 25) + WHITESPACE@[22; 23) + IDENT@[23; 24) "c" + WHITESPACE@[24; 25) L_CURLY@[25; 26) FN_ITEM@[26; 52) WHITESPACE@[26; 31) @@ -46,9 +49,10 @@ FILE@[0; 118) WHITESPACE@[65; 67) MOD_ITEM@[67; 118) MOD_KW@[67; 70) - WHITESPACE@[70; 71) - IDENT@[71; 72) "d" - WHITESPACE@[72; 73) + NAME@[70; 73) + WHITESPACE@[70; 71) + IDENT@[71; 72) "d" + WHITESPACE@[72; 73) L_CURLY@[73; 74) ATTR@[74; 92) WHITESPACE@[74; 79) @@ -61,15 +65,17 @@ FILE@[0; 118) WHITESPACE@[87; 92) MOD_ITEM@[92; 103) MOD_KW@[92; 95) - WHITESPACE@[95; 96) - IDENT@[96; 97) "e" + NAME@[95; 97) + WHITESPACE@[95; 96) + IDENT@[96; 97) "e" SEMI@[97; 98) WHITESPACE@[98; 103) MOD_ITEM@[103; 117) MOD_KW@[103; 106) - WHITESPACE@[106; 107) - IDENT@[107; 108) "f" - WHITESPACE@[108; 109) + NAME@[106; 109) + WHITESPACE@[106; 107) + IDENT@[107; 108) "f" + WHITESPACE@[108; 109) L_CURLY@[109; 110) WHITESPACE@[110; 115) R_CURLY@[115; 116) -- cgit v1.2.3