Skip to content

Commit 715fc4d

Browse files
authored
Restrict variant keys to Identifiers and NumberLiterals (#157)
1 parent 3c7cd30 commit 715fc4d

14 files changed

+238
-77
lines changed

spec/CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55

66
- Remove support for CR as a line ending. (#154)
77

8+
- Restrict `VariantKey` to `NumberLiteral` and `Identifier`. (#127)
9+
10+
The `VariantName` AST node has been removed
11+
812
## 0.6.0 (July 24, 2018)
913

1014
- Created the reference parser for Fluent Syntax.

spec/fluent.ebnf

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -77,18 +77,14 @@ SelectExpression ::= InlineExpression blank? "->" blank_inline? variant_list
7777
variant_list ::= Variant* DefaultVariant Variant* line_end
7878
Variant ::= line_end blank? VariantKey blank_inline? Value
7979
DefaultVariant ::= line_end blank? "*" VariantKey blank_inline? Value
80-
VariantKey ::= "[" blank? (NumberLiteral | VariantName) blank? "]"
81-
VariantName ::= word (blank word)*
80+
VariantKey ::= "[" blank? (NumberLiteral | Identifier) blank? "]"
8281

8382
/* Identifiers */
8483
Identifier ::= identifier
8584
TermIdentifier ::= "-" identifier
8685
VariableIdentifier ::= "$" identifier
8786
Function ::= [A-Z] [A-Z_?-]*
88-
89-
/* Tokens */
9087
identifier ::= [a-zA-Z] [a-zA-Z0-9_-]*
91-
word ::= (regular_char - backslash - "}" - "{" - "]" - "[" - "=")+
9288

9389
/* Characters */
9490
backslash ::= "\\"

syntax/ast.mjs

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -194,13 +194,6 @@ export class Identifier extends SyntaxNode {
194194
}
195195
}
196196

197-
export class VariantName extends Identifier {
198-
constructor(name) {
199-
super(name);
200-
this.type = "VariantName";
201-
}
202-
}
203-
204197
export class BaseComment extends Entry {
205198
constructor(content) {
206199
super();

syntax/grammar.mjs

Lines changed: 1 addition & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -335,22 +335,11 @@ let VariantKey = defer(() =>
335335
maybe(blank),
336336
either(
337337
NumberLiteral,
338-
VariantName),
338+
Identifier),
339339
maybe(blank),
340340
string("]"))
341341
.map(element_at(2)));
342342

343-
let VariantName = defer(() =>
344-
sequence(
345-
word,
346-
repeat(
347-
sequence(
348-
blank,
349-
word)))
350-
.map(flatten(2))
351-
.map(join)
352-
.chain(into(FTL.VariantName)));
353-
354343
/* ----------- */
355344
/* Identifiers */
356345

@@ -380,8 +369,6 @@ let Function =
380369
.map(join)
381370
.chain(into(FTL.Function));
382371

383-
/* ------ */
384-
/* Tokens */
385372
let identifier =
386373
sequence(
387374
charset("a-zA-Z"),
@@ -390,18 +377,6 @@ let identifier =
390377
.map(flatten(1))
391378
.map(join);
392379

393-
let word = defer(() =>
394-
repeat1(
395-
and(
396-
not(string("=")),
397-
not(string("[")),
398-
not(string("]")),
399-
not(string("{")),
400-
not(string("}")),
401-
not(backslash),
402-
regular_char))
403-
.map(join));
404-
405380
/* ---------- */
406381
/* Characters */
407382

test/fixtures/leading_dots.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -350,7 +350,7 @@
350350
{
351351
"type": "Variant",
352352
"key": {
353-
"type": "VariantName",
353+
"type": "Identifier",
354354
"name": "one"
355355
},
356356
"value": {
@@ -367,7 +367,7 @@
367367
{
368368
"type": "Variant",
369369
"key": {
370-
"type": "VariantName",
370+
"type": "Identifier",
371371
"name": "other"
372372
},
373373
"value": {

test/fixtures/member_expressions.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
}
2323
},
2424
"key": {
25-
"type": "VariantName",
25+
"type": "Identifier",
2626
"name": "case"
2727
}
2828
}

test/fixtures/select_expressions.ftl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ new-messages =
66
77
valid-selector =
88
{ -term.case ->
9-
*[ many words ] value
9+
*[key] value
1010
}
1111
1212
# ERROR

test/fixtures/select_expressions.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
{
4545
"type": "Variant",
4646
"key": {
47-
"type": "VariantName",
47+
"type": "Identifier",
4848
"name": "other"
4949
},
5050
"value": {
@@ -104,8 +104,8 @@
104104
{
105105
"type": "Variant",
106106
"key": {
107-
"type": "VariantName",
108-
"name": "many words"
107+
"type": "Identifier",
108+
"name": "key"
109109
},
110110
"value": {
111111
"type": "Pattern",
@@ -156,7 +156,7 @@
156156
{
157157
"type": "Variant",
158158
"key": {
159-
"type": "VariantName",
159+
"type": "Identifier",
160160
"name": "one"
161161
},
162162
"value": {
@@ -202,7 +202,7 @@
202202
{
203203
"type": "Variant",
204204
"key": {
205-
"type": "VariantName",
205+
"type": "Identifier",
206206
"name": "one"
207207
},
208208
"value": {
@@ -220,7 +220,7 @@
220220
{
221221
"type": "Variant",
222222
"key": {
223-
"type": "VariantName",
223+
"type": "Identifier",
224224
"name": "two"
225225
},
226226
"value": {

test/fixtures/select_indent.json

Lines changed: 17 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
{
2626
"type": "Variant",
2727
"key": {
28-
"type": "VariantName",
28+
"type": "Identifier",
2929
"name": "key"
3030
},
3131
"value": {
@@ -71,7 +71,7 @@
7171
{
7272
"type": "Variant",
7373
"key": {
74-
"type": "VariantName",
74+
"type": "Identifier",
7575
"name": "key"
7676
},
7777
"value": {
@@ -117,7 +117,7 @@
117117
{
118118
"type": "Variant",
119119
"key": {
120-
"type": "VariantName",
120+
"type": "Identifier",
121121
"name": "key"
122122
},
123123
"value": {
@@ -163,7 +163,7 @@
163163
{
164164
"type": "Variant",
165165
"key": {
166-
"type": "VariantName",
166+
"type": "Identifier",
167167
"name": "key"
168168
},
169169
"value": {
@@ -209,7 +209,7 @@
209209
{
210210
"type": "Variant",
211211
"key": {
212-
"type": "VariantName",
212+
"type": "Identifier",
213213
"name": "key"
214214
},
215215
"value": {
@@ -255,7 +255,7 @@
255255
{
256256
"type": "Variant",
257257
"key": {
258-
"type": "VariantName",
258+
"type": "Identifier",
259259
"name": "key"
260260
},
261261
"value": {
@@ -301,7 +301,7 @@
301301
{
302302
"type": "Variant",
303303
"key": {
304-
"type": "VariantName",
304+
"type": "Identifier",
305305
"name": "key"
306306
},
307307
"value": {
@@ -347,7 +347,7 @@
347347
{
348348
"type": "Variant",
349349
"key": {
350-
"type": "VariantName",
350+
"type": "Identifier",
351351
"name": "key"
352352
},
353353
"value": {
@@ -393,7 +393,7 @@
393393
{
394394
"type": "Variant",
395395
"key": {
396-
"type": "VariantName",
396+
"type": "Identifier",
397397
"name": "key"
398398
},
399399
"value": {
@@ -439,7 +439,7 @@
439439
{
440440
"type": "Variant",
441441
"key": {
442-
"type": "VariantName",
442+
"type": "Identifier",
443443
"name": "key"
444444
},
445445
"value": {
@@ -456,7 +456,7 @@
456456
{
457457
"type": "Variant",
458458
"key": {
459-
"type": "VariantName",
459+
"type": "Identifier",
460460
"name": "other"
461461
},
462462
"value": {
@@ -502,7 +502,7 @@
502502
{
503503
"type": "Variant",
504504
"key": {
505-
"type": "VariantName",
505+
"type": "Identifier",
506506
"name": "key"
507507
},
508508
"value": {
@@ -519,7 +519,7 @@
519519
{
520520
"type": "Variant",
521521
"key": {
522-
"type": "VariantName",
522+
"type": "Identifier",
523523
"name": "other"
524524
},
525525
"value": {
@@ -574,7 +574,7 @@
574574
{
575575
"type": "Variant",
576576
"key": {
577-
"type": "VariantName",
577+
"type": "Identifier",
578578
"name": "key"
579579
},
580580
"value": {
@@ -591,7 +591,7 @@
591591
{
592592
"type": "Variant",
593593
"key": {
594-
"type": "VariantName",
594+
"type": "Identifier",
595595
"name": "other"
596596
},
597597
"value": {
@@ -637,7 +637,7 @@
637637
{
638638
"type": "Variant",
639639
"key": {
640-
"type": "VariantName",
640+
"type": "Identifier",
641641
"name": "key"
642642
},
643643
"value": {
@@ -654,7 +654,7 @@
654654
{
655655
"type": "Variant",
656656
"key": {
657-
"type": "VariantName",
657+
"type": "Identifier",
658658
"name": "other"
659659
},
660660
"value": {

test/fixtures/sparse_entries.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@
120120
{
121121
"type": "Variant",
122122
"key": {
123-
"type": "VariantName",
123+
"type": "Identifier",
124124
"name": "one"
125125
},
126126
"value": {
@@ -137,7 +137,7 @@
137137
{
138138
"type": "Variant",
139139
"key": {
140-
"type": "VariantName",
140+
"type": "Identifier",
141141
"name": "two"
142142
},
143143
"value": {

0 commit comments

Comments
 (0)