From 77732a2f3979f638e471b6de327b2ea0e976d568 Mon Sep 17 00:00:00 2001 From: Michael Kim Date: Mon, 12 Oct 2020 08:58:16 +0900 Subject: [PATCH] fix(eslint-plugin): [ban-types] allow banning types with specific parameters (#2662) --- packages/eslint-plugin/src/rules/ban-types.ts | 12 ++++-- .../tests/rules/ban-types.test.ts | 42 +++++++++++++++++++ 2 files changed, 50 insertions(+), 4 deletions(-) diff --git a/packages/eslint-plugin/src/rules/ban-types.ts b/packages/eslint-plugin/src/rules/ban-types.ts index 5ece1b8b60e..beaadb14ec2 100644 --- a/packages/eslint-plugin/src/rules/ban-types.ts +++ b/packages/eslint-plugin/src/rules/ban-types.ts @@ -28,7 +28,7 @@ function removeSpaces(str: string): string { return str.replace(/ /g, ''); } -function stringifyTypeName( +function stringifyNode( node: TSESTree.Node, sourceCode: TSESLint.SourceCode, ): string { @@ -175,7 +175,7 @@ export default util.createRule({ function checkBannedTypes( typeNode: TSESTree.Node, - name = stringifyTypeName(typeNode, context.getSourceCode()), + name = stringifyNode(typeNode, context.getSourceCode()), ): void { const bannedType = bannedTypes.get(name); @@ -223,8 +223,12 @@ export default util.createRule({ checkBannedTypes(node); }, - TSTypeReference({ typeName }): void { - checkBannedTypes(typeName); + TSTypeReference(node): void { + checkBannedTypes(node.typeName); + + if (node.typeParameters) { + checkBannedTypes(node); + } }, }; }, diff --git a/packages/eslint-plugin/tests/rules/ban-types.test.ts b/packages/eslint-plugin/tests/rules/ban-types.test.ts index 615c3f3dc00..ca7078585b1 100644 --- a/packages/eslint-plugin/tests/rules/ban-types.test.ts +++ b/packages/eslint-plugin/tests/rules/ban-types.test.ts @@ -487,6 +487,48 @@ let bar: object = {}; }, ], }, + { + code: 'type Foo = Bar;', + errors: [ + { + messageId: 'bannedTypeMessage', + data: { + name: 'Bar', + customMessage: " Don't use `any` as a type parameter to `Bar`", + }, + line: 1, + column: 12, + }, + ], + options: [ + { + types: { + 'Bar': "Don't use `any` as a type parameter to `Bar`", + }, + }, + ], + }, + { + code: noFormat`type Foo = Bar;`, + errors: [ + { + messageId: 'bannedTypeMessage', + data: { + name: 'Bar', + customMessage: " Don't pass `A, B` as parameters to `Bar`", + }, + line: 1, + column: 12, + }, + ], + options: [ + { + types: { + 'Bar': "Don't pass `A, B` as parameters to `Bar`", + }, + }, + ], + }, ...objectReduceKey( TYPE_KEYWORDS, (acc: TSESLint.InvalidTestCase[], key) => {