Skip to content

Commit 1b432e9

Browse files
fix(mf2/fluent): Drop bare NUMBER() wrapper from selectors
1 parent 3b1fc06 commit 1b432e9

File tree

2 files changed

+14
-29
lines changed

2 files changed

+14
-29
lines changed

mf2/fluent/src/fluent.test.ts

Lines changed: 4 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -395,20 +395,6 @@ for (const [title, { locale = 'en', src, tests }] of Object.entries(
395395
const template = Fluent.parse(src, { withSpans: false });
396396
const res = resourceToFluent(data, { template });
397397

398-
class FixResult extends Fluent.Transformer {
399-
// When converting to MF2, number wrappers are added
400-
visitSelectExpression(node: Fluent.SelectExpression) {
401-
if (
402-
node.selector.type === 'FunctionReference' &&
403-
node.selector.id.name === 'NUMBER'
404-
) {
405-
node.selector = node.selector.arguments.positional[0];
406-
}
407-
return this.genericVisit(node);
408-
}
409-
}
410-
new FixResult().visit(res);
411-
412398
class FixExpected extends Fluent.Transformer {
413399
// Consider { -foo() } as { -foo }
414400
visitCallArguments(node: Fluent.CallArguments) {
@@ -746,12 +732,12 @@ describe('fluentToResourceData', () => {
746732
const res = resourceToFluent(data);
747733
expect(Fluent.serialize(res, {})).toBe(source`
748734
single =
749-
{ NUMBER($num) ->
735+
{ $num ->
750736
[0] One Zero selector.
751737
*[other] One Other selector.
752738
}
753739
multi =
754-
{ NUMBER($num) ->
740+
{ $num ->
755741
[0]
756742
{ $gender ->
757743
[feminine] Combine Zero multiple F selectors.
@@ -801,18 +787,8 @@ describe('messagetoFluent', () => {
801787
expression: {
802788
type: 'SelectExpression',
803789
selector: {
804-
type: 'FunctionReference',
805-
id: { type: 'Identifier', name: 'NUMBER' },
806-
arguments: {
807-
type: 'CallArguments',
808-
positional: [
809-
{
810-
type: 'VariableReference',
811-
id: { type: 'Identifier', name: 'num' }
812-
}
813-
],
814-
named: []
815-
}
790+
type: 'VariableReference',
791+
id: { type: 'Identifier', name: 'num' }
816792
},
817793
variants: [
818794
{

mf2/fluent/src/message-to-fluent.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,16 @@ export function messageToFluent(
5151
}));
5252
const k0 = variants[0].keys;
5353
while (k0.length > 0) {
54-
const sel = variableRefToFluent(ctx, msg.selectors[k0.length - 1]);
54+
let sel = variableRefToFluent(ctx, msg.selectors[k0.length - 1]);
55+
if (
56+
sel instanceof Fluent.FunctionReference &&
57+
sel.id.name === 'NUMBER' &&
58+
sel.arguments.positional.length === 1 &&
59+
sel.arguments.positional[0] instanceof Fluent.VariableReference &&
60+
sel.arguments.named.length === 0
61+
) {
62+
sel = sel.arguments.positional[0];
63+
}
5564
let baseKeys: (MF.Literal | MF.CatchallKey)[] = [];
5665
let exp: Fluent.SelectExpression | undefined;
5766
for (let i = 0; i < variants.length; ++i) {

0 commit comments

Comments
 (0)