From c83950cb222d458c7572a6c52972488ed4eebb5e Mon Sep 17 00:00:00 2001 From: duduluu Date: Sat, 25 Apr 2020 20:58:29 +0800 Subject: [PATCH] feat(eslint-plugin): rule no-base-to-string add option ignoredTypeNames --- .../eslint-plugin/src/rules/no-base-to-string.ts | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/eslint-plugin/src/rules/no-base-to-string.ts b/packages/eslint-plugin/src/rules/no-base-to-string.ts index ea1aebeff23..ea7c59ca5c1 100644 --- a/packages/eslint-plugin/src/rules/no-base-to-string.ts +++ b/packages/eslint-plugin/src/rules/no-base-to-string.ts @@ -16,6 +16,7 @@ type Options = [ { /** @deprecated This option is now ignored and treated as always true, it will be removed in 3.0 */ ignoreTaggedTemplateExpressions?: boolean; + ignoredTypeNames?: string[]; }, ]; type MessageIds = 'baseToString'; @@ -42,6 +43,12 @@ export default util.createRule({ type: 'boolean', default: true, }, + ignoredTypeNames: { + type: 'array', + items: { + type: 'string', + }, + }, }, additionalProperties: false, }, @@ -49,9 +56,10 @@ export default util.createRule({ type: 'suggestion', }, defaultOptions: [{ ignoreTaggedTemplateExpressions: true }], - create(context) { + create(context, [option]) { const parserServices = util.getParserServices(context); const typeChecker = parserServices.program.getTypeChecker(); + const ignoredTypeNames = option.ignoredTypeNames ?? []; function checkExpression(node: TSESTree.Expression, type?: ts.Type): void { if (node.type === AST_NODE_TYPES.Literal) { @@ -89,6 +97,10 @@ export default util.createRule({ return Usefulness.Always; } + if (ignoredTypeNames.includes(util.getTypeName(typeChecker, type))) { + return Usefulness.Always; + } + if ( toString.declarations.every( ({ parent }) =>