diff --git a/lib/javascript/JavascriptParser.js b/lib/javascript/JavascriptParser.js index 3800822ee8e..0f3b80010a4 100644 --- a/lib/javascript/JavascriptParser.js +++ b/lib/javascript/JavascriptParser.js @@ -545,11 +545,13 @@ class JavascriptParser extends Parser { const rightSuffix = getSuffix(right.parts); const lenPrefix = Math.min(leftPrefix.length, rightPrefix.length); const lenSuffix = Math.min(leftSuffix.length, rightSuffix.length); - if ( - leftPrefix.slice(0, lenPrefix) !== - rightPrefix.slice(0, lenPrefix) || - leftSuffix.slice(-lenSuffix) !== rightSuffix.slice(-lenSuffix) - ) { + const prefixMismatch = + lenPrefix > 0 && + leftPrefix.slice(0, lenPrefix) !== rightPrefix.slice(0, lenPrefix); + const suffixMismatch = + lenSuffix > 0 && + leftSuffix.slice(-lenSuffix) !== rightSuffix.slice(-lenSuffix); + if (prefixMismatch || suffixMismatch) { return res .setBoolean(!eql) .setSideEffects( diff --git a/test/JavascriptParser.unittest.js b/test/JavascriptParser.unittest.js index 0e7ebd94b3a..cc916821f7d 100644 --- a/test/JavascriptParser.unittest.js +++ b/test/JavascriptParser.unittest.js @@ -541,6 +541,14 @@ describe("JavascriptParser", () => { "`start${'str'}mid${obj2}end`": // eslint-disable-next-line no-template-curly-in-string "template=[start${'str'}mid string=startstrmid],[end string=end]", + // eslint-disable-next-line no-template-curly-in-string + "`a${x}` === `b${x}`": "bool=false", + // eslint-disable-next-line no-template-curly-in-string + "`${x}a` === `${x}b`": "bool=false", + // eslint-disable-next-line no-template-curly-in-string + "`${a}${b}` === `a${b}`": "", + // eslint-disable-next-line no-template-curly-in-string + "`${a}${b}` === `${a}b`": "", "'abc'.slice(1)": "string=bc", "'abcdef'.slice(2, 5)": "string=cde", "'abcdef'.substring(2, 3)": "string=c",