Skip to content

Commit 024a7e6

Browse files
authored
fix: parse template strings in t and defineMessage macros (#862)
1 parent 6113e25 commit 024a7e6

3 files changed

Lines changed: 29 additions & 5 deletions

File tree

packages/macro/src/macroJs.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,12 @@ export default class MacroJs {
193193

194194
// if there's `message` property, replace macros with formatted message
195195
const node = descriptor.properties[messageIndex]
196-
const tokens = this.tokenizeNode(node.value, true)
196+
197+
// Inside message descriptor the `t` macro in `message` prop is optional.
198+
// Template strings are always processed as if they were wrapped by `t`.
199+
const tokens = this.types.isTemplateLiteral(node.value)
200+
? this.tokenizeTemplateLiteral(node.value)
201+
: this.tokenizeNode(node.value, true)
197202

198203
let messageNode = node.value
199204
if (tokens != null) {
@@ -351,7 +356,6 @@ export default class MacroJs {
351356
}
352357
}
353358

354-
355359
/**
356360
* Custom matchers
357361
*/

packages/macro/test/js-defineMessage.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,19 +36,22 @@ export default [
3636
`,
3737
},
3838
{
39-
name: "should left string message intact - template literal",
39+
name: "should transform template literals",
4040
input: `
4141
import { defineMessage } from '@lingui/macro';
4242
const message = defineMessage({
43-
message: \`Message\`
43+
message: \`Message \${name}\`
4444
})
4545
`,
4646
expected: `
4747
import { i18n } from "@lingui/core";
4848
const message =
4949
/*i18n*/
5050
{
51-
id: \`Message\`
51+
id: "Message {name}",
52+
values: {
53+
name: name
54+
}
5255
};
5356
`,
5457
},

packages/macro/test/js-t.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,23 @@ export default [
8282
i18n._("Multiline\\nstring")
8383
`,
8484
},
85+
{
86+
name: "Support template strings in t macro message",
87+
input: `
88+
import { t } from '@lingui/macro'
89+
const msg = t({ message: \`Hello \${name}\` })
90+
`,
91+
expected: `import { i18n } from "@lingui/core";
92+
const msg =
93+
i18n._(/*i18n*/
94+
{
95+
id: "Hello {name}",
96+
values: {
97+
name: name,
98+
},
99+
});
100+
`,
101+
},
85102
{
86103
name: "Support id and comment in t macro as callExpression",
87104
input: `

0 commit comments

Comments
 (0)