Skip to content

Commit decf4cd

Browse files
fix(extractor): sort placeholders to keep them stable between runs (#2307)
1 parent e4f3517 commit decf4cd

File tree

6 files changed

+51
-2
lines changed

6 files changed

+51
-2
lines changed

packages/cli/src/api/catalog.test.ts

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,39 @@ describe("Catalog", () => {
193193
expect(messages).toMatchSnapshot()
194194
})
195195

196+
it("should sort placeholders to keep them stable between runs", async () => {
197+
const runA = await extractFromFiles(
198+
[
199+
fixture("collect-placeholders-sorting/a.ts"),
200+
fixture("collect-placeholders-sorting/b.ts"),
201+
],
202+
mockConfig()
203+
)
204+
205+
const runB = await extractFromFiles(
206+
[
207+
fixture("collect-placeholders-sorting/b.ts"),
208+
fixture("collect-placeholders-sorting/a.ts"),
209+
],
210+
mockConfig()
211+
)
212+
213+
expect(Object.values(runA)[0].placeholders[0]).toStrictEqual(
214+
Object.values(runB)[0].placeholders[0]
215+
)
216+
217+
expect(Object.values(runA)[0].placeholders).toMatchInlineSnapshot(`
218+
{
219+
0: [
220+
getUser(),
221+
getWorld(),
222+
],
223+
}
224+
`)
225+
226+
// expect(messages).toMatchSnapshot()
227+
})
228+
196229
it("should support experimental typescript decorators under a flag", async () => {
197230
const messages = await extractFromFiles(
198231
[fixture("collect-typescript-jsx/tsx-experimental-decorators.tsx")],

packages/cli/src/api/catalog/extractFromFiles.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ function mergePlaceholders(
2323
if (!res[key].includes(value)) {
2424
res[key].push(value)
2525
}
26+
27+
res[key].sort()
2628
})
2729

2830
return res
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { t } from "@lingui/core/macro";
2+
3+
function getUser() {
4+
return 'John'
5+
}
6+
7+
t`Hello ${getUser()}`
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { t } from "@lingui/core/macro"
2+
3+
function getWorld() {
4+
return "John"
5+
}
6+
7+
t`Hello ${getWorld()}`

packages/cli/test/extract-po-format/expected/en.po

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ msgstr ""
1313
msgid "addToCart"
1414
msgstr "Add To Cart"
1515

16-
#. placeholder {0}: user.name
1716
#. placeholder {0}: author.name
1817
#. placeholder {0}: moderator.name
18+
#. placeholder {0}: user.name
1919
#: fixtures/placeholders.ts:3
2020
#: fixtures/placeholders.ts:4
2121
#: fixtures/placeholders.ts:5

packages/cli/test/extract-po-format/expected/pl.po

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ msgstr ""
1313
msgid "addToCart"
1414
msgstr ""
1515

16-
#. placeholder {0}: user.name
1716
#. placeholder {0}: author.name
1817
#. placeholder {0}: moderator.name
18+
#. placeholder {0}: user.name
1919
#: fixtures/placeholders.ts:3
2020
#: fixtures/placeholders.ts:4
2121
#: fixtures/placeholders.ts:5

0 commit comments

Comments
 (0)