aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksey Kladov <[email protected]>2018-01-08 18:40:00 +0000
committerAleksey Kladov <[email protected]>2018-01-08 18:40:00 +0000
commitea186fe2c073dfd56f834068ee928a9c875b0279 (patch)
tree8c3d8c12b04f95691f2140190a970199ad7c0a39
parentf25142c5edc579c7f7030c03c2673db238255bb2 (diff)
G: inner attributes
-rw-r--r--grammar.ron1
-rw-r--r--src/parser/event_parser/grammar/expressions.rs13
-rw-r--r--src/syntax_kinds.rs4
-rw-r--r--tests/data/parser/ok/0006_inner_attributes.txt207
4 files changed, 137 insertions, 88 deletions
diff --git a/grammar.ron b/grammar.ron
index 0d180e19c..8418ed2a5 100644
--- a/grammar.ron
+++ b/grammar.ron
@@ -69,5 +69,6 @@ Grammar(
69 "FN_ITEM", 69 "FN_ITEM",
70 "ATTR", 70 "ATTR",
71 "META_ITEM", 71 "META_ITEM",
72 "LITERAL",
72 ] 73 ]
73) \ No newline at end of file 74) \ No newline at end of file
diff --git a/src/parser/event_parser/grammar/expressions.rs b/src/parser/event_parser/grammar/expressions.rs
index 9b43bdf2a..a6a1b302b 100644
--- a/src/parser/event_parser/grammar/expressions.rs
+++ b/src/parser/event_parser/grammar/expressions.rs
@@ -1,5 +1,16 @@
1use super::*; 1use super::*;
2 2
3pub(super) fn literal(p: &mut Parser) -> bool { 3pub(super) fn literal(p: &mut Parser) -> bool {
4 p.eat(INT_NUMBER) || p.eat(FLOAT_NUMBER) 4 match p.current() {
5 TRUE_KW | FALSE_KW
6 | INT_NUMBER | FLOAT_NUMBER
7 | BYTE | CHAR
8 |STRING | RAW_STRING | BYTE_STRING | RAW_BYTE_STRING => {
9 node(p, LITERAL, |p| {
10 p.bump();
11 });
12 true
13 }
14 _ => false
15 }
5} \ No newline at end of file 16} \ No newline at end of file
diff --git a/src/syntax_kinds.rs b/src/syntax_kinds.rs
index 53ea0775a..b82a4f7f2 100644
--- a/src/syntax_kinds.rs
+++ b/src/syntax_kinds.rs
@@ -66,8 +66,9 @@ pub const STRUCT_FIELD: SyntaxKind = SyntaxKind(61);
66pub const FN_ITEM: SyntaxKind = SyntaxKind(62); 66pub const FN_ITEM: SyntaxKind = SyntaxKind(62);
67pub const ATTR: SyntaxKind = SyntaxKind(63); 67pub const ATTR: SyntaxKind = SyntaxKind(63);
68pub const META_ITEM: SyntaxKind = SyntaxKind(64); 68pub const META_ITEM: SyntaxKind = SyntaxKind(64);
69pub const LITERAL: SyntaxKind = SyntaxKind(65);
69 70
70static INFOS: [SyntaxInfo; 65] = [ 71static INFOS: [SyntaxInfo; 66] = [
71 SyntaxInfo { name: "USE_KW" }, 72 SyntaxInfo { name: "USE_KW" },
72 SyntaxInfo { name: "FN_KW" }, 73 SyntaxInfo { name: "FN_KW" },
73 SyntaxInfo { name: "STRUCT_KW" }, 74 SyntaxInfo { name: "STRUCT_KW" },
@@ -133,6 +134,7 @@ static INFOS: [SyntaxInfo; 65] = [
133 SyntaxInfo { name: "FN_ITEM" }, 134 SyntaxInfo { name: "FN_ITEM" },
134 SyntaxInfo { name: "ATTR" }, 135 SyntaxInfo { name: "ATTR" },
135 SyntaxInfo { name: "META_ITEM" }, 136 SyntaxInfo { name: "META_ITEM" },
137 SyntaxInfo { name: "LITERAL" },
136]; 138];
137 139
138pub(crate) fn syntax_info(kind: SyntaxKind) -> &'static SyntaxInfo { 140pub(crate) fn syntax_info(kind: SyntaxKind) -> &'static SyntaxInfo {
diff --git a/tests/data/parser/ok/0006_inner_attributes.txt b/tests/data/parser/ok/0006_inner_attributes.txt
index 5d27a015b..d826fb379 100644
--- a/tests/data/parser/ok/0006_inner_attributes.txt
+++ b/tests/data/parser/ok/0006_inner_attributes.txt
@@ -7,135 +7,170 @@ FILE@[0; 236)
7 IDENT@[3; 7) 7 IDENT@[3; 7)
8 R_BRACK@[7; 8) 8 R_BRACK@[7; 8)
9 WHITESPACE@[8; 9) 9 WHITESPACE@[8; 9)
10 ATTR@[9; 17) 10 ATTR@[9; 24)
11 POUND@[9; 10) 11 POUND@[9; 10)
12 EXCL@[10; 11) 12 EXCL@[10; 11)
13 L_BRACK@[11; 12) 13 L_BRACK@[11; 12)
14 META_ITEM@[12; 17) 14 META_ITEM@[12; 22)
15 IDENT@[12; 16) 15 IDENT@[12; 16)
16 L_PAREN@[16; 17) 16 L_PAREN@[16; 17)
17 err: `expected R_PAREN` 17 LITERAL@[17; 21)
18 err: `expected R_BRACK` 18 TRUE_KW@[17; 21)
19 ERROR@[17; 236) 19 R_PAREN@[21; 22)
20 err: `expected item`
21 TRUE_KW@[17; 21)
22 R_PAREN@[21; 22)
23 R_BRACK@[22; 23) 20 R_BRACK@[22; 23)
24 WHITESPACE@[23; 24) 21 WHITESPACE@[23; 24)
22 ATTR@[24; 40)
25 POUND@[24; 25) 23 POUND@[24; 25)
26 EXCL@[25; 26) 24 EXCL@[25; 26)
27 L_BRACK@[26; 27) 25 L_BRACK@[26; 27)
28 IDENT@[27; 31) 26 META_ITEM@[27; 38)
29 L_PAREN@[31; 32) 27 IDENT@[27; 31)
30 IDENT@[32; 37) 28 L_PAREN@[31; 32)
31 R_PAREN@[37; 38) 29 META_ITEM@[32; 37)
30 IDENT@[32; 37)
31 R_PAREN@[37; 38)
32 R_BRACK@[38; 39) 32 R_BRACK@[38; 39)
33 WHITESPACE@[39; 40) 33 WHITESPACE@[39; 40)
34 ATTR@[40; 117)
34 POUND@[40; 41) 35 POUND@[40; 41)
35 EXCL@[41; 42) 36 EXCL@[41; 42)
36 L_BRACK@[42; 43) 37 L_BRACK@[42; 43)
37 IDENT@[43; 47) 38 META_ITEM@[43; 115)
38 L_PAREN@[47; 48) 39 IDENT@[43; 47)
39 IDENT@[48; 53) 40 L_PAREN@[47; 48)
40 COMMA@[53; 54) 41 META_ITEM@[48; 53)
41 WHITESPACE@[54; 55) 42 IDENT@[48; 53)
42 INT_NUMBER@[55; 58) 43 COMMA@[53; 54)
43 COMMA@[58; 59) 44 LITERAL@[54; 58)
44 WHITESPACE@[59; 60) 45 WHITESPACE@[54; 55)
45 TRUE_KW@[60; 64) 46 INT_NUMBER@[55; 58)
46 COMMA@[64; 65) 47 COMMA@[58; 59)
47 WHITESPACE@[65; 66) 48 LITERAL@[59; 64)
48 STRING@[66; 72) 49 WHITESPACE@[59; 60)
49 COMMA@[72; 73) 50 TRUE_KW@[60; 64)
50 WHITESPACE@[73; 74) 51 COMMA@[64; 65)
51 IDENT@[74; 79) 52 LITERAL@[65; 72)
52 WHITESPACE@[79; 80) 53 WHITESPACE@[65; 66)
53 EQ@[80; 81) 54 STRING@[66; 72)
54 WHITESPACE@[81; 82) 55 COMMA@[72; 73)
55 INT_NUMBER@[82; 85) 56 META_ITEM@[73; 85)
56 COMMA@[85; 86) 57 WHITESPACE@[73; 74)
57 WHITESPACE@[86; 87) 58 IDENT@[74; 79)
58 IDENT@[87; 92) 59 WHITESPACE@[79; 80)
59 WHITESPACE@[92; 93) 60 EQ@[80; 81)
60 EQ@[93; 94) 61 LITERAL@[81; 85)
61 WHITESPACE@[94; 95) 62 WHITESPACE@[81; 82)
62 STRING@[95; 102) 63 INT_NUMBER@[82; 85)
63 COMMA@[102; 103) 64 COMMA@[85; 86)
64 WHITESPACE@[103; 104) 65 META_ITEM@[86; 102)
65 IDENT@[104; 109) 66 WHITESPACE@[86; 87)
66 L_PAREN@[109; 110) 67 IDENT@[87; 92)
67 INT_NUMBER@[110; 113) 68 WHITESPACE@[92; 93)
68 R_PAREN@[113; 114) 69 EQ@[93; 94)
69 R_PAREN@[114; 115) 70 LITERAL@[94; 102)
71 WHITESPACE@[94; 95)
72 STRING@[95; 102)
73 COMMA@[102; 103)
74 META_ITEM@[103; 114)
75 WHITESPACE@[103; 104)
76 IDENT@[104; 109)
77 L_PAREN@[109; 110)
78 LITERAL@[110; 113)
79 INT_NUMBER@[110; 113)
80 R_PAREN@[113; 114)
81 R_PAREN@[114; 115)
70 R_BRACK@[115; 116) 82 R_BRACK@[115; 116)
71 WHITESPACE@[116; 117) 83 WHITESPACE@[116; 117)
84 ATTR@[117; 131)
72 POUND@[117; 118) 85 POUND@[117; 118)
73 EXCL@[118; 119) 86 EXCL@[118; 119)
74 L_BRACK@[119; 120) 87 L_BRACK@[119; 120)
75 IDENT@[120; 124) 88 META_ITEM@[120; 129)
76 L_PAREN@[124; 125) 89 IDENT@[120; 124)
77 INT_NUMBER@[125; 128) 90 L_PAREN@[124; 125)
78 R_PAREN@[128; 129) 91 LITERAL@[125; 128)
92 INT_NUMBER@[125; 128)
93 R_PAREN@[128; 129)
79 R_BRACK@[129; 130) 94 R_BRACK@[129; 130)
80 WHITESPACE@[130; 131) 95 WHITESPACE@[130; 131)
96 ATTR@[131; 156)
81 POUND@[131; 132) 97 POUND@[131; 132)
82 EXCL@[132; 133) 98 EXCL@[132; 133)
83 L_BRACK@[133; 134) 99 L_BRACK@[133; 134)
84 IDENT@[134; 138) 100 META_ITEM@[134; 154)
85 L_PAREN@[138; 139) 101 IDENT@[134; 138)
86 IDENT@[139; 146) 102 L_PAREN@[138; 139)
87 WHITESPACE@[146; 147) 103 META_ITEM@[139; 153)
88 EQ@[147; 148) 104 IDENT@[139; 146)
89 WHITESPACE@[148; 149) 105 WHITESPACE@[146; 147)
90 TRUE_KW@[149; 153) 106 EQ@[147; 148)
91 R_PAREN@[153; 154) 107 LITERAL@[148; 153)
108 WHITESPACE@[148; 149)
109 TRUE_KW@[149; 153)
110 R_PAREN@[153; 154)
92 R_BRACK@[154; 155) 111 R_BRACK@[154; 155)
93 WHITESPACE@[155; 156) 112 WHITESPACE@[155; 156)
113 ATTR@[156; 174)
94 POUND@[156; 157) 114 POUND@[156; 157)
95 EXCL@[157; 158) 115 EXCL@[157; 158)
96 L_BRACK@[158; 159) 116 L_BRACK@[158; 159)
97 IDENT@[159; 166) 117 META_ITEM@[159; 172)
98 L_PAREN@[166; 167) 118 IDENT@[159; 166)
99 TRUE_KW@[167; 171) 119 L_PAREN@[166; 167)
100 R_PAREN@[171; 172) 120 LITERAL@[167; 171)
121 TRUE_KW@[167; 171)
122 R_PAREN@[171; 172)
101 R_BRACK@[172; 173) 123 R_BRACK@[172; 173)
102 WHITESPACE@[173; 174) 124 WHITESPACE@[173; 174)
125 ATTR@[174; 192)
103 POUND@[174; 175) 126 POUND@[174; 175)
104 EXCL@[175; 176) 127 EXCL@[175; 176)
105 L_BRACK@[176; 177) 128 L_BRACK@[176; 177)
106 IDENT@[177; 181) 129 META_ITEM@[177; 190)
107 L_PAREN@[181; 182) 130 IDENT@[177; 181)
108 STRING@[182; 189) 131 L_PAREN@[181; 182)
109 R_PAREN@[189; 190) 132 LITERAL@[182; 189)
133 STRING@[182; 189)
134 R_PAREN@[189; 190)
110 R_BRACK@[190; 191) 135 R_BRACK@[190; 191)
111 WHITESPACE@[191; 192) 136 WHITESPACE@[191; 192)
137 ATTR@[192; 215)
112 POUND@[192; 193) 138 POUND@[192; 193)
113 EXCL@[193; 194) 139 EXCL@[193; 194)
114 L_BRACK@[194; 195) 140 L_BRACK@[194; 195)
115 IDENT@[195; 199) 141 META_ITEM@[195; 213)
116 L_PAREN@[199; 200) 142 IDENT@[195; 199)
117 IDENT@[200; 201) 143 L_PAREN@[199; 200)
118 COMMA@[201; 202) 144 META_ITEM@[200; 201)
119 WHITESPACE@[202; 203) 145 IDENT@[200; 201)
120 IDENT@[203; 208) 146 COMMA@[201; 202)
121 WHITESPACE@[208; 209) 147 META_ITEM@[202; 212)
122 EQ@[209; 210) 148 WHITESPACE@[202; 203)
123 WHITESPACE@[210; 211) 149 IDENT@[203; 208)
124 INT_NUMBER@[211; 212) 150 WHITESPACE@[208; 209)
125 R_PAREN@[212; 213) 151 EQ@[209; 210)
152 LITERAL@[210; 212)
153 WHITESPACE@[210; 211)
154 INT_NUMBER@[211; 212)
155 R_PAREN@[212; 213)
126 R_BRACK@[213; 214) 156 R_BRACK@[213; 214)
127 WHITESPACE@[214; 215) 157 WHITESPACE@[214; 215)
158 ATTR@[215; 236)
128 POUND@[215; 216) 159 POUND@[215; 216)
129 EXCL@[216; 217) 160 EXCL@[216; 217)
130 L_BRACK@[217; 218) 161 L_BRACK@[217; 218)
131 IDENT@[218; 222) 162 META_ITEM@[218; 235)
132 L_PAREN@[222; 223) 163 IDENT@[218; 222)
133 IDENT@[223; 224) 164 L_PAREN@[222; 223)
134 COMMA@[224; 225) 165 META_ITEM@[223; 224)
135 WHITESPACE@[225; 226) 166 IDENT@[223; 224)
136 IDENT@[226; 231) 167 COMMA@[224; 225)
137 L_PAREN@[231; 232) 168 META_ITEM@[225; 234)
138 INT_NUMBER@[232; 233) 169 WHITESPACE@[225; 226)
139 R_PAREN@[233; 234) 170 IDENT@[226; 231)
140 R_PAREN@[234; 235) 171 L_PAREN@[231; 232)
172 LITERAL@[232; 233)
173 INT_NUMBER@[232; 233)
174 R_PAREN@[233; 234)
175 R_PAREN@[234; 235)
141 R_BRACK@[235; 236) 176 R_BRACK@[235; 236)