From 7456f4b64e87ec46820b313199a90a4aa4aea11c Mon Sep 17 00:00:00 2001 From: Arya Emami Date: Wed, 15 Jan 2025 14:46:46 -0600 Subject: [PATCH 01/21] fix(eslint-plugin-internal): [debug-namespace] on windows (#10661) fix(eslint-plugin-internal): `debug-namespace` on Windows --- packages/eslint-plugin-internal/src/rules/debug-namespace.ts | 2 +- packages/rule-tester/src/RuleTester.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/eslint-plugin-internal/src/rules/debug-namespace.ts b/packages/eslint-plugin-internal/src/rules/debug-namespace.ts index 7aa735053f48..ca76f5e1870f 100755 --- a/packages/eslint-plugin-internal/src/rules/debug-namespace.ts +++ b/packages/eslint-plugin-internal/src/rules/debug-namespace.ts @@ -12,7 +12,7 @@ function filePathToNamespace(filePath: string) { const relativeNamespace = relativePath .replace(/^[\\/]/, '') - .replace(/(?:dist|lib|src)\//, '') + .replace(/(?:dist|lib|src)(\/|\\)/, '') .replace(/\.\w+$/, '') .replaceAll(/[^a-z0-9-]+/gi, ':'); diff --git a/packages/rule-tester/src/RuleTester.ts b/packages/rule-tester/src/RuleTester.ts index 71be9eb872fe..6553f88afe06 100644 --- a/packages/rule-tester/src/RuleTester.ts +++ b/packages/rule-tester/src/RuleTester.ts @@ -210,7 +210,7 @@ export class RuleTester extends TestFramework { // file name (`foo.ts`), don't change the base path. if ( filename != null && - (filename.startsWith('/') || filename.startsWith('..')) + (path.isAbsolute(filename) || filename.startsWith('..')) ) { basePath = path.parse( path.resolve(basePath ?? process.cwd(), filename), From 3dbcc19a129d90072635f96eec9e9e1e5be7d6f5 Mon Sep 17 00:00:00 2001 From: YeonJuan Date: Thu, 16 Jan 2025 05:47:33 +0900 Subject: [PATCH 02/21] fix(eslint-plugin): [no-unnecessary-type-arguments] handle type args on jsx (#10630) * fix(eslint-plugin): [no-unnecessary-type-arguments] handle type args on jsx * apply review --- .../rules/no-unnecessary-type-arguments.ts | 11 ++- .../no-unnecessary-type-arguments.test.ts | 84 +++++++++++++++++++ 2 files changed, 93 insertions(+), 2 deletions(-) diff --git a/packages/eslint-plugin/src/rules/no-unnecessary-type-arguments.ts b/packages/eslint-plugin/src/rules/no-unnecessary-type-arguments.ts index 7e88b243eb07..945614ae618f 100644 --- a/packages/eslint-plugin/src/rules/no-unnecessary-type-arguments.ts +++ b/packages/eslint-plugin/src/rules/no-unnecessary-type-arguments.ts @@ -142,7 +142,9 @@ function getTypeParametersFromNode( if ( ts.isCallExpression(tsNode) || ts.isNewExpression(tsNode) || - ts.isTaggedTemplateExpression(tsNode) + ts.isTaggedTemplateExpression(tsNode) || + ts.isJsxOpeningElement(tsNode) || + ts.isJsxSelfClosingElement(tsNode) ) { return getTypeParametersFromCall(node, tsNode, checker); } @@ -189,7 +191,12 @@ function getTypeParametersFromType( function getTypeParametersFromCall( node: TSESTree.TSTypeParameterInstantiation, - tsNode: ts.CallExpression | ts.NewExpression | ts.TaggedTemplateExpression, + tsNode: + | ts.CallExpression + | ts.JsxOpeningElement + | ts.JsxSelfClosingElement + | ts.NewExpression + | ts.TaggedTemplateExpression, checker: ts.TypeChecker, ): readonly ts.TypeParameterDeclaration[] | undefined { const sig = checker.getResolvedSignature(tsNode); diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-type-arguments.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-type-arguments.test.ts index ad4133e13ff4..18e74325d7b6 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-type-arguments.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-type-arguments.test.ts @@ -179,6 +179,36 @@ namespace Foo { } class Bar extends Foo {} `, + { + code: ` +function Button() { + return
; +} +const button = >; + `, + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + }, + }, + }, + { + code: ` +function Button() { + return
; +} +const button = />; + `, + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + }, + }, + }, ], invalid: [ { @@ -560,5 +590,59 @@ namespace Foo { class Bar extends Foo {} `, }, + { + code: ` +function Button() { + return
; +} +const button = >; + `, + errors: [ + { + line: 5, + messageId: 'unnecessaryTypeParameter', + }, + ], + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + }, + }, + output: ` +function Button() { + return
; +} +const button = ; + `, + }, + { + code: ` +function Button() { + return
; +} +const button = />; + `, + errors: [ + { + line: 5, + messageId: 'unnecessaryTypeParameter', + }, + ], + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + }, + }, + output: ` +function Button() { + return
; +} +const button =