Skip to content

Commit cffc259

Browse files
unclenachoduhstasm
authored andcommitted
Restrict variant keys to Identifiers and NumberLiterals (#268)
1 parent 654d2ae commit cffc259

File tree

12 files changed

+21
-70
lines changed

12 files changed

+21
-70
lines changed

fluent-syntax/src/ast.js

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -208,13 +208,6 @@ export class Identifier extends SyntaxNode {
208208
}
209209
}
210210

211-
export class VariantName extends Identifier {
212-
constructor(name) {
213-
super(name);
214-
this.type = "VariantName";
215-
}
216-
}
217-
218211
export class BaseComment extends Entry {
219212
constructor(content) {
220213
super();

fluent-syntax/src/ftlstream.js

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -309,18 +309,6 @@ export class FTLParserStream extends ParserStream {
309309
return this.takeChar(closure);
310310
}
311311

312-
takeVariantNameChar() {
313-
const closure = ch => {
314-
const cc = ch.charCodeAt(0);
315-
return ((cc >= 97 && cc <= 122) || // a-z
316-
(cc >= 65 && cc <= 90) || // A-Z
317-
(cc >= 48 && cc <= 57) || // 0-9
318-
cc === 95 || cc === 45 || cc === 32); // _-<space>
319-
};
320-
321-
return this.takeChar(closure);
322-
}
323-
324312
takeDigit() {
325313
const closure = ch => {
326314
const cc = ch.charCodeAt(0);

fluent-syntax/src/parser.js

Lines changed: 2 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ export default class FluentParser {
3939
// Poor man's decorators.
4040
const methodNames = [
4141
"getComment", "getMessage", "getTerm", "getAttribute", "getIdentifier",
42-
"getTermIdentifier", "getVariant", "getVariantName", "getNumber",
42+
"getTermIdentifier", "getVariant", "getNumber",
4343
"getValue", "getPattern", "getVariantList", "getTextElement",
4444
"getPlaceable", "getExpression", "getSelectorExpression", "getCallArg",
4545
"getString", "getLiteral"
@@ -323,7 +323,7 @@ export default class FluentParser {
323323
return this.getNumber(ps);
324324
}
325325

326-
return this.getVariantName(ps);
326+
return this.getIdentifier(ps);
327327
}
328328

329329
getVariant(ps, hasDefault) {
@@ -379,21 +379,6 @@ export default class FluentParser {
379379
return variants;
380380
}
381381

382-
getVariantName(ps) {
383-
let name = ps.takeIDStart();
384-
385-
while (true) {
386-
const ch = ps.takeVariantNameChar();
387-
if (ch) {
388-
name += ch;
389-
} else {
390-
break;
391-
}
392-
}
393-
394-
return new AST.VariantName(name.replace(trailingWSRe, ""));
395-
}
396-
397382
getDigits(ps) {
398383
let num = "";
399384

fluent-syntax/src/serializer.js

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -304,16 +304,10 @@ function serializeIdentifier(identifier) {
304304
return identifier.name;
305305
}
306306

307-
308-
function serializeVariantName(VariantName) {
309-
return VariantName.name;
310-
}
311-
312-
313307
function serializeVariantKey(key) {
314308
switch (key.type) {
315-
case "VariantName":
316-
return serializeVariantName(key);
309+
case "Identifier":
310+
return serializeIdentifier(key);
317311
case "NumberLiteral":
318312
return serializeNumberLiteral(key);
319313
default:
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# ~ERROR E0003, pos 23, args "]"
12
-term = {
23
*[New York] Nowy Jork
34
}

fluent-syntax/test/fixtures_reference/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
}

fluent-syntax/test/fixtures_reference/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": {

fluent-syntax/test/fixtures_structure/leading_dots.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -745,7 +745,7 @@
745745
{
746746
"type": "Variant",
747747
"key": {
748-
"type": "VariantName",
748+
"type": "Identifier",
749749
"name": "one",
750750
"span": {
751751
"type": "Span",
@@ -782,7 +782,7 @@
782782
{
783783
"type": "Variant",
784784
"key": {
785-
"type": "VariantName",
785+
"type": "Identifier",
786786
"name": "other",
787787
"span": {
788788
"type": "Span",

fluent-syntax/test/fixtures_structure/sparse-messages.json

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -248,7 +248,7 @@
248248
{
249249
"type": "Variant",
250250
"key": {
251-
"type": "VariantName",
251+
"type": "Identifier",
252252
"name": "one",
253253
"span": {
254254
"type": "Span",
@@ -285,7 +285,7 @@
285285
{
286286
"type": "Variant",
287287
"key": {
288-
"type": "VariantName",
288+
"type": "Identifier",
289289
"name": "two",
290290
"span": {
291291
"type": "Span",
@@ -364,7 +364,7 @@
364364
{
365365
"type": "Variant",
366366
"key": {
367-
"type": "VariantName",
367+
"type": "Identifier",
368368
"name": "one",
369369
"span": {
370370
"type": "Span",
@@ -430,7 +430,7 @@
430430
{
431431
"type": "Variant",
432432
"key": {
433-
"type": "VariantName",
433+
"type": "Identifier",
434434
"name": "one",
435435
"span": {
436436
"type": "Span",

fluent-syntax/test/fixtures_structure/term.json

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
{
1919
"type": "Variant",
2020
"key": {
21-
"type": "VariantName",
21+
"type": "Identifier",
2222
"name": "nominative",
2323
"span": {
2424
"type": "Span",
@@ -55,7 +55,7 @@
5555
{
5656
"type": "Variant",
5757
"key": {
58-
"type": "VariantName",
58+
"type": "Identifier",
5959
"name": "accusative",
6060
"span": {
6161
"type": "Span",
@@ -186,7 +186,7 @@
186186
}
187187
},
188188
"key": {
189-
"type": "VariantName",
189+
"type": "Identifier",
190190
"name": "accusative",
191191
"span": {
192192
"type": "Span",
@@ -286,7 +286,7 @@
286286
{
287287
"type": "Variant",
288288
"key": {
289-
"type": "VariantName",
289+
"type": "Identifier",
290290
"name": "masculine",
291291
"span": {
292292
"type": "Span",
@@ -348,7 +348,7 @@
348348
{
349349
"type": "Variant",
350350
"key": {
351-
"type": "VariantName",
351+
"type": "Identifier",
352352
"name": "feminine",
353353
"span": {
354354
"type": "Span",
@@ -410,7 +410,7 @@
410410
{
411411
"type": "Variant",
412412
"key": {
413-
"type": "VariantName",
413+
"type": "Identifier",
414414
"name": "other",
415415
"span": {
416416
"type": "Span",

fluent-syntax/test/fixtures_structure/variant_with_empty_pattern.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232
{
3333
"type": "Variant",
3434
"key": {
35-
"type": "VariantName",
35+
"type": "Identifier",
3636
"name": "one",
3737
"span": {
3838
"type": "Span",

fluent-syntax/test/serializer_test.js

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -277,16 +277,6 @@ suite("Serialize resource", function() {
277277
assert.equal(pretty(input), output);
278278
});
279279

280-
test("variant key words", function() {
281-
const input = ftl`
282-
foo =
283-
{ $sel ->
284-
*[a b c] A B C
285-
}
286-
`;
287-
assert.equal(pretty(input), input);
288-
});
289-
290280
test("variant key number", function() {
291281
const input = ftl`
292282
foo =

0 commit comments

Comments
 (0)