From c13e6db774acca952577fa7a18599b75b407f3c2 Mon Sep 17 00:00:00 2001 From: Aleksey Kladov Date: Sat, 10 Feb 2018 14:13:30 +0300 Subject: [PATCH] G: use names in fields --- src/parser/grammar/items/structs.rs | 3 ++- .../err/0000_struct_field_missing_comma.txt | 8 +++++--- tests/data/parser/err/0003_C++_semicolon.txt | 10 ++++++---- .../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 3c122a56fd..eca0d2e643 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 2c761694cc..f1c772b8d7 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 e567b07750..c835a14740 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 7886beeb8e..b772671e95 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 285e6a8ef2..31d3508dbc 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 4455592501..15462b9b93 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 34b73e8fdd..fe14effceb 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 c1588a86e2..bad12bee39 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"