From 936d8f41aea482998bb7d559f6a678fc82edee6d Mon Sep 17 00:00:00 2001 From: Alex Munoz Date: Tue, 23 Aug 2022 19:39:11 +0200 Subject: [PATCH] Convert no-any-union from TSLint to ESLint --- packages/dtslint/dtslint.json | 1 - packages/dtslint/src/rules/no-any-union.ts | 34 +++++++++++++++++++ packages/dtslint/src/rules/noAnyUnionRule.ts | 33 ------------------ packages/dtslint/test/no-any-union.test.ts | 23 +++++++++++++ .../dtslint/test/no-any-union/test.d.ts.lint | 4 --- .../dtslint/test/no-any-union/tslint.json | 6 ---- 6 files changed, 57 insertions(+), 44 deletions(-) create mode 100644 packages/dtslint/src/rules/no-any-union.ts delete mode 100644 packages/dtslint/src/rules/noAnyUnionRule.ts create mode 100644 packages/dtslint/test/no-any-union.test.ts delete mode 100644 packages/dtslint/test/no-any-union/test.d.ts.lint delete mode 100644 packages/dtslint/test/no-any-union/tslint.json diff --git a/packages/dtslint/dtslint.json b/packages/dtslint/dtslint.json index 4e10d5d0ce..072d6c7a58 100644 --- a/packages/dtslint/dtslint.json +++ b/packages/dtslint/dtslint.json @@ -11,7 +11,6 @@ "redundant-undefined": true, "no-relative-import-in-test": true, "strict-export-declare-modifiers": true, - "no-any-union": true, "no-single-declare-module": true, "no-unnecessary-generics": true, "no-useless-files": true, diff --git a/packages/dtslint/src/rules/no-any-union.ts b/packages/dtslint/src/rules/no-any-union.ts new file mode 100644 index 0000000000..6652cb120b --- /dev/null +++ b/packages/dtslint/src/rules/no-any-union.ts @@ -0,0 +1,34 @@ +import { createRule } from "../util"; +import { AST_NODE_TYPES } from "@typescript-eslint/utils"; + +const rule = createRule({ + name: "no-any-union", + defaultOptions: [], + meta: { + type: "problem", + docs: { + description: "Forbid a union to contain `any`", + recommended: "error", + }, + messages: { + anyUnion: "Including `any` in a union will override all other members of the union.", + }, + schema: [], + }, + create(context) { + return { + // eslint-disable-next-line @typescript-eslint/naming-convention + TSUnionType(node) { + const hasAnyType = node.types.some((t) => t.type === AST_NODE_TYPES.TSAnyKeyword); + if (hasAnyType) { + context.report({ + messageId: "anyUnion", + node, + }); + } + }, + }; + }, +}); + +export = rule; diff --git a/packages/dtslint/src/rules/noAnyUnionRule.ts b/packages/dtslint/src/rules/noAnyUnionRule.ts deleted file mode 100644 index edae2949ed..0000000000 --- a/packages/dtslint/src/rules/noAnyUnionRule.ts +++ /dev/null @@ -1,33 +0,0 @@ -import * as Lint from "tslint"; -import * as ts from "typescript"; - -import { failure } from "../util"; - -export class Rule extends Lint.Rules.AbstractRule { - static metadata: Lint.IRuleMetadata = { - ruleName: "no-any-union", - description: "Forbid a union to contain `any`", - optionsDescription: "Not configurable.", - options: null, - type: "functionality", - typescriptOnly: true, - }; - - static FAILURE_STRING = failure( - Rule.metadata.ruleName, - "Including `any` in a union will override all other members of the union." - ); - - apply(sourceFile: ts.SourceFile): Lint.RuleFailure[] { - return this.applyWithFunction(sourceFile, walk); - } -} - -function walk(ctx: Lint.WalkContext): void { - ctx.sourceFile.forEachChild(function recur(node) { - if (node.kind === ts.SyntaxKind.AnyKeyword && ts.isUnionTypeNode(node.parent!)) { - ctx.addFailureAtNode(node, Rule.FAILURE_STRING); - } - node.forEachChild(recur); - }); -} diff --git a/packages/dtslint/test/no-any-union.test.ts b/packages/dtslint/test/no-any-union.test.ts new file mode 100644 index 0000000000..96dac92a72 --- /dev/null +++ b/packages/dtslint/test/no-any-union.test.ts @@ -0,0 +1,23 @@ +import { ESLintUtils } from "@typescript-eslint/utils"; + +import * as noAnyUnion from "../src/rules/no-any-union"; + +const ruleTester = new ESLintUtils.RuleTester({ + parser: "@typescript-eslint/parser", +}); + +ruleTester.run("no-any-union", noAnyUnion, { + invalid: [ + { + code: `export const y: string | any;`, + errors: [ + { + line: 1, + messageId: "anyUnion", + }, + ], + }, + ], + valid: [`export const x: any;`], +}); + diff --git a/packages/dtslint/test/no-any-union/test.d.ts.lint b/packages/dtslint/test/no-any-union/test.d.ts.lint deleted file mode 100644 index b52093f825..0000000000 --- a/packages/dtslint/test/no-any-union/test.d.ts.lint +++ /dev/null @@ -1,4 +0,0 @@ -export const x: any; - -export const y: string | any; - ~~~ [Including `any` in a union will override all other members of the union. See: https://github.com/microsoft/DefinitelyTyped-tools/blob/master/packages/dtslint/docs/no-any-union.md] diff --git a/packages/dtslint/test/no-any-union/tslint.json b/packages/dtslint/test/no-any-union/tslint.json deleted file mode 100644 index 2799a1d8cf..0000000000 --- a/packages/dtslint/test/no-any-union/tslint.json +++ /dev/null @@ -1,6 +0,0 @@ -{ - "rulesDirectory": ["../../dist/rules"], - "rules": { - "no-any-union": true - } - }