From 5bbfc11e1167ad52d1015b1e07a0e01191e61162 Mon Sep 17 00:00:00 2001 From: yeonjuan Date: Mon, 22 Jan 2024 00:46:29 +0900 Subject: [PATCH] fix(eslint-plugin): [no-useless-template-literals] incorrect bigint autofix result --- .../src/rules/no-useless-template-literals.ts | 13 +++------- .../no-useless-template-literals.test.ts | 25 ++++++++++++++++++- 2 files changed, 28 insertions(+), 10 deletions(-) diff --git a/packages/eslint-plugin/src/rules/no-useless-template-literals.ts b/packages/eslint-plugin/src/rules/no-useless-template-literals.ts index d5a8a602b6b4..394947ff9a32 100644 --- a/packages/eslint-plugin/src/rules/no-useless-template-literals.ts +++ b/packages/eslint-plugin/src/rules/no-useless-template-literals.ts @@ -6,6 +6,7 @@ import { createRule, getConstrainedTypeAtLocation, getParserServices, + getStaticStringValue, isTypeFlagSet, isUndefinedIdentifier, } from '../util'; @@ -118,16 +119,10 @@ export default createRule<[], MessageId>({ ]), ]; - // Remove quotes for string literals (i.e. `'a'` will become `a`). - const isStringLiteral = - isUnderlyingTypeString(expression) && - expression.type === AST_NODE_TYPES.Literal; + const stringValue = getStaticStringValue(expression); - if (isStringLiteral) { - const escapedValue = expression.value.replace( - /([`$\\])/g, - '\\$1', - ); + if (stringValue != null) { + const escapedValue = stringValue.replace(/([`$\\])/g, '\\$1'); fixes.push(fixer.replaceText(expression, escapedValue)); } diff --git a/packages/eslint-plugin/tests/rules/no-useless-template-literals.test.ts b/packages/eslint-plugin/tests/rules/no-useless-template-literals.test.ts index 674b4ccefe77..0bbd79c15654 100644 --- a/packages/eslint-plugin/tests/rules/no-useless-template-literals.test.ts +++ b/packages/eslint-plugin/tests/rules/no-useless-template-literals.test.ts @@ -17,7 +17,6 @@ ruleTester.run('no-useless-template-literals', rule, { valid: [ "const string = 'a';", 'const string = `a`;', - ` declare const string: 'a'; \`\${string}b\`; @@ -147,6 +146,30 @@ ruleTester.run('no-useless-template-literals', rule, { }, ], }, + { + code: '`${1n}`;', + output: '`1`;', + errors: [ + { + messageId: 'noUselessTemplateLiteral', + line: 1, + column: 4, + endColumn: 6, + }, + ], + }, + { + code: '`${/a/}`;', + output: '`/a/`;', + errors: [ + { + messageId: 'noUselessTemplateLiteral', + line: 1, + column: 4, + endColumn: 7, + }, + ], + }, { code: noFormat`\`\${ 1 }\`;`,