From d2f9c3c5a14036550839c857201fe741a39b4198 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Wed, 29 Dec 2021 14:54:40 -0500 Subject: [PATCH 1/5] chore: renamed experimental-utils to utils (rebased) --- .github/ISSUE_TEMPLATE.md | 20 ++--- .../ISSUE_TEMPLATE/typescript-eslint-utils.md | 25 +++--- .github/workflows/ci.yml | 8 +- .vscode/launch.json | 60 +++++++------- README.md | 2 +- docs/development/CUSTOM_RULES.md | 38 ++++----- docs/development/architecture/PACKAGES.md | 6 +- packages/ast-spec/README.md | 2 +- packages/eslint-plugin-internal/package.json | 2 +- .../src/rules/no-poorly-typed-ts-props.ts | 6 +- .../src/rules/no-typescript-default-import.ts | 5 +- .../src/rules/no-typescript-estree-import.ts | 2 +- .../src/rules/plugin-test-formatting.ts | 5 +- .../src/rules/prefer-ast-types-enum.ts | 2 +- .../src/util/createRule.ts | 2 +- .../tests/RuleTester.ts | 2 +- .../tests/rules/no-typescript-estree.test.ts | 18 ++--- .../tests/rules/prefer-ast-types-enum.test.ts | 5 +- .../tsconfig.build.json | 2 +- packages/eslint-plugin-internal/tsconfig.json | 2 +- packages/eslint-plugin-tslint/package.json | 2 +- .../eslint-plugin-tslint/src/rules/config.ts | 2 +- .../eslint-plugin-tslint/tests/index.spec.ts | 2 +- .../eslint-plugin-tslint/tsconfig.build.json | 2 +- packages/eslint-plugin-tslint/tsconfig.json | 2 +- packages/eslint-plugin/index.d.ts | 2 +- packages/eslint-plugin/package.json | 2 +- .../src/rules/adjacent-overload-signatures.ts | 5 +- .../eslint-plugin/src/rules/array-type.ts | 5 +- .../eslint-plugin/src/rules/ban-ts-comment.ts | 2 +- .../src/rules/ban-tslint-comment.ts | 2 +- packages/eslint-plugin/src/rules/ban-types.ts | 6 +- .../eslint-plugin/src/rules/brace-style.ts | 2 +- .../src/rules/class-literal-property-style.ts | 5 +- .../eslint-plugin/src/rules/comma-dangle.ts | 5 +- .../eslint-plugin/src/rules/comma-spacing.ts | 5 +- .../rules/consistent-indexed-object-style.ts | 6 +- .../src/rules/consistent-type-assertions.ts | 5 +- .../src/rules/consistent-type-definitions.ts | 2 +- .../src/rules/consistent-type-exports.ts | 2 +- .../src/rules/consistent-type-imports.ts | 2 +- .../src/rules/default-param-last.ts | 5 +- .../eslint-plugin/src/rules/dot-notation.ts | 2 +- .../rules/explicit-function-return-type.ts | 5 +- .../rules/explicit-member-accessibility.ts | 2 +- .../rules/explicit-module-boundary-types.ts | 5 +- .../src/rules/func-call-spacing.ts | 2 +- .../indent-new-do-not-use/BinarySearchTree.ts | 2 +- .../indent-new-do-not-use/OffsetStorage.ts | 2 +- .../rules/indent-new-do-not-use/TokenInfo.ts | 2 +- .../src/rules/indent-new-do-not-use/index.ts | 2 +- packages/eslint-plugin/src/rules/indent.ts | 5 +- .../src/rules/init-declarations.ts | 5 +- .../src/rules/keyword-spacing.ts | 2 +- .../src/rules/lines-between-class-members.ts | 5 +- .../src/rules/member-delimiter-style.ts | 6 +- .../src/rules/member-ordering.ts | 2 +- .../src/rules/method-signature-style.ts | 5 +- .../rules/naming-convention-utils/schema.ts | 2 +- .../rules/naming-convention-utils/types.ts | 2 +- .../naming-convention-utils/validator.ts | 5 +- .../src/rules/naming-convention.ts | 6 +- .../src/rules/no-array-constructor.ts | 5 +- .../src/rules/no-base-to-string.ts | 5 +- .../rules/no-confusing-non-null-assertion.ts | 2 +- .../src/rules/no-confusing-void-expression.ts | 6 +- .../src/rules/no-dupe-class-members.ts | 5 +- .../src/rules/no-duplicate-imports.ts | 5 +- .../src/rules/no-dynamic-delete.ts | 6 +- .../src/rules/no-empty-function.ts | 5 +- .../src/rules/no-empty-interface.ts | 2 +- .../src/rules/no-explicit-any.ts | 6 +- .../src/rules/no-extra-non-null-assertion.ts | 2 +- .../src/rules/no-extra-parens.ts | 6 +- .../src/rules/no-extraneous-class.ts | 5 +- .../src/rules/no-floating-promises.ts | 6 +- .../src/rules/no-implicit-any-catch.ts | 5 +- .../src/rules/no-implied-eval.ts | 5 +- .../src/rules/no-inferrable-types.ts | 5 +- .../src/rules/no-invalid-this.ts | 5 +- .../src/rules/no-invalid-void-type.ts | 5 +- .../eslint-plugin/src/rules/no-loop-func.ts | 6 +- .../src/rules/no-loss-of-precision.ts | 2 +- .../src/rules/no-magic-numbers.ts | 5 +- .../src/rules/no-meaningless-void-operator.ts | 6 +- .../eslint-plugin/src/rules/no-misused-new.ts | 5 +- .../src/rules/no-misused-promises.ts | 6 +- .../eslint-plugin/src/rules/no-namespace.ts | 5 +- ...no-non-null-asserted-nullish-coalescing.ts | 6 +- .../no-non-null-asserted-optional-chain.ts | 6 +- .../src/rules/no-non-null-assertion.ts | 5 +- .../src/rules/no-parameter-properties.ts | 5 +- .../eslint-plugin/src/rules/no-redeclare.ts | 6 +- .../src/rules/no-require-imports.ts | 2 +- .../src/rules/no-restricted-imports.ts | 2 +- packages/eslint-plugin/src/rules/no-shadow.ts | 2 +- .../eslint-plugin/src/rules/no-this-alias.ts | 5 +- .../src/rules/no-throw-literal.ts | 5 +- .../eslint-plugin/src/rules/no-type-alias.ts | 2 +- .../no-unnecessary-boolean-literal-compare.ts | 5 +- .../src/rules/no-unnecessary-condition.ts | 2 +- .../src/rules/no-unnecessary-qualifier.ts | 5 +- .../rules/no-unnecessary-type-arguments.ts | 2 +- .../rules/no-unnecessary-type-assertion.ts | 5 +- .../rules/no-unnecessary-type-constraint.ts | 5 +- .../src/rules/no-unsafe-argument.ts | 5 +- .../src/rules/no-unsafe-assignment.ts | 5 +- .../eslint-plugin/src/rules/no-unsafe-call.ts | 2 +- .../src/rules/no-unsafe-member-access.ts | 5 +- .../src/rules/no-unsafe-return.ts | 5 +- .../src/rules/no-unused-expressions.ts | 5 +- .../eslint-plugin/src/rules/no-unused-vars.ts | 6 +- .../src/rules/no-use-before-define.ts | 6 +- .../src/rules/no-useless-constructor.ts | 5 +- .../src/rules/no-var-requires.ts | 6 +- .../non-nullable-type-assertion-style.ts | 5 +- .../src/rules/object-curly-spacing.ts | 2 +- .../rules/padding-line-between-statements.ts | 6 +- .../src/rules/prefer-as-const.ts | 6 +- .../src/rules/prefer-enum-initializers.ts | 2 +- .../eslint-plugin/src/rules/prefer-for-of.ts | 6 +- .../src/rules/prefer-function-type.ts | 2 +- .../src/rules/prefer-includes.ts | 6 +- .../src/rules/prefer-literal-enum-member.ts | 2 +- .../src/rules/prefer-namespace-keyword.ts | 5 +- .../src/rules/prefer-nullish-coalescing.ts | 2 +- .../src/rules/prefer-optional-chain.ts | 6 +- .../rules/prefer-readonly-parameter-types.ts | 5 +- .../src/rules/prefer-readonly.ts | 6 +- .../src/rules/prefer-reduce-type-parameter.ts | 5 +- .../src/rules/prefer-regexp-exec.ts | 5 +- .../src/rules/prefer-return-this-type.ts | 5 +- .../rules/prefer-string-starts-ends-with.ts | 6 +- .../src/rules/prefer-ts-expect-error.ts | 10 +-- .../src/rules/promise-function-async.ts | 2 +- packages/eslint-plugin/src/rules/quotes.ts | 5 +- .../src/rules/require-array-sort-compare.ts | 2 +- .../eslint-plugin/src/rules/require-await.ts | 6 +- .../src/rules/restrict-plus-operands.ts | 2 +- .../rules/restrict-template-expressions.ts | 5 +- .../eslint-plugin/src/rules/return-await.ts | 6 +- packages/eslint-plugin/src/rules/semi.ts | 6 +- .../sort-type-union-intersection-members.ts | 6 +- .../src/rules/space-before-function-paren.ts | 5 +- .../src/rules/space-infix-ops.ts | 5 +- .../src/rules/strict-boolean-expressions.ts | 2 +- .../src/rules/switch-exhaustiveness-check.ts | 2 +- .../src/rules/triple-slash-reference.ts | 2 +- .../src/rules/type-annotation-spacing.ts | 2 +- packages/eslint-plugin/src/rules/typedef.ts | 5 +- .../eslint-plugin/src/rules/unbound-method.ts | 5 +- .../src/rules/unified-signatures.ts | 5 +- packages/eslint-plugin/src/util/astUtils.ts | 4 +- .../src/util/collectUnusedVariables.ts | 2 +- packages/eslint-plugin/src/util/createRule.ts | 2 +- .../src/util/explicitReturnTypeUtils.ts | 2 +- .../src/util/getESLintCoreRule.ts | 2 +- .../src/util/getFunctionHeadLoc.ts | 2 +- .../src/util/getThisExpression.ts | 5 +- .../src/util/getWrappingFixer.ts | 2 +- packages/eslint-plugin/src/util/index.ts | 2 +- packages/eslint-plugin/src/util/misc.ts | 6 +- packages/eslint-plugin/tests/RuleTester.ts | 2 +- .../tests/rules/array-type.test.ts | 2 +- .../tests/rules/ban-types.test.ts | 2 +- .../rules/consistent-type-exports.test.ts | 4 +- .../tests/rules/func-call-spacing.test.ts | 2 +- .../tests/rules/indent/indent-eslint.test.ts | 5 +- .../tests/rules/indent/indent.test.ts | 5 +- .../eslint-plugin/tests/rules/indent/utils.ts | 2 +- .../tests/rules/init-declarations.test.ts | 2 +- .../tests/rules/keyword-spacing.test.ts | 2 +- ...habetically-case-insensitive-order.test.ts | 2 +- ...mber-ordering-alphabetically-order.test.ts | 2 +- .../tests/rules/member-ordering.test.ts | 2 +- .../tests/rules/naming-convention.test.ts | 2 +- .../tests/rules/no-array-constructor.test.ts | 2 +- .../tests/rules/no-explicit-any.test.ts | 2 +- .../tests/rules/no-extraneous-class.test.ts | 2 +- .../tests/rules/no-for-in-array.test.ts | 2 +- .../tests/rules/no-inferrable-types.test.ts | 2 +- .../tests/rules/no-loop-func.test.ts | 2 +- .../tests/rules/no-redeclare.test.ts | 5 +- .../tests/rules/no-restricted-imports.test.ts | 6 +- .../tests/rules/no-shadow.test.ts | 2 +- .../tests/rules/no-this-alias.test.ts | 2 +- .../rules/no-unnecessary-condition.test.ts | 2 +- .../rules/no-unnecessary-qualifier.test.ts | 2 +- .../no-unnecessary-type-assertion.test.ts | 2 +- .../tests/rules/no-unsafe-assignment.test.ts | 2 +- .../tests/rules/no-unused-expressions.test.ts | 2 +- .../no-unused-vars-eslint.test.ts | 5 +- .../tests/rules/no-use-before-define.test.ts | 2 +- .../rules/no-useless-constructor.test.ts | 2 +- .../tests/rules/object-curly-spacing.test.ts | 2 +- .../tests/rules/prefer-function-type.test.ts | 2 +- .../rules/prefer-nullish-coalescing.test.ts | 2 +- .../tests/rules/prefer-optional-chain.test.ts | 2 +- .../prefer-readonly-parameter-types.test.ts | 2 +- .../prefer-string-starts-ends-with.test.ts | 2 +- .../rules/promise-function-async.test.ts | 2 +- .../eslint-plugin/tests/rules/semi.test.ts | 2 +- ...rt-type-union-intersection-members.test.ts | 2 +- .../rules/space-before-function-paren.test.ts | 2 +- .../rules/type-annotation-spacing.test.ts | 2 +- .../tests/rules/unbound-method.test.ts | 2 +- .../tests/util/getWrappingFixer.test.ts | 2 +- .../eslint-plugin/tools/generate-configs.ts | 2 +- packages/eslint-plugin/tsconfig.build.json | 2 +- packages/eslint-plugin/tsconfig.json | 2 +- .../eslint-plugin/typings/eslint-rules.d.ts | 72 ++++++++--------- packages/experimental-utils/CHANGELOG.md | 2 + packages/experimental-utils/README.md | 30 +++---- packages/experimental-utils/src/index.ts | 10 +-- packages/parser/tsconfig.build.json | 2 +- packages/parser/tsconfig.json | 2 +- packages/type-utils/README.md | 2 +- packages/type-utils/package.json | 2 +- packages/type-utils/src/isTypeReadonly.ts | 2 +- packages/type-utils/src/isUnsafeAssignment.ts | 5 +- .../tests/isUnsafeAssignment.test.ts | 2 +- packages/type-utils/tsconfig.build.json | 2 +- packages/type-utils/tsconfig.json | 2 +- packages/types/README.md | 2 +- packages/utils/CHANGELOG.md | 4 + packages/utils/LICENSE | 21 +++++ packages/utils/README.md | 27 +++++++ packages/utils/jest.config.js | 21 +++++ packages/utils/package.json | 66 +++++++++++++++ packages/utils/project.json | 5 ++ .../ast-utils/eslint-utils/PatternMatcher.ts | 0 .../eslint-utils/ReferenceTracker.ts | 0 .../ast-utils/eslint-utils/astUtilities.ts | 0 .../src/ast-utils/eslint-utils/index.ts | 0 .../src/ast-utils/eslint-utils/predicates.ts | 0 .../ast-utils/eslint-utils/scopeAnalysis.ts | 0 .../src/ast-utils/helpers.ts | 0 .../src/ast-utils/index.ts | 0 .../src/ast-utils/misc.ts | 0 .../src/ast-utils/predicates.ts | 0 .../src/eslint-utils/InferTypesFromRule.ts | 0 .../src/eslint-utils/RuleCreator.ts | 0 .../src/eslint-utils/RuleTester.ts | 0 .../src/eslint-utils/applyDefault.ts | 0 .../eslint-utils/batchedSingleLineTests.ts | 0 .../src/eslint-utils/deepMerge.ts | 0 .../src/eslint-utils/getParserServices.ts | 0 .../src/eslint-utils/index.ts | 0 .../src/eslint-utils/nullThrows.ts | 0 packages/utils/src/index.ts | 8 ++ .../src/json-schema.ts | 0 .../src/ts-eslint-scope/Definition.ts | 0 .../src/ts-eslint-scope/Options.ts | 0 .../src/ts-eslint-scope/PatternVisitor.ts | 0 .../src/ts-eslint-scope/README.md | 0 .../src/ts-eslint-scope/Reference.ts | 0 .../src/ts-eslint-scope/Referencer.ts | 0 .../src/ts-eslint-scope/Scope.ts | 0 .../src/ts-eslint-scope/ScopeManager.ts | 0 .../src/ts-eslint-scope/Variable.ts | 0 .../src/ts-eslint-scope/analyze.ts | 0 .../src/ts-eslint-scope/index.ts | 0 .../src/ts-eslint/AST.ts | 0 .../src/ts-eslint/CLIEngine.ts | 0 .../src/ts-eslint/ESLint.ts | 0 .../src/ts-eslint/Linter.ts | 0 .../src/ts-eslint/ParserOptions.ts | 0 .../src/ts-eslint/Rule.ts | 0 .../src/ts-eslint/RuleTester.ts | 0 .../src/ts-eslint/Scope.ts | 0 .../src/ts-eslint/SourceCode.ts | 0 .../src/ts-eslint/index.ts | 0 .../src/ts-estree.ts | 0 .../tests/eslint-utils/RuleCreator.test.ts | 44 ++++++++++ .../tests/eslint-utils/applyDefault.test.ts | 62 ++++++++++++++ .../batchedSingleLineTests.test.ts | 81 +++++++++++++++++++ .../tests/eslint-utils/deepMerge.test.ts | 58 +++++++++++++ packages/utils/tsconfig.build.json | 15 ++++ packages/utils/tsconfig.json | 13 +++ .../typings/eslint-scope.d.ts | 0 .../typings/eslint-utils.d.ts | 0 .../typings/eslint.d.ts | 0 packages/website-eslint/package.json | 4 +- packages/website-eslint/rollup.config.js | 8 +- packages/website-eslint/types/index.d.ts | 2 +- workspace.json | 3 +- yarn.lock | 12 +++ 287 files changed, 797 insertions(+), 704 deletions(-) create mode 100644 packages/utils/CHANGELOG.md create mode 100644 packages/utils/LICENSE create mode 100644 packages/utils/README.md create mode 100644 packages/utils/jest.config.js create mode 100644 packages/utils/package.json create mode 100644 packages/utils/project.json rename packages/{experimental-utils => utils}/src/ast-utils/eslint-utils/PatternMatcher.ts (100%) rename packages/{experimental-utils => utils}/src/ast-utils/eslint-utils/ReferenceTracker.ts (100%) rename packages/{experimental-utils => utils}/src/ast-utils/eslint-utils/astUtilities.ts (100%) rename packages/{experimental-utils => utils}/src/ast-utils/eslint-utils/index.ts (100%) rename packages/{experimental-utils => utils}/src/ast-utils/eslint-utils/predicates.ts (100%) rename packages/{experimental-utils => utils}/src/ast-utils/eslint-utils/scopeAnalysis.ts (100%) rename packages/{experimental-utils => utils}/src/ast-utils/helpers.ts (100%) rename packages/{experimental-utils => utils}/src/ast-utils/index.ts (100%) rename packages/{experimental-utils => utils}/src/ast-utils/misc.ts (100%) rename packages/{experimental-utils => utils}/src/ast-utils/predicates.ts (100%) rename packages/{experimental-utils => utils}/src/eslint-utils/InferTypesFromRule.ts (100%) rename packages/{experimental-utils => utils}/src/eslint-utils/RuleCreator.ts (100%) rename packages/{experimental-utils => utils}/src/eslint-utils/RuleTester.ts (100%) rename packages/{experimental-utils => utils}/src/eslint-utils/applyDefault.ts (100%) rename packages/{experimental-utils => utils}/src/eslint-utils/batchedSingleLineTests.ts (100%) rename packages/{experimental-utils => utils}/src/eslint-utils/deepMerge.ts (100%) rename packages/{experimental-utils => utils}/src/eslint-utils/getParserServices.ts (100%) rename packages/{experimental-utils => utils}/src/eslint-utils/index.ts (100%) rename packages/{experimental-utils => utils}/src/eslint-utils/nullThrows.ts (100%) create mode 100644 packages/utils/src/index.ts rename packages/{experimental-utils => utils}/src/json-schema.ts (100%) rename packages/{experimental-utils => utils}/src/ts-eslint-scope/Definition.ts (100%) rename packages/{experimental-utils => utils}/src/ts-eslint-scope/Options.ts (100%) rename packages/{experimental-utils => utils}/src/ts-eslint-scope/PatternVisitor.ts (100%) rename packages/{experimental-utils => utils}/src/ts-eslint-scope/README.md (100%) rename packages/{experimental-utils => utils}/src/ts-eslint-scope/Reference.ts (100%) rename packages/{experimental-utils => utils}/src/ts-eslint-scope/Referencer.ts (100%) rename packages/{experimental-utils => utils}/src/ts-eslint-scope/Scope.ts (100%) rename packages/{experimental-utils => utils}/src/ts-eslint-scope/ScopeManager.ts (100%) rename packages/{experimental-utils => utils}/src/ts-eslint-scope/Variable.ts (100%) rename packages/{experimental-utils => utils}/src/ts-eslint-scope/analyze.ts (100%) rename packages/{experimental-utils => utils}/src/ts-eslint-scope/index.ts (100%) rename packages/{experimental-utils => utils}/src/ts-eslint/AST.ts (100%) rename packages/{experimental-utils => utils}/src/ts-eslint/CLIEngine.ts (100%) rename packages/{experimental-utils => utils}/src/ts-eslint/ESLint.ts (100%) rename packages/{experimental-utils => utils}/src/ts-eslint/Linter.ts (100%) rename packages/{experimental-utils => utils}/src/ts-eslint/ParserOptions.ts (100%) rename packages/{experimental-utils => utils}/src/ts-eslint/Rule.ts (100%) rename packages/{experimental-utils => utils}/src/ts-eslint/RuleTester.ts (100%) rename packages/{experimental-utils => utils}/src/ts-eslint/Scope.ts (100%) rename packages/{experimental-utils => utils}/src/ts-eslint/SourceCode.ts (100%) rename packages/{experimental-utils => utils}/src/ts-eslint/index.ts (100%) rename packages/{experimental-utils => utils}/src/ts-estree.ts (100%) create mode 100644 packages/utils/tests/eslint-utils/RuleCreator.test.ts create mode 100644 packages/utils/tests/eslint-utils/applyDefault.test.ts create mode 100644 packages/utils/tests/eslint-utils/batchedSingleLineTests.test.ts create mode 100644 packages/utils/tests/eslint-utils/deepMerge.test.ts create mode 100644 packages/utils/tsconfig.build.json create mode 100644 packages/utils/tsconfig.json rename packages/{experimental-utils => utils}/typings/eslint-scope.d.ts (100%) rename packages/{experimental-utils => utils}/typings/eslint-utils.d.ts (100%) rename packages/{experimental-utils => utils}/typings/eslint.d.ts (100%) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 67428be1e01..5794d8565cb 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -67,13 +67,13 @@ i.e. eslint --ext ".ts,.js" src --debug **Versions** -| package | version | -| --------------------------------------- | ------- | -| `@typescript-eslint/eslint-plugin` | `X.Y.Z` | -| `@typescript-eslint/parser` | `X.Y.Z` | -| `@typescript-eslint/typescript-estree` | `X.Y.Z` | -| `@typescript-eslint/experimental-utils` | `X.Y.Z` | -| `@typescript-eslint/type-utils` | `X.Y.Z` | -| `TypeScript` | `X.Y.Z` | -| `node` | `X.Y.Z` | -| `npm` | `X.Y.Z` | +| package | version | +| -------------------------------------- | ------- | +| `@typescript-eslint/eslint-plugin` | `X.Y.Z` | +| `@typescript-eslint/parser` | `X.Y.Z` | +| `@typescript-eslint/typescript-estree` | `X.Y.Z` | +| `@typescript-eslint/type-utils` | `X.Y.Z` | +| `@typescript-eslint/utils` | `X.Y.Z` | +| `TypeScript` | `X.Y.Z` | +| `node` | `X.Y.Z` | +| `npm` | `X.Y.Z` | diff --git a/.github/ISSUE_TEMPLATE/typescript-eslint-utils.md b/.github/ISSUE_TEMPLATE/typescript-eslint-utils.md index 0d2ca8ccf2d..f576997d56f 100644 --- a/.github/ISSUE_TEMPLATE/typescript-eslint-utils.md +++ b/.github/ISSUE_TEMPLATE/typescript-eslint-utils.md @@ -1,9 +1,8 @@ --- -name: '@typescript-eslint/experimental-utils' -about: Report an issue with the '@typescript-eslint/experimental-utils' package -title: '' -labels: 'package: utils, triage' -assignees: '' +name: '@typescript-eslint/utils' +about: Report an issue with the 'typescript-eslint/utils' package +title: '': 'package: utils, triage' +: '' --- - [ ] I have tried restarting my IDE and the issue persists. @@ -64,8 +63,8 @@ i.e. eslint --ext ".ts,.js" src --debug **Versions** -| package | version | -| --------------------------------------- | ------- | -| `@typescript-eslint/experimental-utils` | `X.Y.Z` | -| `TypeScript` | `X.Y.Z` | -| `node` | `X.Y.Z` | +| package | version | +| ---------------------------| ------- | +| `@typescript-eslint/utils` | `X.Y.Z` | +| `TypeScript` | `X.Y.Z` | +| `node` | `X.Y.Z` | diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f05912ef76a..7e79299fdf0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -111,8 +111,8 @@ jobs: env: CI: true - - name: Run unit tests for experimental-utils - run: npx nx test @typescript-eslint/experimental-utils + - name: Run unit tests for utils + run: npx nx test @typescript-eslint/utils env: CI: true @@ -283,8 +283,8 @@ jobs: env: CI: true - - name: Run unit tests for experimental-utils - run: npx nx test @typescript-eslint/experimental-utils + - name: Run unit tests for utils + run: npx nx test @typescript-eslint/utils env: CI: true diff --git a/.vscode/launch.json b/.vscode/launch.json index 0162b9ae831..d61dbf50a74 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -20,10 +20,10 @@ "console": "integratedTerminal", "internalConsoleOptions": "neverOpen", "skipFiles": [ - "${workspaceFolder}/packages/experimental-utils/src/index.ts", - "${workspaceFolder}/packages/experimental-utils/dist/index.js", - "${workspaceFolder}/packages/experimental-utils/src/ts-estree.ts", - "${workspaceFolder}/packages/experimental-utils/dist/ts-estree.js", + "${workspaceFolder}/packages/utils/src/index.ts", + "${workspaceFolder}/packages/utils/dist/index.js", + "${workspaceFolder}/packages/utils/src/ts-estree.ts", + "${workspaceFolder}/packages/utils/dist/ts-estree.js", "${workspaceFolder}/packages/type-utils/src/index.ts", "${workspaceFolder}/packages/type-utils/dist/index.js", "${workspaceFolder}/packages/parser/src/index.ts", @@ -54,10 +54,10 @@ "console": "integratedTerminal", "internalConsoleOptions": "neverOpen", "skipFiles": [ - "${workspaceFolder}/packages/experimental-utils/src/index.ts", - "${workspaceFolder}/packages/experimental-utils/dist/index.js", - "${workspaceFolder}/packages/experimental-utils/src/ts-estree.ts", - "${workspaceFolder}/packages/experimental-utils/dist/ts-estree.js", + "${workspaceFolder}/packages/utils/src/index.ts", + "${workspaceFolder}/packages/utils/dist/index.js", + "${workspaceFolder}/packages/utils/src/ts-estree.ts", + "${workspaceFolder}/packages/utils/dist/ts-estree.js", "${workspaceFolder}/packages/type-utils/src/index.ts", "${workspaceFolder}/packages/type-utils/dist/index.js", "${workspaceFolder}/packages/parser/src/index.ts", @@ -88,10 +88,10 @@ "console": "integratedTerminal", "internalConsoleOptions": "neverOpen", "skipFiles": [ - "${workspaceFolder}/packages/experimental-utils/src/index.ts", - "${workspaceFolder}/packages/experimental-utils/dist/index.js", - "${workspaceFolder}/packages/experimental-utils/src/ts-estree.ts", - "${workspaceFolder}/packages/experimental-utils/dist/ts-estree.js", + "${workspaceFolder}/packages/utils/src/index.ts", + "${workspaceFolder}/packages/utils/dist/index.js", + "${workspaceFolder}/packages/utils/src/ts-estree.ts", + "${workspaceFolder}/packages/utils/dist/ts-estree.js", "${workspaceFolder}/packages/type-utils/src/ts-estree.ts", "${workspaceFolder}/packages/type-utils/dist/ts-estree.js", "${workspaceFolder}/packages/parser/src/index.ts", @@ -122,10 +122,10 @@ "console": "integratedTerminal", "internalConsoleOptions": "neverOpen", "skipFiles": [ - "${workspaceFolder}/packages/experimental-utils/src/index.ts", - "${workspaceFolder}/packages/experimental-utils/dist/index.js", - "${workspaceFolder}/packages/experimental-utils/src/ts-estree.ts", - "${workspaceFolder}/packages/experimental-utils/dist/ts-estree.js", + "${workspaceFolder}/packages/utils/src/index.ts", + "${workspaceFolder}/packages/utils/dist/index.js", + "${workspaceFolder}/packages/utils/src/ts-estree.ts", + "${workspaceFolder}/packages/utils/dist/ts-estree.js", "${workspaceFolder}/packages/type-utils/src/index.ts", "${workspaceFolder}/packages/type-utils/dist/index.js", "${workspaceFolder}/packages/parser/src/index.ts", @@ -143,8 +143,8 @@ { "type": "node", "request": "launch", - "name": "Run currently opened experimental-utils test", - "cwd": "${workspaceFolder}/packages/experimental-utils/", + "name": "Run currently opened utils test", + "cwd": "${workspaceFolder}/packages/utils/", "program": "${workspaceFolder}/node_modules/jest/bin/jest.js", "args": [ "--runInBand", @@ -156,10 +156,10 @@ "console": "integratedTerminal", "internalConsoleOptions": "neverOpen", "skipFiles": [ - "${workspaceFolder}/packages/experimental-utils/src/index.ts", - "${workspaceFolder}/packages/experimental-utils/dist/index.js", - "${workspaceFolder}/packages/experimental-utils/src/ts-estree.ts", - "${workspaceFolder}/packages/experimental-utils/dist/ts-estree.js", + "${workspaceFolder}/packages/utils/src/index.ts", + "${workspaceFolder}/packages/utils/dist/index.js", + "${workspaceFolder}/packages/utils/src/ts-estree.ts", + "${workspaceFolder}/packages/utils/dist/ts-estree.js", "${workspaceFolder}/packages/type-utils/src/index.ts", "${workspaceFolder}/packages/type-utils/dist/index.js", "${workspaceFolder}/packages/parser/src/index.ts", @@ -190,10 +190,10 @@ "console": "integratedTerminal", "internalConsoleOptions": "neverOpen", "skipFiles": [ - "${workspaceFolder}/packages/experimental-utils/src/index.ts", - "${workspaceFolder}/packages/experimental-utils/dist/index.js", - "${workspaceFolder}/packages/experimental-utils/src/ts-estree.ts", - "${workspaceFolder}/packages/experimental-utils/dist/ts-estree.js", + "${workspaceFolder}/packages/utils/src/index.ts", + "${workspaceFolder}/packages/utils/dist/index.js", + "${workspaceFolder}/packages/utils/src/ts-estree.ts", + "${workspaceFolder}/packages/utils/dist/ts-estree.js", "${workspaceFolder}/packages/type-utils/src/index.ts", "${workspaceFolder}/packages/type-utils/dist/index.js", "${workspaceFolder}/packages/parser/src/index.ts", @@ -224,10 +224,10 @@ "console": "integratedTerminal", "internalConsoleOptions": "neverOpen", "skipFiles": [ - "${workspaceFolder}/packages/experimental-utils/src/index.ts", - "${workspaceFolder}/packages/experimental-utils/dist/index.js", - "${workspaceFolder}/packages/experimental-utils/src/ts-estree.ts", - "${workspaceFolder}/packages/experimental-utils/dist/ts-estree.js", + "${workspaceFolder}/packages/utils/src/index.ts", + "${workspaceFolder}/packages/utils/dist/index.js", + "${workspaceFolder}/packages/utils/src/ts-estree.ts", + "${workspaceFolder}/packages/utils/dist/ts-estree.js", "${workspaceFolder}/packages/type-utils/src/index.ts", "${workspaceFolder}/packages/type-utils/dist/index.js", "${workspaceFolder}/packages/parser/src/index.ts", diff --git a/README.md b/README.md index 41ff35f1af2..e6fe25caca5 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ See https://typescript-eslint.io/docs/development/architecture/packages for more - [`@typescript-eslint/eslint-plugin`](./packages/eslint-plugin) - [`@typescript-eslint/parser`](./packages/parser) - [`@typescript-eslint/eslint-plugin-tslint`](./packages/eslint-plugin-tslint) -- [`@typescript-eslint/experimental-utils`](./packages/experimental-utils) +- [`@typescript-eslint/utils`](./packages/utils) - [`@typescript-eslint/typescript-estree`](./packages/typescript-estree) - [`@typescript-eslint/scope-manager`](./packages/scope-manager) diff --git a/docs/development/CUSTOM_RULES.md b/docs/development/CUSTOM_RULES.md index 692c08b4b1e..f41cd7b72ca 100644 --- a/docs/development/CUSTOM_RULES.md +++ b/docs/development/CUSTOM_RULES.md @@ -11,13 +11,13 @@ You should be familiar with [ESLint's developer guide](https://eslint.org/docs/d As long as you are using `@typescript-eslint/parser` as the `parser` in your ESLint configuration, custom ESLint rules generally work the same way for JavaScript and TypeScript code. The main three changes to custom rules writing are: -- [Utils Package](#utils-package): we recommend using `@typescript-eslint/experimental-utils` to create custom rules +- [Utils Package](#utils-package): we recommend using `@typescript-eslint/utils` to create custom rules - [AST Extensions](#ast-extensions): targeting TypeScript-specific syntax in your rule selectors - [Typed Rules](#typed-rules): using the TypeScript type checker to inform rule logic ## Utils Package -The `@typescript-eslint/experimental-utils` package acts as a replacement package for `eslint` that exports all the same objects and types, but with typescript-eslint support. +The `@typescript-eslint/utils` package acts as a replacement package for `eslint` that exports all the same objects and types, but with typescript-eslint support. It also exports common utility functions and constants most custom typescript-eslint rules tend to use. :::caution @@ -27,7 +27,7 @@ You should generally not need to import from `eslint` when writing custom typesc ### `RuleCreator` -The recommended way to create custom ESLint rules that make use of typescript-eslint features and/or syntax is with the `ESLintUtils.RuleCreator` function exported by `@typescript-eslint/experimental-utils`. +The recommended way to create custom ESLint rules that make use of typescript-eslint features and/or syntax is with the `ESLintUtils.RuleCreator` function exported by `@typescript-eslint/utils`. It takes in a function that transforms a rule name into its documentation URL, then returns a function that takes in a rule module object. `RuleCreator` will infer the allowed message IDs the rule is allowed to emit from the provided `meta.messages` object. @@ -35,7 +35,7 @@ It takes in a function that transforms a rule name into its documentation URL, t This rule bans function declarations that start with a lower-case letter: ```ts -import { ESLintUtils } from '@typescript-eslint/experimental-utils'; +import { ESLintUtils } from '@typescript-eslint/utils'; const createRule = ESLintUtils.RuleCreator( name => `https://example.com/rule/${name}`, @@ -70,7 +70,7 @@ export const rule = createRule({ }); ``` -`RuleCreator` rule creator functions return rules typed as the `RuleModule` interface exported by `@typescript-eslint/experimental-utils`. +`RuleCreator` rule creator functions return rules typed as the `RuleModule` interface exported by `@typescript-eslint/utils`. It allows specifying generics for: - `MessageIds`: a union of string literal message IDs that may be reported @@ -79,7 +79,7 @@ It allows specifying generics for: If the rule is able to take in rule options, declare them as a tuple type containing a single object of rule options: ```ts -import { ESLintUtils } from '@typescript-eslint/experimental-utils'; +import { ESLintUtils } from '@typescript-eslint/utils'; type MessageIds = 'lowercase' | 'uppercase'; @@ -101,7 +101,7 @@ Although it is generally not recommended to create custom rules without document It applies the same type inference as the `createRule`s above without enforcing a documentation URL. ```ts -import { ESLintUtils } from '@typescript-eslint/experimental-utils'; +import { ESLintUtils } from '@typescript-eslint/utils'; export const rule = ESLintUtils.RuleCreator.withoutDocs({ create(context) { @@ -126,7 +126,7 @@ You can query for them in your rule selectors. This version of the above rule instead bans interface declaration names that start with a lower-case letter: ```ts -import { ESLintUtils } from '@typescript-eslint/experimental-utils'; +import { ESLintUtils } from '@typescript-eslint/utils'; export const rule = createRule({ create(context) { @@ -144,7 +144,7 @@ export const rule = createRule({ ### Node Types -TypeScript types for nodes exist in a `TSESTree` namespace exported by `@typescript-eslint/experimental-utils`. +TypeScript types for nodes exist in a `TSESTree` namespace exported by `@typescript-eslint/utils`. The above rule body could be better written in TypeScript with a type annotation on the `node`: An `AST_NODE_TYPES` enum is exported as well to hold the values for AST node `type` properties. @@ -153,10 +153,7 @@ An `AST_NODE_TYPES` enum is exported as well to hold the values for AST node `ty For example, checking `node.type` can narrow down the type of the `node`: ```ts -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; export function describeNode(node: TSESTree.Node): string { switch (node.type) { @@ -180,10 +177,7 @@ In that case, it is best to add an explicit type declaration. This rule snippet targets name nodes of both function and interface declarations: ```ts -import { - AST_NODE_TYPES, - ESLintUtils, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, ESLintUtils } from '@typescript-eslint/utils'; export const rule = createRule({ create(context) { @@ -211,7 +205,7 @@ Read TypeScript's [Compiler APIs > Using the Type Checker](https://github.com/mi The biggest addition typescript-eslint brings to ESLint rules is the ability to use TypeScript's type checker APIs. -`@typescript-eslint/experimental-utils` exports an `ESLintUtils` namespace containing a `getParserServices` function that takes in an ESLint context and returns a `parserServices` object. +`@typescript-eslint/utils` exports an `ESLintUtils` namespace containing a `getParserServices` function that takes in an ESLint context and returns a `parserServices` object. That `parserServices` object contains: @@ -224,7 +218,7 @@ By mapping from ESTree nodes to TypeScript nodes and retrieving the TypeScript p This rule bans for-of looping over an enum by using the type-checker via typescript-eslint and TypeScript APIs: ```ts -import { ESLintUtils } from '@typescript-eslint/experimental-utils'; +import { ESLintUtils } from '@typescript-eslint/utils'; import * as ts from 'typescript'; import * as tsutils from 'tsutils'; @@ -268,7 +262,7 @@ export const rule: eslint.Rule.RuleModule = { ## Testing -`@typescript-eslint/experimental-utils` exports a `RuleTester` with a similar API to the built-in [ESLint `RuleTester`](https://eslint.org/docs/developer-guide/nodejs-api#ruletester). +`@typescript-eslint/utils` exports a `RuleTester` with a similar API to the built-in [ESLint `RuleTester`](https://eslint.org/docs/developer-guide/nodejs-api#ruletester). It should be provided with the same `parser` and `parserOptions` you would use in your ESLint configuration. ### Testing Untyped Rules @@ -276,7 +270,7 @@ It should be provided with the same `parser` and `parserOptions` you would use i For rules that don't need type information, passing just the `parser` will do: ```ts -import { ESLintUtils } from '@typescript-eslint/experimental-utils'; +import { ESLintUtils } from '@typescript-eslint/utils'; import rule from './my-rule'; const ruleTester = new ESLintUtils.RuleTester({ @@ -295,7 +289,7 @@ For rules that do need type information, `parserOptions` must be passed in as we Tests must have at least an absolute `tsconfigRootDir` path provided as well as a relative `project` path from that directory: ```ts -import { ESLintUtils } from '@typescript-eslint/experimental-utils'; +import { ESLintUtils } from '@typescript-eslint/utils'; import rule from './my-typed-rule'; const ruleTester = new ESLintUtils.RuleTester({ diff --git a/docs/development/architecture/PACKAGES.md b/docs/development/architecture/PACKAGES.md index a212629ce77..d9bd3c3da76 100644 --- a/docs/development/architecture/PACKAGES.md +++ b/docs/development/architecture/PACKAGES.md @@ -55,9 +55,9 @@ It works by: A "scope analyser" traverses an AST and builds a model of how variables (and in our case, types) are defined and consumed by the source code. This form of static analysis allows you to understand and trace variables throughout the program, allowing you to access powerful information about a program without needing to drop into the much, much heavier type information. -## `@typescript-eslint/experimental-utils` +## `@typescript-eslint/utils` -[`@typescript-eslint/experimental-utils`] contains public utilities for writing custom rules and plugins in TypeScript. +[`@typescript-eslint/utils`] contains public utilities for writing custom rules and plugins in TypeScript. Rules declared in `@typescript-eslint/eslint-plugin` are created using its utility functions. Any custom rules you write generally will be as well. @@ -71,7 +71,7 @@ Any custom rules you write generally will be as well. [`@typescript-eslint/eslint-plugin-tslint`]: https://github.com/typescript-eslint/typescript-eslint/tree/main/packages/eslint-plugin-tslint [`@typescript-eslint/eslint-plugin`]: https://github.com/typescript-eslint/typescript-eslint/tree/main/packages/eslint-plugin -[`@typescript-eslint/experimental-utils`]: https://github.com/typescript-eslint/typescript-eslint/tree/main/packages/experimental-utils +[`@typescript-eslint/utils`]: https://github.com/typescript-eslint/typescript-eslint/tree/main/packages/utils [`@typescript-eslint/parser`]: https://github.com/typescript-eslint/typescript-eslint/tree/main/packages/parser [`@typescript-eslint/scope-manager`]: https://github.com/typescript-eslint/typescript-eslint/tree/main/packages/scope-manager [`@typescript-eslint/typescript-estree`]: https://github.com/typescript-eslint/typescript-eslint/tree/main/packages/typescript-estree diff --git a/packages/ast-spec/README.md b/packages/ast-spec/README.md index 6d29fecd24e..388241c0061 100644 --- a/packages/ast-spec/README.md +++ b/packages/ast-spec/README.md @@ -16,7 +16,7 @@ It includes: **You probably don't want to use it directly.** -If you're building an ESLint plugin, consider using [`@typescript-eslint/experimental-utils`](../experimental-utils) and [`@typescript-eslint/type-utils`](../type-utils). +If you're building an ESLint plugin, consider using [`@typescript-eslint/utils`](../utils) and [`@typescript-eslint/type-utils`](../type-utils). If you're parsing TypeScript code, consider using [`@typescript-eslint/typescript-estree`](../typescript-estree). ## Contributing diff --git a/packages/eslint-plugin-internal/package.json b/packages/eslint-plugin-internal/package.json index a443fd6334f..e077a469eef 100644 --- a/packages/eslint-plugin-internal/package.json +++ b/packages/eslint-plugin-internal/package.json @@ -14,8 +14,8 @@ }, "dependencies": { "@types/prettier": "*", - "@typescript-eslint/experimental-utils": "5.8.1", "@typescript-eslint/scope-manager": "5.8.1", + "@typescript-eslint/utils": "5.8.1", "prettier": "*" } } diff --git a/packages/eslint-plugin-internal/src/rules/no-poorly-typed-ts-props.ts b/packages/eslint-plugin-internal/src/rules/no-poorly-typed-ts-props.ts index f91068d9ffe..456a17f7da1 100644 --- a/packages/eslint-plugin-internal/src/rules/no-poorly-typed-ts-props.ts +++ b/packages/eslint-plugin-internal/src/rules/no-poorly-typed-ts-props.ts @@ -1,8 +1,4 @@ -import { - ESLintUtils, - TSESLint, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { ESLintUtils, TSESLint, TSESTree } from '@typescript-eslint/utils'; import { createRule } from '../util'; /* diff --git a/packages/eslint-plugin-internal/src/rules/no-typescript-default-import.ts b/packages/eslint-plugin-internal/src/rules/no-typescript-default-import.ts index c8256131249..437e244b9db 100644 --- a/packages/eslint-plugin-internal/src/rules/no-typescript-default-import.ts +++ b/packages/eslint-plugin-internal/src/rules/no-typescript-default-import.ts @@ -1,7 +1,4 @@ -import { - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; import { createRule } from '../util'; /* diff --git a/packages/eslint-plugin-internal/src/rules/no-typescript-estree-import.ts b/packages/eslint-plugin-internal/src/rules/no-typescript-estree-import.ts index 3cc96a0f600..022fd98b7ca 100644 --- a/packages/eslint-plugin-internal/src/rules/no-typescript-estree-import.ts +++ b/packages/eslint-plugin-internal/src/rules/no-typescript-estree-import.ts @@ -2,7 +2,7 @@ import { createRule } from '../util'; const TSESTREE_NAME = '@typescript-eslint/typescript-estree'; const TYPES_NAME = '@typescript-eslint/types'; -const UTILS_NAME = '@typescript-eslint/experimental-utils'; +const UTILS_NAME = '@typescript-eslint/utils'; /* Typescript will not error if people use typescript-estree within eslint-plugin. diff --git a/packages/eslint-plugin-internal/src/rules/plugin-test-formatting.ts b/packages/eslint-plugin-internal/src/rules/plugin-test-formatting.ts index 81fcb8c41cf..8b3ec8ffdb8 100644 --- a/packages/eslint-plugin-internal/src/rules/plugin-test-formatting.ts +++ b/packages/eslint-plugin-internal/src/rules/plugin-test-formatting.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import { format, resolveConfig } from 'prettier'; import { createRule } from '../util'; diff --git a/packages/eslint-plugin-internal/src/rules/prefer-ast-types-enum.ts b/packages/eslint-plugin-internal/src/rules/prefer-ast-types-enum.ts index e98d0904af5..d74104e5fcf 100755 --- a/packages/eslint-plugin-internal/src/rules/prefer-ast-types-enum.ts +++ b/packages/eslint-plugin-internal/src/rules/prefer-ast-types-enum.ts @@ -2,7 +2,7 @@ import { AST_NODE_TYPES, AST_TOKEN_TYPES, TSESTree, -} from '@typescript-eslint/experimental-utils'; +} from '@typescript-eslint/utils'; import { DefinitionType } from '@typescript-eslint/scope-manager'; import { createRule } from '../util'; diff --git a/packages/eslint-plugin-internal/src/util/createRule.ts b/packages/eslint-plugin-internal/src/util/createRule.ts index 2ac52d199fc..62f4e54b022 100644 --- a/packages/eslint-plugin-internal/src/util/createRule.ts +++ b/packages/eslint-plugin-internal/src/util/createRule.ts @@ -1,4 +1,4 @@ -import { ESLintUtils } from '@typescript-eslint/experimental-utils'; +import { ESLintUtils } from '@typescript-eslint/utils'; // note - cannot migrate this to an import statement because it will make TSC copy the package.json to the dist folder // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment diff --git a/packages/eslint-plugin-internal/tests/RuleTester.ts b/packages/eslint-plugin-internal/tests/RuleTester.ts index 3b7d3afc554..260e222194b 100644 --- a/packages/eslint-plugin-internal/tests/RuleTester.ts +++ b/packages/eslint-plugin-internal/tests/RuleTester.ts @@ -1,4 +1,4 @@ -import { ESLintUtils } from '@typescript-eslint/experimental-utils'; +import { ESLintUtils } from '@typescript-eslint/utils'; import path from 'path'; function getFixturesRootDir(): string { diff --git a/packages/eslint-plugin-internal/tests/rules/no-typescript-estree.test.ts b/packages/eslint-plugin-internal/tests/rules/no-typescript-estree.test.ts index fe31f051a09..120c72def8c 100644 --- a/packages/eslint-plugin-internal/tests/rules/no-typescript-estree.test.ts +++ b/packages/eslint-plugin-internal/tests/rules/no-typescript-estree.test.ts @@ -10,9 +10,9 @@ const ruleTester = new RuleTester({ ruleTester.run('no-typescript-estree-import', rule, { valid: [ - "import { foo } from '@typescript-eslint/experimental-utils';", - "import foo from '@typescript-eslint/experimental-utils';", - "import * as foo from '@typescript-eslint/experimental-utils';", + "import { foo } from '@typescript-eslint/utils';", + "import foo from '@typescript-eslint/utils';", + "import * as foo from '@typescript-eslint/utils';", ], invalid: batchedSingleLineTests({ code: ` @@ -24,12 +24,12 @@ import foo from '@typescript-eslint/types'; import * as foo from '@typescript-eslint/types'; `, output: ` -import { foo } from '@typescript-eslint/experimental-utils'; -import foo from '@typescript-eslint/experimental-utils'; -import * as foo from '@typescript-eslint/experimental-utils'; -import { foo } from '@typescript-eslint/experimental-utils'; -import foo from '@typescript-eslint/experimental-utils'; -import * as foo from '@typescript-eslint/experimental-utils'; +import { foo } from '@typescript-eslint/utils'; +import foo from '@typescript-eslint/utils'; +import * as foo from '@typescript-eslint/utils'; +import { foo } from '@typescript-eslint/utils'; +import foo from '@typescript-eslint/utils'; +import * as foo from '@typescript-eslint/utils'; `, errors: [ { diff --git a/packages/eslint-plugin-internal/tests/rules/prefer-ast-types-enum.test.ts b/packages/eslint-plugin-internal/tests/rules/prefer-ast-types-enum.test.ts index 94f8830a04e..d418526db5f 100644 --- a/packages/eslint-plugin-internal/tests/rules/prefer-ast-types-enum.test.ts +++ b/packages/eslint-plugin-internal/tests/rules/prefer-ast-types-enum.test.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - AST_TOKEN_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, AST_TOKEN_TYPES } from '@typescript-eslint/utils'; import { DefinitionType } from '@typescript-eslint/scope-manager'; import rule from '../../src/rules/prefer-ast-types-enum'; import { batchedSingleLineTests, RuleTester } from '../RuleTester'; diff --git a/packages/eslint-plugin-internal/tsconfig.build.json b/packages/eslint-plugin-internal/tsconfig.build.json index b40961d2d9a..744454d20b2 100644 --- a/packages/eslint-plugin-internal/tsconfig.build.json +++ b/packages/eslint-plugin-internal/tsconfig.build.json @@ -9,5 +9,5 @@ "resolveJsonModule": true }, "include": ["src", "typings"], - "references": [{ "path": "../experimental-utils/tsconfig.build.json" }] + "references": [{ "path": "../utils/tsconfig.build.json" }] } diff --git a/packages/eslint-plugin-internal/tsconfig.json b/packages/eslint-plugin-internal/tsconfig.json index 597a5eaee95..12e8b67a5a3 100644 --- a/packages/eslint-plugin-internal/tsconfig.json +++ b/packages/eslint-plugin-internal/tsconfig.json @@ -5,5 +5,5 @@ "rootDir": "." }, "include": ["src", "typings", "tests"], - "references": [{ "path": "../experimental-utils/tsconfig.build.json" }] + "references": [{ "path": "../utils/tsconfig.build.json" }] } diff --git a/packages/eslint-plugin-tslint/package.json b/packages/eslint-plugin-tslint/package.json index 6e6afaf619b..fdb43270649 100644 --- a/packages/eslint-plugin-tslint/package.json +++ b/packages/eslint-plugin-tslint/package.json @@ -38,7 +38,7 @@ "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@typescript-eslint/experimental-utils": "5.8.1", + "@typescript-eslint/utils": "5.8.1", "lodash": "^4.17.21" }, "peerDependencies": { diff --git a/packages/eslint-plugin-tslint/src/rules/config.ts b/packages/eslint-plugin-tslint/src/rules/config.ts index 7bf51826541..0e4b29b50cc 100644 --- a/packages/eslint-plugin-tslint/src/rules/config.ts +++ b/packages/eslint-plugin-tslint/src/rules/config.ts @@ -1,4 +1,4 @@ -import { ESLintUtils } from '@typescript-eslint/experimental-utils'; +import { ESLintUtils } from '@typescript-eslint/utils'; import memoize from 'lodash/memoize'; import { Configuration, RuleSeverity } from 'tslint'; import { CustomLinter } from '../custom-linter'; diff --git a/packages/eslint-plugin-tslint/tests/index.spec.ts b/packages/eslint-plugin-tslint/tests/index.spec.ts index ab88970867e..6c0d8cdf994 100644 --- a/packages/eslint-plugin-tslint/tests/index.spec.ts +++ b/packages/eslint-plugin-tslint/tests/index.spec.ts @@ -1,4 +1,4 @@ -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; import * as parser from '@typescript-eslint/parser'; import { readFileSync } from 'fs'; import rule, { Options } from '../src/rules/config'; diff --git a/packages/eslint-plugin-tslint/tsconfig.build.json b/packages/eslint-plugin-tslint/tsconfig.build.json index 60cfdc79ee7..ce8f56e7294 100644 --- a/packages/eslint-plugin-tslint/tsconfig.build.json +++ b/packages/eslint-plugin-tslint/tsconfig.build.json @@ -6,5 +6,5 @@ "resolveJsonModule": true }, "include": ["src"], - "references": [{ "path": "../experimental-utils/tsconfig.build.json" }] + "references": [{ "path": "../utils/tsconfig.build.json" }] } diff --git a/packages/eslint-plugin-tslint/tsconfig.json b/packages/eslint-plugin-tslint/tsconfig.json index d4bc6ebe57d..b2f22d5b95d 100644 --- a/packages/eslint-plugin-tslint/tsconfig.json +++ b/packages/eslint-plugin-tslint/tsconfig.json @@ -6,5 +6,5 @@ }, "include": ["src", "tests"], "exclude": ["tests/test-project", "tests/test-tslint-rules-directory"], - "references": [{ "path": "../experimental-utils/tsconfig.build.json" }] + "references": [{ "path": "../utils/tsconfig.build.json" }] } diff --git a/packages/eslint-plugin/index.d.ts b/packages/eslint-plugin/index.d.ts index 8092cabcc4b..0a45db55e32 100644 --- a/packages/eslint-plugin/index.d.ts +++ b/packages/eslint-plugin/index.d.ts @@ -1,4 +1,4 @@ -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; export const rules: Record>; export const configs: Record; diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json index ad6bbd7f109..ddd70d1fd2f 100644 --- a/packages/eslint-plugin/package.json +++ b/packages/eslint-plugin/package.json @@ -44,9 +44,9 @@ "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@typescript-eslint/experimental-utils": "5.8.1", "@typescript-eslint/scope-manager": "5.8.1", "@typescript-eslint/type-utils": "5.8.1", + "@typescript-eslint/utils": "5.8.1", "debug": "^4.3.2", "functional-red-black-tree": "^1.0.1", "ignore": "^5.1.8", diff --git a/packages/eslint-plugin/src/rules/adjacent-overload-signatures.ts b/packages/eslint-plugin/src/rules/adjacent-overload-signatures.ts index c0eec499ab3..ab45274e165 100644 --- a/packages/eslint-plugin/src/rules/adjacent-overload-signatures.ts +++ b/packages/eslint-plugin/src/rules/adjacent-overload-signatures.ts @@ -1,7 +1,4 @@ -import { - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; import * as util from '../util'; type RuleNode = diff --git a/packages/eslint-plugin/src/rules/array-type.ts b/packages/eslint-plugin/src/rules/array-type.ts index f6e601225ce..3c0cad93ed1 100644 --- a/packages/eslint-plugin/src/rules/array-type.ts +++ b/packages/eslint-plugin/src/rules/array-type.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; /** diff --git a/packages/eslint-plugin/src/rules/ban-ts-comment.ts b/packages/eslint-plugin/src/rules/ban-ts-comment.ts index 020b0a33a3b..96b01d8efc2 100644 --- a/packages/eslint-plugin/src/rules/ban-ts-comment.ts +++ b/packages/eslint-plugin/src/rules/ban-ts-comment.ts @@ -1,4 +1,4 @@ -import { AST_TOKEN_TYPES } from '@typescript-eslint/experimental-utils'; +import { AST_TOKEN_TYPES } from '@typescript-eslint/utils'; import * as util from '../util'; interface Options { diff --git a/packages/eslint-plugin/src/rules/ban-tslint-comment.ts b/packages/eslint-plugin/src/rules/ban-tslint-comment.ts index 14d32e72d88..99a427eead0 100644 --- a/packages/eslint-plugin/src/rules/ban-tslint-comment.ts +++ b/packages/eslint-plugin/src/rules/ban-tslint-comment.ts @@ -1,4 +1,4 @@ -import { AST_TOKEN_TYPES } from '@typescript-eslint/experimental-utils'; +import { AST_TOKEN_TYPES } from '@typescript-eslint/utils'; import * as util from '../util'; // tslint regex diff --git a/packages/eslint-plugin/src/rules/ban-types.ts b/packages/eslint-plugin/src/rules/ban-types.ts index ad0620f2185..38224b15ce9 100644 --- a/packages/eslint-plugin/src/rules/ban-types.ts +++ b/packages/eslint-plugin/src/rules/ban-types.ts @@ -1,8 +1,4 @@ -import { - TSESLint, - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESLint, TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; import * as util from '../util'; type Types = Record< diff --git a/packages/eslint-plugin/src/rules/brace-style.ts b/packages/eslint-plugin/src/rules/brace-style.ts index 6635303b386..5d820b4c7e6 100644 --- a/packages/eslint-plugin/src/rules/brace-style.ts +++ b/packages/eslint-plugin/src/rules/brace-style.ts @@ -1,4 +1,4 @@ -import { TSESTree } from '@typescript-eslint/experimental-utils'; +import { TSESTree } from '@typescript-eslint/utils'; import { getESLintCoreRule } from '../util/getESLintCoreRule'; import { InferOptionsTypeFromRule, diff --git a/packages/eslint-plugin/src/rules/class-literal-property-style.ts b/packages/eslint-plugin/src/rules/class-literal-property-style.ts index b3f9fb401c2..705485e0050 100644 --- a/packages/eslint-plugin/src/rules/class-literal-property-style.ts +++ b/packages/eslint-plugin/src/rules/class-literal-property-style.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; type Options = ['fields' | 'getters']; diff --git a/packages/eslint-plugin/src/rules/comma-dangle.ts b/packages/eslint-plugin/src/rules/comma-dangle.ts index 298a3e92639..241b3527284 100644 --- a/packages/eslint-plugin/src/rules/comma-dangle.ts +++ b/packages/eslint-plugin/src/rules/comma-dangle.ts @@ -1,9 +1,6 @@ import * as util from '../util'; import { getESLintCoreRule } from '../util/getESLintCoreRule'; -import { - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; const baseRule = getESLintCoreRule('comma-dangle'); diff --git a/packages/eslint-plugin/src/rules/comma-spacing.ts b/packages/eslint-plugin/src/rules/comma-spacing.ts index c78322be8ea..2774324d259 100644 --- a/packages/eslint-plugin/src/rules/comma-spacing.ts +++ b/packages/eslint-plugin/src/rules/comma-spacing.ts @@ -1,7 +1,4 @@ -import { - TSESTree, - AST_TOKEN_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_TOKEN_TYPES } from '@typescript-eslint/utils'; import { isClosingParenToken, isCommaToken, diff --git a/packages/eslint-plugin/src/rules/consistent-indexed-object-style.ts b/packages/eslint-plugin/src/rules/consistent-indexed-object-style.ts index 2c00dfd43eb..bd511d0cd0e 100644 --- a/packages/eslint-plugin/src/rules/consistent-indexed-object-style.ts +++ b/packages/eslint-plugin/src/rules/consistent-indexed-object-style.ts @@ -1,8 +1,4 @@ -import { - AST_NODE_TYPES, - TSESLint, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESLint, TSESTree } from '@typescript-eslint/utils'; import { createRule } from '../util'; type MessageIds = 'preferRecord' | 'preferIndexSignature'; diff --git a/packages/eslint-plugin/src/rules/consistent-type-assertions.ts b/packages/eslint-plugin/src/rules/consistent-type-assertions.ts index 61738179066..4a75edd7bda 100644 --- a/packages/eslint-plugin/src/rules/consistent-type-assertions.ts +++ b/packages/eslint-plugin/src/rules/consistent-type-assertions.ts @@ -1,8 +1,5 @@ import * as util from '../util'; -import { - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; // intentionally mirroring the options type MessageIds = diff --git a/packages/eslint-plugin/src/rules/consistent-type-definitions.ts b/packages/eslint-plugin/src/rules/consistent-type-definitions.ts index c71d812efd9..56581ef21fc 100644 --- a/packages/eslint-plugin/src/rules/consistent-type-definitions.ts +++ b/packages/eslint-plugin/src/rules/consistent-type-definitions.ts @@ -3,7 +3,7 @@ import { AST_TOKEN_TYPES, TSESLint, TSESTree, -} from '@typescript-eslint/experimental-utils'; +} from '@typescript-eslint/utils'; import * as util from '../util'; export default util.createRule({ diff --git a/packages/eslint-plugin/src/rules/consistent-type-exports.ts b/packages/eslint-plugin/src/rules/consistent-type-exports.ts index 7ad52679226..36fa561bcb3 100644 --- a/packages/eslint-plugin/src/rules/consistent-type-exports.ts +++ b/packages/eslint-plugin/src/rules/consistent-type-exports.ts @@ -3,7 +3,7 @@ import { ParserServices, AST_NODE_TYPES, TSESLint, -} from '@typescript-eslint/experimental-utils'; +} from '@typescript-eslint/utils'; import { SymbolFlags } from 'typescript'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/consistent-type-imports.ts b/packages/eslint-plugin/src/rules/consistent-type-imports.ts index 538c89c3cf3..6badf04d4dd 100644 --- a/packages/eslint-plugin/src/rules/consistent-type-imports.ts +++ b/packages/eslint-plugin/src/rules/consistent-type-imports.ts @@ -3,7 +3,7 @@ import { TSESTree, AST_TOKEN_TYPES, AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +} from '@typescript-eslint/utils'; import * as util from '../util'; type Prefer = 'type-imports' | 'no-type-imports'; diff --git a/packages/eslint-plugin/src/rules/default-param-last.ts b/packages/eslint-plugin/src/rules/default-param-last.ts index 9673d852dd1..a701e3765dd 100644 --- a/packages/eslint-plugin/src/rules/default-param-last.ts +++ b/packages/eslint-plugin/src/rules/default-param-last.ts @@ -1,8 +1,5 @@ import { createRule } from '../util'; -import { - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; export default createRule({ name: 'default-param-last', diff --git a/packages/eslint-plugin/src/rules/dot-notation.ts b/packages/eslint-plugin/src/rules/dot-notation.ts index 01db4680cbe..29db2f3fe1e 100644 --- a/packages/eslint-plugin/src/rules/dot-notation.ts +++ b/packages/eslint-plugin/src/rules/dot-notation.ts @@ -1,4 +1,4 @@ -import { TSESTree } from '@typescript-eslint/experimental-utils'; +import { TSESTree } from '@typescript-eslint/utils'; import * as ts from 'typescript'; import * as tsutils from 'tsutils'; import { getESLintCoreRule } from '../util/getESLintCoreRule'; diff --git a/packages/eslint-plugin/src/rules/explicit-function-return-type.ts b/packages/eslint-plugin/src/rules/explicit-function-return-type.ts index e9a27b2b1fc..233b07bbc6a 100644 --- a/packages/eslint-plugin/src/rules/explicit-function-return-type.ts +++ b/packages/eslint-plugin/src/rules/explicit-function-return-type.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; import { checkFunctionReturnType, diff --git a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts index 8a8446ec0af..b67221aee54 100644 --- a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts +++ b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts @@ -3,7 +3,7 @@ import { AST_TOKEN_TYPES, TSESLint, TSESTree, -} from '@typescript-eslint/experimental-utils'; +} from '@typescript-eslint/utils'; import * as util from '../util'; type AccessibilityLevel = diff --git a/packages/eslint-plugin/src/rules/explicit-module-boundary-types.ts b/packages/eslint-plugin/src/rules/explicit-module-boundary-types.ts index adaacaf363f..5bbfa7ebbea 100644 --- a/packages/eslint-plugin/src/rules/explicit-module-boundary-types.ts +++ b/packages/eslint-plugin/src/rules/explicit-module-boundary-types.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import { DefinitionType } from '@typescript-eslint/scope-manager'; import * as util from '../util'; import { diff --git a/packages/eslint-plugin/src/rules/func-call-spacing.ts b/packages/eslint-plugin/src/rules/func-call-spacing.ts index 254f8939660..3817fe9af41 100644 --- a/packages/eslint-plugin/src/rules/func-call-spacing.ts +++ b/packages/eslint-plugin/src/rules/func-call-spacing.ts @@ -1,4 +1,4 @@ -import { TSESTree } from '@typescript-eslint/experimental-utils'; +import { TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; export type Options = [ diff --git a/packages/eslint-plugin/src/rules/indent-new-do-not-use/BinarySearchTree.ts b/packages/eslint-plugin/src/rules/indent-new-do-not-use/BinarySearchTree.ts index 7c4b78f5b7b..8c2db5cb18b 100644 --- a/packages/eslint-plugin/src/rules/indent-new-do-not-use/BinarySearchTree.ts +++ b/packages/eslint-plugin/src/rules/indent-new-do-not-use/BinarySearchTree.ts @@ -1,7 +1,7 @@ // The following code is adapted from the the code in eslint. // License: https://github.com/eslint/eslint/blob/48700fc8408f394887cdedd071b22b757700fdcb/LICENSE -import { TSESTree } from '@typescript-eslint/experimental-utils'; +import { TSESTree } from '@typescript-eslint/utils'; import createTree from 'functional-red-black-tree'; export interface TreeValue { diff --git a/packages/eslint-plugin/src/rules/indent-new-do-not-use/OffsetStorage.ts b/packages/eslint-plugin/src/rules/indent-new-do-not-use/OffsetStorage.ts index 6feea3d95ad..a5fb8d5a448 100644 --- a/packages/eslint-plugin/src/rules/indent-new-do-not-use/OffsetStorage.ts +++ b/packages/eslint-plugin/src/rules/indent-new-do-not-use/OffsetStorage.ts @@ -1,7 +1,7 @@ // The following code is adapted from the the code in eslint. // License: https://github.com/eslint/eslint/blob/48700fc8408f394887cdedd071b22b757700fdcb/LICENSE -import { TSESTree } from '@typescript-eslint/experimental-utils'; +import { TSESTree } from '@typescript-eslint/utils'; import { BinarySearchTree, TreeValue } from './BinarySearchTree'; import { TokenInfo } from './TokenInfo'; diff --git a/packages/eslint-plugin/src/rules/indent-new-do-not-use/TokenInfo.ts b/packages/eslint-plugin/src/rules/indent-new-do-not-use/TokenInfo.ts index 7dd27346560..831852d5e66 100644 --- a/packages/eslint-plugin/src/rules/indent-new-do-not-use/TokenInfo.ts +++ b/packages/eslint-plugin/src/rules/indent-new-do-not-use/TokenInfo.ts @@ -1,7 +1,7 @@ // The following code is adapted from the the code in eslint. // License: https://github.com/eslint/eslint/blob/48700fc8408f394887cdedd071b22b757700fdcb/LICENSE -import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; +import { TSESLint, TSESTree } from '@typescript-eslint/utils'; /** * A helper class to get token-based info related to indentation diff --git a/packages/eslint-plugin/src/rules/indent-new-do-not-use/index.ts b/packages/eslint-plugin/src/rules/indent-new-do-not-use/index.ts index 58da2c044e1..fa7013b9837 100644 --- a/packages/eslint-plugin/src/rules/indent-new-do-not-use/index.ts +++ b/packages/eslint-plugin/src/rules/indent-new-do-not-use/index.ts @@ -7,7 +7,7 @@ import { AST_TOKEN_TYPES, TSESLint, TSESTree, -} from '@typescript-eslint/experimental-utils'; +} from '@typescript-eslint/utils'; import { OffsetStorage } from './OffsetStorage'; import { TokenInfo } from './TokenInfo'; diff --git a/packages/eslint-plugin/src/rules/indent.ts b/packages/eslint-plugin/src/rules/indent.ts index e057ca9886b..748d720f451 100644 --- a/packages/eslint-plugin/src/rules/indent.ts +++ b/packages/eslint-plugin/src/rules/indent.ts @@ -5,10 +5,7 @@ */ /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment */ -import { - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; import { getESLintCoreRule } from '../util/getESLintCoreRule'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/init-declarations.ts b/packages/eslint-plugin/src/rules/init-declarations.ts index 6cd83e636f9..611687b0e9f 100644 --- a/packages/eslint-plugin/src/rules/init-declarations.ts +++ b/packages/eslint-plugin/src/rules/init-declarations.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import { getESLintCoreRule } from '../util/getESLintCoreRule'; import { createRule, diff --git a/packages/eslint-plugin/src/rules/keyword-spacing.ts b/packages/eslint-plugin/src/rules/keyword-spacing.ts index a5620fb7d53..e314ec9de0f 100644 --- a/packages/eslint-plugin/src/rules/keyword-spacing.ts +++ b/packages/eslint-plugin/src/rules/keyword-spacing.ts @@ -1,4 +1,4 @@ -import { AST_TOKEN_TYPES } from '@typescript-eslint/experimental-utils'; +import { AST_TOKEN_TYPES } from '@typescript-eslint/utils'; import { getESLintCoreRule } from '../util/getESLintCoreRule'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/lines-between-class-members.ts b/packages/eslint-plugin/src/rules/lines-between-class-members.ts index c78216b125f..4446568e874 100644 --- a/packages/eslint-plugin/src/rules/lines-between-class-members.ts +++ b/packages/eslint-plugin/src/rules/lines-between-class-members.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import { getESLintCoreRule } from '../util/getESLintCoreRule'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/member-delimiter-style.ts b/packages/eslint-plugin/src/rules/member-delimiter-style.ts index 5fa5a863a6f..e35b6459de8 100644 --- a/packages/eslint-plugin/src/rules/member-delimiter-style.ts +++ b/packages/eslint-plugin/src/rules/member-delimiter-style.ts @@ -1,8 +1,4 @@ -import { - TSESLint, - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESLint, TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; import * as util from '../util'; type Delimiter = 'comma' | 'none' | 'semi'; diff --git a/packages/eslint-plugin/src/rules/member-ordering.ts b/packages/eslint-plugin/src/rules/member-ordering.ts index baaf32aa355..ce2edabe058 100644 --- a/packages/eslint-plugin/src/rules/member-ordering.ts +++ b/packages/eslint-plugin/src/rules/member-ordering.ts @@ -3,7 +3,7 @@ import { TSESLint, TSESTree, JSONSchema, -} from '@typescript-eslint/experimental-utils'; +} from '@typescript-eslint/utils'; import * as util from '../util'; export type MessageIds = 'incorrectGroupOrder' | 'incorrectOrder'; diff --git a/packages/eslint-plugin/src/rules/method-signature-style.ts b/packages/eslint-plugin/src/rules/method-signature-style.ts index b05c4f9fbd1..d9dfbdac4bd 100644 --- a/packages/eslint-plugin/src/rules/method-signature-style.ts +++ b/packages/eslint-plugin/src/rules/method-signature-style.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; export type Options = [('property' | 'method')?]; diff --git a/packages/eslint-plugin/src/rules/naming-convention-utils/schema.ts b/packages/eslint-plugin/src/rules/naming-convention-utils/schema.ts index 4d16617f122..4136f7186bf 100644 --- a/packages/eslint-plugin/src/rules/naming-convention-utils/schema.ts +++ b/packages/eslint-plugin/src/rules/naming-convention-utils/schema.ts @@ -1,4 +1,4 @@ -import { JSONSchema } from '@typescript-eslint/experimental-utils'; +import { JSONSchema } from '@typescript-eslint/utils'; import { IndividualAndMetaSelectorsString, MetaSelectors, diff --git a/packages/eslint-plugin/src/rules/naming-convention-utils/types.ts b/packages/eslint-plugin/src/rules/naming-convention-utils/types.ts index 9cff76129db..9a45bc0aeef 100644 --- a/packages/eslint-plugin/src/rules/naming-convention-utils/types.ts +++ b/packages/eslint-plugin/src/rules/naming-convention-utils/types.ts @@ -1,4 +1,4 @@ -import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; +import { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { IndividualAndMetaSelectorsString, MetaSelectors, diff --git a/packages/eslint-plugin/src/rules/naming-convention-utils/validator.ts b/packages/eslint-plugin/src/rules/naming-convention-utils/validator.ts index 374302f7f12..8e8c8711a59 100644 --- a/packages/eslint-plugin/src/rules/naming-convention-utils/validator.ts +++ b/packages/eslint-plugin/src/rules/naming-convention-utils/validator.ts @@ -1,7 +1,4 @@ -import { - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; import * as ts from 'typescript'; import { MetaSelectors, diff --git a/packages/eslint-plugin/src/rules/naming-convention.ts b/packages/eslint-plugin/src/rules/naming-convention.ts index db4463edd98..cc2fa807687 100644 --- a/packages/eslint-plugin/src/rules/naming-convention.ts +++ b/packages/eslint-plugin/src/rules/naming-convention.ts @@ -1,8 +1,4 @@ -import { - AST_NODE_TYPES, - TSESLint, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESLint, TSESTree } from '@typescript-eslint/utils'; import { PatternVisitor } from '@typescript-eslint/scope-manager'; import type { ScriptTarget } from 'typescript'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-array-constructor.ts b/packages/eslint-plugin/src/rules/no-array-constructor.ts index c0eac4a75af..dfa7656d19b 100644 --- a/packages/eslint-plugin/src/rules/no-array-constructor.ts +++ b/packages/eslint-plugin/src/rules/no-array-constructor.ts @@ -1,7 +1,4 @@ -import { - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; import * as util from '../util'; export default util.createRule({ 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 644bb88152a..09c4d8376f1 100644 --- a/packages/eslint-plugin/src/rules/no-base-to-string.ts +++ b/packages/eslint-plugin/src/rules/no-base-to-string.ts @@ -1,7 +1,4 @@ -import { - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; import * as ts from 'typescript'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-confusing-non-null-assertion.ts b/packages/eslint-plugin/src/rules/no-confusing-non-null-assertion.ts index 1535a643397..5538781598a 100644 --- a/packages/eslint-plugin/src/rules/no-confusing-non-null-assertion.ts +++ b/packages/eslint-plugin/src/rules/no-confusing-non-null-assertion.ts @@ -3,7 +3,7 @@ import { AST_TOKEN_TYPES, TSESLint, TSESTree, -} from '@typescript-eslint/experimental-utils'; +} from '@typescript-eslint/utils'; import * as util from '../util'; export default util.createRule({ diff --git a/packages/eslint-plugin/src/rules/no-confusing-void-expression.ts b/packages/eslint-plugin/src/rules/no-confusing-void-expression.ts index 696c3d7af2d..0fed18413bd 100644 --- a/packages/eslint-plugin/src/rules/no-confusing-void-expression.ts +++ b/packages/eslint-plugin/src/rules/no-confusing-void-expression.ts @@ -1,8 +1,4 @@ -import { - AST_NODE_TYPES, - TSESLint, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESLint, TSESTree } from '@typescript-eslint/utils'; import * as tsutils from 'tsutils'; import * as ts from 'typescript'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-dupe-class-members.ts b/packages/eslint-plugin/src/rules/no-dupe-class-members.ts index e9cb151d6d6..843a7411895 100644 --- a/packages/eslint-plugin/src/rules/no-dupe-class-members.ts +++ b/packages/eslint-plugin/src/rules/no-dupe-class-members.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import { getESLintCoreRule } from '../util/getESLintCoreRule'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-duplicate-imports.ts b/packages/eslint-plugin/src/rules/no-duplicate-imports.ts index f270e7600d1..9a3ef4395e2 100644 --- a/packages/eslint-plugin/src/rules/no-duplicate-imports.ts +++ b/packages/eslint-plugin/src/rules/no-duplicate-imports.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import { getESLintCoreRule } from '../util/getESLintCoreRule'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-dynamic-delete.ts b/packages/eslint-plugin/src/rules/no-dynamic-delete.ts index 716590c66b6..8824095ab74 100644 --- a/packages/eslint-plugin/src/rules/no-dynamic-delete.ts +++ b/packages/eslint-plugin/src/rules/no-dynamic-delete.ts @@ -1,8 +1,4 @@ -import { - TSESTree, - AST_NODE_TYPES, - TSESLint, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_NODE_TYPES, TSESLint } from '@typescript-eslint/utils'; import * as tsutils from 'tsutils'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-empty-function.ts b/packages/eslint-plugin/src/rules/no-empty-function.ts index 51ec13e3ff0..806312b2117 100644 --- a/packages/eslint-plugin/src/rules/no-empty-function.ts +++ b/packages/eslint-plugin/src/rules/no-empty-function.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import { getESLintCoreRule } from '../util/getESLintCoreRule'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-empty-interface.ts b/packages/eslint-plugin/src/rules/no-empty-interface.ts index ee472e70390..e8985919091 100644 --- a/packages/eslint-plugin/src/rules/no-empty-interface.ts +++ b/packages/eslint-plugin/src/rules/no-empty-interface.ts @@ -1,5 +1,5 @@ import * as util from '../util'; -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; type Options = [ { diff --git a/packages/eslint-plugin/src/rules/no-explicit-any.ts b/packages/eslint-plugin/src/rules/no-explicit-any.ts index a41d443e924..8617ab0bdbe 100644 --- a/packages/eslint-plugin/src/rules/no-explicit-any.ts +++ b/packages/eslint-plugin/src/rules/no-explicit-any.ts @@ -1,8 +1,4 @@ -import { - AST_NODE_TYPES, - TSESLint, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESLint, TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; export type Options = [ diff --git a/packages/eslint-plugin/src/rules/no-extra-non-null-assertion.ts b/packages/eslint-plugin/src/rules/no-extra-non-null-assertion.ts index 1ea8970da2f..6ffe529700a 100644 --- a/packages/eslint-plugin/src/rules/no-extra-non-null-assertion.ts +++ b/packages/eslint-plugin/src/rules/no-extra-non-null-assertion.ts @@ -1,4 +1,4 @@ -import { TSESTree } from '@typescript-eslint/experimental-utils'; +import { TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; export default util.createRule({ diff --git a/packages/eslint-plugin/src/rules/no-extra-parens.ts b/packages/eslint-plugin/src/rules/no-extra-parens.ts index 743c22596c1..24659aedfe4 100644 --- a/packages/eslint-plugin/src/rules/no-extra-parens.ts +++ b/packages/eslint-plugin/src/rules/no-extra-parens.ts @@ -1,11 +1,7 @@ // any is required to work around manipulating the AST in weird ways /* eslint-disable @typescript-eslint/no-explicit-any, @typescript-eslint/no-unsafe-assignment */ -import { - AST_NODE_TYPES, - TSESTree, - TSESLint, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree, TSESLint } from '@typescript-eslint/utils'; import { getESLintCoreRule } from '../util/getESLintCoreRule'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-extraneous-class.ts b/packages/eslint-plugin/src/rules/no-extraneous-class.ts index 2686ab0f478..aa2184c9b16 100644 --- a/packages/eslint-plugin/src/rules/no-extraneous-class.ts +++ b/packages/eslint-plugin/src/rules/no-extraneous-class.ts @@ -1,7 +1,4 @@ -import { - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; import * as util from '../util'; type Options = [ diff --git a/packages/eslint-plugin/src/rules/no-floating-promises.ts b/packages/eslint-plugin/src/rules/no-floating-promises.ts index edd26225323..cdea51721e8 100644 --- a/packages/eslint-plugin/src/rules/no-floating-promises.ts +++ b/packages/eslint-plugin/src/rules/no-floating-promises.ts @@ -1,10 +1,6 @@ import * as tsutils from 'tsutils'; import * as ts from 'typescript'; -import { - TSESLint, - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { TSESLint, AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-implicit-any-catch.ts b/packages/eslint-plugin/src/rules/no-implicit-any-catch.ts index aa050794c4a..b48d68fde45 100644 --- a/packages/eslint-plugin/src/rules/no-implicit-any-catch.ts +++ b/packages/eslint-plugin/src/rules/no-implicit-any-catch.ts @@ -1,8 +1,5 @@ import * as util from '../util'; -import { - TSESLint, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESLint, AST_NODE_TYPES } from '@typescript-eslint/utils'; export type Options = [ { diff --git a/packages/eslint-plugin/src/rules/no-implied-eval.ts b/packages/eslint-plugin/src/rules/no-implied-eval.ts index f11a7f8d7b3..54938b9fd49 100644 --- a/packages/eslint-plugin/src/rules/no-implied-eval.ts +++ b/packages/eslint-plugin/src/rules/no-implied-eval.ts @@ -1,8 +1,5 @@ import * as ts from 'typescript'; -import { - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; import * as tsutils from 'tsutils'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-inferrable-types.ts b/packages/eslint-plugin/src/rules/no-inferrable-types.ts index 9c8a1a14c20..dc3216f4f60 100644 --- a/packages/eslint-plugin/src/rules/no-inferrable-types.ts +++ b/packages/eslint-plugin/src/rules/no-inferrable-types.ts @@ -1,8 +1,5 @@ /* eslint-disable @typescript-eslint/internal/prefer-ast-types-enum */ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; type Options = [ diff --git a/packages/eslint-plugin/src/rules/no-invalid-this.ts b/packages/eslint-plugin/src/rules/no-invalid-this.ts index 1cd1be027b9..5884cc61dfa 100644 --- a/packages/eslint-plugin/src/rules/no-invalid-this.ts +++ b/packages/eslint-plugin/src/rules/no-invalid-this.ts @@ -1,7 +1,4 @@ -import { - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; import { getESLintCoreRule } from '../util/getESLintCoreRule'; import { InferOptionsTypeFromRule, diff --git a/packages/eslint-plugin/src/rules/no-invalid-void-type.ts b/packages/eslint-plugin/src/rules/no-invalid-void-type.ts index dceffa6d893..cd28cfa16da 100644 --- a/packages/eslint-plugin/src/rules/no-invalid-void-type.ts +++ b/packages/eslint-plugin/src/rules/no-invalid-void-type.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; interface Options { diff --git a/packages/eslint-plugin/src/rules/no-loop-func.ts b/packages/eslint-plugin/src/rules/no-loop-func.ts index 4496dea91fc..7d4a238f5f4 100644 --- a/packages/eslint-plugin/src/rules/no-loop-func.ts +++ b/packages/eslint-plugin/src/rules/no-loop-func.ts @@ -1,8 +1,4 @@ -import { - AST_NODE_TYPES, - TSESLint, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESLint, TSESTree } from '@typescript-eslint/utils'; import { getESLintCoreRule } from '../util/getESLintCoreRule'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-loss-of-precision.ts b/packages/eslint-plugin/src/rules/no-loss-of-precision.ts index d095def03cc..2e02b187836 100644 --- a/packages/eslint-plugin/src/rules/no-loss-of-precision.ts +++ b/packages/eslint-plugin/src/rules/no-loss-of-precision.ts @@ -1,4 +1,4 @@ -import { TSESTree } from '@typescript-eslint/experimental-utils'; +import { TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; import { maybeGetESLintCoreRule } from '../util/getESLintCoreRule'; diff --git a/packages/eslint-plugin/src/rules/no-magic-numbers.ts b/packages/eslint-plugin/src/rules/no-magic-numbers.ts index d989ac0eec1..772eaf49ea1 100644 --- a/packages/eslint-plugin/src/rules/no-magic-numbers.ts +++ b/packages/eslint-plugin/src/rules/no-magic-numbers.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; import { getESLintCoreRule } from '../util/getESLintCoreRule'; diff --git a/packages/eslint-plugin/src/rules/no-meaningless-void-operator.ts b/packages/eslint-plugin/src/rules/no-meaningless-void-operator.ts index 28cc7b6b051..a1dd8768130 100644 --- a/packages/eslint-plugin/src/rules/no-meaningless-void-operator.ts +++ b/packages/eslint-plugin/src/rules/no-meaningless-void-operator.ts @@ -1,8 +1,4 @@ -import { - ESLintUtils, - TSESLint, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { ESLintUtils, TSESLint, TSESTree } from '@typescript-eslint/utils'; import * as tsutils from 'tsutils'; import * as util from '../util'; import * as ts from 'typescript'; diff --git a/packages/eslint-plugin/src/rules/no-misused-new.ts b/packages/eslint-plugin/src/rules/no-misused-new.ts index ae79c28a6f2..da5f034c965 100644 --- a/packages/eslint-plugin/src/rules/no-misused-new.ts +++ b/packages/eslint-plugin/src/rules/no-misused-new.ts @@ -1,7 +1,4 @@ -import { - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; import * as util from '../util'; export default util.createRule({ diff --git a/packages/eslint-plugin/src/rules/no-misused-promises.ts b/packages/eslint-plugin/src/rules/no-misused-promises.ts index 353b7d4a803..6e42e547436 100644 --- a/packages/eslint-plugin/src/rules/no-misused-promises.ts +++ b/packages/eslint-plugin/src/rules/no-misused-promises.ts @@ -1,8 +1,4 @@ -import { - AST_NODE_TYPES, - TSESLint, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESLint, TSESTree } from '@typescript-eslint/utils'; import * as tsutils from 'tsutils'; import * as ts from 'typescript'; diff --git a/packages/eslint-plugin/src/rules/no-namespace.ts b/packages/eslint-plugin/src/rules/no-namespace.ts index f7fb0ea1e32..c8c3ff21395 100644 --- a/packages/eslint-plugin/src/rules/no-namespace.ts +++ b/packages/eslint-plugin/src/rules/no-namespace.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; type Options = [ diff --git a/packages/eslint-plugin/src/rules/no-non-null-asserted-nullish-coalescing.ts b/packages/eslint-plugin/src/rules/no-non-null-asserted-nullish-coalescing.ts index 93431950c35..db8b1cf860c 100644 --- a/packages/eslint-plugin/src/rules/no-non-null-asserted-nullish-coalescing.ts +++ b/packages/eslint-plugin/src/rules/no-non-null-asserted-nullish-coalescing.ts @@ -1,8 +1,4 @@ -import { - ASTUtils, - TSESTree, - TSESLint, -} from '@typescript-eslint/experimental-utils'; +import { ASTUtils, TSESTree, TSESLint } from '@typescript-eslint/utils'; import { Definition, DefinitionType } from '@typescript-eslint/scope-manager'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-non-null-asserted-optional-chain.ts b/packages/eslint-plugin/src/rules/no-non-null-asserted-optional-chain.ts index 9fdba130b97..979b0af394c 100644 --- a/packages/eslint-plugin/src/rules/no-non-null-asserted-optional-chain.ts +++ b/packages/eslint-plugin/src/rules/no-non-null-asserted-optional-chain.ts @@ -1,8 +1,4 @@ -import { - TSESTree, - TSESLint, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, TSESLint, AST_NODE_TYPES } from '@typescript-eslint/utils'; import * as ts from 'typescript'; import * as semver from 'semver'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-non-null-assertion.ts b/packages/eslint-plugin/src/rules/no-non-null-assertion.ts index cd9f0dbb255..29697399931 100644 --- a/packages/eslint-plugin/src/rules/no-non-null-assertion.ts +++ b/packages/eslint-plugin/src/rules/no-non-null-assertion.ts @@ -1,7 +1,4 @@ -import { - TSESLint, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESLint, AST_NODE_TYPES } from '@typescript-eslint/utils'; import * as util from '../util'; type MessageIds = 'noNonNull' | 'suggestOptionalChain'; diff --git a/packages/eslint-plugin/src/rules/no-parameter-properties.ts b/packages/eslint-plugin/src/rules/no-parameter-properties.ts index 613b839bbdf..3ab01614e72 100644 --- a/packages/eslint-plugin/src/rules/no-parameter-properties.ts +++ b/packages/eslint-plugin/src/rules/no-parameter-properties.ts @@ -1,7 +1,4 @@ -import { - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; import * as util from '../util'; type Modifier = diff --git a/packages/eslint-plugin/src/rules/no-redeclare.ts b/packages/eslint-plugin/src/rules/no-redeclare.ts index 914dd074d33..d81c5225d08 100644 --- a/packages/eslint-plugin/src/rules/no-redeclare.ts +++ b/packages/eslint-plugin/src/rules/no-redeclare.ts @@ -1,8 +1,4 @@ -import { - TSESTree, - TSESLint, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, TSESLint, AST_NODE_TYPES } from '@typescript-eslint/utils'; import * as util from '../util'; type MessageIds = 'redeclared' | 'redeclaredAsBuiltin' | 'redeclaredBySyntax'; diff --git a/packages/eslint-plugin/src/rules/no-require-imports.ts b/packages/eslint-plugin/src/rules/no-require-imports.ts index 49bd5f237b0..3ef5ecc0df3 100644 --- a/packages/eslint-plugin/src/rules/no-require-imports.ts +++ b/packages/eslint-plugin/src/rules/no-require-imports.ts @@ -1,4 +1,4 @@ -import { ASTUtils, TSESTree } from '@typescript-eslint/experimental-utils'; +import { ASTUtils, TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; export default util.createRule({ diff --git a/packages/eslint-plugin/src/rules/no-restricted-imports.ts b/packages/eslint-plugin/src/rules/no-restricted-imports.ts index 2429795240e..ff2f8d77b4e 100644 --- a/packages/eslint-plugin/src/rules/no-restricted-imports.ts +++ b/packages/eslint-plugin/src/rules/no-restricted-imports.ts @@ -1,4 +1,4 @@ -import { TSESTree } from '@typescript-eslint/experimental-utils'; +import { TSESTree } from '@typescript-eslint/utils'; import type { ArrayOfStringOrObject, ArrayOfStringOrObjectPatterns, diff --git a/packages/eslint-plugin/src/rules/no-shadow.ts b/packages/eslint-plugin/src/rules/no-shadow.ts index 68214ddd338..3f13f587de1 100644 --- a/packages/eslint-plugin/src/rules/no-shadow.ts +++ b/packages/eslint-plugin/src/rules/no-shadow.ts @@ -3,7 +3,7 @@ import { AST_NODE_TYPES, TSESLint, TSESTree, -} from '@typescript-eslint/experimental-utils'; +} from '@typescript-eslint/utils'; import { Definition, DefinitionType, diff --git a/packages/eslint-plugin/src/rules/no-this-alias.ts b/packages/eslint-plugin/src/rules/no-this-alias.ts index 82ab9b22b0f..5c9c9f56881 100644 --- a/packages/eslint-plugin/src/rules/no-this-alias.ts +++ b/packages/eslint-plugin/src/rules/no-this-alias.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; type Options = [ diff --git a/packages/eslint-plugin/src/rules/no-throw-literal.ts b/packages/eslint-plugin/src/rules/no-throw-literal.ts index 152e9348378..f248ef9cb8d 100644 --- a/packages/eslint-plugin/src/rules/no-throw-literal.ts +++ b/packages/eslint-plugin/src/rules/no-throw-literal.ts @@ -1,9 +1,6 @@ import * as ts from 'typescript'; import * as util from '../util'; -import { - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; type MessageIds = 'object' | 'undef'; diff --git a/packages/eslint-plugin/src/rules/no-type-alias.ts b/packages/eslint-plugin/src/rules/no-type-alias.ts index 347e36f0a42..2d9847eb309 100644 --- a/packages/eslint-plugin/src/rules/no-type-alias.ts +++ b/packages/eslint-plugin/src/rules/no-type-alias.ts @@ -2,7 +2,7 @@ import { AST_NODE_TYPES, AST_TOKEN_TYPES, TSESTree, -} from '@typescript-eslint/experimental-utils'; +} from '@typescript-eslint/utils'; import * as util from '../util'; type Values = diff --git a/packages/eslint-plugin/src/rules/no-unnecessary-boolean-literal-compare.ts b/packages/eslint-plugin/src/rules/no-unnecessary-boolean-literal-compare.ts index 4474713b3ff..e3768b28aa0 100644 --- a/packages/eslint-plugin/src/rules/no-unnecessary-boolean-literal-compare.ts +++ b/packages/eslint-plugin/src/rules/no-unnecessary-boolean-literal-compare.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as tsutils from 'tsutils'; import * as ts from 'typescript'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-unnecessary-condition.ts b/packages/eslint-plugin/src/rules/no-unnecessary-condition.ts index 48a3a4d039d..4e18a9f631e 100644 --- a/packages/eslint-plugin/src/rules/no-unnecessary-condition.ts +++ b/packages/eslint-plugin/src/rules/no-unnecessary-condition.ts @@ -2,7 +2,7 @@ import { TSESTree, AST_NODE_TYPES, AST_TOKEN_TYPES, -} from '@typescript-eslint/experimental-utils'; +} from '@typescript-eslint/utils'; import * as ts from 'typescript'; import { unionTypeParts, diff --git a/packages/eslint-plugin/src/rules/no-unnecessary-qualifier.ts b/packages/eslint-plugin/src/rules/no-unnecessary-qualifier.ts index 1f4652085bd..dae21746efc 100644 --- a/packages/eslint-plugin/src/rules/no-unnecessary-qualifier.ts +++ b/packages/eslint-plugin/src/rules/no-unnecessary-qualifier.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as ts from 'typescript'; import * as tsutils from 'tsutils'; import * as util from '../util'; 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 9f7d718c2d9..67244961bca 100644 --- a/packages/eslint-plugin/src/rules/no-unnecessary-type-arguments.ts +++ b/packages/eslint-plugin/src/rules/no-unnecessary-type-arguments.ts @@ -1,4 +1,4 @@ -import { TSESTree } from '@typescript-eslint/experimental-utils'; +import { TSESTree } from '@typescript-eslint/utils'; import * as tsutils from 'tsutils'; import * as ts from 'typescript'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-unnecessary-type-assertion.ts b/packages/eslint-plugin/src/rules/no-unnecessary-type-assertion.ts index cd5bce1845d..38c9b267ac8 100644 --- a/packages/eslint-plugin/src/rules/no-unnecessary-type-assertion.ts +++ b/packages/eslint-plugin/src/rules/no-unnecessary-type-assertion.ts @@ -1,7 +1,4 @@ -import { - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; import { isObjectType, isObjectFlagSet, diff --git a/packages/eslint-plugin/src/rules/no-unnecessary-type-constraint.ts b/packages/eslint-plugin/src/rules/no-unnecessary-type-constraint.ts index 68895c01e71..c3d8e6fbb39 100644 --- a/packages/eslint-plugin/src/rules/no-unnecessary-type-constraint.ts +++ b/packages/eslint-plugin/src/rules/no-unnecessary-type-constraint.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as semver from 'semver'; import * as ts from 'typescript'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-unsafe-argument.ts b/packages/eslint-plugin/src/rules/no-unsafe-argument.ts index 3df1e6a486c..ff823638a94 100644 --- a/packages/eslint-plugin/src/rules/no-unsafe-argument.ts +++ b/packages/eslint-plugin/src/rules/no-unsafe-argument.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as ts from 'typescript'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-unsafe-assignment.ts b/packages/eslint-plugin/src/rules/no-unsafe-assignment.ts index cb4b8e7c636..d40c06f624b 100644 --- a/packages/eslint-plugin/src/rules/no-unsafe-assignment.ts +++ b/packages/eslint-plugin/src/rules/no-unsafe-assignment.ts @@ -1,7 +1,4 @@ -import { - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; import * as tsutils from 'tsutils'; import * as ts from 'typescript'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-unsafe-call.ts b/packages/eslint-plugin/src/rules/no-unsafe-call.ts index 781908f9497..d062aa28cad 100644 --- a/packages/eslint-plugin/src/rules/no-unsafe-call.ts +++ b/packages/eslint-plugin/src/rules/no-unsafe-call.ts @@ -1,4 +1,4 @@ -import { TSESTree } from '@typescript-eslint/experimental-utils'; +import { TSESTree } from '@typescript-eslint/utils'; import * as tsutils from 'tsutils'; import * as util from '../util'; import { getThisExpression } from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-unsafe-member-access.ts b/packages/eslint-plugin/src/rules/no-unsafe-member-access.ts index 6e9555a5a3e..4a930890d88 100644 --- a/packages/eslint-plugin/src/rules/no-unsafe-member-access.ts +++ b/packages/eslint-plugin/src/rules/no-unsafe-member-access.ts @@ -1,7 +1,4 @@ -import { - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; import * as tsutils from 'tsutils'; import * as util from '../util'; import { getThisExpression } from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-unsafe-return.ts b/packages/eslint-plugin/src/rules/no-unsafe-return.ts index e226d526bca..8e9e4099cad 100644 --- a/packages/eslint-plugin/src/rules/no-unsafe-return.ts +++ b/packages/eslint-plugin/src/rules/no-unsafe-return.ts @@ -1,7 +1,4 @@ -import { - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; import * as tsutils from 'tsutils'; import * as util from '../util'; import { getThisExpression } from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-unused-expressions.ts b/packages/eslint-plugin/src/rules/no-unused-expressions.ts index 91d9f4e4a38..56eb1521a0d 100644 --- a/packages/eslint-plugin/src/rules/no-unused-expressions.ts +++ b/packages/eslint-plugin/src/rules/no-unused-expressions.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import { getESLintCoreRule } from '../util/getESLintCoreRule'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-unused-vars.ts b/packages/eslint-plugin/src/rules/no-unused-vars.ts index 7cce473557c..139089a7448 100644 --- a/packages/eslint-plugin/src/rules/no-unused-vars.ts +++ b/packages/eslint-plugin/src/rules/no-unused-vars.ts @@ -1,8 +1,4 @@ -import { - AST_NODE_TYPES, - TSESLint, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESLint, TSESTree } from '@typescript-eslint/utils'; import { PatternVisitor } from '@typescript-eslint/scope-manager'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-use-before-define.ts b/packages/eslint-plugin/src/rules/no-use-before-define.ts index 83cf552fda5..3a5b51938b7 100644 --- a/packages/eslint-plugin/src/rules/no-use-before-define.ts +++ b/packages/eslint-plugin/src/rules/no-use-before-define.ts @@ -1,8 +1,4 @@ -import { - AST_NODE_TYPES, - TSESLint, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESLint, TSESTree } from '@typescript-eslint/utils'; import { DefinitionType } from '@typescript-eslint/scope-manager'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-useless-constructor.ts b/packages/eslint-plugin/src/rules/no-useless-constructor.ts index f656af26481..0bbe2f6f64c 100644 --- a/packages/eslint-plugin/src/rules/no-useless-constructor.ts +++ b/packages/eslint-plugin/src/rules/no-useless-constructor.ts @@ -1,7 +1,4 @@ -import { - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; import { getESLintCoreRule } from '../util/getESLintCoreRule'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/no-var-requires.ts b/packages/eslint-plugin/src/rules/no-var-requires.ts index 1bf51efe810..36f0e7515d1 100644 --- a/packages/eslint-plugin/src/rules/no-var-requires.ts +++ b/packages/eslint-plugin/src/rules/no-var-requires.ts @@ -1,8 +1,4 @@ -import { - ASTUtils, - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { ASTUtils, AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; type Options = []; diff --git a/packages/eslint-plugin/src/rules/non-nullable-type-assertion-style.ts b/packages/eslint-plugin/src/rules/non-nullable-type-assertion-style.ts index 1577c3b9448..69fc21736de 100644 --- a/packages/eslint-plugin/src/rules/non-nullable-type-assertion-style.ts +++ b/packages/eslint-plugin/src/rules/non-nullable-type-assertion-style.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as tsutils from 'tsutils'; import * as ts from 'typescript'; diff --git a/packages/eslint-plugin/src/rules/object-curly-spacing.ts b/packages/eslint-plugin/src/rules/object-curly-spacing.ts index fe74c8f7da4..c64ca54ba17 100644 --- a/packages/eslint-plugin/src/rules/object-curly-spacing.ts +++ b/packages/eslint-plugin/src/rules/object-curly-spacing.ts @@ -2,7 +2,7 @@ import { AST_NODE_TYPES, AST_TOKEN_TYPES, TSESTree, -} from '@typescript-eslint/experimental-utils'; +} from '@typescript-eslint/utils'; import { getESLintCoreRule } from '../util/getESLintCoreRule'; import { createRule, diff --git a/packages/eslint-plugin/src/rules/padding-line-between-statements.ts b/packages/eslint-plugin/src/rules/padding-line-between-statements.ts index aab53cbba4a..bc5f30aa751 100644 --- a/packages/eslint-plugin/src/rules/padding-line-between-statements.ts +++ b/packages/eslint-plugin/src/rules/padding-line-between-statements.ts @@ -1,8 +1,4 @@ -import { - AST_NODE_TYPES, - TSESLint, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESLint, TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; /** diff --git a/packages/eslint-plugin/src/rules/prefer-as-const.ts b/packages/eslint-plugin/src/rules/prefer-as-const.ts index 93bcce50889..09bd8423c22 100644 --- a/packages/eslint-plugin/src/rules/prefer-as-const.ts +++ b/packages/eslint-plugin/src/rules/prefer-as-const.ts @@ -1,8 +1,4 @@ -import { - AST_NODE_TYPES, - TSESLint, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESLint, TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; export default util.createRule({ diff --git a/packages/eslint-plugin/src/rules/prefer-enum-initializers.ts b/packages/eslint-plugin/src/rules/prefer-enum-initializers.ts index 5ad6dccd7cc..c6247abd739 100644 --- a/packages/eslint-plugin/src/rules/prefer-enum-initializers.ts +++ b/packages/eslint-plugin/src/rules/prefer-enum-initializers.ts @@ -1,4 +1,4 @@ -import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; +import { TSESLint, TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; type MessageIds = 'defineInitializer' | 'defineInitializerSuggestion'; diff --git a/packages/eslint-plugin/src/rules/prefer-for-of.ts b/packages/eslint-plugin/src/rules/prefer-for-of.ts index 453d126c813..3355fda2ec6 100644 --- a/packages/eslint-plugin/src/rules/prefer-for-of.ts +++ b/packages/eslint-plugin/src/rules/prefer-for-of.ts @@ -1,8 +1,4 @@ -import { - AST_NODE_TYPES, - TSESLint, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESLint, TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; export default util.createRule({ diff --git a/packages/eslint-plugin/src/rules/prefer-function-type.ts b/packages/eslint-plugin/src/rules/prefer-function-type.ts index ceeafcd841c..d13d187276e 100644 --- a/packages/eslint-plugin/src/rules/prefer-function-type.ts +++ b/packages/eslint-plugin/src/rules/prefer-function-type.ts @@ -3,7 +3,7 @@ import { AST_TOKEN_TYPES, TSESLint, TSESTree, -} from '@typescript-eslint/experimental-utils'; +} from '@typescript-eslint/utils'; import * as util from '../util'; export const phrases = { diff --git a/packages/eslint-plugin/src/rules/prefer-includes.ts b/packages/eslint-plugin/src/rules/prefer-includes.ts index f15a756abc4..0e12b4ca259 100644 --- a/packages/eslint-plugin/src/rules/prefer-includes.ts +++ b/packages/eslint-plugin/src/rules/prefer-includes.ts @@ -1,8 +1,4 @@ -import { - AST_NODE_TYPES, - TSESLint, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST as RegExpAST, parseRegExpLiteral } from 'regexpp'; import * as ts from 'typescript'; import { diff --git a/packages/eslint-plugin/src/rules/prefer-literal-enum-member.ts b/packages/eslint-plugin/src/rules/prefer-literal-enum-member.ts index 8f10eb9be36..f64482a06f5 100644 --- a/packages/eslint-plugin/src/rules/prefer-literal-enum-member.ts +++ b/packages/eslint-plugin/src/rules/prefer-literal-enum-member.ts @@ -1,4 +1,4 @@ -import { AST_NODE_TYPES } from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import { createRule } from '../util'; export default createRule({ diff --git a/packages/eslint-plugin/src/rules/prefer-namespace-keyword.ts b/packages/eslint-plugin/src/rules/prefer-namespace-keyword.ts index 4af7c981253..769a0cd6e39 100644 --- a/packages/eslint-plugin/src/rules/prefer-namespace-keyword.ts +++ b/packages/eslint-plugin/src/rules/prefer-namespace-keyword.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - AST_TOKEN_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, AST_TOKEN_TYPES } from '@typescript-eslint/utils'; import * as util from '../util'; export default util.createRule({ diff --git a/packages/eslint-plugin/src/rules/prefer-nullish-coalescing.ts b/packages/eslint-plugin/src/rules/prefer-nullish-coalescing.ts index 6975576edca..b492287d4bb 100644 --- a/packages/eslint-plugin/src/rules/prefer-nullish-coalescing.ts +++ b/packages/eslint-plugin/src/rules/prefer-nullish-coalescing.ts @@ -3,7 +3,7 @@ import { AST_TOKEN_TYPES, TSESLint, TSESTree, -} from '@typescript-eslint/experimental-utils'; +} from '@typescript-eslint/utils'; import * as util from '../util'; export type Options = [ diff --git a/packages/eslint-plugin/src/rules/prefer-optional-chain.ts b/packages/eslint-plugin/src/rules/prefer-optional-chain.ts index 84c2e15e397..109deaa6d60 100644 --- a/packages/eslint-plugin/src/rules/prefer-optional-chain.ts +++ b/packages/eslint-plugin/src/rules/prefer-optional-chain.ts @@ -1,8 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, - TSESLint, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree, TSESLint } from '@typescript-eslint/utils'; import * as util from '../util'; type ValidChainTarget = diff --git a/packages/eslint-plugin/src/rules/prefer-readonly-parameter-types.ts b/packages/eslint-plugin/src/rules/prefer-readonly-parameter-types.ts index ed3e4ba284b..23e2752a7af 100644 --- a/packages/eslint-plugin/src/rules/prefer-readonly-parameter-types.ts +++ b/packages/eslint-plugin/src/rules/prefer-readonly-parameter-types.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; type Options = [ diff --git a/packages/eslint-plugin/src/rules/prefer-readonly.ts b/packages/eslint-plugin/src/rules/prefer-readonly.ts index 7b0fbfee3af..19597264bbc 100644 --- a/packages/eslint-plugin/src/rules/prefer-readonly.ts +++ b/packages/eslint-plugin/src/rules/prefer-readonly.ts @@ -2,11 +2,7 @@ import * as tsutils from 'tsutils'; import * as ts from 'typescript'; import * as util from '../util'; import { typeIsOrHasBaseType } from '../util'; -import { - ASTUtils, - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { ASTUtils, AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; type MessageIds = 'preferReadonly'; type Options = [ diff --git a/packages/eslint-plugin/src/rules/prefer-reduce-type-parameter.ts b/packages/eslint-plugin/src/rules/prefer-reduce-type-parameter.ts index a797bfdf48f..d9fe3a3071a 100644 --- a/packages/eslint-plugin/src/rules/prefer-reduce-type-parameter.ts +++ b/packages/eslint-plugin/src/rules/prefer-reduce-type-parameter.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; type MemberExpressionWithCallExpressionParent = TSESTree.MemberExpression & { diff --git a/packages/eslint-plugin/src/rules/prefer-regexp-exec.ts b/packages/eslint-plugin/src/rules/prefer-regexp-exec.ts index bb91f340846..07c98a69240 100644 --- a/packages/eslint-plugin/src/rules/prefer-regexp-exec.ts +++ b/packages/eslint-plugin/src/rules/prefer-regexp-exec.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as tsutils from 'tsutils'; import * as ts from 'typescript'; import { diff --git a/packages/eslint-plugin/src/rules/prefer-return-this-type.ts b/packages/eslint-plugin/src/rules/prefer-return-this-type.ts index 15faf74d1ed..0368300bbd6 100644 --- a/packages/eslint-plugin/src/rules/prefer-return-this-type.ts +++ b/packages/eslint-plugin/src/rules/prefer-return-this-type.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as ts from 'typescript'; import { createRule, forEachReturnStatement, getParserServices } from '../util'; diff --git a/packages/eslint-plugin/src/rules/prefer-string-starts-ends-with.ts b/packages/eslint-plugin/src/rules/prefer-string-starts-ends-with.ts index 9bf63c08431..501693efc50 100644 --- a/packages/eslint-plugin/src/rules/prefer-string-starts-ends-with.ts +++ b/packages/eslint-plugin/src/rules/prefer-string-starts-ends-with.ts @@ -1,8 +1,4 @@ -import { - AST_NODE_TYPES, - TSESLint, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST as RegExpAST, RegExpParser } from 'regexpp'; import { createRule, diff --git a/packages/eslint-plugin/src/rules/prefer-ts-expect-error.ts b/packages/eslint-plugin/src/rules/prefer-ts-expect-error.ts index 15c070298cb..17f1c465f1a 100644 --- a/packages/eslint-plugin/src/rules/prefer-ts-expect-error.ts +++ b/packages/eslint-plugin/src/rules/prefer-ts-expect-error.ts @@ -1,12 +1,6 @@ import * as util from '../util'; -import { - AST_TOKEN_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; -import { - RuleFixer, - RuleFix, -} from '@typescript-eslint/experimental-utils/dist/ts-eslint'; +import { AST_TOKEN_TYPES, TSESTree } from '@typescript-eslint/utils'; +import { RuleFixer, RuleFix } from '@typescript-eslint/utils/dist/ts-eslint'; type MessageIds = 'preferExpectErrorComment'; diff --git a/packages/eslint-plugin/src/rules/promise-function-async.ts b/packages/eslint-plugin/src/rules/promise-function-async.ts index 083afcebe71..bf49764a681 100644 --- a/packages/eslint-plugin/src/rules/promise-function-async.ts +++ b/packages/eslint-plugin/src/rules/promise-function-async.ts @@ -2,7 +2,7 @@ import { AST_NODE_TYPES, AST_TOKEN_TYPES, TSESTree, -} from '@typescript-eslint/experimental-utils'; +} from '@typescript-eslint/utils'; import * as ts from 'typescript'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/quotes.ts b/packages/eslint-plugin/src/rules/quotes.ts index a22782cc08e..d24ac099533 100644 --- a/packages/eslint-plugin/src/rules/quotes.ts +++ b/packages/eslint-plugin/src/rules/quotes.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import { getESLintCoreRule } from '../util/getESLintCoreRule'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/require-array-sort-compare.ts b/packages/eslint-plugin/src/rules/require-array-sort-compare.ts index 25476314d73..ae9ea48a4fa 100644 --- a/packages/eslint-plugin/src/rules/require-array-sort-compare.ts +++ b/packages/eslint-plugin/src/rules/require-array-sort-compare.ts @@ -1,4 +1,4 @@ -import { TSESTree } from '@typescript-eslint/experimental-utils'; +import { TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; export type Options = [ diff --git a/packages/eslint-plugin/src/rules/require-await.ts b/packages/eslint-plugin/src/rules/require-await.ts index f0935b202ea..56067fe554a 100644 --- a/packages/eslint-plugin/src/rules/require-await.ts +++ b/packages/eslint-plugin/src/rules/require-await.ts @@ -1,8 +1,4 @@ -import { - AST_NODE_TYPES, - TSESLint, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESLint, TSESTree } from '@typescript-eslint/utils'; import * as tsutils from 'tsutils'; import * as ts from 'typescript'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/restrict-plus-operands.ts b/packages/eslint-plugin/src/rules/restrict-plus-operands.ts index afcbf9abf2f..5ccae1aca10 100644 --- a/packages/eslint-plugin/src/rules/restrict-plus-operands.ts +++ b/packages/eslint-plugin/src/rules/restrict-plus-operands.ts @@ -1,4 +1,4 @@ -import { TSESTree } from '@typescript-eslint/experimental-utils'; +import { TSESTree } from '@typescript-eslint/utils'; import * as ts from 'typescript'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/restrict-template-expressions.ts b/packages/eslint-plugin/src/rules/restrict-template-expressions.ts index f39bc88cfe5..b4d70ab5350 100644 --- a/packages/eslint-plugin/src/rules/restrict-template-expressions.ts +++ b/packages/eslint-plugin/src/rules/restrict-template-expressions.ts @@ -1,7 +1,4 @@ -import { - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; import * as ts from 'typescript'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/return-await.ts b/packages/eslint-plugin/src/rules/return-await.ts index 93b863757a0..dfdb75fa30d 100644 --- a/packages/eslint-plugin/src/rules/return-await.ts +++ b/packages/eslint-plugin/src/rules/return-await.ts @@ -1,8 +1,4 @@ -import { - AST_NODE_TYPES, - TSESLint, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESLint, TSESTree } from '@typescript-eslint/utils'; import * as tsutils from 'tsutils'; import * as ts from 'typescript'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/semi.ts b/packages/eslint-plugin/src/rules/semi.ts index a923310915c..8df56137311 100644 --- a/packages/eslint-plugin/src/rules/semi.ts +++ b/packages/eslint-plugin/src/rules/semi.ts @@ -1,8 +1,4 @@ -import { - TSESTree, - TSESLint, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, TSESLint, AST_NODE_TYPES } from '@typescript-eslint/utils'; import { getESLintCoreRule } from '../util/getESLintCoreRule'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/sort-type-union-intersection-members.ts b/packages/eslint-plugin/src/rules/sort-type-union-intersection-members.ts index 942cae423df..fcdaa00152d 100644 --- a/packages/eslint-plugin/src/rules/sort-type-union-intersection-members.ts +++ b/packages/eslint-plugin/src/rules/sort-type-union-intersection-members.ts @@ -1,8 +1,4 @@ -import { - AST_NODE_TYPES, - TSESLint, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESLint, TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; import { getEnumNames } from '../util'; diff --git a/packages/eslint-plugin/src/rules/space-before-function-paren.ts b/packages/eslint-plugin/src/rules/space-before-function-paren.ts index 8f848f92742..6c6995db02f 100644 --- a/packages/eslint-plugin/src/rules/space-before-function-paren.ts +++ b/packages/eslint-plugin/src/rules/space-before-function-paren.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; type Option = 'never' | 'always'; diff --git a/packages/eslint-plugin/src/rules/space-infix-ops.ts b/packages/eslint-plugin/src/rules/space-infix-ops.ts index fddeaac6fb6..a38b57825f2 100644 --- a/packages/eslint-plugin/src/rules/space-infix-ops.ts +++ b/packages/eslint-plugin/src/rules/space-infix-ops.ts @@ -1,7 +1,4 @@ -import { - AST_TOKEN_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_TOKEN_TYPES, TSESTree } from '@typescript-eslint/utils'; import { getESLintCoreRule } from '../util/getESLintCoreRule'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/strict-boolean-expressions.ts b/packages/eslint-plugin/src/rules/strict-boolean-expressions.ts index bf8d6709840..0a91b2fca95 100644 --- a/packages/eslint-plugin/src/rules/strict-boolean-expressions.ts +++ b/packages/eslint-plugin/src/rules/strict-boolean-expressions.ts @@ -2,7 +2,7 @@ import { AST_NODE_TYPES, ParserServices, TSESTree, -} from '@typescript-eslint/experimental-utils'; +} from '@typescript-eslint/utils'; import * as tsutils from 'tsutils'; import * as ts from 'typescript'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/switch-exhaustiveness-check.ts b/packages/eslint-plugin/src/rules/switch-exhaustiveness-check.ts index 08f21e3364c..49ed2d905b6 100644 --- a/packages/eslint-plugin/src/rules/switch-exhaustiveness-check.ts +++ b/packages/eslint-plugin/src/rules/switch-exhaustiveness-check.ts @@ -1,4 +1,4 @@ -import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; +import { TSESLint, TSESTree } from '@typescript-eslint/utils'; import * as ts from 'typescript'; import { createRule, diff --git a/packages/eslint-plugin/src/rules/triple-slash-reference.ts b/packages/eslint-plugin/src/rules/triple-slash-reference.ts index ba8bce5ae8a..cf769237fff 100644 --- a/packages/eslint-plugin/src/rules/triple-slash-reference.ts +++ b/packages/eslint-plugin/src/rules/triple-slash-reference.ts @@ -2,7 +2,7 @@ import { AST_NODE_TYPES, AST_TOKEN_TYPES, TSESTree, -} from '@typescript-eslint/experimental-utils'; +} from '@typescript-eslint/utils'; import * as util from '../util'; type Options = [ diff --git a/packages/eslint-plugin/src/rules/type-annotation-spacing.ts b/packages/eslint-plugin/src/rules/type-annotation-spacing.ts index d02b8777d5f..d10040fdf8d 100644 --- a/packages/eslint-plugin/src/rules/type-annotation-spacing.ts +++ b/packages/eslint-plugin/src/rules/type-annotation-spacing.ts @@ -1,4 +1,4 @@ -import { TSESTree } from '@typescript-eslint/experimental-utils'; +import { TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; import { isClassOrTypeElement, diff --git a/packages/eslint-plugin/src/rules/typedef.ts b/packages/eslint-plugin/src/rules/typedef.ts index 700fd347c77..ed78693d48b 100644 --- a/packages/eslint-plugin/src/rules/typedef.ts +++ b/packages/eslint-plugin/src/rules/typedef.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; const enum OptionKeys { diff --git a/packages/eslint-plugin/src/rules/unbound-method.ts b/packages/eslint-plugin/src/rules/unbound-method.ts index 15ddf8b8910..2dd6aafaebf 100644 --- a/packages/eslint-plugin/src/rules/unbound-method.ts +++ b/packages/eslint-plugin/src/rules/unbound-method.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as tsutils from 'tsutils'; import * as ts from 'typescript'; import * as util from '../util'; diff --git a/packages/eslint-plugin/src/rules/unified-signatures.ts b/packages/eslint-plugin/src/rules/unified-signatures.ts index 7481dcd7031..b5a1d8a97ba 100644 --- a/packages/eslint-plugin/src/rules/unified-signatures.ts +++ b/packages/eslint-plugin/src/rules/unified-signatures.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; import * as util from '../util'; interface Failure { diff --git a/packages/eslint-plugin/src/util/astUtils.ts b/packages/eslint-plugin/src/util/astUtils.ts index 67bdfca5aa1..e9ac5c51f34 100644 --- a/packages/eslint-plugin/src/util/astUtils.ts +++ b/packages/eslint-plugin/src/util/astUtils.ts @@ -1,9 +1,9 @@ -import type { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; +import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { escapeRegExp } from './escapeRegExp'; import * as ts from 'typescript'; // deeply re-export, for convenience -export * from '@typescript-eslint/experimental-utils/dist/ast-utils'; +export * from '@typescript-eslint/utils/dist/ast-utils'; // The following is copied from `eslint`'s source code since it doesn't exist in eslint@5. // https://github.com/eslint/eslint/blob/145aec1ab9052fbca96a44d04927c595951b1536/lib/rules/utils/ast-utils.js#L1751-L1779 diff --git a/packages/eslint-plugin/src/util/collectUnusedVariables.ts b/packages/eslint-plugin/src/util/collectUnusedVariables.ts index fe44354fc30..6fe14b0d272 100644 --- a/packages/eslint-plugin/src/util/collectUnusedVariables.ts +++ b/packages/eslint-plugin/src/util/collectUnusedVariables.ts @@ -4,7 +4,7 @@ import { ASTUtils, TSESTree, ESLintUtils, -} from '@typescript-eslint/experimental-utils'; +} from '@typescript-eslint/utils'; import { ImplicitLibVariable } from '@typescript-eslint/scope-manager'; import { Visitor } from '@typescript-eslint/scope-manager/dist/referencer/Visitor'; diff --git a/packages/eslint-plugin/src/util/createRule.ts b/packages/eslint-plugin/src/util/createRule.ts index 8e69adb9565..7d4b0889746 100644 --- a/packages/eslint-plugin/src/util/createRule.ts +++ b/packages/eslint-plugin/src/util/createRule.ts @@ -1,4 +1,4 @@ -import { ESLintUtils } from '@typescript-eslint/experimental-utils'; +import { ESLintUtils } from '@typescript-eslint/utils'; // note - cannot migrate this to an import statement because it will make TSC copy the package.json to the dist folder // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access diff --git a/packages/eslint-plugin/src/util/explicitReturnTypeUtils.ts b/packages/eslint-plugin/src/util/explicitReturnTypeUtils.ts index c69f8591ae7..3b737ad4f41 100644 --- a/packages/eslint-plugin/src/util/explicitReturnTypeUtils.ts +++ b/packages/eslint-plugin/src/util/explicitReturnTypeUtils.ts @@ -3,7 +3,7 @@ import { AST_NODE_TYPES, ESLintUtils, TSESLint, -} from '@typescript-eslint/experimental-utils'; +} from '@typescript-eslint/utils'; import { isTypeAssertion, isConstructor, isSetter } from './astUtils'; import { getFunctionHeadLoc } from './getFunctionHeadLoc'; diff --git a/packages/eslint-plugin/src/util/getESLintCoreRule.ts b/packages/eslint-plugin/src/util/getESLintCoreRule.ts index 7c2427c8fcb..f61bdb0c309 100644 --- a/packages/eslint-plugin/src/util/getESLintCoreRule.ts +++ b/packages/eslint-plugin/src/util/getESLintCoreRule.ts @@ -1,4 +1,4 @@ -import { ESLintUtils } from '@typescript-eslint/experimental-utils'; +import { ESLintUtils } from '@typescript-eslint/utils'; import { version } from 'eslint/package.json'; import * as semver from 'semver'; diff --git a/packages/eslint-plugin/src/util/getFunctionHeadLoc.ts b/packages/eslint-plugin/src/util/getFunctionHeadLoc.ts index 7604a8d496f..a9d30838d2d 100644 --- a/packages/eslint-plugin/src/util/getFunctionHeadLoc.ts +++ b/packages/eslint-plugin/src/util/getFunctionHeadLoc.ts @@ -3,7 +3,7 @@ import { AST_TOKEN_TYPES, TSESLint, TSESTree, -} from '@typescript-eslint/experimental-utils'; +} from '@typescript-eslint/utils'; type FunctionNode = | TSESTree.ArrowFunctionExpression diff --git a/packages/eslint-plugin/src/util/getThisExpression.ts b/packages/eslint-plugin/src/util/getThisExpression.ts index 5e2772aebae..73405464b3f 100644 --- a/packages/eslint-plugin/src/util/getThisExpression.ts +++ b/packages/eslint-plugin/src/util/getThisExpression.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/utils'; export function getThisExpression( node: TSESTree.Node, diff --git a/packages/eslint-plugin/src/util/getWrappingFixer.ts b/packages/eslint-plugin/src/util/getWrappingFixer.ts index aa01520fdbd..af7885efc41 100644 --- a/packages/eslint-plugin/src/util/getWrappingFixer.ts +++ b/packages/eslint-plugin/src/util/getWrappingFixer.ts @@ -3,7 +3,7 @@ import { TSESLint, ASTUtils, TSESTree, -} from '@typescript-eslint/experimental-utils'; +} from '@typescript-eslint/utils'; interface WrappingFixerParams { /** Source code. */ diff --git a/packages/eslint-plugin/src/util/index.ts b/packages/eslint-plugin/src/util/index.ts index 48641babf28..a83198807a6 100644 --- a/packages/eslint-plugin/src/util/index.ts +++ b/packages/eslint-plugin/src/util/index.ts @@ -1,4 +1,4 @@ -import { ESLintUtils } from '@typescript-eslint/experimental-utils'; +import { ESLintUtils } from '@typescript-eslint/utils'; export * from './astUtils'; export * from './collectUnusedVariables'; diff --git a/packages/eslint-plugin/src/util/misc.ts b/packages/eslint-plugin/src/util/misc.ts index 4c6b71d2a4d..eb62a029b15 100644 --- a/packages/eslint-plugin/src/util/misc.ts +++ b/packages/eslint-plugin/src/util/misc.ts @@ -2,11 +2,7 @@ * @fileoverview Really small utility functions that didn't deserve their own files */ -import { - AST_NODE_TYPES, - TSESLint, - TSESTree, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESLint, TSESTree } from '@typescript-eslint/utils'; import { requiresQuoting } from '@typescript-eslint/type-utils'; /** diff --git a/packages/eslint-plugin/tests/RuleTester.ts b/packages/eslint-plugin/tests/RuleTester.ts index dad454369c1..7479d99f29a 100644 --- a/packages/eslint-plugin/tests/RuleTester.ts +++ b/packages/eslint-plugin/tests/RuleTester.ts @@ -1,4 +1,4 @@ -import { ESLintUtils } from '@typescript-eslint/experimental-utils'; +import { ESLintUtils } from '@typescript-eslint/utils'; import * as path from 'path'; function getFixturesRootDir(): string { diff --git a/packages/eslint-plugin/tests/rules/array-type.test.ts b/packages/eslint-plugin/tests/rules/array-type.test.ts index cfdfb80ec1a..a00f72cdba1 100644 --- a/packages/eslint-plugin/tests/rules/array-type.test.ts +++ b/packages/eslint-plugin/tests/rules/array-type.test.ts @@ -1,4 +1,4 @@ -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; import * as parser from '@typescript-eslint/parser'; import rule, { OptionString } from '../../src/rules/array-type'; import { RuleTester } from '../RuleTester'; diff --git a/packages/eslint-plugin/tests/rules/ban-types.test.ts b/packages/eslint-plugin/tests/rules/ban-types.test.ts index 64e6bcd3308..a200336e0aa 100644 --- a/packages/eslint-plugin/tests/rules/ban-types.test.ts +++ b/packages/eslint-plugin/tests/rules/ban-types.test.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/internal/prefer-ast-types-enum */ -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; import rule, { MessageIds, Options, diff --git a/packages/eslint-plugin/tests/rules/consistent-type-exports.test.ts b/packages/eslint-plugin/tests/rules/consistent-type-exports.test.ts index 561660a7f45..da5068753ca 100644 --- a/packages/eslint-plugin/tests/rules/consistent-type-exports.test.ts +++ b/packages/eslint-plugin/tests/rules/consistent-type-exports.test.ts @@ -17,8 +17,8 @@ ruleTester.run('consistent-type-exports', rule, { valid: [ "export { Foo } from 'foo';", "export type { AnalyzeOptions } from '@typescript-eslint/scope-manager';", - "export { BlockScope } from '@typescript-eslint/experimental-utils';", - "export type { BlockScope } from '@typescript-eslint/experimental-utils';", + "export { BlockScope } from '@typescript-eslint/utils';", + "export type { BlockScope } from '@typescript-eslint/utils';", ` const variable = 1; class Class {} diff --git a/packages/eslint-plugin/tests/rules/func-call-spacing.test.ts b/packages/eslint-plugin/tests/rules/func-call-spacing.test.ts index 2c5d0e57776..11650e2b014 100644 --- a/packages/eslint-plugin/tests/rules/func-call-spacing.test.ts +++ b/packages/eslint-plugin/tests/rules/func-call-spacing.test.ts @@ -3,7 +3,7 @@ /* eslint "@typescript-eslint/internal/plugin-test-formatting": ["error", { formatWithPrettier: false }] */ /* eslint-enable eslint-comments/no-use */ -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; import rule, { MessageIds, Options } from '../../src/rules/func-call-spacing'; import { RuleTester } from '../RuleTester'; diff --git a/packages/eslint-plugin/tests/rules/indent/indent-eslint.test.ts b/packages/eslint-plugin/tests/rules/indent/indent-eslint.test.ts index d03ee3ea9dc..e6483ce5dee 100644 --- a/packages/eslint-plugin/tests/rules/indent/indent-eslint.test.ts +++ b/packages/eslint-plugin/tests/rules/indent/indent-eslint.test.ts @@ -9,10 +9,7 @@ /* eslint "@typescript-eslint/internal/plugin-test-formatting": ["error", { formatWithPrettier: false }] */ /* eslint-enable eslint-comments/no-use */ -import { - AST_TOKEN_TYPES, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { AST_TOKEN_TYPES, AST_NODE_TYPES } from '@typescript-eslint/utils'; import fs from 'fs'; import path from 'path'; import rule from '../../../src/rules/indent-new-do-not-use'; diff --git a/packages/eslint-plugin/tests/rules/indent/indent.test.ts b/packages/eslint-plugin/tests/rules/indent/indent.test.ts index 3d6b58725f8..32b1f91fae0 100644 --- a/packages/eslint-plugin/tests/rules/indent/indent.test.ts +++ b/packages/eslint-plugin/tests/rules/indent/indent.test.ts @@ -3,10 +3,7 @@ /* eslint "@typescript-eslint/internal/plugin-test-formatting": ["error", { formatWithPrettier: false }] */ /* eslint-enable eslint-comments/no-use */ -import { - AST_NODE_TYPES, - TSESLint, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESLint } from '@typescript-eslint/utils'; import { RuleTester } from '../../RuleTester'; import rule from '../../../src/rules/indent'; import { diff --git a/packages/eslint-plugin/tests/rules/indent/utils.ts b/packages/eslint-plugin/tests/rules/indent/utils.ts index badfbc1c3c6..628389a451e 100644 --- a/packages/eslint-plugin/tests/rules/indent/utils.ts +++ b/packages/eslint-plugin/tests/rules/indent/utils.ts @@ -5,7 +5,7 @@ import { AST_NODE_TYPES, AST_TOKEN_TYPES, TSESLint, -} from '@typescript-eslint/experimental-utils'; +} from '@typescript-eslint/utils'; import rule from '../../../src/rules/indent'; import { InferMessageIdsTypeFromRule } from '../../../src/util'; diff --git a/packages/eslint-plugin/tests/rules/init-declarations.test.ts b/packages/eslint-plugin/tests/rules/init-declarations.test.ts index 1d5dc73655f..95d9a08799a 100644 --- a/packages/eslint-plugin/tests/rules/init-declarations.test.ts +++ b/packages/eslint-plugin/tests/rules/init-declarations.test.ts @@ -1,4 +1,4 @@ -import { AST_NODE_TYPES } from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import rule from '../../src/rules/init-declarations'; import { RuleTester } from '../RuleTester'; diff --git a/packages/eslint-plugin/tests/rules/keyword-spacing.test.ts b/packages/eslint-plugin/tests/rules/keyword-spacing.test.ts index ec94928c1c5..a2a92ad42ae 100644 --- a/packages/eslint-plugin/tests/rules/keyword-spacing.test.ts +++ b/packages/eslint-plugin/tests/rules/keyword-spacing.test.ts @@ -2,7 +2,7 @@ // this rule tests the spacing, which prettier will want to fix and break the tests /* eslint "@typescript-eslint/internal/plugin-test-formatting": ["error", { formatWithPrettier: false }] */ /* eslint-enable eslint-comments/no-use */ -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; import rule, { MessageIds, Options } from '../../src/rules/keyword-spacing'; import { RuleTester } from '../RuleTester'; diff --git a/packages/eslint-plugin/tests/rules/member-ordering-alphabetically-case-insensitive-order.test.ts b/packages/eslint-plugin/tests/rules/member-ordering-alphabetically-case-insensitive-order.test.ts index db62c315101..24907a8d8f4 100644 --- a/packages/eslint-plugin/tests/rules/member-ordering-alphabetically-case-insensitive-order.test.ts +++ b/packages/eslint-plugin/tests/rules/member-ordering-alphabetically-case-insensitive-order.test.ts @@ -4,7 +4,7 @@ import rule, { Options, } from '../../src/rules/member-ordering'; import { RuleTester } from '../RuleTester'; -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; const ruleTester = new RuleTester({ parser: '@typescript-eslint/parser', diff --git a/packages/eslint-plugin/tests/rules/member-ordering-alphabetically-order.test.ts b/packages/eslint-plugin/tests/rules/member-ordering-alphabetically-order.test.ts index 1386aee7909..dfd5f0de83c 100644 --- a/packages/eslint-plugin/tests/rules/member-ordering-alphabetically-order.test.ts +++ b/packages/eslint-plugin/tests/rules/member-ordering-alphabetically-order.test.ts @@ -4,7 +4,7 @@ import rule, { Options, } from '../../src/rules/member-ordering'; import { RuleTester } from '../RuleTester'; -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; const ruleTester = new RuleTester({ parser: '@typescript-eslint/parser', diff --git a/packages/eslint-plugin/tests/rules/member-ordering.test.ts b/packages/eslint-plugin/tests/rules/member-ordering.test.ts index cbab8ced2a3..c9c1090c734 100644 --- a/packages/eslint-plugin/tests/rules/member-ordering.test.ts +++ b/packages/eslint-plugin/tests/rules/member-ordering.test.ts @@ -1,6 +1,6 @@ import rule, { MessageIds, Options } from '../../src/rules/member-ordering'; import { RuleTester } from '../RuleTester'; -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; const ruleTester = new RuleTester({ parser: '@typescript-eslint/parser', diff --git a/packages/eslint-plugin/tests/rules/naming-convention.test.ts b/packages/eslint-plugin/tests/rules/naming-convention.test.ts index b8ad03a53a6..ef123500880 100644 --- a/packages/eslint-plugin/tests/rules/naming-convention.test.ts +++ b/packages/eslint-plugin/tests/rules/naming-convention.test.ts @@ -1,5 +1,5 @@ /* eslint-disable @typescript-eslint/internal/prefer-ast-types-enum */ -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; import rule, { MessageIds, Options } from '../../src/rules/naming-convention'; import { PredefinedFormatsString, diff --git a/packages/eslint-plugin/tests/rules/no-array-constructor.test.ts b/packages/eslint-plugin/tests/rules/no-array-constructor.test.ts index af760d29999..439cd85731c 100644 --- a/packages/eslint-plugin/tests/rules/no-array-constructor.test.ts +++ b/packages/eslint-plugin/tests/rules/no-array-constructor.test.ts @@ -1,4 +1,4 @@ -import { AST_NODE_TYPES } from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import rule from '../../src/rules/no-array-constructor'; import { RuleTester } from '../RuleTester'; diff --git a/packages/eslint-plugin/tests/rules/no-explicit-any.test.ts b/packages/eslint-plugin/tests/rules/no-explicit-any.test.ts index cb99564c943..37d6b99b29f 100644 --- a/packages/eslint-plugin/tests/rules/no-explicit-any.test.ts +++ b/packages/eslint-plugin/tests/rules/no-explicit-any.test.ts @@ -1,6 +1,6 @@ import rule, { MessageIds, Options } from '../../src/rules/no-explicit-any'; import { RuleTester } from '../RuleTester'; -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; type InvalidTestCase = TSESLint.InvalidTestCase; type SuggestionOutput = TSESLint.SuggestionOutput; diff --git a/packages/eslint-plugin/tests/rules/no-extraneous-class.test.ts b/packages/eslint-plugin/tests/rules/no-extraneous-class.test.ts index 44d32490a10..799410971f2 100644 --- a/packages/eslint-plugin/tests/rules/no-extraneous-class.test.ts +++ b/packages/eslint-plugin/tests/rules/no-extraneous-class.test.ts @@ -1,4 +1,4 @@ -import { AST_NODE_TYPES } from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import rule from '../../src/rules/no-extraneous-class'; import { RuleTester } from '../RuleTester'; diff --git a/packages/eslint-plugin/tests/rules/no-for-in-array.test.ts b/packages/eslint-plugin/tests/rules/no-for-in-array.test.ts index 7c3ec309185..0fd7679a650 100644 --- a/packages/eslint-plugin/tests/rules/no-for-in-array.test.ts +++ b/packages/eslint-plugin/tests/rules/no-for-in-array.test.ts @@ -1,4 +1,4 @@ -import { AST_NODE_TYPES } from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import rule from '../../src/rules/no-for-in-array'; import { RuleTester, getFixturesRootDir } from '../RuleTester'; diff --git a/packages/eslint-plugin/tests/rules/no-inferrable-types.test.ts b/packages/eslint-plugin/tests/rules/no-inferrable-types.test.ts index fc216c6c476..d85806b69c4 100644 --- a/packages/eslint-plugin/tests/rules/no-inferrable-types.test.ts +++ b/packages/eslint-plugin/tests/rules/no-inferrable-types.test.ts @@ -1,4 +1,4 @@ -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; import rule from '../../src/rules/no-inferrable-types'; import { RuleTester } from '../RuleTester'; import { diff --git a/packages/eslint-plugin/tests/rules/no-loop-func.test.ts b/packages/eslint-plugin/tests/rules/no-loop-func.test.ts index be22ae267c0..4ad0153cc20 100644 --- a/packages/eslint-plugin/tests/rules/no-loop-func.test.ts +++ b/packages/eslint-plugin/tests/rules/no-loop-func.test.ts @@ -1,4 +1,4 @@ -import { AST_NODE_TYPES } from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import rule from '../../src/rules/no-loop-func'; import { RuleTester } from '../RuleTester'; diff --git a/packages/eslint-plugin/tests/rules/no-redeclare.test.ts b/packages/eslint-plugin/tests/rules/no-redeclare.test.ts index c371a738755..bd3384b3631 100644 --- a/packages/eslint-plugin/tests/rules/no-redeclare.test.ts +++ b/packages/eslint-plugin/tests/rules/no-redeclare.test.ts @@ -1,7 +1,4 @@ -import { - AST_NODE_TYPES, - AST_TOKEN_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, AST_TOKEN_TYPES } from '@typescript-eslint/utils'; import { RuleTester } from '../RuleTester'; import rule from '../../src/rules/no-redeclare'; diff --git a/packages/eslint-plugin/tests/rules/no-restricted-imports.test.ts b/packages/eslint-plugin/tests/rules/no-restricted-imports.test.ts index 059a7d1cad8..8e4ea58c55a 100644 --- a/packages/eslint-plugin/tests/rules/no-restricted-imports.test.ts +++ b/packages/eslint-plugin/tests/rules/no-restricted-imports.test.ts @@ -1,4 +1,4 @@ -import { AST_NODE_TYPES } from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import rule from '../../src/rules/no-restricted-imports'; import { RuleTester } from '../RuleTester'; @@ -536,10 +536,10 @@ ruleTester.run('no-restricted-imports', rule, { ], }, { - code: "import type { InvalidTestCase } from '@typescript-eslint/experimental-utils/dist/ts-eslint';", + code: "import type { InvalidTestCase } from '@typescript-eslint/utils/dist/ts-eslint';", options: [ { - patterns: ['@typescript-eslint/experimental-utils/dist/*'], + patterns: ['@typescript-eslint/utils/dist/*'], }, ], errors: [ diff --git a/packages/eslint-plugin/tests/rules/no-shadow.test.ts b/packages/eslint-plugin/tests/rules/no-shadow.test.ts index 929ddf9d389..635dff307e1 100644 --- a/packages/eslint-plugin/tests/rules/no-shadow.test.ts +++ b/packages/eslint-plugin/tests/rules/no-shadow.test.ts @@ -1,4 +1,4 @@ -import { AST_NODE_TYPES } from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import rule from '../../src/rules/no-shadow'; import { RuleTester } from '../RuleTester'; diff --git a/packages/eslint-plugin/tests/rules/no-this-alias.test.ts b/packages/eslint-plugin/tests/rules/no-this-alias.test.ts index 43806a67fd9..0a8f7340bca 100644 --- a/packages/eslint-plugin/tests/rules/no-this-alias.test.ts +++ b/packages/eslint-plugin/tests/rules/no-this-alias.test.ts @@ -1,4 +1,4 @@ -import { AST_NODE_TYPES } from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import rule from '../../src/rules/no-this-alias'; import { RuleTester } from '../RuleTester'; diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-condition.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-condition.test.ts index 82196fbc8a1..3e86749956c 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-condition.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-condition.test.ts @@ -1,7 +1,7 @@ import { TestCaseError, InvalidTestCase, -} from '@typescript-eslint/experimental-utils/dist/ts-eslint'; +} from '@typescript-eslint/utils/dist/ts-eslint'; import * as path from 'path'; import rule, { Options, diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-qualifier.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-qualifier.test.ts index a03cdc7d747..7dd7fd2747d 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-qualifier.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-qualifier.test.ts @@ -1,4 +1,4 @@ -import { AST_NODE_TYPES } from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import rule from '../../src/rules/no-unnecessary-qualifier'; import { RuleTester, getFixturesRootDir } from '../RuleTester'; diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts index 7cd16960139..3b6c8168ce8 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts @@ -15,7 +15,7 @@ const ruleTester = new RuleTester({ ruleTester.run('no-unnecessary-type-assertion', rule, { valid: [ ` -import { TSESTree } from '@typescript-eslint/experimental-utils'; +import { TSESTree } from '@typescript-eslint/utils'; declare const member: TSESTree.TSEnumMember; if ( member.id.type === AST_NODE_TYPES.Literal && diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts index f9594fc9348..78ef7e78b38 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts @@ -1,4 +1,4 @@ -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; import rule from '../../src/rules/no-unsafe-assignment'; import { RuleTester, diff --git a/packages/eslint-plugin/tests/rules/no-unused-expressions.test.ts b/packages/eslint-plugin/tests/rules/no-unused-expressions.test.ts index 06d9019f38a..cf9082af764 100644 --- a/packages/eslint-plugin/tests/rules/no-unused-expressions.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unused-expressions.test.ts @@ -1,4 +1,4 @@ -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; import rule from '../../src/rules/no-unused-expressions'; import { noFormat, RuleTester } from '../RuleTester'; diff --git a/packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars-eslint.test.ts b/packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars-eslint.test.ts index 8ef68ae781c..9ddde4e9f24 100644 --- a/packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars-eslint.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unused-vars/no-unused-vars-eslint.test.ts @@ -4,10 +4,7 @@ 'use strict'; -import { - AST_NODE_TYPES, - TSESLint, -} from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES, TSESLint } from '@typescript-eslint/utils'; import rule, { MessageIds } from '../../../src/rules/no-unused-vars'; import { RuleTester } from '../../RuleTester'; diff --git a/packages/eslint-plugin/tests/rules/no-use-before-define.test.ts b/packages/eslint-plugin/tests/rules/no-use-before-define.test.ts index e585b66e3ac..32924973a5c 100644 --- a/packages/eslint-plugin/tests/rules/no-use-before-define.test.ts +++ b/packages/eslint-plugin/tests/rules/no-use-before-define.test.ts @@ -1,6 +1,6 @@ import rule from '../../src/rules/no-use-before-define'; import { RuleTester } from '../RuleTester'; -import { AST_NODE_TYPES } from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES } from '@typescript-eslint/utils'; const ruleTester = new RuleTester({ parser: '@typescript-eslint/parser', diff --git a/packages/eslint-plugin/tests/rules/no-useless-constructor.test.ts b/packages/eslint-plugin/tests/rules/no-useless-constructor.test.ts index 0730f280dc2..7cedb9151e3 100644 --- a/packages/eslint-plugin/tests/rules/no-useless-constructor.test.ts +++ b/packages/eslint-plugin/tests/rules/no-useless-constructor.test.ts @@ -1,4 +1,4 @@ -import { AST_NODE_TYPES } from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import rule from '../../src/rules/no-useless-constructor'; import { RuleTester } from '../RuleTester'; diff --git a/packages/eslint-plugin/tests/rules/object-curly-spacing.test.ts b/packages/eslint-plugin/tests/rules/object-curly-spacing.test.ts index 7b917a67308..c64a7e17b9a 100644 --- a/packages/eslint-plugin/tests/rules/object-curly-spacing.test.ts +++ b/packages/eslint-plugin/tests/rules/object-curly-spacing.test.ts @@ -3,7 +3,7 @@ /* eslint "@typescript-eslint/internal/plugin-test-formatting": ["error", { formatWithPrettier: false }] */ /* eslint-enable eslint-comments/no-use */ -import { AST_NODE_TYPES } from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import rule from '../../src/rules/object-curly-spacing'; import { RuleTester } from '../RuleTester'; diff --git a/packages/eslint-plugin/tests/rules/prefer-function-type.test.ts b/packages/eslint-plugin/tests/rules/prefer-function-type.test.ts index 51aa8523489..50fb8370b18 100644 --- a/packages/eslint-plugin/tests/rules/prefer-function-type.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-function-type.test.ts @@ -1,4 +1,4 @@ -import { AST_NODE_TYPES } from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import rule, { phrases } from '../../src/rules/prefer-function-type'; import { noFormat, RuleTester } from '../RuleTester'; diff --git a/packages/eslint-plugin/tests/rules/prefer-nullish-coalescing.test.ts b/packages/eslint-plugin/tests/rules/prefer-nullish-coalescing.test.ts index a984484edd5..8096df94c32 100644 --- a/packages/eslint-plugin/tests/rules/prefer-nullish-coalescing.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-nullish-coalescing.test.ts @@ -1,4 +1,4 @@ -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; import rule, { MessageIds, Options, diff --git a/packages/eslint-plugin/tests/rules/prefer-optional-chain.test.ts b/packages/eslint-plugin/tests/rules/prefer-optional-chain.test.ts index feb7f9bd524..d6ac19abb89 100644 --- a/packages/eslint-plugin/tests/rules/prefer-optional-chain.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-optional-chain.test.ts @@ -1,6 +1,6 @@ import rule from '../../src/rules/prefer-optional-chain'; import { RuleTester, noFormat } from '../RuleTester'; -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; import { InferMessageIdsTypeFromRule, InferOptionsTypeFromRule, diff --git a/packages/eslint-plugin/tests/rules/prefer-readonly-parameter-types.test.ts b/packages/eslint-plugin/tests/rules/prefer-readonly-parameter-types.test.ts index be50f096963..f17a19f1f6d 100644 --- a/packages/eslint-plugin/tests/rules/prefer-readonly-parameter-types.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-readonly-parameter-types.test.ts @@ -1,4 +1,4 @@ -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; import { RuleTester, getFixturesRootDir } from '../RuleTester'; import rule from '../../src/rules/prefer-readonly-parameter-types'; import { diff --git a/packages/eslint-plugin/tests/rules/prefer-string-starts-ends-with.test.ts b/packages/eslint-plugin/tests/rules/prefer-string-starts-ends-with.test.ts index aefb7cd8d2d..d1e76250d57 100644 --- a/packages/eslint-plugin/tests/rules/prefer-string-starts-ends-with.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-string-starts-ends-with.test.ts @@ -1,4 +1,4 @@ -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; import rule from '../../src/rules/prefer-string-starts-ends-with'; import { RuleTester, getFixturesRootDir } from '../RuleTester'; diff --git a/packages/eslint-plugin/tests/rules/promise-function-async.test.ts b/packages/eslint-plugin/tests/rules/promise-function-async.test.ts index 6a0451ed858..53ba5cb81a0 100644 --- a/packages/eslint-plugin/tests/rules/promise-function-async.test.ts +++ b/packages/eslint-plugin/tests/rules/promise-function-async.test.ts @@ -1,4 +1,4 @@ -import { noFormat } from '@typescript-eslint/experimental-utils/src/eslint-utils'; +import { noFormat } from '@typescript-eslint/utils/src/eslint-utils'; import rule from '../../src/rules/promise-function-async'; import { getFixturesRootDir, RuleTester } from '../RuleTester'; diff --git a/packages/eslint-plugin/tests/rules/semi.test.ts b/packages/eslint-plugin/tests/rules/semi.test.ts index 48c68a2f059..b5d88f77a93 100644 --- a/packages/eslint-plugin/tests/rules/semi.test.ts +++ b/packages/eslint-plugin/tests/rules/semi.test.ts @@ -3,7 +3,7 @@ /* eslint "@typescript-eslint/internal/plugin-test-formatting": ["error", { formatWithPrettier: false }] */ /* eslint-enable eslint-comments/no-use */ -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; import rule, { MessageIds, Options } from '../../src/rules/semi'; import { RuleTester } from '../RuleTester'; diff --git a/packages/eslint-plugin/tests/rules/sort-type-union-intersection-members.test.ts b/packages/eslint-plugin/tests/rules/sort-type-union-intersection-members.test.ts index a0cf2d71dd5..a5eeb2f2fa4 100644 --- a/packages/eslint-plugin/tests/rules/sort-type-union-intersection-members.test.ts +++ b/packages/eslint-plugin/tests/rules/sort-type-union-intersection-members.test.ts @@ -1,4 +1,4 @@ -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; import rule, { MessageIds, Options, diff --git a/packages/eslint-plugin/tests/rules/space-before-function-paren.test.ts b/packages/eslint-plugin/tests/rules/space-before-function-paren.test.ts index 13c68b88bc7..72405cf35d6 100644 --- a/packages/eslint-plugin/tests/rules/space-before-function-paren.test.ts +++ b/packages/eslint-plugin/tests/rules/space-before-function-paren.test.ts @@ -3,7 +3,7 @@ /* eslint "@typescript-eslint/internal/plugin-test-formatting": ["error", { formatWithPrettier: false }] */ /* eslint-enable eslint-comments/no-use */ -import { AST_NODE_TYPES } from '@typescript-eslint/experimental-utils'; +import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import rule from '../../src/rules/space-before-function-paren'; import { RuleTester } from '../RuleTester'; diff --git a/packages/eslint-plugin/tests/rules/type-annotation-spacing.test.ts b/packages/eslint-plugin/tests/rules/type-annotation-spacing.test.ts index 19349a80889..17ae884c72f 100644 --- a/packages/eslint-plugin/tests/rules/type-annotation-spacing.test.ts +++ b/packages/eslint-plugin/tests/rules/type-annotation-spacing.test.ts @@ -3,7 +3,7 @@ /* eslint "@typescript-eslint/internal/plugin-test-formatting": ["error", { formatWithPrettier: false }] */ /* eslint-enable eslint-comments/no-use */ -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; import { RuleTester } from '../RuleTester'; import rule from '../../src/rules/type-annotation-spacing'; import { diff --git a/packages/eslint-plugin/tests/rules/unbound-method.test.ts b/packages/eslint-plugin/tests/rules/unbound-method.test.ts index 3075e93fe67..524f64a47a4 100644 --- a/packages/eslint-plugin/tests/rules/unbound-method.test.ts +++ b/packages/eslint-plugin/tests/rules/unbound-method.test.ts @@ -1,4 +1,4 @@ -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; import rule, { MessageIds, Options } from '../../src/rules/unbound-method'; import { RuleTester, getFixturesRootDir } from '../RuleTester'; diff --git a/packages/eslint-plugin/tests/util/getWrappingFixer.test.ts b/packages/eslint-plugin/tests/util/getWrappingFixer.test.ts index bcbb4c6d5fb..8e2b48e4bed 100644 --- a/packages/eslint-plugin/tests/util/getWrappingFixer.test.ts +++ b/packages/eslint-plugin/tests/util/getWrappingFixer.test.ts @@ -1,4 +1,4 @@ -import { TSESTree } from '@typescript-eslint/experimental-utils'; +import { TSESTree } from '@typescript-eslint/utils'; import { getFixturesRootDir, RuleTester } from '../RuleTester'; import { createRule, getWrappingFixer } from '../../src/util'; diff --git a/packages/eslint-plugin/tools/generate-configs.ts b/packages/eslint-plugin/tools/generate-configs.ts index ed84f286496..f1da74b67c7 100644 --- a/packages/eslint-plugin/tools/generate-configs.ts +++ b/packages/eslint-plugin/tools/generate-configs.ts @@ -1,4 +1,4 @@ -import { TSESLint } from '@typescript-eslint/experimental-utils'; +import { TSESLint } from '@typescript-eslint/utils'; import chalk from 'chalk'; import fs from 'fs'; import path from 'path'; diff --git a/packages/eslint-plugin/tsconfig.build.json b/packages/eslint-plugin/tsconfig.build.json index fc60d9a85a7..af60c77e84f 100644 --- a/packages/eslint-plugin/tsconfig.build.json +++ b/packages/eslint-plugin/tsconfig.build.json @@ -10,7 +10,7 @@ }, "include": ["src", "typings"], "references": [ - { "path": "../experimental-utils/tsconfig.build.json" }, + { "path": "../utils/tsconfig.build.json" }, { "path": "../parser/tsconfig.build.json" }, { "path": "../scope-manager/tsconfig.build.json" }, { "path": "../type-utils/tsconfig.build.json" } diff --git a/packages/eslint-plugin/tsconfig.json b/packages/eslint-plugin/tsconfig.json index 31db855dad8..7801773b539 100644 --- a/packages/eslint-plugin/tsconfig.json +++ b/packages/eslint-plugin/tsconfig.json @@ -6,7 +6,7 @@ }, "include": ["src", "typings", "tests", "tools", "index.d.ts"], "references": [ - { "path": "../experimental-utils/tsconfig.build.json" }, + { "path": "../utils/tsconfig.build.json" }, { "path": "../parser/tsconfig.build.json" }, { "path": "../scope-manager/tsconfig.build.json" }, { "path": "../type-utils/tsconfig.build.json" } diff --git a/packages/eslint-plugin/typings/eslint-rules.d.ts b/packages/eslint-plugin/typings/eslint-rules.d.ts index 44b679281fb..a279276e91b 100644 --- a/packages/eslint-plugin/typings/eslint-rules.d.ts +++ b/packages/eslint-plugin/typings/eslint-rules.d.ts @@ -5,7 +5,7 @@ // } declare module 'eslint/lib/rules/arrow-parens' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< | 'unexpectedParens' @@ -26,7 +26,7 @@ declare module 'eslint/lib/rules/arrow-parens' { } declare module 'eslint/lib/rules/camelcase' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'notCamelCase', @@ -46,7 +46,7 @@ declare module 'eslint/lib/rules/camelcase' { } declare module 'eslint/lib/rules/indent' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; type ElementList = number | 'first' | 'off'; const rule: TSESLint.RuleModule< @@ -142,8 +142,8 @@ declare module 'eslint/lib/rules/indent' { } declare module 'eslint/lib/rules/keyword-spacing' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; - import { RuleFunction } from '@typescript-eslint/experimental-utils/dist/ts-eslint'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; + import { RuleFunction } from '@typescript-eslint/utils/dist/ts-eslint'; type Options = [ { @@ -221,7 +221,7 @@ declare module 'eslint/lib/rules/keyword-spacing' { } declare module 'eslint/lib/rules/no-dupe-class-members' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'unexpected', @@ -242,7 +242,7 @@ declare module 'eslint/lib/rules/no-dupe-class-members' { } declare module 'eslint/lib/rules/no-dupe-args' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'unexpected', @@ -256,7 +256,7 @@ declare module 'eslint/lib/rules/no-dupe-args' { } declare module 'eslint/lib/rules/no-empty-function' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'unexpected', @@ -274,7 +274,7 @@ declare module 'eslint/lib/rules/no-empty-function' { } declare module 'eslint/lib/rules/no-implicit-globals' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< | 'globalNonLexicalBinding' @@ -291,7 +291,7 @@ declare module 'eslint/lib/rules/no-implicit-globals' { } declare module 'eslint/lib/rules/no-loop-func' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'unsafeRefs', @@ -306,7 +306,7 @@ declare module 'eslint/lib/rules/no-loop-func' { } declare module 'eslint/lib/rules/no-magic-numbers' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'noMagic', @@ -329,7 +329,7 @@ declare module 'eslint/lib/rules/no-magic-numbers' { } declare module 'eslint/lib/rules/no-redeclare' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'redeclared' | 'redeclaredAsBuiltin' | 'redeclaredBySyntax', @@ -346,7 +346,7 @@ declare module 'eslint/lib/rules/no-redeclare' { } declare module 'eslint/lib/rules/no-restricted-globals' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'defaultMessage' | 'customMessage', @@ -365,7 +365,7 @@ declare module 'eslint/lib/rules/no-restricted-globals' { } declare module 'eslint/lib/rules/no-shadow' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'noShadow', @@ -384,7 +384,7 @@ declare module 'eslint/lib/rules/no-shadow' { } declare module 'eslint/lib/rules/no-undef' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'undef', @@ -401,7 +401,7 @@ declare module 'eslint/lib/rules/no-undef' { } declare module 'eslint/lib/rules/no-unused-vars' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'unusedVar', @@ -426,7 +426,7 @@ declare module 'eslint/lib/rules/no-unused-vars' { } declare module 'eslint/lib/rules/no-unused-expressions' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'expected', @@ -445,7 +445,7 @@ declare module 'eslint/lib/rules/no-unused-expressions' { } declare module 'eslint/lib/rules/no-use-before-define' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'usedBeforeDefine', @@ -465,7 +465,7 @@ declare module 'eslint/lib/rules/no-use-before-define' { } declare module 'eslint/lib/rules/strict' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< | 'function' @@ -487,7 +487,7 @@ declare module 'eslint/lib/rules/strict' { } declare module 'eslint/lib/rules/no-useless-constructor' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'noUselessConstructor', @@ -500,7 +500,7 @@ declare module 'eslint/lib/rules/no-useless-constructor' { } declare module 'eslint/lib/rules/no-extra-parens' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'unexpected', @@ -557,7 +557,7 @@ declare module 'eslint/lib/rules/no-extra-parens' { } declare module 'eslint/lib/rules/semi' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'missingSemi' | 'extraSemi', @@ -587,7 +587,7 @@ declare module 'eslint/lib/rules/semi' { } declare module 'eslint/lib/rules/quotes' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'wrongQuotes', @@ -607,7 +607,7 @@ declare module 'eslint/lib/rules/quotes' { } declare module 'eslint/lib/rules/brace-style' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< | 'nextLineOpen' @@ -634,7 +634,7 @@ declare module 'eslint/lib/rules/brace-style' { } declare module 'eslint/lib/rules/no-extra-semi' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'unexpected', @@ -654,7 +654,7 @@ declare module 'eslint/lib/rules/no-extra-semi' { } declare module 'eslint/lib/rules/lines-between-class-members' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'always' | 'never', @@ -673,7 +673,7 @@ declare module 'eslint/lib/rules/lines-between-class-members' { } declare module 'eslint/lib/rules/init-declarations' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'initialized' | 'notInitialized', @@ -691,7 +691,7 @@ declare module 'eslint/lib/rules/init-declarations' { } declare module 'eslint/lib/rules/no-invalid-this' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'unexpectedThis', @@ -713,7 +713,7 @@ declare module 'eslint/lib/rules/no-invalid-this' { export = rule; } declare module 'eslint/lib/rules/dot-notation' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'useDot' | 'useBrackets', @@ -734,7 +734,7 @@ declare module 'eslint/lib/rules/dot-notation' { } declare module 'eslint/lib/rules/no-loss-of-precision' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'noLossOfPrecision', @@ -747,7 +747,7 @@ declare module 'eslint/lib/rules/no-loss-of-precision' { } declare module 'eslint/lib/rules/comma-dangle' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; type StringOptions = | 'always-multiline' @@ -780,7 +780,7 @@ declare module 'eslint/lib/rules/comma-dangle' { } declare module 'eslint/lib/rules/no-duplicate-imports' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< | 'import' @@ -806,7 +806,7 @@ declare module 'eslint/lib/rules/no-duplicate-imports' { } declare module 'eslint/lib/rules/space-infix-ops' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'missingSpace', @@ -828,7 +828,7 @@ declare module 'eslint/lib/rules/space-infix-ops' { } declare module 'eslint/lib/rules/prefer-const' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< 'useConst', @@ -847,7 +847,7 @@ declare module 'eslint/lib/rules/prefer-const' { } declare module 'eslint/lib/rules/object-curly-spacing' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; const rule: TSESLint.RuleModule< | 'requireSpaceBefore' @@ -872,7 +872,7 @@ declare module 'eslint/lib/rules/object-curly-spacing' { } declare module 'eslint/lib/rules/no-restricted-imports' { - import { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; + import { TSESLint, TSESTree } from '@typescript-eslint/utils'; namespace rule { export type ArrayOfStringOrObject = ( diff --git a/packages/experimental-utils/CHANGELOG.md b/packages/experimental-utils/CHANGELOG.md index 9a67454c04b..b4399debe14 100644 --- a/packages/experimental-utils/CHANGELOG.md +++ b/packages/experimental-utils/CHANGELOG.md @@ -1,5 +1,7 @@ # Change Log +> ⚠ Changes for version 6.0 onwards are documented in the `@typescript-eslint/utils` changelog. + All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. diff --git a/packages/experimental-utils/README.md b/packages/experimental-utils/README.md index 7f9f6b24207..3073308c16b 100644 --- a/packages/experimental-utils/README.md +++ b/packages/experimental-utils/README.md @@ -4,33 +4,21 @@

CI - NPM Version - NPM Downloads + NPM Version + NPM Downloads

## Note -This package has inherited its version number from the `@typescript-eslint` project. -Meaning that even though this package is `2.x.y`, you shouldn't expect 100% stability between minor version bumps. -i.e. treat it as a `0.x.y` package. +**This package is purely a re-export of `@typescript-eslint/utils`.** +You should switch to importing from that non-experimental package instead. -Feel free to use it now, and let us know what utilities you need or send us PRs with utilities you build on top of it. +```diff +- import { RuleCreator } from '@typescript-eslint/experimental-utils'; ++ import { RuleCreator } from '@typescript-eslint/utils'; +``` -Once it is stable, it will be renamed to `@typescript-eslint/util` for a `6.0.0` release. - -## Exports - -| Name | Description | -| -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| [`ASTUtils`](./src/ast-utils) | Tools for operating on the ESTree AST. Also includes the [`eslint-utils`](https://www.npmjs.com/package/eslint-utils) package, correctly typed to work with the types found in `TSESTree` | -| [`ESLintUtils`](./src/eslint-utils) | Tools for creating ESLint rules with TypeScript. | -| `JSONSchema` | Types from the [`@types/json-schema`](https://www.npmjs.com/package/@types/json-schema) package, re-exported to save you having to manually import them. Also ensures you're using the same version of the types as this package. | -| [`TSESLint`](./src/ts-eslint) | Types for ESLint, correctly typed to work with the types found in `TSESTree`. | -| [`TSESLintScope`](./src/ts-eslint-scope) | The [`eslint-scope`](https://www.npmjs.com/package/eslint-scope) package, correctly typed to work with the types found in both `TSESTree` and `TSESLint` | -| [`TSESTree`](../types/src/ts-estree.ts) | Types for the TypeScript flavor of ESTree created by `@typescript-eslint/typescript-estree`. | -| [`AST_NODE_TYPES`](../types/src/ast-node-types.ts) | An enum with the names of every single _node_ found in `TSESTree`. | -| [`AST_TOKEN_TYPES`](../types/src/ast-token-types.ts) | An enum with the names of every single _token_ found in `TSESTree`. | -| [`ParserServices`](../typescript-estree/src/parser-options.ts) | Typing for the parser services provided when parsing a file using `@typescript-eslint/typescript-estree`. | +> ⚠ A future major version of this old package will `console.warn` to ask you to switch. ## Contributing diff --git a/packages/experimental-utils/src/index.ts b/packages/experimental-utils/src/index.ts index 31328386269..ae481e0310b 100644 --- a/packages/experimental-utils/src/index.ts +++ b/packages/experimental-utils/src/index.ts @@ -1,8 +1,2 @@ -import * as ASTUtils from './ast-utils'; -import * as ESLintUtils from './eslint-utils'; -import * as JSONSchema from './json-schema'; -import * as TSESLint from './ts-eslint'; -import * as TSESLintScope from './ts-eslint-scope'; - -export { ASTUtils, ESLintUtils, JSONSchema, TSESLint, TSESLintScope }; -export * from './ts-estree'; +// TODO (#4139): Once typescript-eslint hits v7, this package will console.warn to switch... +export * from '@typescript-eslint/utils'; diff --git a/packages/parser/tsconfig.build.json b/packages/parser/tsconfig.build.json index 1725797310b..8556d030722 100644 --- a/packages/parser/tsconfig.build.json +++ b/packages/parser/tsconfig.build.json @@ -8,7 +8,7 @@ }, "include": ["src"], "references": [ - { "path": "../experimental-utils/tsconfig.build.json" }, + { "path": "../utils/tsconfig.build.json" }, { "path": "../scope-manager/tsconfig.build.json" }, { "path": "../types/tsconfig.build.json" }, { "path": "../typescript-estree/tsconfig.build.json" } diff --git a/packages/parser/tsconfig.json b/packages/parser/tsconfig.json index f69f9ce1078..ae4f11eded6 100644 --- a/packages/parser/tsconfig.json +++ b/packages/parser/tsconfig.json @@ -7,7 +7,7 @@ "include": ["src", "tests", "tools"], "exclude": ["tests/fixtures"], "references": [ - { "path": "../experimental-utils/tsconfig.build.json" }, + { "path": "../utils/tsconfig.build.json" }, { "path": "../scope-manager/tsconfig.build.json" }, { "path": "../types/tsconfig.build.json" }, { "path": "../typescript-estree/tsconfig.build.json" } diff --git a/packages/type-utils/README.md b/packages/type-utils/README.md index 099067095a4..19a4bf7e964 100644 --- a/packages/type-utils/README.md +++ b/packages/type-utils/README.md @@ -8,7 +8,7 @@ NPM Downloads

-This utilities in this package are separated from `@typescript-eslint/experimental-utils` so that that package does not require a dependency on `typescript`. +This utilities in this package are separated from `@typescript-eslint/utils` so that that package does not require a dependency on `typescript`. ## Contributing diff --git a/packages/type-utils/package.json b/packages/type-utils/package.json index 91b8c385dc3..10810f8797f 100644 --- a/packages/type-utils/package.json +++ b/packages/type-utils/package.json @@ -39,7 +39,7 @@ "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@typescript-eslint/experimental-utils": "5.8.1", + "@typescript-eslint/utils": "5.8.1", "debug": "^4.3.2", "tsutils": "^3.21.0" }, diff --git a/packages/type-utils/src/isTypeReadonly.ts b/packages/type-utils/src/isTypeReadonly.ts index c6bc0f5761a..94a3b76fe79 100644 --- a/packages/type-utils/src/isTypeReadonly.ts +++ b/packages/type-utils/src/isTypeReadonly.ts @@ -1,4 +1,4 @@ -import { ESLintUtils } from '@typescript-eslint/experimental-utils'; +import { ESLintUtils } from '@typescript-eslint/utils'; import { isObjectType, isUnionType, diff --git a/packages/type-utils/src/isUnsafeAssignment.ts b/packages/type-utils/src/isUnsafeAssignment.ts index 32dc84b0c30..926e215ae08 100644 --- a/packages/type-utils/src/isUnsafeAssignment.ts +++ b/packages/type-utils/src/isUnsafeAssignment.ts @@ -1,7 +1,4 @@ -import { - TSESTree, - AST_NODE_TYPES, -} from '@typescript-eslint/experimental-utils'; +import { TSESTree, AST_NODE_TYPES } from '@typescript-eslint/utils'; import { isTypeReference } from 'tsutils'; import * as ts from 'typescript'; import { isTypeAnyType, isTypeUnknownType } from './predicates'; diff --git a/packages/type-utils/tests/isUnsafeAssignment.test.ts b/packages/type-utils/tests/isUnsafeAssignment.test.ts index 060dc880e53..6b794705751 100644 --- a/packages/type-utils/tests/isUnsafeAssignment.test.ts +++ b/packages/type-utils/tests/isUnsafeAssignment.test.ts @@ -1,5 +1,5 @@ import * as ts from 'typescript'; -import { TSESTree } from '@typescript-eslint/experimental-utils'; +import { TSESTree } from '@typescript-eslint/utils'; import { parseForESLint } from '@typescript-eslint/parser'; import { isUnsafeAssignment } from '../src/isUnsafeAssignment'; import path from 'path'; diff --git a/packages/type-utils/tsconfig.build.json b/packages/type-utils/tsconfig.build.json index 3b5743aaf5d..782f14402ae 100644 --- a/packages/type-utils/tsconfig.build.json +++ b/packages/type-utils/tsconfig.build.json @@ -7,5 +7,5 @@ "resolveJsonModule": true }, "include": ["src", "typings"], - "references": [{ "path": "../experimental-utils/tsconfig.build.json" }] + "references": [{ "path": "../utils/tsconfig.build.json" }] } diff --git a/packages/type-utils/tsconfig.json b/packages/type-utils/tsconfig.json index 9c0c2ac4ba5..93bec73e74a 100644 --- a/packages/type-utils/tsconfig.json +++ b/packages/type-utils/tsconfig.json @@ -5,5 +5,5 @@ "rootDir": "." }, "include": ["src", "typings", "tests", "tools"], - "references": [{ "path": "../experimental-utils/tsconfig.build.json" }] + "references": [{ "path": "../utils/tsconfig.build.json" }] } diff --git a/packages/types/README.md b/packages/types/README.md index 5c91f1687d2..273ac71a936 100644 --- a/packages/types/README.md +++ b/packages/types/README.md @@ -9,7 +9,7 @@ This package exists to help us reduce cycles and provide lighter-weight packages at runtime. You probably don't want to use it directly. -If you're building an ESLint plugin, consider using [`@typescript-eslint/experimental-utils`](../experimental-utils). +If you're building an ESLint plugin, consider using [`@typescript-eslint/utils`](../utils). If you're parsing TypeScript code, consider using [`@typescript-eslint/typescript-estree`](../typescript-estree). ## Contributing diff --git a/packages/utils/CHANGELOG.md b/packages/utils/CHANGELOG.md new file mode 100644 index 00000000000..e4d87c4d45c --- /dev/null +++ b/packages/utils/CHANGELOG.md @@ -0,0 +1,4 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. diff --git a/packages/utils/LICENSE b/packages/utils/LICENSE new file mode 100644 index 00000000000..7e7370143b2 --- /dev/null +++ b/packages/utils/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2019 TypeScript ESLint and other contributors + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/utils/README.md b/packages/utils/README.md new file mode 100644 index 00000000000..d517cc457a5 --- /dev/null +++ b/packages/utils/README.md @@ -0,0 +1,27 @@ +

Utils for ESLint Plugins

+ +

Utilities for working with TypeScript + ESLint together.

+ +

+ CI + NPM Version + NPM Downloads +

+ +## Exports + +| Name | Description | +| -------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [`ASTUtils`](./src/ast-utils) | Tools for operating on the ESTree AST. Also includes the [`eslint-utils`](https://www.npmjs.com/package/eslint-utils) package, correctly typed to work with the types found in `TSESTree` | +| [`ESLintUtils`](./src/eslint-utils) | Tools for creating ESLint rules with TypeScript. | +| `JSONSchema` | Types from the [`@types/json-schema`](https://www.npmjs.com/package/@types/json-schema) package, re-exported to save you having to manually import them. Also ensures you're using the same version of the types as this package. | +| [`TSESLint`](./src/ts-eslint) | Types for ESLint, correctly typed to work with the types found in `TSESTree`. | +| [`TSESLintScope`](./src/ts-eslint-scope) | The [`eslint-scope`](https://www.npmjs.com/package/eslint-scope) package, correctly typed to work with the types found in both `TSESTree` and `TSESLint` | +| [`TSESTree`](../types/src/ts-estree.ts) | Types for the TypeScript flavor of ESTree created by `@typescript-eslint/typescript-estree`. | +| [`AST_NODE_TYPES`](../types/src/ast-node-types.ts) | An enum with the names of every single _node_ found in `TSESTree`. | +| [`AST_TOKEN_TYPES`](../types/src/ast-token-types.ts) | An enum with the names of every single _token_ found in `TSESTree`. | +| [`ParserServices`](../typescript-estree/src/parser-options.ts) | Typing for the parser services provided when parsing a file using `@typescript-eslint/typescript-estree`. | + +## Contributing + +[See the contributing guide here](../../CONTRIBUTING.md) diff --git a/packages/utils/jest.config.js b/packages/utils/jest.config.js new file mode 100644 index 00000000000..bf4e270e376 --- /dev/null +++ b/packages/utils/jest.config.js @@ -0,0 +1,21 @@ +'use strict'; + +// @ts-check +/** @type {import('@jest/types').Config.InitialOptions} */ +module.exports = { + resolver: '/../../tests/jest-resolver.js', + globals: { + 'ts-jest': { + isolatedModules: true, + }, + }, + testEnvironment: 'node', + transform: { + '^.+\\.tsx?$': 'ts-jest', + }, + testRegex: './tests/.+\\.test\\.ts$', + collectCoverage: false, + collectCoverageFrom: ['src/**/*.{js,jsx,ts,tsx}'], + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx', 'json', 'node'], + coverageReporters: ['text-summary', 'lcov'], +}; diff --git a/packages/utils/package.json b/packages/utils/package.json new file mode 100644 index 00000000000..f5710e952da --- /dev/null +++ b/packages/utils/package.json @@ -0,0 +1,66 @@ +{ + "name": "@typescript-eslint/utils", + "version": "5.8.1", + "description": "Utilities for working with TypeScript + ESLint together", + "keywords": [ + "eslint", + "typescript", + "estree" + ], + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "files": [ + "dist", + "_ts3.4", + "package.json", + "README.md", + "LICENSE" + ], + "repository": { + "type": "git", + "url": "https://github.com/typescript-eslint/typescript-eslint.git", + "directory": "packages/utils" + }, + "bugs": { + "url": "https://github.com/typescript-eslint/typescript-eslint/issues" + }, + "license": "MIT", + "main": "dist/index.js", + "types": "dist/index.d.ts", + "scripts": { + "build": "tsc -b tsconfig.build.json", + "postbuild": "downlevel-dts dist _ts3.4/dist", + "clean": "tsc -b tsconfig.build.json --clean", + "postclean": "rimraf dist && rimraf _ts3.4 && rimraf coverage", + "format": "prettier --write \"./**/*.{ts,js,json,md}\" --ignore-path ../../.prettierignore", + "lint": "eslint . --ext .js,.ts --ignore-path='../../.eslintignore'", + "test": "jest --coverage", + "typecheck": "tsc -p tsconfig.json --noEmit" + }, + "dependencies": { + "@types/json-schema": "^7.0.9", + "@typescript-eslint/scope-manager": "5.8.1", + "@typescript-eslint/types": "5.8.1", + "@typescript-eslint/typescript-estree": "5.8.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "devDependencies": { + "typescript": "*" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "typesVersions": { + "<3.8": { + "*": [ + "_ts3.4/*" + ] + } + } +} diff --git a/packages/utils/project.json b/packages/utils/project.json new file mode 100644 index 00000000000..b55a371ba33 --- /dev/null +++ b/packages/utils/project.json @@ -0,0 +1,5 @@ +{ + "root": "packages/utils", + "type": "library", + "implicitDependencies": [] +} diff --git a/packages/experimental-utils/src/ast-utils/eslint-utils/PatternMatcher.ts b/packages/utils/src/ast-utils/eslint-utils/PatternMatcher.ts similarity index 100% rename from packages/experimental-utils/src/ast-utils/eslint-utils/PatternMatcher.ts rename to packages/utils/src/ast-utils/eslint-utils/PatternMatcher.ts diff --git a/packages/experimental-utils/src/ast-utils/eslint-utils/ReferenceTracker.ts b/packages/utils/src/ast-utils/eslint-utils/ReferenceTracker.ts similarity index 100% rename from packages/experimental-utils/src/ast-utils/eslint-utils/ReferenceTracker.ts rename to packages/utils/src/ast-utils/eslint-utils/ReferenceTracker.ts diff --git a/packages/experimental-utils/src/ast-utils/eslint-utils/astUtilities.ts b/packages/utils/src/ast-utils/eslint-utils/astUtilities.ts similarity index 100% rename from packages/experimental-utils/src/ast-utils/eslint-utils/astUtilities.ts rename to packages/utils/src/ast-utils/eslint-utils/astUtilities.ts diff --git a/packages/experimental-utils/src/ast-utils/eslint-utils/index.ts b/packages/utils/src/ast-utils/eslint-utils/index.ts similarity index 100% rename from packages/experimental-utils/src/ast-utils/eslint-utils/index.ts rename to packages/utils/src/ast-utils/eslint-utils/index.ts diff --git a/packages/experimental-utils/src/ast-utils/eslint-utils/predicates.ts b/packages/utils/src/ast-utils/eslint-utils/predicates.ts similarity index 100% rename from packages/experimental-utils/src/ast-utils/eslint-utils/predicates.ts rename to packages/utils/src/ast-utils/eslint-utils/predicates.ts diff --git a/packages/experimental-utils/src/ast-utils/eslint-utils/scopeAnalysis.ts b/packages/utils/src/ast-utils/eslint-utils/scopeAnalysis.ts similarity index 100% rename from packages/experimental-utils/src/ast-utils/eslint-utils/scopeAnalysis.ts rename to packages/utils/src/ast-utils/eslint-utils/scopeAnalysis.ts diff --git a/packages/experimental-utils/src/ast-utils/helpers.ts b/packages/utils/src/ast-utils/helpers.ts similarity index 100% rename from packages/experimental-utils/src/ast-utils/helpers.ts rename to packages/utils/src/ast-utils/helpers.ts diff --git a/packages/experimental-utils/src/ast-utils/index.ts b/packages/utils/src/ast-utils/index.ts similarity index 100% rename from packages/experimental-utils/src/ast-utils/index.ts rename to packages/utils/src/ast-utils/index.ts diff --git a/packages/experimental-utils/src/ast-utils/misc.ts b/packages/utils/src/ast-utils/misc.ts similarity index 100% rename from packages/experimental-utils/src/ast-utils/misc.ts rename to packages/utils/src/ast-utils/misc.ts diff --git a/packages/experimental-utils/src/ast-utils/predicates.ts b/packages/utils/src/ast-utils/predicates.ts similarity index 100% rename from packages/experimental-utils/src/ast-utils/predicates.ts rename to packages/utils/src/ast-utils/predicates.ts diff --git a/packages/experimental-utils/src/eslint-utils/InferTypesFromRule.ts b/packages/utils/src/eslint-utils/InferTypesFromRule.ts similarity index 100% rename from packages/experimental-utils/src/eslint-utils/InferTypesFromRule.ts rename to packages/utils/src/eslint-utils/InferTypesFromRule.ts diff --git a/packages/experimental-utils/src/eslint-utils/RuleCreator.ts b/packages/utils/src/eslint-utils/RuleCreator.ts similarity index 100% rename from packages/experimental-utils/src/eslint-utils/RuleCreator.ts rename to packages/utils/src/eslint-utils/RuleCreator.ts diff --git a/packages/experimental-utils/src/eslint-utils/RuleTester.ts b/packages/utils/src/eslint-utils/RuleTester.ts similarity index 100% rename from packages/experimental-utils/src/eslint-utils/RuleTester.ts rename to packages/utils/src/eslint-utils/RuleTester.ts diff --git a/packages/experimental-utils/src/eslint-utils/applyDefault.ts b/packages/utils/src/eslint-utils/applyDefault.ts similarity index 100% rename from packages/experimental-utils/src/eslint-utils/applyDefault.ts rename to packages/utils/src/eslint-utils/applyDefault.ts diff --git a/packages/experimental-utils/src/eslint-utils/batchedSingleLineTests.ts b/packages/utils/src/eslint-utils/batchedSingleLineTests.ts similarity index 100% rename from packages/experimental-utils/src/eslint-utils/batchedSingleLineTests.ts rename to packages/utils/src/eslint-utils/batchedSingleLineTests.ts diff --git a/packages/experimental-utils/src/eslint-utils/deepMerge.ts b/packages/utils/src/eslint-utils/deepMerge.ts similarity index 100% rename from packages/experimental-utils/src/eslint-utils/deepMerge.ts rename to packages/utils/src/eslint-utils/deepMerge.ts diff --git a/packages/experimental-utils/src/eslint-utils/getParserServices.ts b/packages/utils/src/eslint-utils/getParserServices.ts similarity index 100% rename from packages/experimental-utils/src/eslint-utils/getParserServices.ts rename to packages/utils/src/eslint-utils/getParserServices.ts diff --git a/packages/experimental-utils/src/eslint-utils/index.ts b/packages/utils/src/eslint-utils/index.ts similarity index 100% rename from packages/experimental-utils/src/eslint-utils/index.ts rename to packages/utils/src/eslint-utils/index.ts diff --git a/packages/experimental-utils/src/eslint-utils/nullThrows.ts b/packages/utils/src/eslint-utils/nullThrows.ts similarity index 100% rename from packages/experimental-utils/src/eslint-utils/nullThrows.ts rename to packages/utils/src/eslint-utils/nullThrows.ts diff --git a/packages/utils/src/index.ts b/packages/utils/src/index.ts new file mode 100644 index 00000000000..31328386269 --- /dev/null +++ b/packages/utils/src/index.ts @@ -0,0 +1,8 @@ +import * as ASTUtils from './ast-utils'; +import * as ESLintUtils from './eslint-utils'; +import * as JSONSchema from './json-schema'; +import * as TSESLint from './ts-eslint'; +import * as TSESLintScope from './ts-eslint-scope'; + +export { ASTUtils, ESLintUtils, JSONSchema, TSESLint, TSESLintScope }; +export * from './ts-estree'; diff --git a/packages/experimental-utils/src/json-schema.ts b/packages/utils/src/json-schema.ts similarity index 100% rename from packages/experimental-utils/src/json-schema.ts rename to packages/utils/src/json-schema.ts diff --git a/packages/experimental-utils/src/ts-eslint-scope/Definition.ts b/packages/utils/src/ts-eslint-scope/Definition.ts similarity index 100% rename from packages/experimental-utils/src/ts-eslint-scope/Definition.ts rename to packages/utils/src/ts-eslint-scope/Definition.ts diff --git a/packages/experimental-utils/src/ts-eslint-scope/Options.ts b/packages/utils/src/ts-eslint-scope/Options.ts similarity index 100% rename from packages/experimental-utils/src/ts-eslint-scope/Options.ts rename to packages/utils/src/ts-eslint-scope/Options.ts diff --git a/packages/experimental-utils/src/ts-eslint-scope/PatternVisitor.ts b/packages/utils/src/ts-eslint-scope/PatternVisitor.ts similarity index 100% rename from packages/experimental-utils/src/ts-eslint-scope/PatternVisitor.ts rename to packages/utils/src/ts-eslint-scope/PatternVisitor.ts diff --git a/packages/experimental-utils/src/ts-eslint-scope/README.md b/packages/utils/src/ts-eslint-scope/README.md similarity index 100% rename from packages/experimental-utils/src/ts-eslint-scope/README.md rename to packages/utils/src/ts-eslint-scope/README.md diff --git a/packages/experimental-utils/src/ts-eslint-scope/Reference.ts b/packages/utils/src/ts-eslint-scope/Reference.ts similarity index 100% rename from packages/experimental-utils/src/ts-eslint-scope/Reference.ts rename to packages/utils/src/ts-eslint-scope/Reference.ts diff --git a/packages/experimental-utils/src/ts-eslint-scope/Referencer.ts b/packages/utils/src/ts-eslint-scope/Referencer.ts similarity index 100% rename from packages/experimental-utils/src/ts-eslint-scope/Referencer.ts rename to packages/utils/src/ts-eslint-scope/Referencer.ts diff --git a/packages/experimental-utils/src/ts-eslint-scope/Scope.ts b/packages/utils/src/ts-eslint-scope/Scope.ts similarity index 100% rename from packages/experimental-utils/src/ts-eslint-scope/Scope.ts rename to packages/utils/src/ts-eslint-scope/Scope.ts diff --git a/packages/experimental-utils/src/ts-eslint-scope/ScopeManager.ts b/packages/utils/src/ts-eslint-scope/ScopeManager.ts similarity index 100% rename from packages/experimental-utils/src/ts-eslint-scope/ScopeManager.ts rename to packages/utils/src/ts-eslint-scope/ScopeManager.ts diff --git a/packages/experimental-utils/src/ts-eslint-scope/Variable.ts b/packages/utils/src/ts-eslint-scope/Variable.ts similarity index 100% rename from packages/experimental-utils/src/ts-eslint-scope/Variable.ts rename to packages/utils/src/ts-eslint-scope/Variable.ts diff --git a/packages/experimental-utils/src/ts-eslint-scope/analyze.ts b/packages/utils/src/ts-eslint-scope/analyze.ts similarity index 100% rename from packages/experimental-utils/src/ts-eslint-scope/analyze.ts rename to packages/utils/src/ts-eslint-scope/analyze.ts diff --git a/packages/experimental-utils/src/ts-eslint-scope/index.ts b/packages/utils/src/ts-eslint-scope/index.ts similarity index 100% rename from packages/experimental-utils/src/ts-eslint-scope/index.ts rename to packages/utils/src/ts-eslint-scope/index.ts diff --git a/packages/experimental-utils/src/ts-eslint/AST.ts b/packages/utils/src/ts-eslint/AST.ts similarity index 100% rename from packages/experimental-utils/src/ts-eslint/AST.ts rename to packages/utils/src/ts-eslint/AST.ts diff --git a/packages/experimental-utils/src/ts-eslint/CLIEngine.ts b/packages/utils/src/ts-eslint/CLIEngine.ts similarity index 100% rename from packages/experimental-utils/src/ts-eslint/CLIEngine.ts rename to packages/utils/src/ts-eslint/CLIEngine.ts diff --git a/packages/experimental-utils/src/ts-eslint/ESLint.ts b/packages/utils/src/ts-eslint/ESLint.ts similarity index 100% rename from packages/experimental-utils/src/ts-eslint/ESLint.ts rename to packages/utils/src/ts-eslint/ESLint.ts diff --git a/packages/experimental-utils/src/ts-eslint/Linter.ts b/packages/utils/src/ts-eslint/Linter.ts similarity index 100% rename from packages/experimental-utils/src/ts-eslint/Linter.ts rename to packages/utils/src/ts-eslint/Linter.ts diff --git a/packages/experimental-utils/src/ts-eslint/ParserOptions.ts b/packages/utils/src/ts-eslint/ParserOptions.ts similarity index 100% rename from packages/experimental-utils/src/ts-eslint/ParserOptions.ts rename to packages/utils/src/ts-eslint/ParserOptions.ts diff --git a/packages/experimental-utils/src/ts-eslint/Rule.ts b/packages/utils/src/ts-eslint/Rule.ts similarity index 100% rename from packages/experimental-utils/src/ts-eslint/Rule.ts rename to packages/utils/src/ts-eslint/Rule.ts diff --git a/packages/experimental-utils/src/ts-eslint/RuleTester.ts b/packages/utils/src/ts-eslint/RuleTester.ts similarity index 100% rename from packages/experimental-utils/src/ts-eslint/RuleTester.ts rename to packages/utils/src/ts-eslint/RuleTester.ts diff --git a/packages/experimental-utils/src/ts-eslint/Scope.ts b/packages/utils/src/ts-eslint/Scope.ts similarity index 100% rename from packages/experimental-utils/src/ts-eslint/Scope.ts rename to packages/utils/src/ts-eslint/Scope.ts diff --git a/packages/experimental-utils/src/ts-eslint/SourceCode.ts b/packages/utils/src/ts-eslint/SourceCode.ts similarity index 100% rename from packages/experimental-utils/src/ts-eslint/SourceCode.ts rename to packages/utils/src/ts-eslint/SourceCode.ts diff --git a/packages/experimental-utils/src/ts-eslint/index.ts b/packages/utils/src/ts-eslint/index.ts similarity index 100% rename from packages/experimental-utils/src/ts-eslint/index.ts rename to packages/utils/src/ts-eslint/index.ts diff --git a/packages/experimental-utils/src/ts-estree.ts b/packages/utils/src/ts-estree.ts similarity index 100% rename from packages/experimental-utils/src/ts-estree.ts rename to packages/utils/src/ts-estree.ts diff --git a/packages/utils/tests/eslint-utils/RuleCreator.test.ts b/packages/utils/tests/eslint-utils/RuleCreator.test.ts new file mode 100644 index 00000000000..5e1c14d68c4 --- /dev/null +++ b/packages/utils/tests/eslint-utils/RuleCreator.test.ts @@ -0,0 +1,44 @@ +import { ESLintUtils } from '../../src'; + +describe('RuleCreator', () => { + const createRule = ESLintUtils.RuleCreator(name => `test/${name}`); + + it('createRule should be a function', () => { + expect(typeof createRule).toBe('function'); + }); + + it('should create rule correctly', () => { + const rule = createRule({ + name: 'test', + meta: { + docs: { + description: 'some description', + recommended: 'error', + requiresTypeChecking: true, + }, + messages: { + foo: 'some message', + }, + schema: [], + type: 'problem', + }, + defaultOptions: [], + create() { + return {}; + }, + }); + expect(rule.meta).toEqual({ + docs: { + description: 'some description', + url: 'test/test', + recommended: 'error', + requiresTypeChecking: true, + }, + messages: { + foo: 'some message', + }, + schema: [], + type: 'problem', + }); + }); +}); diff --git a/packages/utils/tests/eslint-utils/applyDefault.test.ts b/packages/utils/tests/eslint-utils/applyDefault.test.ts new file mode 100644 index 00000000000..ec9411c31c2 --- /dev/null +++ b/packages/utils/tests/eslint-utils/applyDefault.test.ts @@ -0,0 +1,62 @@ +import { ESLintUtils } from '../../src'; + +describe('applyDefault', () => { + it('returns a clone of the default if no options given', () => { + const defaults = [{ prop: 'setting' }]; + const user = null; + const result = ESLintUtils.applyDefault(defaults, user); + + expect(result).toStrictEqual(defaults); + expect(result).not.toBe(defaults); + }); + + it('returns applies a deepMerge to each element in the array', () => { + const defaults: Record[] = [ + { + prop: 'setting1', + other: 'other', + }, + { + prop: 'setting2', + }, + ]; + const user: Record[] = [ + { + prop: 'new', + other: 'something', + }, + ]; + const result = ESLintUtils.applyDefault(defaults, user); + + expect(result).toStrictEqual([ + { + prop: 'new', + other: 'something', + }, + { + prop: 'setting2', + }, + ]); + expect(result).not.toBe(defaults); + expect(result).not.toBe(user); + }); + + it('returns a brand new array', () => { + const defaults: undefined[] = []; + const user: undefined[] = []; + const result = ESLintUtils.applyDefault(defaults, user); + + expect(result).not.toBe(defaults); + expect(result).not.toBe(user); + }); + + it('should work with array of options', () => { + const defaults: unknown[] = ['1tbs']; + const user: unknown[] = ['2tbs']; + const result = ESLintUtils.applyDefault(defaults, user); + + expect(result).toStrictEqual(['2tbs']); + expect(result).not.toBe(defaults); + expect(result).not.toBe(user); + }); +}); diff --git a/packages/utils/tests/eslint-utils/batchedSingleLineTests.test.ts b/packages/utils/tests/eslint-utils/batchedSingleLineTests.test.ts new file mode 100644 index 00000000000..596bb480b94 --- /dev/null +++ b/packages/utils/tests/eslint-utils/batchedSingleLineTests.test.ts @@ -0,0 +1,81 @@ +import { ESLintUtils } from '../../src'; + +describe('batchedSingleLineTests', () => { + const FIXTURES = ` +a +b +c + `; + const errors = [ + { messageId: 'someMessage1', line: 2 }, + { messageId: 'someMessage2', line: 3 }, + { messageId: 'someMessage3', line: 4 }, + ]; + const options = [{ optionOne: 'value' }]; + + it('should work without options', () => { + expect( + ESLintUtils.batchedSingleLineTests({ + code: FIXTURES, + }), + ).toEqual([ + { code: 'a', errors: [] }, + { code: 'b', errors: [] }, + { code: 'c', errors: [] }, + ]); + }); + + it('should work with errors', () => { + expect( + ESLintUtils.batchedSingleLineTests({ + code: FIXTURES, + errors, + }), + ).toEqual([ + { code: 'a', errors: [{ messageId: 'someMessage1', line: 1 }] }, + { code: 'b', errors: [{ messageId: 'someMessage2', line: 1 }] }, + { code: 'c', errors: [{ messageId: 'someMessage3', line: 1 }] }, + ]); + }); + + it('should work with all fields', () => { + const filename = 'foo.ts'; + const parser = 'some-parser'; + + expect( + ESLintUtils.batchedSingleLineTests({ + code: FIXTURES, + errors, + options, + parser, + output: FIXTURES, + filename, + }), + ).toEqual([ + { + code: 'a', + output: 'a', + errors: [{ messageId: 'someMessage1', line: 1 }], + parser, + filename, + options, + }, + { + code: 'b', + output: 'b', + errors: [{ messageId: 'someMessage2', line: 1 }], + parser, + filename, + options, + }, + { + code: 'c', + output: 'c', + errors: [{ messageId: 'someMessage3', line: 1 }], + parser, + filename, + options, + }, + ]); + }); +}); diff --git a/packages/utils/tests/eslint-utils/deepMerge.test.ts b/packages/utils/tests/eslint-utils/deepMerge.test.ts new file mode 100644 index 00000000000..26fb02e3bc4 --- /dev/null +++ b/packages/utils/tests/eslint-utils/deepMerge.test.ts @@ -0,0 +1,58 @@ +import { ESLintUtils } from '../../src'; + +describe('deepMerge', () => { + it('creates a brand new object', () => { + const a = {}; + const b = {}; + const result = ESLintUtils.deepMerge(a, b); + + expect(result).not.toBe(a); + expect(result).not.toBe(b); + }); + + it('deeply merges objects', () => { + const a = { + stringA1: 'asdf', + numberA1: 1, + boolA1: true, + arrayA1: [1, 2, 3], + objA1: { + stringA2: 'fsda', + numberA2: 2, + boolA2: false, + arrayA2: [3, 2, 1], + objA2: {}, + }, + }; + const b = { + stringB1: 'asdf', + numberB1: 1, + boolB1: true, + arrayB1: [1, 2, 3], + objB1: { + stringB2: 'fsda', + numberB2: 2, + boolB2: false, + arrayB2: [3, 2, 1], + objB2: {}, + }, + }; + + expect(ESLintUtils.deepMerge(a, b)).toStrictEqual(Object.assign({}, a, b)); + }); + + it('deeply overwrites properties in the first one with the second', () => { + const a = { + prop1: { + prop2: 'hi', + }, + }; + const b = { + prop1: { + prop2: 'bye', + }, + }; + + expect(ESLintUtils.deepMerge(a, b)).toStrictEqual(b); + }); +}); diff --git a/packages/utils/tsconfig.build.json b/packages/utils/tsconfig.build.json new file mode 100644 index 00000000000..e5c1077c5e5 --- /dev/null +++ b/packages/utils/tsconfig.build.json @@ -0,0 +1,15 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "composite": true, + "outDir": "./dist", + "rootDir": "./src", + "resolveJsonModule": true + }, + "include": ["src", "typings"], + "references": [ + { "path": "../scope-manager/tsconfig.build.json" }, + { "path": "../types/tsconfig.build.json" }, + { "path": "../typescript-estree/tsconfig.build.json" } + ] +} diff --git a/packages/utils/tsconfig.json b/packages/utils/tsconfig.json new file mode 100644 index 00000000000..20ea2496c6b --- /dev/null +++ b/packages/utils/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "./tsconfig.build.json", + "compilerOptions": { + "composite": false, + "rootDir": "." + }, + "include": ["src", "typings", "tests", "tools"], + "references": [ + { "path": "../scope-manager/tsconfig.build.json" }, + { "path": "../types/tsconfig.build.json" }, + { "path": "../typescript-estree/tsconfig.build.json" } + ] +} diff --git a/packages/experimental-utils/typings/eslint-scope.d.ts b/packages/utils/typings/eslint-scope.d.ts similarity index 100% rename from packages/experimental-utils/typings/eslint-scope.d.ts rename to packages/utils/typings/eslint-scope.d.ts diff --git a/packages/experimental-utils/typings/eslint-utils.d.ts b/packages/utils/typings/eslint-utils.d.ts similarity index 100% rename from packages/experimental-utils/typings/eslint-utils.d.ts rename to packages/utils/typings/eslint-utils.d.ts diff --git a/packages/experimental-utils/typings/eslint.d.ts b/packages/utils/typings/eslint.d.ts similarity index 100% rename from packages/experimental-utils/typings/eslint.d.ts rename to packages/utils/typings/eslint.d.ts diff --git a/packages/website-eslint/package.json b/packages/website-eslint/package.json index 10a2949e90a..eb8e8f2a9b9 100644 --- a/packages/website-eslint/package.json +++ b/packages/website-eslint/package.json @@ -16,8 +16,8 @@ "format": "prettier --write \"./**/*.{ts,js,json,md}\" --ignore-path ../../.prettierignore" }, "dependencies": { - "@typescript-eslint/experimental-utils": "5.8.1", - "@typescript-eslint/types": "5.8.1" + "@typescript-eslint/types": "5.8.1", + "@typescript-eslint/utils": "5.8.1" }, "devDependencies": { "@rollup/plugin-commonjs": "^21.0.1", diff --git a/packages/website-eslint/rollup.config.js b/packages/website-eslint/rollup.config.js index f1edc288512..2941ec568f6 100644 --- a/packages/website-eslint/rollup.config.js +++ b/packages/website-eslint/rollup.config.js @@ -21,13 +21,13 @@ module.exports = { match: [ /eslint\/lib\/(rule-tester|eslint|cli-engine|init)\//u, /eslint\/lib\/cli\.js$/, - /experimental-utils\/dist\/eslint-utils\/RuleTester\.js$/, - /experimental-utils\/dist\/ts-eslint\/CLIEngine\.js$/, - /experimental-utils\/dist\/ts-eslint\/RuleTester\.js$/, + /utils\/dist\/eslint-utils\/RuleTester\.js$/, + /utils\/dist\/ts-eslint\/CLIEngine\.js$/, + /utils\/dist\/ts-eslint\/RuleTester\.js$/, /typescript-estree\/dist\/create-program\/createWatchProgram\.js/, /typescript-estree\/dist\/create-program\/createProjectProgram\.js/, /typescript-estree\/dist\/create-program\/createIsolatedProgram\.js/, - /experimental-utils\/dist\/ts-eslint\/ESLint\.js/, + /utils\/dist\/ts-eslint\/ESLint\.js/, // 'eslint/lib/shared/ajv.js', // 'eslint/lib/shared/runtime-info.js', ], diff --git a/packages/website-eslint/types/index.d.ts b/packages/website-eslint/types/index.d.ts index 4e923c2fef1..ed3e1e2422f 100644 --- a/packages/website-eslint/types/index.d.ts +++ b/packages/website-eslint/types/index.d.ts @@ -1,4 +1,4 @@ -import type { TSESLint, TSESTree } from '@typescript-eslint/experimental-utils'; +import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import type { ParserOptions } from '@typescript-eslint/types'; import type { SourceFile } from 'typescript'; diff --git a/workspace.json b/workspace.json index 6fbf76fb078..152f3d9f6d0 100644 --- a/workspace.json +++ b/workspace.json @@ -9,9 +9,10 @@ "@typescript-eslint/parser": "packages/parser", "@typescript-eslint/scope-manager": "packages/scope-manager", "@typescript-eslint/shared-fixtures": "packages/shared-fixtures", - "@typescript-eslint/types": "packages/types", "@typescript-eslint/type-utils": "packages/type-utils", + "@typescript-eslint/types": "packages/types", "@typescript-eslint/typescript-estree": "packages/typescript-estree", + "@typescript-eslint/utils": "packages/utils", "@typescript-eslint/visitor-keys": "packages/visitor-keys", "@typescript-eslint/website-eslint": "packages/website-eslint", "website": "packages/website" diff --git a/yarn.lock b/yarn.lock index 3c305e231a2..5417ff26919 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3880,6 +3880,18 @@ dependencies: "@types/yargs-parser" "*" +"@typescript-eslint/experimental-utils@^5.0.0": + version "5.8.1" + resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.8.1.tgz#01861eb2f0749f07d02db342b794145a66ed346f" + integrity sha512-fbodVnjIDU4JpeXWRDsG5IfIjYBxEvs8EBO8W1+YVdtrc2B9ppfof5sZhVEDOtgTfFHnYQJDI8+qdqLYO4ceww== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.8.1" + "@typescript-eslint/types" "5.8.1" + "@typescript-eslint/typescript-estree" "5.8.1" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" From a6113121d318b2f79670a67950b31a0965f37621 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Wed, 29 Dec 2021 15:10:32 -0500 Subject: [PATCH 2/5] chore: remove dependencies from experimental-utils --- packages/experimental-utils/package.json | 15 +--- .../tests/eslint-utils/RuleCreator.test.ts | 44 ---------- .../tests/eslint-utils/applyDefault.test.ts | 62 -------------- .../batchedSingleLineTests.test.ts | 81 ------------------- .../tests/eslint-utils/deepMerge.test.ts | 58 ------------- yarn.lock | 12 --- 6 files changed, 1 insertion(+), 271 deletions(-) delete mode 100644 packages/experimental-utils/tests/eslint-utils/RuleCreator.test.ts delete mode 100644 packages/experimental-utils/tests/eslint-utils/applyDefault.test.ts delete mode 100644 packages/experimental-utils/tests/eslint-utils/batchedSingleLineTests.test.ts delete mode 100644 packages/experimental-utils/tests/eslint-utils/deepMerge.test.ts diff --git a/packages/experimental-utils/package.json b/packages/experimental-utils/package.json index 0842982c867..6fa62a91fbb 100644 --- a/packages/experimental-utils/package.json +++ b/packages/experimental-utils/package.json @@ -35,16 +35,10 @@ "postclean": "rimraf dist && rimraf _ts3.4 && rimraf coverage", "format": "prettier --write \"./**/*.{ts,js,json,md}\" --ignore-path ../../.prettierignore", "lint": "eslint . --ext .js,.ts --ignore-path='../../.eslintignore'", - "test": "jest --coverage", "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.8.1", - "@typescript-eslint/types": "5.8.1", - "@typescript-eslint/typescript-estree": "5.8.1", - "eslint-scope": "^5.1.1", - "eslint-utils": "^3.0.0" + "@typescript-eslint/utils": "5.8.1" }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" @@ -55,12 +49,5 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "typesVersions": { - "<3.8": { - "*": [ - "_ts3.4/*" - ] - } } } diff --git a/packages/experimental-utils/tests/eslint-utils/RuleCreator.test.ts b/packages/experimental-utils/tests/eslint-utils/RuleCreator.test.ts deleted file mode 100644 index 5e1c14d68c4..00000000000 --- a/packages/experimental-utils/tests/eslint-utils/RuleCreator.test.ts +++ /dev/null @@ -1,44 +0,0 @@ -import { ESLintUtils } from '../../src'; - -describe('RuleCreator', () => { - const createRule = ESLintUtils.RuleCreator(name => `test/${name}`); - - it('createRule should be a function', () => { - expect(typeof createRule).toBe('function'); - }); - - it('should create rule correctly', () => { - const rule = createRule({ - name: 'test', - meta: { - docs: { - description: 'some description', - recommended: 'error', - requiresTypeChecking: true, - }, - messages: { - foo: 'some message', - }, - schema: [], - type: 'problem', - }, - defaultOptions: [], - create() { - return {}; - }, - }); - expect(rule.meta).toEqual({ - docs: { - description: 'some description', - url: 'test/test', - recommended: 'error', - requiresTypeChecking: true, - }, - messages: { - foo: 'some message', - }, - schema: [], - type: 'problem', - }); - }); -}); diff --git a/packages/experimental-utils/tests/eslint-utils/applyDefault.test.ts b/packages/experimental-utils/tests/eslint-utils/applyDefault.test.ts deleted file mode 100644 index ec9411c31c2..00000000000 --- a/packages/experimental-utils/tests/eslint-utils/applyDefault.test.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { ESLintUtils } from '../../src'; - -describe('applyDefault', () => { - it('returns a clone of the default if no options given', () => { - const defaults = [{ prop: 'setting' }]; - const user = null; - const result = ESLintUtils.applyDefault(defaults, user); - - expect(result).toStrictEqual(defaults); - expect(result).not.toBe(defaults); - }); - - it('returns applies a deepMerge to each element in the array', () => { - const defaults: Record[] = [ - { - prop: 'setting1', - other: 'other', - }, - { - prop: 'setting2', - }, - ]; - const user: Record[] = [ - { - prop: 'new', - other: 'something', - }, - ]; - const result = ESLintUtils.applyDefault(defaults, user); - - expect(result).toStrictEqual([ - { - prop: 'new', - other: 'something', - }, - { - prop: 'setting2', - }, - ]); - expect(result).not.toBe(defaults); - expect(result).not.toBe(user); - }); - - it('returns a brand new array', () => { - const defaults: undefined[] = []; - const user: undefined[] = []; - const result = ESLintUtils.applyDefault(defaults, user); - - expect(result).not.toBe(defaults); - expect(result).not.toBe(user); - }); - - it('should work with array of options', () => { - const defaults: unknown[] = ['1tbs']; - const user: unknown[] = ['2tbs']; - const result = ESLintUtils.applyDefault(defaults, user); - - expect(result).toStrictEqual(['2tbs']); - expect(result).not.toBe(defaults); - expect(result).not.toBe(user); - }); -}); diff --git a/packages/experimental-utils/tests/eslint-utils/batchedSingleLineTests.test.ts b/packages/experimental-utils/tests/eslint-utils/batchedSingleLineTests.test.ts deleted file mode 100644 index 596bb480b94..00000000000 --- a/packages/experimental-utils/tests/eslint-utils/batchedSingleLineTests.test.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { ESLintUtils } from '../../src'; - -describe('batchedSingleLineTests', () => { - const FIXTURES = ` -a -b -c - `; - const errors = [ - { messageId: 'someMessage1', line: 2 }, - { messageId: 'someMessage2', line: 3 }, - { messageId: 'someMessage3', line: 4 }, - ]; - const options = [{ optionOne: 'value' }]; - - it('should work without options', () => { - expect( - ESLintUtils.batchedSingleLineTests({ - code: FIXTURES, - }), - ).toEqual([ - { code: 'a', errors: [] }, - { code: 'b', errors: [] }, - { code: 'c', errors: [] }, - ]); - }); - - it('should work with errors', () => { - expect( - ESLintUtils.batchedSingleLineTests({ - code: FIXTURES, - errors, - }), - ).toEqual([ - { code: 'a', errors: [{ messageId: 'someMessage1', line: 1 }] }, - { code: 'b', errors: [{ messageId: 'someMessage2', line: 1 }] }, - { code: 'c', errors: [{ messageId: 'someMessage3', line: 1 }] }, - ]); - }); - - it('should work with all fields', () => { - const filename = 'foo.ts'; - const parser = 'some-parser'; - - expect( - ESLintUtils.batchedSingleLineTests({ - code: FIXTURES, - errors, - options, - parser, - output: FIXTURES, - filename, - }), - ).toEqual([ - { - code: 'a', - output: 'a', - errors: [{ messageId: 'someMessage1', line: 1 }], - parser, - filename, - options, - }, - { - code: 'b', - output: 'b', - errors: [{ messageId: 'someMessage2', line: 1 }], - parser, - filename, - options, - }, - { - code: 'c', - output: 'c', - errors: [{ messageId: 'someMessage3', line: 1 }], - parser, - filename, - options, - }, - ]); - }); -}); diff --git a/packages/experimental-utils/tests/eslint-utils/deepMerge.test.ts b/packages/experimental-utils/tests/eslint-utils/deepMerge.test.ts deleted file mode 100644 index 26fb02e3bc4..00000000000 --- a/packages/experimental-utils/tests/eslint-utils/deepMerge.test.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { ESLintUtils } from '../../src'; - -describe('deepMerge', () => { - it('creates a brand new object', () => { - const a = {}; - const b = {}; - const result = ESLintUtils.deepMerge(a, b); - - expect(result).not.toBe(a); - expect(result).not.toBe(b); - }); - - it('deeply merges objects', () => { - const a = { - stringA1: 'asdf', - numberA1: 1, - boolA1: true, - arrayA1: [1, 2, 3], - objA1: { - stringA2: 'fsda', - numberA2: 2, - boolA2: false, - arrayA2: [3, 2, 1], - objA2: {}, - }, - }; - const b = { - stringB1: 'asdf', - numberB1: 1, - boolB1: true, - arrayB1: [1, 2, 3], - objB1: { - stringB2: 'fsda', - numberB2: 2, - boolB2: false, - arrayB2: [3, 2, 1], - objB2: {}, - }, - }; - - expect(ESLintUtils.deepMerge(a, b)).toStrictEqual(Object.assign({}, a, b)); - }); - - it('deeply overwrites properties in the first one with the second', () => { - const a = { - prop1: { - prop2: 'hi', - }, - }; - const b = { - prop1: { - prop2: 'bye', - }, - }; - - expect(ESLintUtils.deepMerge(a, b)).toStrictEqual(b); - }); -}); diff --git a/yarn.lock b/yarn.lock index 5417ff26919..3c305e231a2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3880,18 +3880,6 @@ dependencies: "@types/yargs-parser" "*" -"@typescript-eslint/experimental-utils@^5.0.0": - version "5.8.1" - resolved "https://registry.yarnpkg.com/@typescript-eslint/experimental-utils/-/experimental-utils-5.8.1.tgz#01861eb2f0749f07d02db342b794145a66ed346f" - integrity sha512-fbodVnjIDU4JpeXWRDsG5IfIjYBxEvs8EBO8W1+YVdtrc2B9ppfof5sZhVEDOtgTfFHnYQJDI8+qdqLYO4ceww== - dependencies: - "@types/json-schema" "^7.0.9" - "@typescript-eslint/scope-manager" "5.8.1" - "@typescript-eslint/types" "5.8.1" - "@typescript-eslint/typescript-estree" "5.8.1" - eslint-scope "^5.1.1" - eslint-utils "^3.0.0" - "@webassemblyjs/ast@1.11.1": version "1.11.1" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.11.1.tgz#2bfd767eae1a6996f432ff7e8d7fc75679c0b6a7" From d367995d784cbe1613bb21ac50d23a41bcf0fa8d Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Wed, 12 Jan 2022 17:58:02 -0500 Subject: [PATCH 3/5] Update packages/utils/package.json Co-authored-by: Brad Zacher --- packages/utils/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/utils/package.json b/packages/utils/package.json index f5710e952da..1aeac7c5cfb 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/utils", - "version": "5.8.1", + "version": "5.9.1", "description": "Utilities for working with TypeScript + ESLint together", "keywords": [ "eslint", From 379469f7eafeb7c0b2ee1e0f513e48ab3e3f460e Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Wed, 12 Jan 2022 17:58:40 -0500 Subject: [PATCH 4/5] chore: remove website cypress folder --- .../Index -- is accessible (failed).png | Bin 169405 -> 0 bytes .../website/cypress/videos/index.spec.js.mp4 | Bin 55731 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 packages/website/cypress/screenshots/index.spec.js/Index -- is accessible (failed).png delete mode 100644 packages/website/cypress/videos/index.spec.js.mp4 diff --git a/packages/website/cypress/screenshots/index.spec.js/Index -- is accessible (failed).png b/packages/website/cypress/screenshots/index.spec.js/Index -- is accessible (failed).png deleted file mode 100644 index 90efc7a2890911ade9938cf1a5482b233a1fe8d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 169405 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

aW|*8NS?KQvxOt_=NEGaSvl$qQJsyg!jh~wI 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�v@#0*u{TFjN`obLDRA*Uk z&Y*amghcMHEOQ`0S7R8q)~^!voFYGGMNfNq69(pBm3ZGq79A<(xo(^BW6;)=jbM;p zj)MKXn`z<56@`VHvz%N$^I@_Bq#uXQHBHG>i@?r+ICxTkq38M2zR!0IP|&Ol^ExsL z@55mL??ds1=2K0oTkd}4oVYF$!BRaL!<_;k7({HIZzrsm_Oimno15@awIu;zQ+_dz za3d>y`Lf1Kt$L;XWwU>0le`?Pb?U`0e2YYhAs)fIQ7M zzEm2OHm`ico*ayAC@XZGJEcq57V@)KZahwMl*+FYW*xn_>1Hmx zIXr|GYXb3tiW4Y!{_Tlw2s&Hsh(QTnYXzJAqN7s=pmu zag$axwS2lh1ZsZC5o}1nR(|jk$j451NQZ-p8@JP%@1ntbJ_0VG5b!z3ZAofhK^sU4d!VYPU2pqGxNNn4bBT1LXiKj7_v@( z{<5JRs;1{GP{^(T!GKZC9?>gW{voN`8|@|Z+ty*DiG(_f#yvtja_CE^b%d;@84nbU$D?tiRqt3-1h!-wCiONHp2yQZDO+SNh2UoA!;3OQxDQ4O zLOW0)WFT^P{gh;jHd>?RJ*&|C!izs@u}q-Qd~hYn987;DUq=hJQiX+wu`g>LQ$7mL zh0xQom64WpE#-UH9_5}g&%WcV*C|1YYif(iz|14-ZDwcvE<6lpzSb6ObDb_{Cvo$9 zrGuE(luC~pv=Qt_OzXbt!A-D{dJQo#1Ex;`#n6S?8cM#0(T?b><}%~r-dILSw&h{5 z&L0MuiAUIjV8w31X=shjTty1ngYSB$N^=r&_Ht})w_Ay~(Lsow$_YjMAf@7focj5d ziJAI*5c)vH-eWq>quGul>w>&yT>pkfJeyvwj3;%jMs0mBa_DFmw9A5sG5+S816(&| z)^T=FSvlTHc)HA+-^(gPa=F%9DOsmOY3pjI*wAyCz=(l)4ihBhZ)J;|UoTtMUmmf+ z=Hh%fK*wKlS%kGNL>djgMU*g?^PQ7Kz^Wk}MQENQd7dcQKCWCef#fVi2N2xe z_{m$;o287pqcGP%Jb`X6GA%uiGYx#fK&P#@P6|rOaZTWQa%ovPKJ2ivt+Ofl{0E-K z;&2|nF~~YN1dGQl*Z4hEpkcru;ty6Ifk)XJ))JvtTfGNIZGm)a+0pLd#)X?`m>PBs zx~%-FDOAz7cL@N(FV%S{F6q+Al?XGGpv>e#;f!g`G&r#nij$wHt*HKLFclHQiI=KU za_#7kM|8Up2WLI%c@V~5kB2r0pWjAzLsm5kHttT+e7|RpH}*?6)qFh20h?2gD54rL zv7@tn$G`)n?*ZVKs|*ddeQ|?tC>?vZu$}G88le4uT)ktEZOhU%+}v&3wryj#ZQHwT z+qP}&wr$(CZFhft&b?o}ai56wXRgY~nU$59tLB=OV|1cc3#;@fI<{66a|nM_!fU-> zOf!SAIBTyRDRK&J^mao5GlhxRS*9t+$)sv*UtDIA5v1Oz%+$3$}CKZgLOYlrKJVDTml8 zao6gbFPmg6PY1;vsa?wZoyzGM49mO#>dQ!>hcV!95HO6~)%-YAJhMW$EE|_WQaSDn z#KncGh6F3b<1WGrUyZVoEP6prW#+yws*Oc%GGAweL8nq1g>aP6EMt;Cos8T9h!U+cpdP(-(! z1Xe>GVzx3Oq)5ss#Wh>xSd9+RvSdK-p9WZuyl1|M5R%ODJY?*Hg@=?UQ%P~r(o<4* zXU{0H{-&BpKj*Dc&C)NH)12B<-PUPTO)DwlkcEV%J>eM)eO_J z9NGq|t42~81>@Z_aBY}5V=1$BXw+^WnTM}`3#^8gIT+A1Pr7xalMbA9)u`f;ab|^r z6-%^|pohDudVo{|zG!m$I+?>%6IQRDkUY)4j&bRb!C6z3P7J6l!TDvSsz&d3OuMH0 zRJ!jz<|}_ti19KDNTInA|CK2|q|LNe0-jmpv@+Sx!wsvxg))#xu{1oclFX3Jy!^`! zle1-Myrb-z1R^Ia8#Hta;_!eTi3-epvp&k5IK$hJvQ2l|Lj-@i{R4SK)6OxBMHgHz z$?e=q5g{kM<=f&0de|PFr0TMb#6O_5fmdjZ?`)T(!6=OY^~*6GSKh9~nQedj2`D}w z;cOq+O9!F?g`(>V78o{~hsC8DGkzV9?rCvveF#(C8bZ+PTwKs+5It5Y3LL{%phcWP zi%;Y-??GTl>b~9T$a~+6{V|OH4JJP2bKPoHxqKwO^whIh`lZbZ*7 z^G}M521!2_Jqrd>2o%MJ*d{;gV{G2oERK6oGO%OR&%u*^&j^ImVUyT#2Y=0&^8v*Q z^4YqD1k3G`lYn5-!&9b3rVb{~&q^I)OsO_toq|A{_7RWZzSO%uqk^Tnp$~ha@n5EA zQ^*;5wovfCYbz*R4q9qy%~;$rl^1Rz&|p>>KOml(D_otf#djb@TZ&{FDQkqs2FAHe@JTeT zQ;LhXf6&AW7%ov?JcM#pXM)A>_h{^inzKm6`Q)p@g3zz5@#xYR7KcYN+WUv(%k9!67vBZM>Q@onGx*&J1VK#!skg&hu)o0T87kFTeGZntJ05Tq^dT<^RdiwG zUI3V=*1}Ze%A|+K5$io(J(;*!vQ#be8+o7H`Mr0+bz;$?LO2~6w|kyLw+I(KB5$Zi zs`1&^z_b^wa7E#Tuk>I9(FH2D@|m^NL+ds_0q_RSHpx4ZzO#x~WT2||ZZlohnJEpK zzCpk)>V3c>kxFxrs6O(BZWV;v8vNNJuy4f&l8UrUR4ts0^MQ75#iO()HMU%6=_LG} zUA^=etH2yP3~nrT@$>)cd050`ZyV23hpJc>$L?Hl01g}ls&Tj2!@=RGt`VPep#>Zr`C-U;*1cy$SoPDc7FoLPHF(o+9@Av4leNy82bK}eKwOr>4T z%L_~rLxzS7!F;oGJ96#O=jfegQn=y$0fT75oYB}QDt(xLXy-3QDMZQc9zluGXvW${ zkK)_4({O=B65P^spQ*9y%8SK4$l(yqw+f32FB?R_Z_gi)tTv*!Cq3Lj6J1>T=a@Er zMLeL20p0(&m`cn&pz`XDulCRM??1*cLIPT10tr_FPlAu#;E+YkYDb0a1zjO^#)z@rV8X4=W-kQk!?a+SwK zx4Off$bO*~HIknPVPkio+<`xu(qex{$=>(HMkKrobc8?-d6Zn5c#eM0mK_KdJyZWC z8e~;q<}r12t2SUS&kO|Q^(5Pvh$^@G1kyP=6nTj$NI{Adi5H#?r!R;dbLsHE;o03z zeJh9_8aNEA)y!@;U0Qr6F1iM<+MlAaD9)KU)AgQ>*SUy^zyR^DX8ll;dyfy2zEs8O zrvD|pnaVkG_D&pf{UtgzHtE8MM`378aqWo^-$tsM+(Sc6(?Vma5Ap!gUCAkTdB?Bv zVioDH)8u%MCtEG;wTO-Jsm@{>3Z$RT6|qd5|0JhWWe7uDa7unu z>F|p-C6#eG$vq{m;wTB~!EATEPfYGWli4`XI6;su1k!NV+lo=q=YITGD}0$!3ik%S zB87D@`ZF)C9;7>HI!QP%XG`}3TC4Xib0W~0x*sZ^^rn$g*#skRa7S||>t-rGWe%Y%cSTn(nK z>A!25S@$r%mvOwpKrca-zi*Ab`yT?2E^74Tqblo3TdNm%mnMQxo0LDic&9E{=hl

30}}0uc&k+bd@nau+b|O8i#~Pha_9T$AMoHTPYS@!+`&_C(jTbqB;0 zU9+uUed9C;2IRmg$ZNL?2zCFKT3iC+>RMu!2Rz71*eXC5-;1grHFIO1`6^v4)a_Mv zU82Fn-z05ePyQZioWKo=_6m{!LBB80^}quLNkBRLT^WULm+3FmWWzkrE>>PsV&|ui z@O=SU^0E&5u$8`9K-g&PrD;YSNqz#yx<%s_n^mzmNzE>PF-M9i^>YCF3|@MPCNQ%+ zWXC>d>?&{JQ$orbjZrix-td3|L9-IoLZZ;m((RD#R&yw%w`S>Y6lCuk!(tDbfN}^ z`an%#dP+RmQdb3|7gVms++!$~m_#mnM0LYwFH&mqcsZ8_Oa9YAipLfSme4i_o3>%R z;p3**$Su6Yzu1AO89gd*+$?fLYggqS#6&Dzbh*R0}UYmY8c zO7Tur$3O+uC(Zox6zN>*SS|AqxXB^9&!>9b=I%+DZ{6C%7Rns*&w9JthZ2#2H8Nff z=%&Oq2uoC8&@7wt_1+b!NIpUlfkvoR!d{N-eOXNqHm@u@CTg~w2k5kf=TL-R>g=G) z*{}KIP9#4(_Y#y?p)u=vMWU&-4<=@tFEt;?g`mq1aul+^5{lmiR-~3~SuC;a49PYb zW*ZM&0cRHMv7Zx_p)4F0=MkO2b_8zm&(AE*`i;$}8i(D7RaVd7Hpbp*$IHl7lRO$3 z6XH|`qEN6^SGKE7PzN2Kkj98PnZz1Oy)ok~IXoT_TsyU3oefACNXN9vk`l7Hp$LOiPyMH6Zt2|7sVnzvGznM#>A z1zUl6iE%zRQSBa@WaAtfgCGOv-9My-v>Tx=4aCCb>AKuyqQfjm8?@cI{Tfe3+1N!7 z3~mGY>R4mioTnuN2q)->SFk>ZHfY9hWp{N(Mf+~_@5#l9cG#OTt8eR0L+lnQ!`Fqs z2vTqsF;<4#vs`X>`+8R=WLAB=MncSK=#8?z3~pcV$;n}H{yb*}J%uFdOhVbegc=Yh zscrxEcK8Kw>iDuuIBXnE@W5KF9@@=gtUGwJsrxAvO=_?1#nDRyuTi#iZ6_-(cSbhxY;U_OJI}%KvZTAWrz;-7zsSVSv7jl9VByKsP zf-gf1mDrkGE$qSB4qza6bm{Sh-75ZGedH%^p4R>;qFF~irf8eJ=SPdRJC?Z$jvh=~ zi-d=Ou1S-*G_i-8rRFeLSzdJrS3Pqp{b-$6OJ_9BnlUi#NX4VdWswaVJi}7c=;h**7>oPT zBk)>haII1wFSMa8d}1o&AAT~2)M+&!wvIC{Rm!eB6Lg|le8eY#dWxi9fhuIGed%EZ zbr0sFqj`dLewAy>O@5s*!t}1RHr8KH|pOtW+RyIz|00(PVo&CTewP<Su} zd&=-v8}Y_xNZdaus<(uu-g$vK5@+6(bKWH!qaaC3jJG}aB?S(VWAKe-ZQd|tDQE`8 zetQi=q0BQs!d)mC*I)>#a52aA!R?=VlzVg+~m0zaekaZcQLB$OX^vx`*2-rUc> zJ2K;Y#P)|++;KJspjKzlikD=yHiee0Kn@4lo&0WVsSPus(CznyhPBUdt zxt5WFhrV+}VDpjAh097Rx6u$(D2E}Y!pLq=*iiBba3XmGPV@9jDELg{Z8ec48d(@D z_S*t_IGs|BG1qJSAkq#-i_s6TjDG_uEV`U`gM{YqjmDK@U;GkbQDwav6*BrZ2Tj(clbn-H?0cGLEhl*hUwm{K&q{#{*%@fB=tXcGDDZjCafN~*#VPbif*;R zoPM2{rz!LLY*bzRhX-Ex$OjrPyKg$At~I$R2EHK25(YPV2Jhh;uvBH%5_ytUN;Ox1 z;m`r&hX<74U-+>2$btXd*Q={_`jIk$Vg?!ZT74UUv}&8v(DK0Sd5wAT>$(p9?xdRK z@1LgNtN20vDS+OfE&Rg_cS{JJi_f2H{R@-JalUvXWNjMLfR}aD5sb_;Z~Ld-)=*D0BF)02^(%{ zX^3t}_AkC$7`+IyXpp3AfUt9Y&xZ?gG;Qkm$yiiSn8SWy6(NHv4xSHoNWjYaqB@MGJ8yWGM$$5!*K>-F0%I48oD&)zzC*%Az;)Lj|-$pS}UC8=0)rhc* zx>Z>*j8wVNlV7SUBqr%8XJm$lqh_)Gs7;c5$v4QDP-TG1?Y&#IY=BwIaRTjf-PGAf zth*Zx_C1c3k$-eDN6%@I^6x5)2oon!9BNLuI_^iQxRTFzJh|Ve@rbV5MaW0xuZ)sT z4XrL(^W(RsI2q&hwi#+R1=nYDQxe4L>NSF3P=`!jFZIL9F$N`!q-~2FUCr1liYe2v zsTsAVPI0Ynhe!~|&VsQO#AWi4p?8OLcWlTAX^}>n(Itc!Y#iVNGT#h6mQpHyg)4PN zS>HTF&xQ+y_eD+G)ZGOpu;QRy71@Pj`%Tmd=P1z{zQuG2s`IkGT?Is&5iZjq??| zfzLj@bq?-GuOOAl$exU^2E51J6TwyZhyb{Vzz>@XZcXvYz3S_)E%8;`)mwv z>##0O!DQ>_291)M#SX<3e%R5u@zkF)vpoNF1WBpkJQbizPqzyCpva*D3b#v`DtdYp zC#mIB9P#$rYV`MOOMa?~!DNTDQKhw!PX(FtoaGRCEfYT!CoMraBII-O*lcd==n}mN z|K`nn8_L(V8*pnz?-jb%^a6E3&Eikt(RvsNF=y>!#3@vUsj%k_vnHv{-03lmC+wuS zDvW-$;Kf*e_%+eowcmihlG$ow4%eD2ud)v4n0Pd=QA`9&SU>$B%y0@d#vxyfgCg^- z9T;utsMwybgUS$Ff;N?Ru0o51+vEWQ^S}ouK`A}1rOhb2;R^KmEg7boH9^@*K8i51 zb>@WBkFxdC%)<$Mo#bP<-#xMeJ%f(~t;B-BFwvdd6x?1xNJ0Zwrl|B_#kL)|Vs+#? zt}UiTT`{>9;YCQPsQF7`0m*bn6{p8`>G*nl zg+v|Oox3@~V7ASv0UXjh0`$A^u+Bg}xx3$41=!+K0b|T49H{GA?^vk|l{@dEC`K)2S4`JE z1&2cJ8DV|4l+#mI7aMuTY_T|1=HVgvSVC>H+q-NN|KeW$7nx4)&Vx4yXM(>QXOEv! zvvDK*hvR2cmAE~F;BmDXxD*3v8jEWnMJ6d9iWw**Sfa5gUZ-51aMhS2yrTK@LQ#SM zZ@q02idRbwmT#bUjW98WP4H{1q`3Op=|f#4meI8{xiZc6RL`Tpbym|y0_;v9O2&u} zj(@hnlsd$RcG{*J-TpVWrgkb@nOQpQap>Y(Q zX4BQQpA&f2WpF%54XsvlZ~Pl^LC@th`eiP*k>|0ipJ;bI$YkeM-uiF0!u)S$SWJyQ zZN|3>;@cST+sd3#SXT`I>D>`MKPx7cGfvMHFP%T+`Tm0>ebeaOlHJQzZ1|p3=kWC# zdf=BY^HGdFmHRM_VI?a6%vDqW`}Z^iS}&Izi_y1^M~0N2W~zIMKEU1G0>#d^rKR!N z3l68a9QXCdE#~M#u0ZrhHNVwzjGa-}A_+~^@~$M;nTyLxb1)?PSVAdqP*O^1DAmW} zfh;hd($OunV6s7YzJ^^?OtiJ}fO54XzqUBP zhG~mu`Cs;)K{+>t%Bs3q@Ml1^-p|Yk#}_}u_YF>m4vxgl(a>VZj;|g6x;9QqzBvX> zTJF4dW=ysy`tz#%?}JJ=TuEL$!QTN%L6q3W=f0dky+SR1H9DNG`uM_-my@yA{Dd{| z%QR_L*0okMt0^tRX|7FmdmbV#^9PsfGY2rR)R>gN5sCSPiZ_=m9i;L(Ruq^U>h5b) zQd1qu#h-z`^&%01bDJ=1SJY#uD*BMx>9Q4?jP}UjCjLeMSZZ`vn*@`&c=~3x)vEr` zlp&j2KwDhCih8`oe_~g}LXd`9(1e4=6Sv`OaxZL7d0;$d(m{{4Tk~e?0}K!_WLYLI z&I97~3`Dq{U{qGr(08Y3oV}}d_A%f(sS7 z(D(tVT3Bqu;W^ec5IcJP#U8tpR&jYdL?8W|hRUqSlalv$At*etM4^*-qzk~&``6S5 z|Bl!1>4tH0(v7sE^Llh=1ZgayWWfeVP0t-ZJar(8p%J;LAf*-JT&hB|a&k52u#&~D zaVkJYy5;JgZh#A+y64wAtf_SbfL+FllXw=y8uJ-#IGgUN0#aa*RJ8uq+)Q7J6lMh` zD}X*1UAO37Mi6`!RsjN#d9#bUDInLtaT?p%hZ%bxte1J0E)y};VG6|F&Z+?~%&=^d z#BWaS7L`XWn0K)mFeiNlK)M#;y8FKd?Wgd?H75Pbh5^kePk*Y~Syp${oQT_~LZ_O6`>!5_h?NH>^<)4;*z%O5pV~$NKX#`_|M4ePVF;V}PCCs6fjA5CHA?o<# zetVsT>?Wx2?*02`tOd(_Tgk;&mTEXU^HcJ1gRQvdagUs}h!GU8xCCgD_`G|;5z|uu z0eO}d`Vg?ugMFm_Tl4n)biZfRxFgLM*u8c!55hsjK zVJ>3U+kordJsG79wTe!}UYf~iNw!lnoXZ09H$8wplsIXjFAG-1usttMeZ!C!gX##= zZ};i*tBVW=|4;JC2Jy-3^`yk0B0W@x4$hgej^QC8smt-mtnb4C6<`{ecF7cWkMXnqCw1vHggxMsoY zbo8f%+dA4=TYv)(q_N&$5foxw+NpD&v#dHbbnU2iG3A0z@zwU|3kzNWCIh1EA{R3r zc>A9RnLPwa@LHNW<+nm9SXM6_N?<_#0 zm)tE;6zX4aXU9G4B^!z_9JV6S{*BD0W`aQ~%NMcTUYyhDlItXssrXAvjZ&%>mCW8O z4aD2C-`}8RAfQFqbQr3Z0k#HksBpoeHa*(lWkuzv4=|Jxpf1ajQA8M4AHFi4W42$B z1YJZr_E>2*SgrBmCS6=&ec_TD${w8MbPSk{v=J>2aci(`ABn&sPeu#?eF^*ut=|WL zxNLaN_*s)Dum8%wqxYWlXq9^7Q!{p-C9zg%g+_08H$hIQK!44w5#scB%G(fDU{L?c z5>S%1vF`i>0D*qvdTGu;G-BRaH9GS3m1)n4_TVR6^x~e^Q+x}51@V0M&30fPV7O5m|rKp$8QT2C7`Meu zUjD#SFf)D% z48{84kC!j?!Its=>NM8^y}C~fWjr*=jzyoa~^ z9s824@4f28;V+vf9>M0ND{`U>NHJ6V_OLY*z|kM*KAUreyS*jgxCTh7(0sVgZb-5^ z^|q?pOPiRSo}Bw@KFPEwV4#iPLEONA!VQJR0thFqS-tCZ8ZYxq_~FF1l{(z$M1N_l=KdNaKi)lXH*oYw` z$U4}yapqku7)FIn!o7}9mO|NDGz+J*3H;>4)V}q%jQ-@y{^Z0GiNL5dMP&n5i#A-} zHsbTnF^A`N4IYh2c1Js+P4~Hr^~NF{1dWcSqN!b214$Vln}GdYu#IymmZ88xJtJRi zs?#rWbig_rq#m;8FOVf;={jGW!{)EB9^350ZKPTxIinu_V?Tyc zgHOlqif1Rlx~Y0Aic8Bjy|w5*pdIjE&6q@9z|xgOLZralyZ(;&1!Gf+5@ljDkV!E zU=xNXHz;mCrt@7pUfe7{liZ&R)v9H!l{O-gIg@eKmGrXr@8fLB_S54ra2YRi=uRMq znKd!n8tPAMjT?_HWinwmxe!NMLh|Z);o0cN+Mc=^@JJ;Z+_WaFBPGL!9Za3j8q*t? zXJex}$*dopbe);4FlgPk6u=0cO;lXp+Ger13Cz`Y-y)qE&P8dWX#i+V;5M>*{-W%| z$qtwN=Jyrx9L5jijknE${LWd>B>$y>a&$0J{xDgpQi&qL%rZLs3+fAsMN|rH6qC+l z-W0qvL$V!WgSETQUTqPn*RkCiTTS@gSP~DlOosn0@(BQExNs`T&ucbutUPo|tw*>K z(+{2Csj0t|ZgS_)Bg3V!q%E9?M|s&Nh;7!94@~&=!$WZC69|_FZ|E{6rL@_&>zL>c zZj&fA%TmQbkdzdII4^AfH1|2FhUJHY$3w*-Bv?rf?={x9{G-HRo1f#tIJgfxCoS`q z`)Vc$@cAxda-ZpQj-FLJ(tVrA2RJJ4vsEZvQq;F$)LI->%U>8TYSmrXv>NCpdoy>T zb~lVHxiJ`U!6}73`|<(O1{S|-g2E;aP2fiG1C*r>=uyoMIcn^d7rC5~9qhrizxmg( zuzhbQXb|jq=gGp5!%6oOGgi{C;noa;Xzx@>`yLY3@v_80bN2yPqgV4`-l33-E5gQX z>{;yENXE9vGzoSl@qzend3C}ni}t_tCtT|dT)F6!xIpgKvG$9wPio}Kj4ljszdeW! zqk%lETXIUD?vSQDaQHBis<;ywu^%jIbRBk`SebW}J%ScsFOO7H;03ip$wT5I2R!j% z$v`G0C)&p`HdLADNBnO^k$Cpo= zDvxQQ6yA?%L01EdFS?W1CUt16m72MyTb6DfQilL0>V~P^$&eiyy36Bn9>C zp1)ONAc@<#O-1&Id*&jmI`5oO4i7V|Om%K0+oDhw`&jW_)*@BSn6Su}5&C5gS zxkPVK>LL>#Tf!5oI-!OwQ95T5?RC`^iQo9vo~a>AnhUeOwRK88K~f(|=>FQ+#MbS= z9giiZn6+Vx2<}MCX;zfU)v+8syw(!Pd9_=^{=VV1eJY=5L!VYmrd~usQN31=pT=cL zU0Skn;FnVP@++vZ3nTM8@?X>(4k@~=0>JpY@6eIPf>ROgP78;}3x0uzs305X?9tIQ zoCHwUT6{&dkxx^jgZdIl&kK7f&@cDLHXcND1AGmzwB=@T*cDy*MVvYOsX>{})&n@; zTT)>X*`)RNstyQR*0?&YDnW1##Z9i@vvnPOpV)Q{V&Hf(J@_)fd}yN>v9F{vGiN#0t`KibRCEY5&2Q< zTnmW8snmovP$8_+HV2z1&8ZuMmmJMBvZY`*?yRQUgZ${SKDz1Jqdb zX=?`Jkn`@p(W`xzd3J7mdUBT=#jr$e&GjdxCr+THpQk0ie1^EPb_I9Q))8c!zeFI5 zYyKXN>Xwxt#`1%C%iX>nrI|Jt?La4!Y8r@hYQNDceQqK*6-1Q;d|IWJfUZJf3y*pF zNn4>96!)@Yw>8^1kkm{^nrawcjL!>ii|#%`)_oMGk9 z#+0&`eX9a(%Nd+T5ZRQ*$|M=Aoz5jO?xGNmBP#;D5As}^b*fXU-$k{)1Ug;C(vwLyokF>6}y|gMiL(_VC>d$&J9=WAL&?gK{DC*G&!* zw2e7l?3?Y}Lx_-Fh@I|%$u7LuHWRVYX#PktoNDEy5BYQ5%d3zH7f2gzzt8SrSu`*# zJa`=Hi_$lLoRcZWxrG`{`PKk14mTSLKJJ9jN){!DZ?t*nnJ6s>t_|GdUSW)Y-uAX# z0JG~17HT08UQAZvES=0y*CWm?;9YLtJ9_BaZ7{vl^SgMT*nqQD%IX)WnrH%gQiP-M zK0Ka1BVu)s#ttD`HV@4F%HHF!%QrV9Ap{G)BWckaeozx!{2{SbEOy|#vUyt4B{cfz zfZ23!K=HlJaD1gDq%)oI7&IHL1tP7;n4nM2g+-$zCpm?-x-9x76x!!HbdMLh)Cm_> z^&W+TPZ|^(5&f5WgFTIKF*_q({shG#uk4OQhkwu4z}tBRsd{L=!R22f|2)pZ9MK#Z zf}mS<+=$R)^(g?9w4EdaIqq^5uuvIPM;h?+(Z6uj6KMrDsB<}RBL|RZwsF*2L8+GW zkfoe9ZRwCH`FPb*J1piU;;JjqH|?TM^HD;0LZz8xVj}v4KscL{e^0R&S)b6&Hj-Rb z>qVmNuR(&-YW6cpNUmxwF{dci2;c`ZKcq9~}UQhR@ZZb(q+rC+c{ z$I7R}+5;p1LJQGDQ{CNw_l(m|GX0(Ow1!tOo_%o(`PHhQ0ExgAF?(&Pv3!0(sN9;3 zFu>H0{yw=k1hY-l!J=qrcz$4ukb)lZr|lfR=RIP-ARjgn%wlz`@~$AprmIzuFS@GT zmD`L(82n#{L*$JB{?uA_vmAkb^%J3vh@j3d-jVpJsSN;41n-y4TT>vQmUMO;{JZN z2}%)DdQl+(`vHr*cu5oKVO?)o^RDuF^CMwa7%a>MMRgyv+WgKFjNns5s^7FY*UxHt zu4hjbJAv5zew(c(z>x{i8^`}3iX1bVo7pjvKp&Hh{VnG0kQ*P1`U3eOUZvKF|ki-3spi7r;mCH$_23SkHS!l-1>T4NZ>zUxnZ}>Qab4x6l$aTmA0018F54n|K(oCeTWIIXAPE{8Pkg)7 zh=h$hc;o*-J@5Vi><0ZylJzePvkBuw@f-E&ylPTz)oKM+mV* zg3yMahs7Z@QP0z$o>j z3^)L&o#s6avmj1M9zFs*yz-oZ*s3q&YP?u^nm(dxE{%%F3;;;hk0F}>a&i5~5Qz3b z!QY%_f6jIXVciPae{4m0VXnxnd5_JArNp(L`OJD3LIxMb3GShy6n)?+0gr>u%{qR> z_+3tWt^xtiJ{B)eE;qVlr~5HXu~?I|s%i z!;MLC3pVPF5|NPp@WTxi`x(?(dk1lnflkJE-fs8XLcWy{T8kUQPZYCA#eqfLw0qpp zOcK75;?9M;rl)`+Dtc)uLqN{|5AT)5MXfeBy?qs}x= zlf%c(L3{Tg2aAi6nL-^Fl4#Z!ws<5Dta%e=02>fL7B5YXQlMy1DZet5N5I;8dTKKUjR{S;)EA!lrfiebbY1!{PwL3NP@Lh{@J_eI8@e>8m)( z{5#5Oh}-R5UBVSQ6|a+UbjrW3z)iD7KL>x#hB}P(Ff0|DA6N@hDxwPVtk_Y#+T_~o zXdU^_;jMciCwy};Of9WrRd2U{{slABUWcUXb)|$HA7yG>rX`m;s_4f%4lvDw#$fyc z#%-QLb=Pu!474X9*9p7SY*kORL5o>V&LcazBNt7VmID9?@%xD%Tfl5g5g%yjq$aU? zV4MKIWf2Rbp_c7Z2`c~RYBkag|Dt)f1Z*K)e1N?HS>7RG0Ki^C>U5R4KOoy2x}e~8 zU80--;M4`Zr`VC0F8KtV$MKEl^7Q01hL+7T=9KKGd!NTa>d>PB^ccbC#nfB>Y(H{GbG~(PW-JLi8J$T*w7huj7Tv&CUGdu_#jOuV=ONUnT!h1dQ*NdQ)TGNfFE@*-{-M?g2C=`=#f!H*$Zq~SfgH1Vjn(R+NlI0r z%wWQ480-Y!e@BRReiMed%b_Jab|uL5CUfV{=lxIPyNR;|HV=V;6iSP_Wf5%U*JcI05IGC$E)y; zaHu~l+35dI-G96bfbnB2K&U`^$d5zOzJV;C3^ZNG_(tK8TC}I2CY=Z01{S09>HR_2 zg-qYhyf#f6YEoe;xbAE`;aR!Pm}`b@8?GK^AA;y0&*OJh^7*Tl4S)MxtOYvG_u-JR z6b?8Pd64K6ZHEiMju7Pc!ZE*b4=M^CHIs()7T*m~|JNEFwf`7Qr2k_Jhd_4Gzsv=% zK8XlTzerori(Nbmr93X(l$bhS=e~AhtEOZDpgoOx{&y~T|2Xw$wgW$)`$(KS%IG}+ zD*pc~^4|deaoo_4OOU5V^nM68>i60IuT+)a&o>qV>Ek~>LHY*ZT~UwF%jgK3Yh2;Q zJlraOcF21XF^yuHn^1ni?(!Ug2=aKWP#Yl(4fyMNeu-Ccgc2y&C7akM>~^~EXLH3z z&D~=q7@%r>)Fjn)Os$2j3e`y=B?m&+p(#6cX!@rk_Jdt6q*W-1k^jTo`x^k=ZO;ZV zJ|O1@p^9wCyJ#)NcLp}ZDCHFNdf5(Exv2A}G5;G!eY%J!l2BTFm%~D|NJpbatfR=b zgLbe6e~T7c4@)Ev*jw4h&h{YDjC4&n8y7_e9H$Z&U6t_C>7dEVm5N}|d*Gk<~ zrQ@#mSl?MlPc{I92SUqO!>^yWxOCB%vT>s+$S?9I*JxZ{@>N==pg;n>_N4`llXmqRz*n-LaK+7wcBGfjrxA-(FB}T_p&Kywl$Tv zy~sd+A3zZ^t~9xX(fYFf^m{LseZTqhGEuPLx*X>x5u(pCQt!6XIkb#-+S^Op&;7lMguF3 zURdTZ&PM9W;5-vNdgX01#?H~J<;p(~cn6&wL3l$~#_PjuX$@|L3eL;xyA3zKN2hFx zjCbf~J|R-AM(3J&j}^&9d&wVBSN3{igY%kgBGT*h!TPlNss}?1jMC?6(zf=J|1+el z7MnIBk_J$}cl{SEWulFVgpo6~&EskJ#;b`{EL$89`GC7OIq?3gbcDl=&8x7PC9Bel zXbUziCT!9Zi_!u_mMGgMVSG*JN%#0`RnmVNEI*#^1m!Ffp4+-T(&=iaJe}p&3pTpul%mlgG_Q4bjQ%UX3U7C?A2s$1pW174k!BQnnU6sD;gULlO%}R}gl=O^B9iL~trq zn2_IXp1I5Xbo3_Jr9R>j0+};&Xrf1&CPJObHK$_}%sM2(S6{8<+z^=$&I|O3DqXdZ z=K7&V92TL^jjhdSDp_yW)E@27t~9VC$uLb}(gb>pYax5T_P9R4_*E>OWRFNAy0hT$ zsSBFE`kP`-u#`V=M&nVfo@p<%@%0zo;nmW*ca5J6Sru1$_P$gl zJR~<3kv5^2J&$-lp%+~4lWJv}xXFnSS}T*&4b%ILyL>qQ{!WNeqA_TNm+YgV%_JPl zJ$CC6JaSYi)x=*k+iQxxM)htM?Akbl?Vj92U&6(}*F%tHiqgY#e}#6?X2DHNp(|4vB>UF9HnHUNYrJy3q73LBm%q*wompfFj!OK!N)$Np^DI>>W!hJsIO96VVcXV zkP=7`%f5NzUv*|Qlg@R0_S6tvY$3qgY0UZsUYZAToZV?LJ9KsmCh(-{S5a(W6^{~c ziPA*?5+Pj2y9e%Ld;eGnd~Y11Jc0aiB!k-X+!k~L*iEe^sWZ6h)Lg#~8SSwSvAhDF`Y|fzC(BB@6ude@B1K8w`24TP)>3{YEKfA2t zC%^i3J4*XE((wp*c-_LVk+o5p!YDm&F(zI|x+7@M7`U^@bi}qo6U!OH zQS>p&i^0h`U|*xo@k`FPJND#LC&!bCdfc-_DBB7OwxV?5Jb$n!nW%b`M`vH)mpe*O z;OjsF@{*#8JuRdclkEm3uD3OWWbg84v>hX1dt&}yIAyJeiq*X*&k|gJkNRVIcF|&u4*5iO8AB}d-J0Uu`QsnfyyCa+F>ke zh}ZsNuYFU3ad~s>Oo`wKQSg)Ya=F&MN1tmIDc+ybs^o(gkN$z2b=zqu{fB`5wf4p z)6}1wo;RZdTejjAz8X(Feeh>N#%ygz>kr>iD+PX9M&~!XU`LCBc-E>#N=ay8M3=@@ zZ~c%VO1+rGJ6c4!O-|GUNuGRIS7O08mKqXC3~o4~niPj+XwVf`*jMt*F7<4}q~-{% zJIwwhMeIP1SNfu{15C15c2q=wf#@LCkjtlQt>;G8i_I%x8mGEE>Y5jA+uwFbV^*6u zCs4(t8g%YEnrc;+R|$R$ThQ6iW`pXYBdYcEHhnL|v6RxwrAM^OzNM)+bO}^)j7w`5 z7z(w?n#yqbbEP9_&oqbmt&492HwD7^FGNnc5kxda69jIFPE%PrdB+zL4ZR->+^O3s zH~V!@G21b_<>K)1=Duy5v=1F;=87a>T;;O<)h@SMI4?52(hrSlQnEG-Ezf$=qP&Cq zQZQaC&!mCPCGN4=oz`Adiy?N|@Sd)BPc>3GCHiR}e^wB?P4nJo&yE`#pZ6~2&PPmK zo8tX05zr*uf(dbX*>Vl*nAz|GwR4_HgIin?b3-4dZQ)VIS#h?v@VN~lw z!`52k3D-12seX5}L#5VU&y7j8i{}NK=7`hG^*QG&?4_F@#!KYzGru^Nslx0+<-Tke z*d*r`_7FuWYLsaxBDbf7*uStjD#}rEpD((~abVHtT{^cLkp{ajePm;4#|PvRBHX`z z=NTWq+oDQ0TBc?KebmQoZJ1e?&s8UQ)RYN5Iyt=HUair!k+Sd5(PQ%ccQP8XwWZ&D zHdo|vy{$H#dgPr#$?o}H#@1%x1&mhlymw@kY&lZwey!YO!kA9cHKE~bjl-;wcdw=E zsWW%$>~6QADfFGzvS2Sk%A{M!Y@9}qSnO^P%}FwY+hCrIfM1)R&x*LRz~$+*xhhpt zK|VLqvn06|JvGT@)ju9o8FPG-C-I}wG(jppc(E+a!)kO<7ysc-Slw7V16FRdxKUg* z)})r4F?%Y|ZX=UP(W{;_Rnn{?7LVU58y4n|VNR(vONn*|T|!^iNpL=DQfGfB?t!>! zO2J-&p0v(Mxh8L~`bQI#S4DjRJ8E89=GyG&?R?C(X;<;$rRJA0g$(M)hawAGgBmSv zmY=J5?RN4YWB&nEV1s^F4$rZwm!2t^g$62#jk^#q;o}4+pE*iJ-6opJ zc3Zn79BTuGsROHd>xL&+OA6Y?`=C1U41Bu7SpJ0dz{$S1VpmT$Y&Z7j7a^B>?R|yY zgxfT#D80BxP!a84pBCwA@wKe3V5?Dh{%pyXF~n?K9%E>P)p_)l%G9*C?-r$&lP!57 zU*Fi1iRL-Xq!_Nfhp-si!lxkZ*VrUi(iA14yd6ytjGJx}?T~RT6pv-8%rth~!lybr zL#jij`rQ#CSJNhMWN<6TFbq~6|;-Mm{SO1`ytNvSHWImsWkpT=_Lj6<1XLsjM+E=`H<-AwlKkPbhnp#@kgDaWoJ~VXOUK(3f|NaP- zk?;tfdpSQp?SNXcwLwVanUmOOtKsy<37+xh_VX<2X=^8ZR}mPLMvI7{ByR z;B`c5vL#2EujE2X4W?@$%Sb;W#8@aJYoDpTV&V^wd)}2d44}zdsgV zFQU}s9$ozPRqi`8q`bv2LmRW$V82{7C8{HCTY=^mp)RG@U3Y0|b{D7|#E4E(*tJ`8 z24^3#a9dJezEL%Lb?OoA(~kgym{U(jK71eYXYVhA=Qs}y|CsZAeyN4<-nmdIWb|!{ zABK`hSn@i0YPDhKF4DQHm z{h|^`xb5El&+yzI?1eVwK$%(d76?%J zM?TU9B*srmCeZHj6Nt`%I#CJL$7$!niyuw!?C7)}X?v@%Bx3PYzP5BYP$eo&z5G4W zz^^?yIPgU$YVRU!wzp``=paQr@rhxG992`2)7M{Urd%Mp%-Y9)u=docF0D^SL*_ax z6@xxpnbBx0qwJE55jx}|4`+}DYnVkpuiksdSlyU~vl;gJ9#7eL<Cb1L}z1&z;`r+EbClt@wm-E5SgmKz>eNAEMZb%rrzII}(AMMIw`aP7+im z3FC)V034#VZPE?Q&`_X(2mzwMl~^&aISMW>0}TmU)rI3=qRRs?At%7^cB2k4m%)i4 z(Aoh9A=VhdMmUVc`NP14`um^;j~9jn4ItD51VIv+KKMYS>t^(^1?Laqhb9H0)v^pB z*k5H$SL|Sd=zcbcgGm8@^utd(JEVj9KXpijbb2|!|L_0rjt|TK*nIr9j==i(Ek0qe zCb3Y!fPjw#7*eXBCCF?s+Q8c)b)3$95$z@a$M;PxN9-5OR50QLc_C*Tl) zafU(r1M9k^z(Dt|99Cs^=sbQWsP-jl>^|?t2w~fX(a~;IspT{Fe(HroRFW9?xeT1?mXzD^s@xu zs1^A?$Q`hItGUByUG7j{6EoD?`W~Ske%ZJPWQ-%w>6Z1|J229R<)1Dkr~(9N>;HKv ziT|?wwhZKf{k$&@{1*cZX5)^hb0EUR*A6w99v_UC7nBbFqFpX4NnYv>*%Mk Date: Wed, 12 Jan 2022 17:59:26 -0500 Subject: [PATCH 5/5] chore: a few more 5.9.1s --- packages/utils/package.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/utils/package.json b/packages/utils/package.json index 1aeac7c5cfb..be1a712fff3 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -40,9 +40,9 @@ }, "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.8.1", - "@typescript-eslint/types": "5.8.1", - "@typescript-eslint/typescript-estree": "5.8.1", + "@typescript-eslint/scope-manager": "5.9.1", + "@typescript-eslint/types": "5.9.1", + "@typescript-eslint/typescript-estree": "5.9.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" },