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 @@
-
-
+
+
## 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 @@
-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.
+
+
+
+
+
+
+
+## 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
zcmbq*Wmr|;w>5}>5`rQvB}zzlgNlOE-6`EAor089V
zD2P8t%I|)#iiAXo^!mj!C6}a)NoN-&<+ESA+sVSK?-P9AJ*A|4=BA4KGT~uG2*Z$(
z<7WQIP_(kjs5U0%h?j--OKtx$l!qTE|7O0XMK(jeK}F^ND00*|NMpd+4_7B3LnLedFCzQ65RebI$qd
zbCMK|TB_x#FcM%AgrMdQj`eokBfNVX2?KsiSd^6X;KEBJA#2r}Ch~UVYwNrJe4Mq&
z>1|rvTQl~Ra`#aq+g|K1b&*!7&po7aK8D*hz5KIiZ+Ehz|GTjf`5?Q`xP;iR!KZ;T
z(*;)r6YyBilbG=j77MLzsd&7E@Wdt*h%XJNsv`
zFcPk}9L=awH+=qip09<4xY_-|UB=Yx?DrD8Xx@n+RynBTt7S!WF&k2z3Ip6Luo0Q^
z*;BigS4eU}if=bY*aXQVgpEaIWbUZsM#sg)p;^b{md!g=XXZXbp-a?iH04Y=tV))l
zef;?Gdw>7C`1qOV*N;~I*>5|iC?Q)eA}pdXu~0E;n#ka}xi=p|LSUgsHjm)xE06}q
zkwmP^tLr}8n@e(nd&RKmb{89Us8u`V)p=}=l`(4m3|;Jqb=VjwLbLpWJE*7}%`@fV
zSG`@AcyMqKVBP)FWax*w$K~NLw!-mjV_?zv=8Kmv^~=W}|10A9eA;Pl(0hA3o$Sm8
zSjSX6B~JA^TQ!j_|ClV`ycb)4;Xg5`L$S$E8x<9Wi;wT9vaS{B{ZS-8S-Nyo
z?ED*zN!iv}8aZF+l70GnaiyxMdJZztx15|$mn1!T->%?V4Cgm5+Uu8TnDu92OD80`
zq_!)RC@}p
zq@JM#iiN8~2Rrl&!7^9mA{Bwl#7A6jOU%3KjZiYLlY-t9;R>%l4y7lP`7yw$wO#kY
zxq&B+KkKfr8Ajatao|O~ik#f90Bq7;&aj0ALw;Ddzy1ZD=SQVh<1wM3SVvov9q`k_
zQATOL_cBTj=(ko^S@H$><
zJ5Tzz&VMfy;zAt(uOBE6pX#C~n+h2)CG$VKxj7$BpB1Wr!
zGtVr_$GbvU>PBXk&nlNwa+SH?1l}QYIU4QvvUXHiTv#adIJK9Mlsq)b$tm`}_Bz_0
zmi6!uL_xpv<9No{l{^AHwI@5`bQpIs0`l}0)r&z0aPGvg!a`OF35gxIT9bn-xg_s9
z4|sotlL^orZG~J^6@+W^X`IR=G;s(C`t3
z=fS6|v%K=Dhk}Aha$O2%vN1#Y1h{3x{!|9WaNZp_(ohF~})%gl1D^tN=r>G)43G69t-r;NT=*)qwj
zL|7YBwTWGcJPwP|swsr(+)%&f$8G8talB7Ztj0>I7#Kp}t~jt%(ma!2ZDQl&+XS|2
z8v8QD<(12Z7N;GDwGXx?1q?^qmKT*e>UO@zl}`nJv31O}z!yi0k#?ThJmreZ=`m)g
z7WTf_760(z!^%{xK%Qo~^$u-l+2)6&PoLi9REV}0j5?RgwJ;FwQON2j+o
z@LllwVjp|*KB5@frVA8y8E1U`dNZQcK?3;~#3liw+ON&>X&FmP%Rg1n2x1u3f5Q?$
zsd>9K5uYODzP1kKPvr6d@BDaMT>k!8saa#%Gr#9!pFVwRfP}W?eegnDoI~#yl190;
z=Nh_>jF*>iM+_4+EiL*>`Bzd>Uu9E;sa|uf4;Prg%g|>ZK76<`@EuRP>g_Z6`<&7S
zi|x^0v$N;-Pfh#MQT@o)a*a^d6$7aUJ86szxKo6IMaxOPAOY3EH@Xh3T2MV?R+
z^|wv--ce`BNz6qW`ZW@xXn{b1uQ%?+-ECXmTR1qhTwG->n~I8xZQb21v$h{2BSk|9
zn7W@c$R-c38$nV|xUJ`%i69jf6@^lWq^Rn+`roA%TbX>+-``Kn|Ca9c>(_$&og8KP
z85_YWjxuE%n8{Sj<4^p&jqVS7Nu5tOOfT)4mrF`YQZq4y>3W^|r>8%3J6vmqwOlKy
zG)c-b!=8Mv0j&}m0^Y5gE2AaZS2L84AEQFmQ&6~f`}S?bg1`njZB4v}Y&NGm9B`@C
zfy6W}IW6@It*oqsAmUwU_%%`KusTu6k*86{pUJMQY;=CKIpMmTjPygNHUV~4QBKZQ
z!^+AuIyraG>vWNDsXJNH%#0rT*H5c)cCQN;AyJ3s5BMIt&4ftMZS0OGog?FjYItCy
z5vBYAuPu@fLw<$t^wm+h+vwmXW}$Ic0tSu|0yFd#Vxge`63FQLCh{wfNm)5wz?oS%
z73W)=<*a?>$=P~A<;7mdYe~tB!orUQ^;aZ`U1AyRGgTzD$e=aF>A4C#wXVl5s^{6kY;$uNIGZv5%&TyU;GCu3t{TUc7!n~xB=M@A-XZ_l2qTCgW
zPMaFWJt$&4T3pT|xEI`lHn%kpWj4uc4xmdoSmo~B?t^>S;nj#!rE
z26T#>GhYJ9=ion&SXgi(S{tF|cQoRNbRyn~$x@RxO_^%tfMdk!(H8ilt0(8Jr*cER
zg~r#UF5@9gQLP)ZJ<_ecyeAFANtsbshqD+BBIgto*57DSiXlLdm@5}PYh1c;6JeEF
zj^4Xws;hFl0Wh+~K#qSbHIGC$Vt8Uq948ScN-z1O^_T1s@nUMVCS8gXWW(}NWUN)$Y1dyrm%O3u=!@6tiWF)`#*SZdl632p=KQL7*jtv=<|F
z89QW((kY88D=R1{o_QL(T@P>BZUvBwvxF=CN&
zhiX?lt-e-;x|{C2J=N6O3dv?VS;dvi@Aw9G9e>S%Ke^`eXq@U@ZWt-gUK?$y(%ATV
ztgaW8uyBg?WYw3PCm+^E7#^Yj(vbiGE!y#_AG5{@=ZO_ryb(gvYuwjA!Ztq()?RZOjoA}VWJaJ`Zh2Q8JdUiPEY9au51x3Y5
zKn3d6PE7sTvJhJ-o=57?m`PNAs5L-=d?hQJ?XcV}mBjmrXWAnYu&Tq%FJxd(ur(rA
zyAhlgL$H)itY&{737>Cp)aG+p4E1KqQe0j{InMKrZj6?w!_%Spy(3`KKX{%F4jbcqZTCK`74kei5xXT}nLT3knILe)2@3K3;HiIn}!x*29kXK`05=hunfX
z5}%C?%PG%eZ9ruJJ>@gRR<~DyC%9f;9s>ykT-*{$?3ZPR->r;j??thw-c)gYsu~(O
zCZPpdm7lLJ&)2n`tDH95Aq;eji;G{qdNl)gSpqPGfO3JT
z6zVss!8QfrP|#3Oy+dqahB!{AF-Jm{J}XgBM1;xqRPEQVN~srRa21RWV0{2s@NayF
zt;|p@&{2+2UPjV`9AeV^X*is(y|B1g1fg5?c2!~c&GU`v`c#10h!8;#-TSadjRW5m
zi3OY(#WLnd6`wlluiswc2$BZpM?
z_nV>tzRMbRL@VkR*fyM~uro9<;V@{yf(US#3#OH+-oQ*@tBD!+Pabs&(&*^w8cdCf
z37b_gp04v8*>qyAJy3v%w5!QIG>X8;`i*7ht$-5
zI<;=Q8znt^qb8|r@OdeTni2$E*@5I{2*2>{GB$vHyx6qy2AW-L)=#73x`?0RedVfA
zX5NhGg2NeRB$_`h`&v=qI$Vtb*txwagSo0D`i*Eh9=k6gT@aXFPYJ$||LOY`*Qs3%4OD<_@K|y#uILoX;D<9+b1E*>s
z!{X|_^Q^C53mukaRPr=l>g!VpxgDed9FD#cV`gS)2q`F@CBXiGFhhIG^1i-$^ytybrby)mkh@Fr@BE;V)KAO4cyaUe^z>}O)hM!?
z+iFY+=haWMel+R+TQ_gOlhx?3K(W40KyZ(o92hE*GFHd!weHgX=|SgrsNW9I;&xg{ZDwqFS4N7cc_wT{qd8P`+&9ZW
z?MiW7A{Odjfeuw*_q6G3sKoB!^%{E;Ew?A(y_+=!RyI=;wM$Wc-Xe=zi>pkSqA|6@
z>u3rY3GANB5_N(V(z@ivrG-1~yNAwlT=a=M24<$`a>_~G*OJYn?_}q$PPA)6mevdK
z6O;dx8{d#SJGgm6omN4&OWW;DDr=F~xUPRO3twO(qAppK$*K>TISx;@M>B}F6j~1b
zAfBvpY+OGqcG;c#Xax*I*3}~~K`n3SiJwO{|B0n5v>pN2K}tqOqBICnkgq14hp&j
zT<%XtN8_UXs_gTO^z;fqX}OlpYHD#)Ox&PYz&nIKuDs=6?aK(%kx3Qy94XXC0jBhJ
zZ6Nq`e;GL6D@n=Rz3MUJ66KXKATB2S&Re1VtA_1S^p+!q&nUuY7f4UmTIzq8jqepe
zW$ilIHQAkdis(R&bNi>=60-Et{pJsJHTz3HzKE-uNQIIVu^UHA3*tsg%kgIKJEH
z;NV~e8<>!Fmy}czpbki0La|!*!NQN!pw=JGBcvXH!rkP`A?f^@Vu}VMMEGC5*JLyH
zy!mdeI`TYnOIVWW9v8@~k7#L2T=$LdPzXQxY^8ivV#yx=r>94}pL1@0J~%W~kb1L7
zjq${zj$b-Wp)MKC?@M=NL6Trra86G2)W@jpt7@YTg1>+N=6I}WUrk@^UF&kobhgRV
z>HDv7P|04UDBpj{Qe9;af*pdJCi2)ApB=0sngXyDRdrdT-@kva4CWH9uCBga9|{8)
ztWrVW+0})RHGwbB?z%ir*@?+R$(bCUwUyJ-Vw|o<$kTih{hUxYRV*&Arm%5vS{Lp8
z85!Kk2nfVnTzCNv;U594#TOMEVd&P$65Jjon>cjJMV)#O3EO@Dko~)gSWqV
z^AOS
zzR=@Qvq4wFW$5ald1>-lsrmBMn?dGew>J`>7A^kb(OO@UM2FnNhisf?PICpj!87qx
zG~9;C_Z*Lmlfy$o8qLcT;uz1$m}`N^
z5`r@5h}Dxi`n|mX^U`w6|J+2&PA`rZ?C3VI;&{Sh{*&N@*%K8@dHUvwB29X;lF*cB
z{Ah{E{<6q*d}AOEO2ck{PFuV$a~JJ|t>|_AjY~ZA|2=$~)Pt?9y42bUTk*TRY4SwkHJT@u9yMcq|kA;MiVcBPPT|jA8EF1lu
zox4GAMv43Fh~B^oM6u6+n|J?EN3c3=sG(sI{R+BE?E<`04QgJG(D4J@B$qePQ(0a#-g8V6+z&X2B
z?WbOV_z$olM0bV}A&?b=*6_yw3B<`=-#bsa2CA1B!#vTkeV#z%XvE+G%7Q)+4JhpS
z^;d2})Pg{taD-2gU?p>M&Nkd>Q*!}3th8FQ5+O=4OYOmDFTe3xcW20|0*d}Fp6Sko
zw#avS55HD!j)Hc7rjR)F52TQ$Hs&-YCCjvxO*v-qVK0tt|xlV>^U4cpc
zIGG{XdZ?_8pm8A3^~;wp5z|TFU0=*dx)QiDptUoq7r#eFL4)oB%6K~HPC%%Ep}`I=
z!dxZuWe5StX^}8S0kEE%21Kmck8B`bbDf+q=+frI!k1Zq%Et10mUc+qF|LLmCzS~dgPbRig`^~6xm~T4OW%2AC|giUg)nIz
zKh7MQH%h*pZGXuO{TIeZpJQXiGsMD(006)jjMX(@X`DidSv8Pdh*2kqw9GWJDV?C?
zbbq80^_juB+O9hf2Z;}uyXnBUyRdym0BWeN3kQ{)tdfI!w)kE;`teXm_37of&sdKZ
z8`bQ#keVhS@CN9!{M3;$1I_CN_1(~;b1z$Eqc+Bwg3hu=4)Bm
zVVkI?cs83U!Tj2zu>k7;#Mtr4-CH*i>|*_J$dxDyy4_wgq3()y5Y-5#;h&FGZpI@3
zL{4{GDcayo=4F3D#`_rWT&u%^NyuynT>u_LLIMML`H(jb2^Jbm;2R(a{yng=op}l%
z*pMh3!G{R3@75)ni3$0#wAT)
zxdB2mP!Q9;J8M{OqnFt>x1FDCm>Vz=$69BIWMPo58uVCuAvraETD}Ha
z%%Ji^4l594QU4LGN$<<-`We0;t|Ry2y$Br95lA)Y(Y$Vs%>#
zY8GUXScbfAL5}&W*y-ZiGwoY=9mkaP2Am{pL|AUbiyZ|&guLo?r|W-Q<#3R
z>JHWAjOixFbC|FLjq#*e+6!h~tbU+co^R=?UOu;1(D8GSGi-CbJWz^Vl?-MxxC^HbSMLVkUs`(#FOHNo#KIhb%K?
zw4rt-E_%&V_KQWDsUJDXw6aGk<3|HZ*Q1uYMgS8sWtZf&wQ0-u7tq&fDH_`f@Ly8F
z!h)Lq9LG=vbY-E${RE5rFQujTrTY)sq;oKSr%16QlP|z
z;6LiQp8kW>PW$yW1>y=15m&I}CPhR8&>hfo145-A{cNyWRHFbaZ%rDkTnQ$0D=
z+f}uaoQFQ2P4Y`X`(GX>=I2h;$xx{f(^X?*8jw4omrh!@8kc|_gS09b5mUH?SgAdM
z;AL902el38fEr_rV#1DSkRlZ_!Z$VdaHz)B0cJ@$1%w5|Al|+6Qhf5yBdm#!Hmc+f
zN`Sr$GsyqX
z>sAYdm{a=d^}k(XN#i%(A?4%@nQLbB1&vy^43wJnb4)NI)?%U*%1wGk28`>G{`(Y3
z`w%eio~E^I{-ZC$h&ZdHml^T)B>Y=9Vb`6LZ*_6&dW~-YGw5Di&ogt6^bq(HQVypmu9NkCtPXDv0
z?|CCmJ%oqyG{t3PWHQ$u|1-El>@Qrh$+dlc7f~sTOG*F+NoPKL`Y$iqzi(%kA|Wfg
z4716zb)X0SHE4!d|JyRxt;(cPng)1-szWAaLGGVN`p=D%vghXJ%qPVD_lwK8^&&pQ
z%dN}D897gKat2+8RPCII@1r)S>2VSj#Yx98(S!y#m@L$4pd*ppLHDW`F^q?GHe?4i
zP40f?6zTu?`|OH#+&p=cn3a@$J(o$9`zh1z-umX^DQxRIYWPTSBD~Gia%E{y7^wol
z9!B31f)O+}+VLmDmWlZyd}_=X+cmE5dqlcK<`1zdX#zxKrFiEL|5=xy0Q_6u;MyL-
z-d&_2`vE-^Giskus=FlOCdE7hyI}Ai+`sz6DG~TMY`KL9rmf@mEPsE0Ncd%6Y4PN$
z-WJuwPAxv6&t&4}&h1Lr7i+}UYGiBmo?^VI`Q=KrqGXe2Uc3VKSdRR(wC*OA(Z?zp
z>v_`HtGXg1E^gtqUlRY56mx>0&GD&he4Lp^?OZ&PQ`(@!HLZ9mU;9=J#>)5c@nJly
zOwpXI$f;+Q70fVpb~0>}R2rH$ndsOrSZc$sAWPcbnnEQ@CzUP;W(wNZ{m7&iyz
zz2EVNC7QC*5rv{jiBY5Z-MiQGw{(Wr3t9Q`436CR$d7b7A}kE3dl~W#a&0#$q4L^R
z1+yixCM^<;nV}+q)dmEoAzg7XvCjz!8mm7^aY$S(;=>wSv6^1yPD~Apep1vwwZ>x!
zw_6>zYG>cue$1^yuGzjl6=pbROQ>sEC^x4P6d~`rVNTfRWa~2Hye-B)`-Df=inE_y
z_!o+wphsEX?^sf%6O>-Qz8(Y7i4iHexq#J>4a;`+H$08eo1UTD%MFG;M%7X^wG#my
zn89I6Tcj&lq9J-uvl&NFZ3jC(b=DQUe?>ZRX~$c?y0q9zX8eF$&L=ydTE5q1BgA&^
z0fw{JeVKi_Fq|!0pBpyJWkqfUw_m=Kk9DoA%qF~LOzc(D0*}DhI(+))4>x;hMr^La
zCE{ws&bxb}Rm483HgAjVBZ7HiHR$b0SL}jQTkbw_;=rmN&@{XBPR47AW7a_{J)A%I
zea%!<^rrl_-woBwvx;R590G$Kmt`xi$iGrX4l$qJ#Qsim65d)_ADqrmc9*(Xm2m#U
zCm%I)zT3pbykz-PZcYAGki4t?H%!gKQO483CU2DyI(vo#sXaUc)!Qt?C>6!W-D$r>
zuQ8X`?g+OyVg8);OJ%a;)q8WMMw?}yN~`RLqpEr8WKsCL`!+H;(L#&)-<;YQq~ehK
zI#+$&?{1)|M7DUMOdgn#VOcNTXOPl0q!t=~5v6T(k}2GBxEFBqjfjTTmp_?1z0oP=
z1zi75h6*`DW8=LEhn`)qhbUEfwS9gpc)n4BP<;WgR8HM^2M)7E5V_A|7DK_pRK?0v_GcZ1=`yz|%C^-^E8D~Y~F9zFv-^#=W
z`iMMLi^I+x4875Sgq7~KcoEHf8D;Rl)4mMWOs
zxu|}9a;}wMu907U*-^W#BTGN4&u!_%AZF0~)F&q=DvCGw1C~H;@Y`&Bq#t=35B*;|
zG`g5qgb3$dKA>YQye#~btKbR2C1D->yyTDGE5|7UjtqYH;6mSi%=M$hxFbzkG*sgY
zOQW^t0^Sshe}}hu-^_F+`cWiMILE2Q>BC@+?8WFzSEh>a#b~=wtozA~2}9U#uDYt>
zcm0^t*4W{J&YhX8i|7K^m0iz5=)w*xsb4aq;9?G}q%
z_1fxVDzV(st34e}OX@Uwk27&}Wc(|>>27z19}_&iq7}*po>{?EWLg(rQqf~^tW)nc
z;BQ`(TK}-`%>1~_+MDlcT4}W1`m<3iE5b1ysi(7S|Igqxxhd(L`?yR;pfjWQprM
zRPfM|sQl=wwQoWObq8+P|N#A)+Ij)w#sK+=eL+S5C9CwJE`qM)=APC6bEB_N^N}
zNub4`jwCX6N&;C6Q>`G@>ddn3r{4y;?<3tD=;gV?vW)}nTs1|!>+5c2tLk5Ia|D1q$C4qOL*Msp*
z%R}({_wQIFyg?`LPZV>GpMS|Ak;z8)rhJ+!sc{qKT@H*+-3pmcre`b`Pkt9Ws^t2&
zgk|t1CCl0cN3MKhm7<~6Nlm@*z4w{fEWD4%gKR>?1v^?>f>tMxSvJVRx6M%RGC(&t
z!UEK*@0@tO%g6J(XNBrLIyEyt79KHmvi4V(MR>J&VPTY-|6phD3hcsCb>7*(Jko1X
zDI)da)0@i~(DOF+yD^;UdZ^bSEhKnRGyI}$7fapmMn-kgihz)JqJN^BTM$OeSVd)Q
z>|(XAQ6d)9?42{Ji5oml$8XqgPJi{mXwKJrOg4W5N=N5O2eZO0(~l$H<^unw{R)y1
z{vA=Tnv8d`(Up7g_Uy)vXjQzxxjQSJ9!CSVwrr`DepUSVnaiu7K2~Di&2VfHd6PnB
zmY?&pW6c6mSmw(al5dbuR|cOvz5ZE7$~Zvk(=5;h@fSAv0Bd5>(?4)KydGT)^-Uue
zS~*UP36H2m3DS8u#rRq+&DkSWo!DpZ*tBch4g{E}e$`#fC=E+`b2%8D<5_L>^Z)X(
zx60qDl?>{0IWXsm@Fwo=clhmM|1BizF8(xLB(j!{tt-A1S_S{0Y=>CR)X$v!%!5WT
zEDSi9VJYiTDwaCrHDr`9;x+Q>yZCH)T?1AdQFTj~P_5E&kGS%10w7bx;SyC{4VuUM
zsmD_`D_H{}B0?9pm?A${?&nvNR?#p2haGlj0jaeLk
zZT0yMP8v*Bu^#Y#1XK3Mq@>VEoohVqC2$lD*Iz}$B#D1}{TO{`h;_DAR^+m&Y&cvG
z=9e22MSfdCRf-B)o!%l>ai5067eI^=9?VKT=9F%vxFx5x@zrde2qT>D4+G<@T9M!H
z^n2maQ3^_067s>3b8`wGB$MvP^3vP!(la~G(mBr4Im*x3_LaWIY7LK`**}$6#xEEa
z*U`D_lo*|H`tm+Ow49ojgnp5q!Q;#a0y;YKcJz<$fDundB0P4H&QWpBc5WZlbchoz
zyI8<AWyK=Vlsf^Sweo|2kD;YL^I#@pd7av&X7JdPaZv*i2o*Z4z{IluR8w-fm6__#j(d@=nODy_?Eo
zpl~jDrSv5
z?)h!Qe@dQw>QKS8KLpy~Rqff>b@Cv$=S7=T02bM^>H*1BTQigV8uME?B6~#Q_V(T8
z0_};r4dSIz5?L04tMg0
z_V81!x2-1vhwDGBs+IDq+~`t0uU^9WpCI!x$y%j)YXQft-+ASe4dKZGaEOPn2EcDi
z1O?77Fcg6@%Kzjr&PO4cQcL|k{BEkqq*pD0TtGj|g7
z?;eXGOFxsxYOot>XWz$?V8xVUyV<&;=*xDuISp4%d4n4>T!9B!`K2<~g>dw}z{sbR
zyho|_f|glnJA=z5Cq|PAdah_F9kEwUnl^O-8DCFMczqjwo?dvRr~lq{xxA@V)=mkk
z$;qXOjgEiGz4##P;Xm~Gg1NiX{4PMIWArc~lQ}>WWu9A6mXo8ib9R@^Nk+Ic@J*
z{T?*Vi@JiqTm=TS&4)jBnz*bveev7{g<544Ea`*8IMGUXInu%?0@0^*%@(I6Eu|i8
z884FKd9Qezb5zIlu!fhK#f9!H$PtD$GSuycQF8)xO`&sd6yrKLXkfN`KZ-c~M941AgevDcA`n^~Rb!pdW
zX2UM!m$TzLGm%^bV_d4cXR{q)1YZ4vnyXIb2YdFCEG*(5@Kdh4W!@_ryvUx3wNM^b
zn78$h2~*0NkSoePZt)Ydms}&DE!fh)dme;2_~Y8MT@f#JNS8EB%xQb7ack23r13<+
zw6ErrK6?Go4F>LvnpH%~${-pzsrjGrcY8~_1{0=Sql@*Q?tV1g;@Njuk;Nkt_8?N!
zaeG&B!dqMtu>(VZ{Rr>6U!>PwwNvXJu4e;oEc=!U%J^lUDMFTuXBz_`c<|u7$;Cmx
z0=fG|&!flM&$o3KF1busOT!v`ld1JPM#-;l9Oi>)h2=r9C0e)fGaAQ9*<|AGv2;*FjO$$f&|
zuUSr%Jj=H}++fmZTAg&hoI)Dg^)BY(yiun&@f6Ngl;TZ#$PRS>-d>K3cJ!IPp0ySt
zvXVRSYDN0?E@2x*P=~^Jf3%W9kOBBs*)h0v%RBkJj;ck}Ov;g^lw|)*4ze?)c-kmK4-Yn$zU6j!X;CbNftU
zS=T>z`t;j*yz698Z)WMU8h)&7!|Xdhe>DD5-ZE3mNZV)tV}y)m7~~=R<^%8e+N&%!S~#zoqerUUHx)VJ=E4n
zfMT1md=ArR9A`VPl)cno5xH!S`vGeoJ(bU>S|Fa?1Q1%rQL~5ZYK2|y`&f*Vj_F;4
zwa$qpp&msIzZc|XXd>))`+5kR9^8&8v9AB*cV*5X-&qxCyPq}6GmRA3bBBKz4gHWci;t3O
zm5JSLj@9k6`GsHl`t{hs@Rs9+=_BP{1t_9Gv
zgoC*08`_%liFo4%!p%HR`n=!GL)Qqp7rV576RB()Aie`qkfa5%${K
zoxrE2M$q&8rO1`qW@VWg<5?xs`MQV4&-yWP6X}$b{m8FQQuFW7$#ZN4ug?!S@+tO7
z$9_s0jRaYYRyk^xwStl&zwRarM+;`Y2YWAukJ~Kf@mxhfm+MD^-j~UkS
z5D?!Pg6%QY_Z*EDpyocNM}jpT34hj
zU7t#)@cs&&*5l}u5Uaui*DSf3efCqUZME!M!jYd=0*&H2;sF1|!s_0^#U<*!p1|2l
zwyo;xXZ(&^&n3>ou_}#uEr#=`IXFuGaxX3~JM?(s^yZ1PjAiPyI}S(aU!Lh6>>*Ch
zS@{vClf_@{<>H6)ad6=IfYslj(Z>2Kbl=a~r)lIpL3E>38>+R3`7bdQ#>=yH>+1xsBkCPs
zSjo=rq%@MB)w45sJki=zFN{~*Q+2p*7Wr91UY-p}w5_Vj!Z7f`FNSuwOmn#}7t0W|LRX
zd@h5s@;5Vt`~t;vFejS)LO|Wv*!UG67la4{3}Ggm#;sn64+{wh!W@Rwrlv?`l4)Lp
zbNO@3Z7T0R`A>se;3=3MsA4iI=}>|2nf|IRQBC6K26Lfh7`P+c>p9A`93rPI;`YVF
zuq_qKb?C&xbNpb0T+bCI-Bm)RUFG!~wKCdX+-19hIh6?0S;}O!m(hGcndNj{bgC-j
z;?5UFl{~eUp)OMOVizg_XX8RR%c<8gwfi)gK;ehj&gN~j{dRUV>{gE3&kUxL3jTBn
z{obsvkKEZQoN;?xF_lK-OB~R8T(Fw3@8)TeN4lean?vVb?jE3GPyjO0l&HA1=8uGF
z+1Js2?(g?(-@kHkHN}0x%bXZ-ZW5q4!`Vwe)f3s6lk(6VVAsfH9Kj^bK<3FEL9lFC+#`*
zmpnVtUxv^zGgCcz^7*9*TFDB`4OS*|Y0r<)Qfp%2!0^O^cW<^cOE?+BT=rv0*OO1;
z@rSQ>T2DfWDcDy>msv@|w1m?{)C2FZ9Vfbi=P4R>+8Yk85Vh~pE}ovE!r_^SJ7fxQ
zY;ERf+=c0F;&6$-lCegB1pAyCmv+`33+s64Cx{#DrW-jU@rn}`E59ZAWz
zl#~M=G#xusCJfAxA_v-f3UAt673K`1ju&8C`qR$;zRfUQF2^ct1;?`Q3Oo|1!qEc)lIRI
zu_e_@5ZOi19rqAsQD~uDVGDgxw&~Fo-OAGo$YVH6U`j7?6r6Ic;Xys
zb(~vuJlxm!hS!xVR|tVu1dL%jZCdtb#jh7rs;`53mgn=Uw=-q8buP{ihexVySY$=^
zEz1_Ay-)G?FfmTnI(ly7U{V{j-ho+S-c@StdU#}d`;e}qtgOt<$Jl0iub7GPqe36u
zeI^w&_wZqyTxhkdlC8G3v+CXb1f<4%AB^JmoWgteaj6T_*xyr$qoSe3O&ngWY^`DN
zC?9sR@-MsBAD^paRmmj3?fLF*qs(Q|Qj-Oahc6bf-EsDM?qOE*7oLKe}8y$zN<_5~h@4->c4`#!gVLZ|=z&S=x
zCqj|X6G)qKB9JxV$+FbxhMnrMN59ma7#MrK`;f%MNWW*Qme=h-4b}YFx8R`Az~<&|
z_e40XpnpdfPDfOnZ@II1j){s*u&C`IGgp}+v9tdzvKl|?HJlu{hJ)mU`m2Ah=e`qj
z^p#1Pge0k#O#c$maYMH0j7J=PsyV*8A$UH4d9scdF`wkLxij`do#_1BPVKUJ`OlwM
zszX-YNjz-lhpO`B*4h(}$F(k|V{bd-4@r>p#ty_k#+IXO*Yi+R<--Y+KzWVVk^GV|
zj71mai3Mk1`5}xD+zZ;B1|Zx3hj60362YehriPB28JckHov6%WxTVMdUu5Wku!q{|
z2z%Stkq^-fY~WnWbO7jTklxe098Y!#
zU#t*vcbcESW^Adeb^jO>6Tqxp{l%spdFRxF*LClauvRIqfb-^y*LG}cgSio38kxb6
zPn8P(_IcTUir+>V`M+W{m*G`Pmyb_>C
zn(&mryH)q+dmx&gR>Zx~^}DrO0?V}292Y_P+61^~znWiKouqP>ckrZAKPEq+HhEa)
znPFeUJ#==jUpyd?reXV0=P(BV~Ik(R9$^X(Bt;
zt#$HBZlphaiI+q+H`CS3qrN+MCq@%DVFloH7CQ=^jc~CH!5NZw{!#ZSG)kqK8vHVO
zJ-*E)9FhxFWvKUOjZ|6?60lt1z==C^u$$dSVzpn$3@@1N^14(8w>5r8Y{9R?`4)r0
zoWYT##1IuezBsmhVx(Wx{S+-kL=6DW6L66RvfCHtg6c6Q;)+O5s9
z0FJ3RT^Ww~e0pcSz0LAja5eJQi_0!hh=db$YZd
z;&W$nJVROL4pJI;Q=gxLk>qz%A`Q{?Wvj?UVDt4UkwyI(h98<3X$}0522?m$jjosc
zfXm=0iKj2y*=9m;l?LgHHv93kGmde$2SFsw)cf+OE5dGpa#HI`qkBk*o(HGMQyJ9g
zxjU12DE6m4d*a>}C}!Ug)6Q~outxmp0z18HWJZmXx=)R=SC_ZnuGurg*_MDy^gD=0
zS{cj41RvGfaDlGA8?HIcUIay}B8TxqSS9czIbLYTG+v$^J=3D}>4{-#?WOXQS5WYc
z5Y`AKo*lk>v9G&5^BdDm?|0Zd^81#x#g63dB2o|^+>Y07Q*sJ-CkUbQgx4cei)Z
zxm@%_ylMW>vpaRZJ>Rm+L$}W3x@RSp5=!RIlus&f2g&y0t*z9;!sO%SHlq6*mRV#n
zDT2X#B|4(hUMQ?0^i{l8JlGUL+I{B&^^?bCJ#4h%
z_)6p<8(S68>0-hlk;A5%;ZTl0M0BR4a6`c1I@`tHPv2DQg}sD5{;0{J`Y=^izWRUM
zy>(dCU7I$%1q1{{5a|X5=|-fbEJ8#|8l(h~kZ$P~k(9JR8d2%)1_24_O-Xmhdu_e%
zd!A=zo|*6a-ud2{_xZzPA9BFnd;Qj0SDxp2-Bzse4Z3D@TIud|TCv~UY2_`asd+~*
za0%H<=sP|qt*uR!OD#fk({q0)?iCxmXxLC*MJQAg>sEUS*d4`Zmqnk>(@1EGG8wp=O-$X96*?6$iVJDc*_A9Gk|QHw0I9jk=U+Z98*IV{c^YulPodH04>a
zGDP5=I#qWa@$z^}W@u`ZPEq|ljW~9nzYByYae2?r=fpKeNR-5SsZJ9IaFoPH@mN@h
zHy!X5daXMI)X@PGp!q;MG&;re41!GH+d+7OBpr&ygNEQNo)Sd4Mopp`E-M*~>554bFV1yT_`tt2iq4WRKJUaJa2
zcmWdY4Fp1s_FpaL%9UR`^@br*KObh?++9IPaUEFw_^PlsTy)2C?kuZIWAF_hsi@lu
zuladSmSY)jvQCfarY@Eu-4q5l~JVI}6eRF(&B}QA6dz-!u>%o}Y;*+JZ
zLgv}U4Am?WUWKx2&<*xutnyuY3GN!&Y%z`=EmpO;2Y}dal%UH?{r2${>=;k^?GScZJ2DzwG_={y{8UdSqP$iPqAywwxkLhvBd8BEpVe
zS6COm$-2jespC=elBIZjB3tcr#R9-!&0EieaLn@*PQnATBidBLZi7zClE@E3^L;bg
zi0TzFSMEn^bX0?$h>C-)y1L#E$Pm>m*89X#=WAb;t;+V!a`aS6o4W1KJQO`$lArAq
z*2HgWXqfyI$(XNy!^~!;(70`K^ROrHsTuSAv2f~nf@J*=FM-a%Ca>imo9tzd#~u>G
z_6vdVAMKw**_tXy&w*T3NiCrTR1yJCS-QY{0EN{t_k%Zzqor$y$Jm%Y8ig*za-rpT%bnM;>=*iOy#Bfj
zWl9U=Uf<^j5OHAlWvSC9l|7S<`p^Nfn2x3=U7ykcLBc$`7sqQ)N#}g3NX_C`uO4VS
zZwm~TxjH&+Dmr1MKI-fk>@juuqE~1#RJ@VN{mQP7cltOk3=75labWMw#r`ZWVm^T)FZx=FamzWEak}$qeVMiX{r*|G+=A
zo;$kqXn>>Xg&nKuYcX%hy(d#KKPV?^b-&N%8qHlA*==H%_cU|#YcAdhW?S23Hl0{}
zT3I7;aied>wrME7P-mx%!;Iat}hf0BXyV0$aL
z?^XBn%r4p_yxh#j7k;xH32CXRh=2>Hp@m)e3i<;dRen8Xt6ckUOMM@Eon~mc)CR3?
z@o8LhuUVrks~9w`_Bui32dGE{aJTg+SDb!wq8>_NPrkW#ZQO+t+T0X0o=06~{j6BG
zgKihE9E^(?a?&4}Rbr>(;@Z>|FRrKG+>2oOp@&U_{oo`3gJBhc;YFI_N#YZr`@Azr
zn4T?*&@NquyIC(AklXyjpRK~cNYB!2?zb9ie04jkmU~1+#5@{&m#YH9^SBLJz$TTU
zyjOR;YY5-1xxHBuM1hJ06Tly79*?*)XX-JU(h+Iefh
z_(jJHYll{{$ZGCRgvEFoD1KNN}X3OGo@x^U@umk;+HutOG2><;Y+i*edrEc6j|LdherZd
zp(&mxz8C$XD?dNqrWGFm#~3s)aVZMBw@
z5Q~Lybo1?ggykoi^TK9bf=^KzJtn|1$~*i1hh)IB;6Rd%M_}7dkKy*(Yxhy|lw&H>7!?DvzVF#}|tb<2H3`W(2yo7qVf_Thgta>)g{G
z21-C4$to*HP6j}he8*FLb*YeNr_=)VZ+))mjOy~0O*9K3C!}d6*qPNB&B!izCN<##$T~lYxV(7^?kjA5MB1}$L=TA;v
zzr4_w8+L^Jo@cr;SW^}GbRd_*MD!SMXK5&;F>ENp1{j3Mmj_=q{jrqrs-Jw9ke6TPu)FoKKDvhDpKK;4128vC-5nFO=tDdKn
z2zHSL8IX~*^L&^_g7a
zO@WcIli7uf^q|PtalMdA@VvFIXN^yn8kT^9-IsjQq4>GYeeT)PaieWgHlBsxEaiLF
zXgNPV`(aKbj(@oc2@2fO(7w;lfLKiQ`r4^kxl+9AN^_H+dt?!&oCE&jW~&~ww|OP_
zcH_>J@Je$1dd{0DPtHTW$uev<0@V#-eNdF7Bfz#y6eUl1q_J^ZJo#u*JW*J)And2W
zKqw}G%RV0>wD?&ulB{Yx!gci!opXMO($h_!6*2J~*CiDy|Z_jCdj8wZF3{Kl~yXNY5ggVc!d
zvdB9WJ2+1kXxFvq{WC(8A}So0#KUXTb*sMHAU3tUoQj3g95
zjz?<~zkZAF0?0TvoA-a;IHmRYtf8sIm+bb~e+Go_L?Ud^W5m;y)K>-!dcS>J8%#O%
z9kLs%o)-C_|I&^*upJ4hlq@9xs3
zUR>1^PK@;M6eID-#|FmH4N%Uop4vNyWE-~l?iQpJ%RY1RRd2k~3?v4aAp@?;?h+wEms$!X=`de2ST
zNnoxK(>PAaoJn@uSd9aw(u~oAOrVTNKYS=093uTXl7ind5He0{=G%@dBi@QhB5xIb
zIAlN~`!XuZW@%74EwuSClspV#?CscY0e0VY!|>95nIo2KtX_CmQD=?6MN
zjx?JyLr~~Ig)|JDoL-RFKw)DtKE5ZfOQG0C)I@aK@o2?yZUP|A^+06wc{P10w90_$
z;TIftc4W+J=E+tz&YK{v0&=)seSHr=MTErDV~Y@pTLQ##jlC1s;)6^!o9~+T1$J|s
zlD*a^&T|d#kiAOB)M166QWqr`)pEF9zgx&Lx>*%jk$Kh$0j3pIN7ktFK)-XR{Msq2
ziyD*0!K-N16A>RS%Ij#Ga}_=SAw<=UYp%qG*Y^c{NVADzciUT?Z@L9CKF?7x6D`Nd
z1x$RJV4eY;2rji8K_-s?9nni5#!@?x7Mp4`XEj*idX3^*XDvsOe62#1)s3dk(a_ze
zB{%2@s_+34iH1ey%&;pH6%K{>$jG!iL`cW5+pq2?^S_xy3lK+QJv%JU=N%W&uRZ
zY2jlxsa;vJtGKT7_7~P5E|KA)Q)*#{B`;E4mvg8Bs0uux3u2zG7^%G_l2#IX^dj$A=pacxV*v#Bkw+&=^pzXla5$63hTb+p$LU*MImJXRAu
zm^UKhpEf+&t5b5a>$H5UxV<`lVIUMg41I2QJ_us+M9<2y(!J)bfXUs%?k_)_A%VGy
zd4Yng*UF9%v`5VLSIbsPaiPK+d4j6$6ff~EvXMNfLf|35M4=Kb6s!A)Ql#>DM=Mc?
z-a|cEy?9@^Ktk~-&;inENV^9nR?1duH)h)6n*g6Y_2D&BYU;%0#?Z)t0D#<0&cy0g
z7md4xRk-fxLn&f!_1l%f62=QphW(lB%XW(i&NAb0dya_=Rz0PK;sqJy_q@6dW0~1LuQ-TcuVv
zdf$kwE{Uu&h%B+MF5m*rqj=L?UIG2iU7rt49tu^a<(pkcaoniT(mZIGQ_hoE;pB{$
z!&Lpb1KTqwfB5(^N>L0|;5JRNkI9nTkB-Hk8g-tE;BBTkldCS_#cV2g6IAn%<7%GD
z5cx~!yPbEMNR=Ns_1euFmF1otUR-a;RNY(DqiKrcc^l^GIhW*Id>U~Y05KVoEw_pU
zA|P{#r8<1A>
zu5>@pANM})PMri~JJAXnI~!Zwr>+>oyH=dxRAOl7DHi&2d~iAEgF1Ce<+erhX;VCo
zXi=d|!fYL|H^XR1wFASGgx_Xl5Uf^-(1KT!q9c$@@6?Gba;Nkds6^*1&SysHbfy2i
zV9=_wJH_6M?4FsKffJ^*4yuc38TkZoL2FPkglg9Jy*&xq$-Q+X*^`6E+ar!A;CArv
zD)uhsikIdhw|*Kfjk%LSod(VuLC|gS`m_8-wq2wrm-2Y_O%vLC`BTfOgzPi%{L0>r@5w!!{;PPF{A#d?Qf@+Yzm>%_^Nkoy>4Wn+`6`Pd7!
zIg%-Kn~~Al+d=1U-F7%V69|_h4PqOB^?ysh0jw!dU$rqAKLeVw*ceg@4QW2_i=Ar)
zwLN5Yv>jxr-+ef+Hpt_Dwv_n%_BAU$rZYx0*+X`q`itXM@R;~hoIZ
zi)qXSITzPewUd=sU^p`ewbyWF8qfC4yM^a`_0T~$!B^t=XP1!e)>R4t%fO&(qk+)V
zu>QamB1w02XRR(mV(R52V`NnC#X?=rXySFuuF6k4rmRxt2ij-IVS|ScLe&pICs$`flcfHj2H@
zj49_>SUGDx&~ChVnHV_z4x_$dzohJxfj0|h3!D3wrDpG(W~`x~ZW8g%?_Y!)C2It#cur7q>IU&9kgp&Gk=Yx7+~a7HPZ6j7-RNYL
z3#|s#K<(8NJ|mD{2DK$7&=;}pktI!oCOdHKBMU6-;BO$3=K{{FFBm@6Vb@c@XSvD8
z^PXj4SxWNeO%&F7$A2#4IT16?TApV`*z2dc*G0yCYUmVGI2*lvZmzX)G2hd8z~G)e
zjHl51B91_E`Jp+yH|KqosEOUfdk-ImBlnpLcB{FBB0X`g7|-NZ-l1AMj7)qPc(83T
zxm3s-`GR0V5n=K!z4+v@Eyf?u0=o(=^!Qk__{6`vOnEHP9Xx4@R7lM2#zREWQ@hI0
zI8=;@ftDt00OtfHvjDo20RXtt2VW6>t{NNE7`TmFFTukQGbsUrToWYx;XvCqJUQCG
zb^A6-hm~JJ8tOYxE(NRmK8is%5`gn?z*0dDsvwD(<;;6yW8w{-ysfRz6krp4$4UTm
z;U#yzODbuY92MC+$K&hlv~wWly}DMRfhBs82`9=(RCoGSWF|ITO|?BJ`^)tg^~B
z=JRdMpCS$x(kyT=j&5P6@PSKQk;sek)V)FE1-(W|x(7TlZV3^}>fdD_XLiM5hfYkl
z(2gA+1YudB_{aA0C15(Z;}S$pJd15co56@rVgw$G15r;%*t^7f+j@MLHuLPmZl6H5P3lP=r&(FVywKpFri_`RLl
z;P*j;{>@lm$mUx$Io5E}L_tAA!tyj;rhe9qMDJpucPVKt5(vo2LintL+sjVP
zHX=}eRYfebp#3O~jhFC`ZIq--G~YW;yIuV}DqZ>hLx&Gs0r$?`QoJL|7;&6HNJ>fy
zvi1S`+}Ks)Pvei?-u`8mkA?{~4MOD65>Ch2n8xnY5L2Z)0
zT;h1d=e|ep&RpeSyJ>Dt4l(NUQhc!tbXL8RD-Xo@&xO7}6J>$P~TOtADGF-;mJmQ_(;+vQ06cE359=>BHADRvLq4_TYzQH%NrwOkn95JGP
z^C@BZ@71C1Fg#io_?Aa}<9I#wzqiCfUjgIK_dtaYl8MgDGLNPrtb$R$zovDzU+9<5
z`gOp13DV7n$zSii2C+GiSMmZ#zstcfaI<+p&I?Rq(eu2}U)y2dEklRe@jpKky>mq2
zUN)CuI%x@LEdTX}sNXPrkoWZBzy6^wj;uDj1Sbni4O~Mz2?~&3cuq6gr7k=GSt?w7
zCv^C*CY0nnU^bx!a1oLX2?QM(9!QoZR|7)<>>-cMluX+yN);CL?+k%D+0B0*(#ob+
zEGqc`Hv$e10c5q(pdUkshspD}?<%l;&q8s>ntkD4f1Q3Bo@GQR6zSSXI0l(__Pasa
zamMa_db$y4qd;kdgM>>r^!?q~DbRba2Hp<_B96}#U;JR65xRhQppGO3DDuj~6%phv
z+$_J`MU?ho<-r0QbQ3T@kV_W6$T}(-uk}4AWHW_<3SC~lyeJClEd?2he>}!NUyfJ_
zdLf#IlFB)RK5#r5tAJboY^9Iz3ol=E7pU4QgVzRCU>r%aU44KYt-&OSG^koQ0olSD
zB#l5F^hG&fg)e}7w6IsVVm<7lA+(~QtO)|AwIE2i1|=-RiE3|v=nJXk>4rg^Z~=fm
zpb-KWPtzW?eMgx0tV=OYkm-cjug)MG)kRRIm1`csA0hwidrl7EDD;Bjop0YeudH#^
zX7)Jei`{WYS*mT@&b&{E{GmB>m6a6@0RSKfo&^O?W_J&PM}8Ioc&DpSsYWT{B3Hpb
z$U>zc?6eXUsXKZ)ux{>o2v$`V(h8A9}Ml=?f-lR
zDnBM>-Skr$9}t)4NOfYh3Y)iHEl~b=5O9%gUU`!FS)ve$Q=c}E6`PEbYx0Bl$qwGC
zZQm
zWoX+EI%8Wy^-SrsN_eN#1oSfRD_yA|?x+pXQq6r)oFiKFptzF9FY0jJi~J@I8f`*1
zHInPeD(f(-C8ajxWN<}LG_v;g&|u*lZxGZ$Y0bxYih!6TA{8W&;I^PfXWWB5ZF*|2
z(*(LsJeGspaKteope~fhM_t}DOzBPO&BN4vftnkfZB?n{{n|Dee5Qx|Odp6FsOb>-UAJIWuwJ##7k`0iv_f^BK}@XTTW;(x(}Zu9fT^(Q
zM?q|-88%~*%;WlQ(aXeuIzh>(kc4wb8$SfeV`wHW$}iSA;p$fgCQKi4f6~jzG~f9s#<82O)vmW2wkSMj)N{XxpE6+j5}mKGouk>6QOSLB
z?@J-c_v9Mk+Vy3Fi(}2|v;lQtihP&t$0)H`Ct#$30}lYXBPs~b>fl0jr3(J?Z65hw(!OcZ
z^7-^^SJ!r?oC_A!Q1}`@D%fj6GAddYWs$*FK5$8)w3$hSI6;0*;~Ag%V`1WHib;J_
z<0@Mw$_G|2FYjKw?`f;CZ{pW5!l_4w{oSNLOmx%c2=`OIs$P`NgJlbV!V3>34+L+t
zx34juGTkBAWp~t!i!|L4o#ADxGTzv;m9=3@IkGd?!!6rlUi~0Xr!MTJF-3+pD`|!J
zs;!pH8*dZ;p^bQ0wVv10RflW&L&Ef{*Re_P?s3jf`tOz`vmC1O
zC$k&~_@C6b+tvk7>6)dk?K|V0(;(5;PL;`ZNnr>+To_2dbtv)i2ZnokcCvFMTXx-2
zsScrgu$EbA?&6pSv@cNs10_H~8a_Mj7%kFs9N|mejO8-8Rpv0)h0zhPHmmDs6IE^4
zvhSx5dH0u{)CzLJ+5WOHshE$8PA(C8mWJaUSrPG@bTOq&NhK>PRk@?g*^qDjY>hcT
z+&+J%?1=-X6m8>@X5!y-AOUZ#waVL>=*;|{@
z*4Zg1C)b!~iuF6Xh{olRpIpeSpG4a8)xnONyZLh(2$2)|`z|-V9!k=d)-fPzeCQlz
zUHlU*f?i)!>0L2e7To|gmI&LSs%c?!3PXw2QH#Mz5H(t&rHxm-@o4c)=UL<)=_7;T
zeN&^DGWPanIKj5@(c`?%ZY6Ju-zRwz{=p|Os4|MbJ{Xup8!yvf;b`ox~W)0umGmV{V#O7jHO2Cj*(v(v#_a
zzIch{S%b#wA;b$IjC%XC#B*N)gdg|#km7%`k*}#_-x*GKiZ-nm>&nNm>B7a9^se!~
zTIF~C-OSN~dvL3e+VR094=T1kQeF3#{d`Kc#D|JR>P{(BXZU}Yz0eTrck+_znifs`
z{d97w-(;%yF)k_QrsZ-Pj&;(h^qy^?#&sxBZb*|>x&zoJ9(zhlAtvA|})3r@zisWhZa<5vM&*}MIe?jTR5gVN@
zZ=(I-r>&m@aY1{Ew%QtVgz7O%mPLM{l#bo>$C2`-|BAg|{cG><6{g)38gVPp-0yF1
zKaB4*l_|zi@0-+t1tMp$Uq%l!uj;I5T1q90-r*EUD)lXg
zrQJ~3TOa*B-3jqKvq>|NM)$HV;xhIsz%VmVXUor6Al}ACnewcVxFWvhzGpXVnx5&rX?v@_ptQ;Ji9UXKtkySkw`BzJsi7p^&znH3Gv~Jv=UzT4TqU?zd_GaMaE>Kb
zbDtxsDV8l*Yj~g30Dl@&zs-1tC5k-Oyi_|)N0xn)IhOdS#Yok&b%A0j``!SRGwU@j
zkv!rVp3ULRSX(iboh&m^l`RXrPAZI{$cS-d#MTdjfiIX{b7