From ae2241cd249b1b1fa708d9d18eb12b54e959fc06 Mon Sep 17 00:00:00 2001 From: Mattias Lundberg Date: Wed, 17 Nov 2021 12:39:56 +0100 Subject: [PATCH] Fix trans parsing of spaces Adding a `{" "}` is a common pattern when a string is broken into multiple lines (for example by prettier). But having that extra string in the component caused the lexer to return the wrong identifier for following tags leading to i18next not displaying the string correctly. --- src/lexers/jsx-lexer.js | 16 +++++++++++++++- test/lexers/jsx-lexer.test.js | 7 +++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/lexers/jsx-lexer.js b/src/lexers/jsx-lexer.js index d9ace4e5..964de504 100644 --- a/src/lexers/jsx-lexer.js +++ b/src/lexers/jsx-lexer.js @@ -134,6 +134,20 @@ export default class JsxLexer extends JavascriptLexer { nodeToString(node, sourceText) { const children = this.parseChildren.call(this, node.children, sourceText) + const flattenText = (children) => + children + .reduce((res, c) => { + const last = res[0] + if (last?.type == 'text' && c.type == 'text') { + const newContent = last.content + c.content + last.content = newContent + + return res + } + return [c].concat(res) + }, []) + .reverse() + const elemsToString = (children) => children .map((child, index) => { @@ -157,7 +171,7 @@ export default class JsxLexer extends JavascriptLexer { }) .join('') - return elemsToString(children) + return elemsToString(flattenText(children)) } parseChildren(children = [], sourceText) { diff --git a/test/lexers/jsx-lexer.test.js b/test/lexers/jsx-lexer.test.js index 9a333139..78fc71fb 100644 --- a/test/lexers/jsx-lexer.test.js +++ b/test/lexers/jsx-lexer.test.js @@ -350,6 +350,13 @@ describe('JsxLexer', () => { ) done() }) + + it('handles tags after spaces correctly', (done) => { + const Lexer = new JsxLexer({ transSupportBasicHtmlNodes: true }) + const content = 'a{" "}b' + assert.equal(Lexer.extract(content)[0].defaultValue, 'a <1>b') + done() + }) }) }) })