From 3158dad506214df568f28ee313eb8c9969cf2594 Mon Sep 17 00:00:00 2001 From: StyleShit Date: Tue, 23 Jan 2024 20:53:38 +0200 Subject: [PATCH 1/2] fix(eslint-plugin): [no-useless-template-literals] report Infinity & NaN Closes #8294 --- .../src/rules/no-useless-template-literals.ts | 28 +++++++++-- .../no-useless-template-literals.test.ts | 46 +++++++++++++++++++ 2 files changed, 70 insertions(+), 4 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 394947ff9a32..e80216fd5cbf 100644 --- a/packages/eslint-plugin/src/rules/no-useless-template-literals.ts +++ b/packages/eslint-plugin/src/rules/no-useless-template-literals.ts @@ -53,6 +53,24 @@ export default createRule<[], MessageId>({ return isString(type); } + function isLiteral(expression: TSESTree.Expression): boolean { + return expression.type === AST_NODE_TYPES.Literal; + } + + function isInfinityIdentifier(expression: TSESTree.Expression): boolean { + return ( + expression.type === AST_NODE_TYPES.Identifier && + expression.name === 'Infinity' + ); + } + + function isNaNIdentifier(expression: TSESTree.Expression): boolean { + return ( + expression.type === AST_NODE_TYPES.Identifier && + expression.name === 'NaN' + ); + } + return { TemplateLiteral(node: TSESTree.TemplateLiteral): void { if (node.parent.type === AST_NODE_TYPES.TaggedTemplateExpression) { @@ -91,13 +109,15 @@ export default createRule<[], MessageId>({ return; } - const literalsOrUndefinedExpressions = node.expressions.filter( + const fixableExpressions = node.expressions.filter( (expression): expression is TSESTree.Literal | TSESTree.Identifier => - expression.type === AST_NODE_TYPES.Literal || - isUndefinedIdentifier(expression), + isLiteral(expression) || + isUndefinedIdentifier(expression) || + isInfinityIdentifier(expression) || + isNaNIdentifier(expression), ); - literalsOrUndefinedExpressions.forEach(expression => { + fixableExpressions.forEach(expression => { context.report({ node: expression, messageId: 'noUselessTemplateLiteral', 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 0bbd79c15654..16c08999fc8c 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 @@ -280,6 +280,52 @@ ruleTester.run('no-useless-template-literals', rule, { ], }, + { + code: '`${Infinity}`;', + output: '`Infinity`;', + errors: [ + { + messageId: 'noUselessTemplateLiteral', + line: 1, + column: 4, + endColumn: 12, + }, + ], + }, + + { + code: noFormat`\`\${ Infinity }\`;`, + output: '`Infinity`;', + errors: [ + { + messageId: 'noUselessTemplateLiteral', + }, + ], + }, + + { + code: '`${NaN}`;', + output: '`NaN`;', + errors: [ + { + messageId: 'noUselessTemplateLiteral', + line: 1, + column: 4, + endColumn: 7, + }, + ], + }, + + { + code: noFormat`\`\${ NaN }\`;`, + output: '`NaN`;', + errors: [ + { + messageId: 'noUselessTemplateLiteral', + }, + ], + }, + { code: "`${'a'} ${'b'}`;", output: '`a b`;', From b0bc73d186e0f6c90d5c5d76d4d944de85b13db4 Mon Sep 17 00:00:00 2001 From: StyleShit Date: Thu, 25 Jan 2024 07:40:07 +0200 Subject: [PATCH 2/2] remove unnecessary tests --- .../no-useless-template-literals.test.ts | 20 ------------------- 1 file changed, 20 deletions(-) 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 16c08999fc8c..0653e2506505 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 @@ -293,16 +293,6 @@ ruleTester.run('no-useless-template-literals', rule, { ], }, - { - code: noFormat`\`\${ Infinity }\`;`, - output: '`Infinity`;', - errors: [ - { - messageId: 'noUselessTemplateLiteral', - }, - ], - }, - { code: '`${NaN}`;', output: '`NaN`;', @@ -316,16 +306,6 @@ ruleTester.run('no-useless-template-literals', rule, { ], }, - { - code: noFormat`\`\${ NaN }\`;`, - output: '`NaN`;', - errors: [ - { - messageId: 'noUselessTemplateLiteral', - }, - ], - }, - { code: "`${'a'} ${'b'}`;", output: '`a b`;',