From d3546d92a0daa2073c9e063df0e78499d36661bb Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Mon, 13 Nov 2023 10:59:15 -0500 Subject: [PATCH 1/3] chore: add eslint-utils wrappers around deprecated ESLint methods --- .../src/rules/plugin-test-formatting.ts | 3 +- .../eslint-plugin-tslint/src/rules/config.ts | 9 +++- .../src/rules/adjacent-overload-signatures.ts | 3 +- .../eslint-plugin/src/rules/array-type.ts | 3 +- .../eslint-plugin/src/rules/await-thenable.ts | 3 +- .../eslint-plugin/src/rules/ban-ts-comment.ts | 3 +- .../src/rules/ban-tslint-comment.ts | 3 +- packages/eslint-plugin/src/rules/ban-types.ts | 3 +- .../eslint-plugin/src/rules/block-spacing.ts | 3 +- .../eslint-plugin/src/rules/brace-style.ts | 3 +- .../src/rules/class-literal-property-style.ts | 5 +- .../src/rules/class-methods-use-this.ts | 3 +- .../eslint-plugin/src/rules/comma-dangle.ts | 3 +- .../eslint-plugin/src/rules/comma-spacing.ts | 3 +- .../rules/consistent-generic-constructors.ts | 3 +- .../rules/consistent-indexed-object-style.ts | 5 +- .../src/rules/consistent-type-assertions.ts | 9 ++-- .../src/rules/consistent-type-definitions.ts | 20 ++++---- .../src/rules/consistent-type-exports.ts | 3 +- .../src/rules/consistent-type-imports.ts | 8 ++- .../rules/explicit-function-return-type.ts | 3 +- .../rules/explicit-member-accessibility.ts | 3 +- .../rules/explicit-module-boundary-types.ts | 5 +- .../src/rules/func-call-spacing.ts | 3 +- packages/eslint-plugin/src/rules/indent.ts | 3 +- .../eslint-plugin/src/rules/key-spacing.ts | 3 +- .../src/rules/keyword-spacing.ts | 3 +- .../src/rules/lines-around-comment.ts | 3 +- .../src/rules/member-delimiter-style.ts | 3 +- .../src/rules/member-ordering.ts | 7 +-- .../src/rules/method-signature-style.ts | 3 +- .../src/rules/naming-convention.ts | 19 +++---- .../src/rules/no-array-constructor.ts | 3 +- .../src/rules/no-base-to-string.ts | 3 +- .../rules/no-confusing-non-null-assertion.ts | 3 +- .../src/rules/no-confusing-void-expression.ts | 3 +- .../rules/no-duplicate-type-constituents.ts | 3 +- .../src/rules/no-dynamic-delete.ts | 3 +- .../src/rules/no-empty-interface.ts | 11 +++-- .../src/rules/no-extra-parens.ts | 3 +- .../src/rules/no-implied-eval.ts | 7 +-- .../src/rules/no-import-type-side-effects.ts | 3 +- .../src/rules/no-inferrable-types.ts | 3 +- .../src/rules/no-invalid-void-type.ts | 3 +- .../eslint-plugin/src/rules/no-loop-func.ts | 3 +- .../src/rules/no-meaningless-void-operator.ts | 3 +- .../eslint-plugin/src/rules/no-mixed-enums.ts | 3 +- .../eslint-plugin/src/rules/no-namespace.ts | 3 +- ...no-non-null-asserted-nullish-coalescing.ts | 5 +- .../src/rules/no-non-null-assertion.ts | 3 +- .../eslint-plugin/src/rules/no-redeclare.ts | 7 +-- .../src/rules/no-require-imports.ts | 3 +- packages/eslint-plugin/src/rules/no-shadow.ts | 3 +- .../no-unnecessary-boolean-literal-compare.ts | 3 +- .../src/rules/no-unnecessary-condition.ts | 3 +- .../src/rules/no-unnecessary-qualifier.ts | 3 +- .../rules/no-unnecessary-type-assertion.ts | 3 +- .../rules/no-unnecessary-type-constraint.ts | 8 ++- .../rules/no-unsafe-declaration-merging.ts | 5 +- .../src/rules/no-unsafe-member-access.ts | 3 +- .../eslint-plugin/src/rules/no-unused-vars.ts | 16 ++++-- .../src/rules/no-use-before-define.ts | 3 +- .../src/rules/no-useless-empty-export.ts | 3 +- .../src/rules/no-var-requires.ts | 3 +- .../non-nullable-type-assertion-style.ts | 3 +- .../src/rules/object-curly-spacing.ts | 15 +++--- .../rules/padding-line-between-statements.ts | 8 +-- .../src/rules/parameter-properties.ts | 3 +- .../src/rules/prefer-enum-initializers.ts | 3 +- .../eslint-plugin/src/rules/prefer-for-of.ts | 8 ++- .../src/rules/prefer-function-type.ts | 3 +- .../src/rules/prefer-includes.ts | 3 +- .../src/rules/prefer-namespace-keyword.ts | 3 +- .../src/rules/prefer-nullish-coalescing.ts | 3 +- .../src/rules/prefer-optional-chain.ts | 3 +- .../src/rules/prefer-readonly.ts | 3 +- .../src/rules/prefer-reduce-type-parameter.ts | 7 +-- .../src/rules/prefer-regexp-exec.ts | 5 +- .../rules/prefer-string-starts-ends-with.ts | 5 +- .../src/rules/prefer-ts-expect-error.ts | 3 +- .../src/rules/promise-function-async.ts | 3 +- .../eslint-plugin/src/rules/require-await.ts | 3 +- .../eslint-plugin/src/rules/return-await.ts | 3 +- .../src/rules/sort-type-constituents.ts | 3 +- .../src/rules/space-before-blocks.ts | 3 +- .../src/rules/space-before-function-paren.ts | 3 +- .../src/rules/space-infix-ops.ts | 3 +- .../src/rules/strict-boolean-expressions.ts | 3 +- .../src/rules/switch-exhaustiveness-check.ts | 3 +- .../src/rules/triple-slash-reference.ts | 3 +- .../src/rules/type-annotation-spacing.ts | 3 +- .../eslint-plugin/src/rules/unbound-method.ts | 3 +- .../src/rules/unified-signatures.ts | 3 +- .../src/util/collectUnusedVariables.ts | 5 +- .../no-unused-vars-eslint.test.ts | 1 + .../tests/util/getWrappedCode.test.ts | 3 +- .../tests/util/getWrappingFixer.test.ts | 5 +- .../tests/util/isNodeEqual.test.ts | 3 +- packages/utils/src/eslint-utils/context.ts | 49 +++++++++++++++++++ packages/utils/src/eslint-utils/index.ts | 1 + 100 files changed, 322 insertions(+), 152 deletions(-) create mode 100644 packages/utils/src/eslint-utils/context.ts 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 f55b9e96950c..7656fa4ccf5c 100644 --- a/packages/eslint-plugin-internal/src/rules/plugin-test-formatting.ts +++ b/packages/eslint-plugin-internal/src/rules/plugin-test-formatting.ts @@ -2,6 +2,7 @@ import prettier from '@prettier/sync'; import { getContextualType } from '@typescript-eslint/type-utils'; import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES, ESLintUtils } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule } from '../util'; @@ -147,7 +148,7 @@ export default createRule({ }, ], create(context, [{ formatWithPrettier }]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const services = ESLintUtils.getParserServices(context); const checker = services.program.getTypeChecker(); diff --git a/packages/eslint-plugin-tslint/src/rules/config.ts b/packages/eslint-plugin-tslint/src/rules/config.ts index 23b7558b80fb..742e84c01c70 100644 --- a/packages/eslint-plugin-tslint/src/rules/config.ts +++ b/packages/eslint-plugin-tslint/src/rules/config.ts @@ -1,4 +1,9 @@ import { ESLintUtils } from '@typescript-eslint/utils'; +import { + getCwd, + getFilename, + getSourceCode, +} from '@typescript-eslint/utils/eslint-utils'; import path from 'path'; import type { RuleSeverity } from 'tslint'; import { Configuration } from 'tslint'; @@ -119,8 +124,8 @@ export default createRule({ context, [{ rules: tslintRules, rulesDirectory: tslintRulesDirectory, lintFile }], ) { - const fileName = path.resolve(context.getCwd(), context.getFilename()); - const sourceCode = context.getSourceCode().text; + const fileName = path.resolve(getCwd(context), getFilename(context)); + const sourceCode = getSourceCode(context).text; const services = ESLintUtils.getParserServices(context); const program = services.program; diff --git a/packages/eslint-plugin/src/rules/adjacent-overload-signatures.ts b/packages/eslint-plugin/src/rules/adjacent-overload-signatures.ts index 8af3cee44af2..8c1c30b24c3c 100644 --- a/packages/eslint-plugin/src/rules/adjacent-overload-signatures.ts +++ b/packages/eslint-plugin/src/rules/adjacent-overload-signatures.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule, getNameFromMember, MemberNameType } from '../util'; @@ -30,7 +31,7 @@ export default createRule({ }, defaultOptions: [], create(context) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); interface Method { name: string; diff --git a/packages/eslint-plugin/src/rules/array-type.ts b/packages/eslint-plugin/src/rules/array-type.ts index bc45356ae4ab..cb61669ff6b6 100644 --- a/packages/eslint-plugin/src/rules/array-type.ts +++ b/packages/eslint-plugin/src/rules/array-type.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule, isParenthesized } from '../util'; @@ -135,7 +136,7 @@ export default createRule({ }, ], create(context, [options]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const defaultOption = options.default; const readonlyOption = options.readonly ?? defaultOption; diff --git a/packages/eslint-plugin/src/rules/await-thenable.ts b/packages/eslint-plugin/src/rules/await-thenable.ts index 37b6ad1c6dd4..e2c3767e9130 100644 --- a/packages/eslint-plugin/src/rules/await-thenable.ts +++ b/packages/eslint-plugin/src/rules/await-thenable.ts @@ -1,4 +1,5 @@ import type { TSESLint } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import * as tsutils from 'ts-api-utils'; import { @@ -50,7 +51,7 @@ export default createRule({ { messageId: 'removeAwait', fix(fixer): TSESLint.RuleFix { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const awaitKeyword = nullThrows( sourceCode.getFirstToken(node, isAwaitKeyword), NullThrowsReasons.MissingToken('await', 'await expression'), diff --git a/packages/eslint-plugin/src/rules/ban-ts-comment.ts b/packages/eslint-plugin/src/rules/ban-ts-comment.ts index 4413af5bf1a3..5c70c7b9179b 100644 --- a/packages/eslint-plugin/src/rules/ban-ts-comment.ts +++ b/packages/eslint-plugin/src/rules/ban-ts-comment.ts @@ -1,4 +1,5 @@ import { AST_TOKEN_TYPES, type TSESLint } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule, getStringLength } from '../util'; @@ -102,7 +103,7 @@ export default createRule<[Options], MessageIds>({ /^\/*\s*@ts-(?expect-error|ignore|check|nocheck)(?.*)/; const commentDirectiveRegExMultiLine = /^\s*(?:\/|\*)*\s*@ts-(?expect-error|ignore|check|nocheck)(?.*)/; - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const descriptionFormats = new Map(); for (const directive of [ diff --git a/packages/eslint-plugin/src/rules/ban-tslint-comment.ts b/packages/eslint-plugin/src/rules/ban-tslint-comment.ts index 4e3814245617..32189a2e3f1f 100644 --- a/packages/eslint-plugin/src/rules/ban-tslint-comment.ts +++ b/packages/eslint-plugin/src/rules/ban-tslint-comment.ts @@ -1,4 +1,5 @@ import { AST_TOKEN_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule } from '../util'; @@ -31,7 +32,7 @@ export default createRule({ }, defaultOptions: [], create: context => { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); return { Program(): void { const comments = sourceCode.getAllComments(); diff --git a/packages/eslint-plugin/src/rules/ban-types.ts b/packages/eslint-plugin/src/rules/ban-types.ts index 7e81dd58cde9..574c16937e98 100644 --- a/packages/eslint-plugin/src/rules/ban-types.ts +++ b/packages/eslint-plugin/src/rules/ban-types.ts @@ -1,5 +1,6 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule, objectReduceKey } from '../util'; @@ -218,7 +219,7 @@ export default createRule({ function checkBannedTypes( typeNode: TSESTree.Node, - name = stringifyNode(typeNode, context.getSourceCode()), + name = stringifyNode(typeNode, getSourceCode(context)), ): void { const bannedType = bannedTypes.get(name); diff --git a/packages/eslint-plugin/src/rules/block-spacing.ts b/packages/eslint-plugin/src/rules/block-spacing.ts index f66179002db9..d611a7f44316 100644 --- a/packages/eslint-plugin/src/rules/block-spacing.ts +++ b/packages/eslint-plugin/src/rules/block-spacing.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_TOKEN_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import type { InferMessageIdsTypeFromRule, @@ -30,7 +31,7 @@ export default createRule({ defaultOptions: ['always'], create(context, [whenToApplyOption]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const baseRules = baseRule.create(context); const always = whenToApplyOption !== 'never'; const messageId = always ? 'missing' : 'extra'; diff --git a/packages/eslint-plugin/src/rules/brace-style.ts b/packages/eslint-plugin/src/rules/brace-style.ts index 2e471cb88532..412065b91ff5 100644 --- a/packages/eslint-plugin/src/rules/brace-style.ts +++ b/packages/eslint-plugin/src/rules/brace-style.ts @@ -1,4 +1,5 @@ import type { TSESTree } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import type { InferMessageIdsTypeFromRule, @@ -32,7 +33,7 @@ export default createRule({ context.options; const isAllmanStyle = style === 'allman'; - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const rules = baseRule.create(context); /** 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 d771d4bb273d..ec5df76bb61a 100644 --- a/packages/eslint-plugin/src/rules/class-literal-property-style.ts +++ b/packages/eslint-plugin/src/rules/class-literal-property-style.ts @@ -1,5 +1,6 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule } from '../util'; @@ -95,7 +96,7 @@ export default createRule({ { messageId: 'preferFieldStyleSuggestion', fix(fixer): TSESLint.RuleFix { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const name = sourceCode.getText(node.key); let text = ''; @@ -130,7 +131,7 @@ export default createRule({ { messageId: 'preferGetterStyleSuggestion', fix(fixer): TSESLint.RuleFix { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const name = sourceCode.getText(node.key); let text = ''; diff --git a/packages/eslint-plugin/src/rules/class-methods-use-this.ts b/packages/eslint-plugin/src/rules/class-methods-use-this.ts index 3ed2667fe5a5..39b295163040 100644 --- a/packages/eslint-plugin/src/rules/class-methods-use-this.ts +++ b/packages/eslint-plugin/src/rules/class-methods-use-this.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule, @@ -99,7 +100,7 @@ export default createRule({ }; let stack: Stack | undefined; - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); function pushContext( member?: TSESTree.MethodDefinition | TSESTree.PropertyDefinition, diff --git a/packages/eslint-plugin/src/rules/comma-dangle.ts b/packages/eslint-plugin/src/rules/comma-dangle.ts index 5edc00499041..8ceb2a8c0efa 100644 --- a/packages/eslint-plugin/src/rules/comma-dangle.ts +++ b/packages/eslint-plugin/src/rules/comma-dangle.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import type { InferMessageIdsTypeFromRule, @@ -94,7 +95,7 @@ export default createRule({ defaultOptions: ['never'], create(context, [options]) { const rules = baseRule.create(context); - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const normalizedOptions = normalizeOptions(options); const predicate = { diff --git a/packages/eslint-plugin/src/rules/comma-spacing.ts b/packages/eslint-plugin/src/rules/comma-spacing.ts index 9c6e64cfc5c8..a424efed9dec 100644 --- a/packages/eslint-plugin/src/rules/comma-spacing.ts +++ b/packages/eslint-plugin/src/rules/comma-spacing.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_TOKEN_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule, @@ -55,7 +56,7 @@ export default createRule({ }, ], create(context, [{ before: spaceBefore, after: spaceAfter }]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const tokensAndComments = sourceCode.tokensAndComments; const ignoredTokens = new Set(); diff --git a/packages/eslint-plugin/src/rules/consistent-generic-constructors.ts b/packages/eslint-plugin/src/rules/consistent-generic-constructors.ts index 8719d0b5dc5d..00d3b4a35c8e 100644 --- a/packages/eslint-plugin/src/rules/consistent-generic-constructors.ts +++ b/packages/eslint-plugin/src/rules/consistent-generic-constructors.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule } from '../util'; @@ -31,7 +32,7 @@ export default createRule({ }, defaultOptions: ['constructor'], create(context, [mode]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); return { 'VariableDeclarator,PropertyDefinition,:matches(FunctionDeclaration,FunctionExpression) > AssignmentPattern'( node: 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 5aece3ea4802..a5572ba3ff1d 100644 --- a/packages/eslint-plugin/src/rules/consistent-indexed-object-style.ts +++ b/packages/eslint-plugin/src/rules/consistent-indexed-object-style.ts @@ -1,5 +1,6 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES, ASTUtils } from '@typescript-eslint/utils'; +import { getScope, getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule } from '../util'; @@ -28,7 +29,7 @@ export default createRule({ }, defaultOptions: ['record'], create(context, [mode]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); function checkMembers( members: TSESTree.TypeElement[], @@ -67,7 +68,7 @@ export default createRule({ } if (parentId) { - const scope = context.getScope(); + const scope = getScope(context); const superVar = ASTUtils.findVariable(scope, parentId.name); if (superVar) { const isCircular = superVar.references.some( diff --git a/packages/eslint-plugin/src/rules/consistent-type-assertions.ts b/packages/eslint-plugin/src/rules/consistent-type-assertions.ts index 0c3883f81809..f48b61a91136 100644 --- a/packages/eslint-plugin/src/rules/consistent-type-assertions.ts +++ b/packages/eslint-plugin/src/rules/consistent-type-assertions.ts @@ -1,5 +1,6 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import * as ts from 'typescript'; import { @@ -90,7 +91,7 @@ export default createRule({ }, ], create(context, [options]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const parserServices = getParserServices(context, true); function isConst(node: TSESTree.TypeNode): boolean { @@ -254,9 +255,9 @@ export default createRule({ fixer.replaceText(node, getTextWithParentheses(node.expression)), fixer.insertTextAfter( node, - ` satisfies ${context - .getSourceCode() - .getText(node.typeAnnotation)}`, + ` satisfies ${getSourceCode(context).getText( + node.typeAnnotation, + )}`, ), ], }); diff --git a/packages/eslint-plugin/src/rules/consistent-type-definitions.ts b/packages/eslint-plugin/src/rules/consistent-type-definitions.ts index 2a9acedd14a5..8fb6f400b446 100644 --- a/packages/eslint-plugin/src/rules/consistent-type-definitions.ts +++ b/packages/eslint-plugin/src/rules/consistent-type-definitions.ts @@ -1,5 +1,9 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES, AST_TOKEN_TYPES } from '@typescript-eslint/utils'; +import { + getAncestors, + getSourceCode, +} from '@typescript-eslint/utils/eslint-utils'; import { createRule } from '../util'; @@ -26,21 +30,19 @@ export default createRule({ }, defaultOptions: ['interface'], create(context, [option]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); /** * Iterates from the highest parent to the currently traversed node * to determine whether any node in tree is globally declared module declaration */ function isCurrentlyTraversedNodeWithinModuleDeclaration(): boolean { - return context - .getAncestors() - .some( - node => - node.type === AST_NODE_TYPES.TSModuleDeclaration && - node.declare && - node.global, - ); + return getAncestors(context).some( + node => + node.type === AST_NODE_TYPES.TSModuleDeclaration && + node.declare && + node.global, + ); } return { diff --git a/packages/eslint-plugin/src/rules/consistent-type-exports.ts b/packages/eslint-plugin/src/rules/consistent-type-exports.ts index 36e27f91d73a..4dc660f3ca01 100644 --- a/packages/eslint-plugin/src/rules/consistent-type-exports.ts +++ b/packages/eslint-plugin/src/rules/consistent-type-exports.ts @@ -1,5 +1,6 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { SymbolFlags } from 'typescript'; import { @@ -74,7 +75,7 @@ export default createRule({ ], create(context, [{ fixMixedExportsWithInlineTypeSpecifier }]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const sourceExportsMap: Record = {}; const services = getParserServices(context); diff --git a/packages/eslint-plugin/src/rules/consistent-type-imports.ts b/packages/eslint-plugin/src/rules/consistent-type-imports.ts index d6128fafb42d..b9cb31dad927 100644 --- a/packages/eslint-plugin/src/rules/consistent-type-imports.ts +++ b/packages/eslint-plugin/src/rules/consistent-type-imports.ts @@ -1,5 +1,9 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { + getDeclaredVariables, + getSourceCode, +} from '@typescript-eslint/utils/eslint-utils'; import { createRule, @@ -104,7 +108,7 @@ export default createRule({ const prefer = option.prefer ?? 'type-imports'; const disallowTypeAnnotations = option.disallowTypeAnnotations !== false; const fixStyle = option.fixStyle ?? 'separate-type-imports'; - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const sourceImportsMap: Record = {}; @@ -168,7 +172,7 @@ export default createRule({ continue; } - const [variable] = context.getDeclaredVariables(specifier); + const [variable] = getDeclaredVariables(context, specifier); if (variable.references.length === 0) { unusedSpecifiers.push(specifier); } else { 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 e72079c064b8..d8bc83db4701 100644 --- a/packages/eslint-plugin/src/rules/explicit-function-return-type.ts +++ b/packages/eslint-plugin/src/rules/explicit-function-return-type.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule } from '../util'; import { @@ -98,7 +99,7 @@ export default createRule({ }, ], create(context, [options]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); function isAllowedFunction( node: | TSESTree.ArrowFunctionExpression diff --git a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts index ff99eb77b4a8..b8c260668780 100644 --- a/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts +++ b/packages/eslint-plugin/src/rules/explicit-member-accessibility.ts @@ -1,5 +1,6 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES, AST_TOKEN_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule, getNameFromMember } from '../util'; @@ -98,7 +99,7 @@ export default createRule({ }, defaultOptions: [{ accessibility: 'explicit' }], create(context, [option]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const baseCheck: AccessibilityLevel = option.accessibility ?? 'explicit'; const overrides = option.overrides ?? {}; const ctorCheck = overrides.constructors ?? baseCheck; 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 d2cb5f5306f8..c54601546d77 100644 --- a/packages/eslint-plugin/src/rules/explicit-module-boundary-types.ts +++ b/packages/eslint-plugin/src/rules/explicit-module-boundary-types.ts @@ -1,6 +1,7 @@ import { DefinitionType } from '@typescript-eslint/scope-manager'; import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getScope, getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule, isFunction } from '../util'; import type { @@ -98,7 +99,7 @@ export default createRule({ }, ], create(context, [options]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); // tracks all of the functions we've already checked const checkedFunctions = new Set(); @@ -294,7 +295,7 @@ export default createRule({ } function followReference(node: TSESTree.Identifier): void { - const scope = context.getScope(); + const scope = getScope(context); const variable = scope.set.get(node.name); /* istanbul ignore if */ if (!variable) { return; diff --git a/packages/eslint-plugin/src/rules/func-call-spacing.ts b/packages/eslint-plugin/src/rules/func-call-spacing.ts index 95007fdcd3df..a0645e640409 100644 --- a/packages/eslint-plugin/src/rules/func-call-spacing.ts +++ b/packages/eslint-plugin/src/rules/func-call-spacing.ts @@ -1,4 +1,5 @@ import type { TSESTree } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule, @@ -74,7 +75,7 @@ export default createRule({ }, defaultOptions: ['never', {}], create(context, [option, config]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const text = sourceCode.getText(); /** diff --git a/packages/eslint-plugin/src/rules/indent.ts b/packages/eslint-plugin/src/rules/indent.ts index ae8f6f60415d..b50d6b71814a 100644 --- a/packages/eslint-plugin/src/rules/indent.ts +++ b/packages/eslint-plugin/src/rules/indent.ts @@ -7,6 +7,7 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import type { InferMessageIdsTypeFromRule, @@ -378,7 +379,7 @@ export default createRule({ }, TSMappedType(node: TSESTree.TSMappedType) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const squareBracketStart = sourceCode.getTokenBefore( node.typeParameter, )!; diff --git a/packages/eslint-plugin/src/rules/key-spacing.ts b/packages/eslint-plugin/src/rules/key-spacing.ts index 707c9dc4431b..2ca8408b2601 100644 --- a/packages/eslint-plugin/src/rules/key-spacing.ts +++ b/packages/eslint-plugin/src/rules/key-spacing.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import type { InferMessageIdsTypeFromRule, @@ -50,7 +51,7 @@ export default createRule({ defaultOptions: [{}], create(context, [options]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const baseRules = baseRule.create(context); /** diff --git a/packages/eslint-plugin/src/rules/keyword-spacing.ts b/packages/eslint-plugin/src/rules/keyword-spacing.ts index 50fbdc18d22b..96212d794122 100644 --- a/packages/eslint-plugin/src/rules/keyword-spacing.ts +++ b/packages/eslint-plugin/src/rules/keyword-spacing.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES, AST_TOKEN_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import type { JSONSchema4 } from '@typescript-eslint/utils/json-schema'; import type { @@ -49,7 +50,7 @@ export default createRule({ defaultOptions: [{}], create(context, [{ after, overrides }]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const baseRules = baseRule.create(context); return { ...baseRules, diff --git a/packages/eslint-plugin/src/rules/lines-around-comment.ts b/packages/eslint-plugin/src/rules/lines-around-comment.ts index 1855c8ae5b8c..58c791f83ea3 100644 --- a/packages/eslint-plugin/src/rules/lines-around-comment.ts +++ b/packages/eslint-plugin/src/rules/lines-around-comment.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES, AST_TOKEN_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import type { InferMessageIdsTypeFromRule, @@ -148,7 +149,7 @@ export default createRule({ const defaultIgnoreRegExp = COMMENTS_IGNORE_PATTERN; const customIgnoreRegExp = new RegExp(options.ignorePattern ?? '', 'u'); - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const comments = sourceCode.getAllComments(); const lines = sourceCode.lines; diff --git a/packages/eslint-plugin/src/rules/member-delimiter-style.ts b/packages/eslint-plugin/src/rules/member-delimiter-style.ts index 2a0880cd21fb..dece8cb21063 100644 --- a/packages/eslint-plugin/src/rules/member-delimiter-style.ts +++ b/packages/eslint-plugin/src/rules/member-delimiter-style.ts @@ -1,5 +1,6 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import type { JSONSchema4 } from '@typescript-eslint/utils/json-schema'; import { createRule, deepMerge } from '../util'; @@ -200,7 +201,7 @@ export default createRule({ }, ], create(context, [options]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); // use the base options as the defaults for the cases const baseOptions = options; diff --git a/packages/eslint-plugin/src/rules/member-ordering.ts b/packages/eslint-plugin/src/rules/member-ordering.ts index 84d34d4c596c..274a4036df01 100644 --- a/packages/eslint-plugin/src/rules/member-ordering.ts +++ b/packages/eslint-plugin/src/rules/member-ordering.ts @@ -1,5 +1,6 @@ import type { JSONSchema, TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import naturalCompare from 'natural-compare'; import { @@ -727,7 +728,7 @@ export default createRule({ // Find first member which isn't correctly sorted members.forEach(member => { const rank = getRank(member, groupOrder, supportsModifiers); - const name = getMemberName(member, context.getSourceCode()); + const name = getMemberName(member, getSourceCode(context)); const rankLastMember = previousRanks[previousRanks.length - 1]; if (rank === -1) { @@ -776,7 +777,7 @@ export default createRule({ // Find first member which isn't correctly sorted members.forEach(member => { - const name = getMemberName(member, context.getSourceCode()); + const name = getMemberName(member, getSourceCode(context)); // Note: Not all members have names if (name) { @@ -846,7 +847,7 @@ export default createRule({ messageId: 'incorrectRequiredMembersOrder', loc: member.loc, data: { - member: getMemberName(member, context.getSourceCode()), + member: getMemberName(member, getSourceCode(context)), optionalOrRequired: optionalityOrder === 'required-first' ? 'required' : 'optional', }, diff --git a/packages/eslint-plugin/src/rules/method-signature-style.ts b/packages/eslint-plugin/src/rules/method-signature-style.ts index 20a56b54ecbe..21e3a3cdf0c8 100644 --- a/packages/eslint-plugin/src/rules/method-signature-style.ts +++ b/packages/eslint-plugin/src/rules/method-signature-style.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule, @@ -37,7 +38,7 @@ export default createRule({ defaultOptions: ['property'], create(context, [mode]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); function getMethodKey( node: TSESTree.TSMethodSignature | TSESTree.TSPropertySignature, diff --git a/packages/eslint-plugin/src/rules/naming-convention.ts b/packages/eslint-plugin/src/rules/naming-convention.ts index 6da16b3cb2b9..7ca10cc48d45 100644 --- a/packages/eslint-plugin/src/rules/naming-convention.ts +++ b/packages/eslint-plugin/src/rules/naming-convention.ts @@ -1,6 +1,7 @@ import { PatternVisitor } from '@typescript-eslint/scope-manager'; import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES, TSESLint } from '@typescript-eslint/utils'; +import { getScope } from '@typescript-eslint/utils/eslint-utils'; import type { ScriptTarget } from 'typescript'; import { @@ -163,7 +164,7 @@ export default createRule({ const unusedVariables = collectUnusedVariables(context); function isUnused( name: string, - initialScope: TSESLint.Scope.Scope | null = context.getScope(), + initialScope: TSESLint.Scope.Scope | null = getScope(context), ): boolean { let variable: TSESLint.Scope.Variable | null = null; let scope: TSESLint.Scope.Scope | null = initialScope; @@ -280,7 +281,7 @@ export default createRule({ baseModifiers.add(Modifiers.const); } - if (isGlobal(context.getScope())) { + if (isGlobal(getScope(context))) { baseModifiers.add(Modifiers.global); } } @@ -292,7 +293,7 @@ export default createRule({ modifiers.add(Modifiers.destructured); } - if (isExported(parent, id.name, context.getScope())) { + if (isExported(parent, id.name, getScope(context))) { modifiers.add(Modifiers.exported); } @@ -328,7 +329,7 @@ export default createRule({ const modifiers = new Set(); // functions create their own nested scope - const scope = context.getScope().upper; + const scope = getScope(context).upper; if (isGlobal(scope)) { modifiers.add(Modifiers.global); @@ -582,7 +583,7 @@ export default createRule({ const modifiers = new Set(); // classes create their own nested scope - const scope = context.getScope().upper; + const scope = getScope(context).upper; if (node.abstract) { modifiers.add(Modifiers.abstract); @@ -608,7 +609,7 @@ export default createRule({ validator: validators.interface, handler: (node, validator): void => { const modifiers = new Set(); - const scope = context.getScope(); + const scope = getScope(context); if (isExported(node, node.id.name, scope)) { modifiers.add(Modifiers.exported); @@ -630,7 +631,7 @@ export default createRule({ validator: validators.typeAlias, handler: (node, validator): void => { const modifiers = new Set(); - const scope = context.getScope(); + const scope = getScope(context); if (isExported(node, node.id.name, scope)) { modifiers.add(Modifiers.exported); @@ -653,7 +654,7 @@ export default createRule({ handler: (node, validator): void => { const modifiers = new Set(); // enums create their own nested scope - const scope = context.getScope().upper; + const scope = getScope(context).upper; if (isExported(node, node.id.name, scope)) { modifiers.add(Modifiers.exported); @@ -675,7 +676,7 @@ export default createRule({ validator: validators.typeParameter, handler: (node: TSESTree.TSTypeParameter, validator): void => { const modifiers = new Set(); - const scope = context.getScope(); + const scope = getScope(context); if (isUnused(node.name.name, scope)) { modifiers.add(Modifiers.unused); diff --git a/packages/eslint-plugin/src/rules/no-array-constructor.ts b/packages/eslint-plugin/src/rules/no-array-constructor.ts index 52fbf7ee0252..694fafe14d63 100644 --- a/packages/eslint-plugin/src/rules/no-array-constructor.ts +++ b/packages/eslint-plugin/src/rules/no-array-constructor.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule, isOptionalCallExpression } from '../util'; @@ -41,7 +42,7 @@ export default createRule({ if (node.arguments.length === 0) { return fixer.replaceText(node, '[]'); } - const fullText = context.getSourceCode().getText(node); + const fullText = getSourceCode(context).getText(node); const preambleLength = node.callee.range[1] - node.range[0]; return fixer.replaceText( 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 eff3753b16c6..8cca081f4122 100644 --- a/packages/eslint-plugin/src/rules/no-base-to-string.ts +++ b/packages/eslint-plugin/src/rules/no-base-to-string.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import * as ts from 'typescript'; import { createRule, getParserServices, getTypeName } from '../util'; @@ -71,7 +72,7 @@ export default createRule({ context.report({ data: { certainty, - name: context.getSourceCode().getText(node), + name: getSourceCode(context).getText(node), }, messageId: 'baseToString', node, 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 7b42603f2ba6..c3b715f0e21d 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 @@ -1,5 +1,6 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES, AST_TOKEN_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule } from '../util'; @@ -29,7 +30,7 @@ export default createRule({ }, defaultOptions: [], create(context) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); return { 'BinaryExpression, AssignmentExpression'( node: TSESTree.AssignmentExpression | TSESTree.BinaryExpression, 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 190c0e1092e8..3eae588d0079 100644 --- a/packages/eslint-plugin/src/rules/no-confusing-void-expression.ts +++ b/packages/eslint-plugin/src/rules/no-confusing-void-expression.ts @@ -1,5 +1,6 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import * as tsutils from 'ts-api-utils'; import * as ts from 'typescript'; @@ -102,7 +103,7 @@ export default createRule({ return; } - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const wrapVoidFix = (fixer: TSESLint.RuleFixer): TSESLint.RuleFix => { const nodeText = sourceCode.getText(node); const newNodeText = `void ${nodeText}`; diff --git a/packages/eslint-plugin/src/rules/no-duplicate-type-constituents.ts b/packages/eslint-plugin/src/rules/no-duplicate-type-constituents.ts index 316259a064a5..7c99a1d92b7d 100644 --- a/packages/eslint-plugin/src/rules/no-duplicate-type-constituents.ts +++ b/packages/eslint-plugin/src/rules/no-duplicate-type-constituents.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import type { Type } from 'typescript'; import { createRule, getParserServices } from '../util'; @@ -152,7 +153,7 @@ export default createRule({ }, parentNode: TSESTree.TSIntersectionType | TSESTree.TSUnionType, ): void { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const beforeTokens = sourceCode.getTokensBefore( duplicateConstituent.duplicated, { filter: token => token.value === '|' || token.value === '&' }, diff --git a/packages/eslint-plugin/src/rules/no-dynamic-delete.ts b/packages/eslint-plugin/src/rules/no-dynamic-delete.ts index cf113350701b..5d99e32a149c 100644 --- a/packages/eslint-plugin/src/rules/no-dynamic-delete.ts +++ b/packages/eslint-plugin/src/rules/no-dynamic-delete.ts @@ -1,5 +1,6 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import * as tsutils from 'ts-api-utils'; import { createRule } from '../util'; @@ -66,7 +67,7 @@ export default createRule({ } function getTokenRange(property: TSESTree.Expression): [number, number] { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); return [ sourceCode.getTokenBefore(property)!.range[0], diff --git a/packages/eslint-plugin/src/rules/no-empty-interface.ts b/packages/eslint-plugin/src/rules/no-empty-interface.ts index 2ca3a27fdf28..02b08f845322 100644 --- a/packages/eslint-plugin/src/rules/no-empty-interface.ts +++ b/packages/eslint-plugin/src/rules/no-empty-interface.ts @@ -1,6 +1,11 @@ import { ScopeType } from '@typescript-eslint/scope-manager'; import type { TSESLint } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { + getFilename, + getScope, + getSourceCode, +} from '@typescript-eslint/utils/eslint-utils'; import { createRule, isDefinitionFile } from '../util'; @@ -46,8 +51,8 @@ export default createRule({ create(context, [{ allowSingleExtends }]) { return { TSInterfaceDeclaration(node): void { - const sourceCode = context.getSourceCode(); - const filename = context.getFilename(); + const sourceCode = getSourceCode(context); + const filename = getFilename(context); if (node.body.body.length !== 0) { // interface contains members --> Nothing to report @@ -75,7 +80,7 @@ export default createRule({ )}${typeParam} = ${sourceCode.getText(extend[0])}`, ); }; - const scope = context.getScope(); + const scope = getScope(context); const mergedWithClassDeclaration = scope.set .get(node.id.name) diff --git a/packages/eslint-plugin/src/rules/no-extra-parens.ts b/packages/eslint-plugin/src/rules/no-extra-parens.ts index ab708faa83db..c938dfe4896d 100644 --- a/packages/eslint-plugin/src/rules/no-extra-parens.ts +++ b/packages/eslint-plugin/src/rules/no-extra-parens.ts @@ -3,6 +3,7 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import type { InferMessageIdsTypeFromRule, @@ -31,7 +32,7 @@ export default createRule({ }, defaultOptions: ['all'], create(context) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const rules = baseRule.create(context); function binaryExp( diff --git a/packages/eslint-plugin/src/rules/no-implied-eval.ts b/packages/eslint-plugin/src/rules/no-implied-eval.ts index eede26dce3cd..8c6d9bc74338 100644 --- a/packages/eslint-plugin/src/rules/no-implied-eval.ts +++ b/packages/eslint-plugin/src/rules/no-implied-eval.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getScope } from '@typescript-eslint/utils/eslint-utils'; import * as tsutils from 'ts-api-utils'; import * as ts from 'typescript'; @@ -122,9 +123,9 @@ export default createRule({ } function isReferenceToGlobalFunction(calleeName: string): boolean { - const ref = context - .getScope() - .references.find(ref => ref.identifier.name === calleeName); + const ref = getScope(context).references.find( + ref => ref.identifier.name === calleeName, + ); // ensure it's the "global" version return !ref?.resolved || ref.resolved.defs.length === 0; diff --git a/packages/eslint-plugin/src/rules/no-import-type-side-effects.ts b/packages/eslint-plugin/src/rules/no-import-type-side-effects.ts index 8501c9fd4aea..ec451f854cb7 100644 --- a/packages/eslint-plugin/src/rules/no-import-type-side-effects.ts +++ b/packages/eslint-plugin/src/rules/no-import-type-side-effects.ts @@ -1,5 +1,6 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule, @@ -29,7 +30,7 @@ export default createRule({ }, defaultOptions: [], create(context) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); return { 'ImportDeclaration[importKind!="type"]'( node: TSESTree.ImportDeclaration, diff --git a/packages/eslint-plugin/src/rules/no-inferrable-types.ts b/packages/eslint-plugin/src/rules/no-inferrable-types.ts index 15f88ca85c07..455dc9e04125 100644 --- a/packages/eslint-plugin/src/rules/no-inferrable-types.ts +++ b/packages/eslint-plugin/src/rules/no-inferrable-types.ts @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/internal/prefer-ast-types-enum */ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule } from '../util'; @@ -48,7 +49,7 @@ export default createRule({ }, ], create(context, [{ ignoreParameters, ignoreProperties }]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); function isFunctionCall( init: TSESTree.Expression, 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 fa849d8ac915..85509b94a030 100644 --- a/packages/eslint-plugin/src/rules/no-invalid-void-type.ts +++ b/packages/eslint-plugin/src/rules/no-invalid-void-type.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule } from '../util'; @@ -101,7 +102,7 @@ export default createRule<[Options], MessageIds>({ // check whitelist if (Array.isArray(allowInGenericTypeArguments)) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const fullyQualifiedName = sourceCode .getText(node.parent.parent.typeName) .replace(/ /gu, ''); diff --git a/packages/eslint-plugin/src/rules/no-loop-func.ts b/packages/eslint-plugin/src/rules/no-loop-func.ts index 03f7662f9e33..501f1575c3fc 100644 --- a/packages/eslint-plugin/src/rules/no-loop-func.ts +++ b/packages/eslint-plugin/src/rules/no-loop-func.ts @@ -1,5 +1,6 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getScope } from '@typescript-eslint/utils/eslint-utils'; import type { InferMessageIdsTypeFromRule, @@ -48,7 +49,7 @@ export default createRule({ return; } - const references = context.getScope().through; + const references = getScope(context).through; const unsafeRefs = references .filter(r => !isSafe(loopNode, r)) .map(r => r.identifier.name); 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 0b371f9cf349..f91e48fb3c91 100644 --- a/packages/eslint-plugin/src/rules/no-meaningless-void-operator.ts +++ b/packages/eslint-plugin/src/rules/no-meaningless-void-operator.ts @@ -1,5 +1,6 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { ESLintUtils } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import * as tsutils from 'ts-api-utils'; import * as ts from 'typescript'; @@ -46,7 +47,7 @@ export default createRule({ create(context, [{ checkNever }]) { const services = ESLintUtils.getParserServices(context); const checker = services.program.getTypeChecker(); - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); return { 'UnaryExpression[operator="void"]'(node: TSESTree.UnaryExpression): void { diff --git a/packages/eslint-plugin/src/rules/no-mixed-enums.ts b/packages/eslint-plugin/src/rules/no-mixed-enums.ts index 71344fa5a689..3cc7d0953df7 100644 --- a/packages/eslint-plugin/src/rules/no-mixed-enums.ts +++ b/packages/eslint-plugin/src/rules/no-mixed-enums.ts @@ -2,6 +2,7 @@ import type { Scope } from '@typescript-eslint/scope-manager'; import { DefinitionType } from '@typescript-eslint/scope-manager'; import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getScope } from '@typescript-eslint/utils/eslint-utils'; import * as tsutils from 'ts-api-utils'; import * as ts from 'typescript'; @@ -45,7 +46,7 @@ export default createRule({ imports: [], previousSibling: undefined, }; - let scope: Scope | null = context.getScope(); + let scope: Scope | null = getScope(context); for (const definition of scope.upper?.set.get(name)?.defs ?? []) { if ( diff --git a/packages/eslint-plugin/src/rules/no-namespace.ts b/packages/eslint-plugin/src/rules/no-namespace.ts index d99b10051797..4ff6ecfbd6e6 100644 --- a/packages/eslint-plugin/src/rules/no-namespace.ts +++ b/packages/eslint-plugin/src/rules/no-namespace.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getFilename } from '@typescript-eslint/utils/eslint-utils'; import { createRule, isDefinitionFile } from '../util'; @@ -49,7 +50,7 @@ export default createRule({ }, ], create(context, [{ allowDeclarations, allowDefinitionFiles }]) { - const filename = context.getFilename(); + const filename = getFilename(context); function isDeclaration(node: TSESTree.Node): boolean { if (node.type === AST_NODE_TYPES.TSModuleDeclaration && node.declare) { 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 ce241f321a39..ad56985f723e 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 @@ -2,6 +2,7 @@ import type { Definition } from '@typescript-eslint/scope-manager'; import { DefinitionType } from '@typescript-eslint/scope-manager'; import type { TSESLint } from '@typescript-eslint/utils'; import { ASTUtils, TSESTree } from '@typescript-eslint/utils'; +import { getScope, getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule, nullThrows, NullThrowsReasons } from '../util'; @@ -53,7 +54,7 @@ export default createRule({ node: TSESTree.TSNonNullExpression, ): void { if (node.expression.type === TSESTree.AST_NODE_TYPES.Identifier) { - const scope = context.getScope(); + const scope = getScope(context); const identifier = node.expression; const variable = ASTUtils.findVariable(scope, identifier.name); if (variable && !hasAssignmentBeforeNode(variable, node)) { @@ -61,7 +62,7 @@ export default createRule({ } } - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); context.report({ node, 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 6883b908bb54..a94d57e65ef3 100644 --- a/packages/eslint-plugin/src/rules/no-non-null-assertion.ts +++ b/packages/eslint-plugin/src/rules/no-non-null-assertion.ts @@ -1,5 +1,6 @@ import type { TSESLint } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule, isNonNullAssertionPunctuator } from '../util'; @@ -24,7 +25,7 @@ export default createRule<[], MessageIds>({ }, defaultOptions: [], create(context) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); return { TSNonNullExpression(node): void { const suggest: TSESLint.ReportSuggestionArray = []; diff --git a/packages/eslint-plugin/src/rules/no-redeclare.ts b/packages/eslint-plugin/src/rules/no-redeclare.ts index 9b404e6d8424..c844cc5cc463 100644 --- a/packages/eslint-plugin/src/rules/no-redeclare.ts +++ b/packages/eslint-plugin/src/rules/no-redeclare.ts @@ -1,6 +1,7 @@ import { ScopeType } from '@typescript-eslint/scope-manager'; import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getScope, getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule, getNameLocationInGlobalDirectiveComment } from '../util'; @@ -49,7 +50,7 @@ export default createRule({ }, ], create(context, [options]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const CLASS_DECLARATION_MERGE_NODES = new Set([ AST_NODE_TYPES.TSInterfaceDeclaration, @@ -236,7 +237,7 @@ export default createRule({ * Find variables in the current scope. */ function checkForBlock(node: TSESTree.Node): void { - const scope = context.getScope(); + const scope = getScope(context); /* * In ES5, some node type such as `BlockStatement` doesn't have that scope. @@ -249,7 +250,7 @@ export default createRule({ return { Program(): void { - const scope = context.getScope(); + const scope = getScope(context); findVariablesInScope(scope); diff --git a/packages/eslint-plugin/src/rules/no-require-imports.ts b/packages/eslint-plugin/src/rules/no-require-imports.ts index 32a365436b96..fbf4bc785717 100644 --- a/packages/eslint-plugin/src/rules/no-require-imports.ts +++ b/packages/eslint-plugin/src/rules/no-require-imports.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { ASTUtils } from '@typescript-eslint/utils'; +import { getScope } from '@typescript-eslint/utils/eslint-utils'; import { createRule } from '../util'; @@ -21,7 +22,7 @@ export default createRule({ 'CallExpression[callee.name="require"]'( node: TSESTree.CallExpression, ): void { - const variable = ASTUtils.findVariable(context.getScope(), 'require'); + const variable = ASTUtils.findVariable(getScope(context), 'require'); // ignore non-global require usage as it's something user-land custom instead // of the commonjs standard diff --git a/packages/eslint-plugin/src/rules/no-shadow.ts b/packages/eslint-plugin/src/rules/no-shadow.ts index 9e2359e8b9f1..19c60a8c3d9e 100644 --- a/packages/eslint-plugin/src/rules/no-shadow.ts +++ b/packages/eslint-plugin/src/rules/no-shadow.ts @@ -5,6 +5,7 @@ import type { import { DefinitionType, ScopeType } from '@typescript-eslint/scope-manager'; import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES, ASTUtils } from '@typescript-eslint/utils'; +import { getScope } from '@typescript-eslint/utils/eslint-utils'; import { createRule } from '../util'; @@ -648,7 +649,7 @@ export default createRule({ return { 'Program:exit'(): void { - const globalScope = context.getScope(); + const globalScope = getScope(context); const stack = globalScope.childScopes.slice(); while (stack.length) { 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 9a25eeb5f415..5d56237d6b4d 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,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import * as tsutils from 'ts-api-utils'; import * as ts from 'typescript'; @@ -79,7 +80,7 @@ export default createRule({ ], create(context, [options]) { const services = getParserServices(context); - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); function getBooleanComparison( node: TSESTree.BinaryExpression, diff --git a/packages/eslint-plugin/src/rules/no-unnecessary-condition.ts b/packages/eslint-plugin/src/rules/no-unnecessary-condition.ts index c5de895264ed..970b84c9ae4e 100644 --- a/packages/eslint-plugin/src/rules/no-unnecessary-condition.ts +++ b/packages/eslint-plugin/src/rules/no-unnecessary-condition.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES, AST_TOKEN_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import * as tsutils from 'ts-api-utils'; import * as ts from 'typescript'; @@ -153,7 +154,7 @@ export default createRule({ ) { const services = getParserServices(context); const checker = services.program.getTypeChecker(); - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const compilerOptions = services.program.getCompilerOptions(); const isStrictNullChecks = tsutils.isStrictCompilerOptionEnabled( compilerOptions, diff --git a/packages/eslint-plugin/src/rules/no-unnecessary-qualifier.ts b/packages/eslint-plugin/src/rules/no-unnecessary-qualifier.ts index 4650ff5905fa..90ae6a50694f 100644 --- a/packages/eslint-plugin/src/rules/no-unnecessary-qualifier.ts +++ b/packages/eslint-plugin/src/rules/no-unnecessary-qualifier.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import * as tsutils from 'ts-api-utils'; import * as ts from 'typescript'; @@ -27,7 +28,7 @@ export default createRule({ const services = getParserServices(context); const esTreeNodeToTSNodeMap = services.esTreeNodeToTSNodeMap; const checker = services.program.getTypeChecker(); - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); function tryGetAliasedSymbol( symbol: ts.Symbol, 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 6029cf192da3..24c4c673331d 100644 --- a/packages/eslint-plugin/src/rules/no-unnecessary-type-assertion.ts +++ b/packages/eslint-plugin/src/rules/no-unnecessary-type-assertion.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import * as tsutils from 'ts-api-utils'; import * as ts from 'typescript'; @@ -55,7 +56,7 @@ export default createRule({ }, defaultOptions: [{}], create(context, [options]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const services = getParserServices(context); const checker = services.program.getTypeChecker(); const compilerOptions = services.program.getCompilerOptions(); 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 21a98de67a45..683ebd8b8c26 100644 --- a/packages/eslint-plugin/src/rules/no-unnecessary-type-constraint.ts +++ b/packages/eslint-plugin/src/rules/no-unnecessary-type-constraint.ts @@ -1,5 +1,9 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { + getFilename, + getSourceCode, +} from '@typescript-eslint/utils/eslint-utils'; import { extname } from 'path'; import * as ts from 'typescript'; @@ -56,9 +60,9 @@ export default createRule({ } const requiresGenericDeclarationDisambiguation = - checkRequiresGenericDeclarationDisambiguation(context.getFilename()); + checkRequiresGenericDeclarationDisambiguation(getFilename(context)); - const source = context.getSourceCode(); + const source = getSourceCode(context); const checkNode = ( node: TypeParameterWithConstraint, diff --git a/packages/eslint-plugin/src/rules/no-unsafe-declaration-merging.ts b/packages/eslint-plugin/src/rules/no-unsafe-declaration-merging.ts index b7004f06a9dd..ee053563a3a1 100644 --- a/packages/eslint-plugin/src/rules/no-unsafe-declaration-merging.ts +++ b/packages/eslint-plugin/src/rules/no-unsafe-declaration-merging.ts @@ -1,6 +1,7 @@ import type { Scope } from '@typescript-eslint/scope-manager'; import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getScope } from '@typescript-eslint/utils/eslint-utils'; import { createRule } from '../util'; @@ -49,7 +50,7 @@ export default createRule({ if (node.id) { // by default eslint returns the inner class scope for the ClassDeclaration node // but we want the outer scope within which merged variables will sit - const currentScope = context.getScope().upper; + const currentScope = getScope(context).upper; if (currentScope == null) { return; } @@ -63,7 +64,7 @@ export default createRule({ }, TSInterfaceDeclaration(node): void { checkUnsafeDeclaration( - context.getScope(), + getScope(context), node.id, AST_NODE_TYPES.ClassDeclaration, ); 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 2ec9a9d21a4f..6575b321bd18 100644 --- a/packages/eslint-plugin/src/rules/no-unsafe-member-access.ts +++ b/packages/eslint-plugin/src/rules/no-unsafe-member-access.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import * as tsutils from 'ts-api-utils'; import { @@ -44,7 +45,7 @@ export default createRule({ compilerOptions, 'noImplicitThis', ); - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const stateCache = new Map(); diff --git a/packages/eslint-plugin/src/rules/no-unused-vars.ts b/packages/eslint-plugin/src/rules/no-unused-vars.ts index eec4e9d6ef4f..84cddb801dab 100644 --- a/packages/eslint-plugin/src/rules/no-unused-vars.ts +++ b/packages/eslint-plugin/src/rules/no-unused-vars.ts @@ -1,6 +1,12 @@ import { PatternVisitor } from '@typescript-eslint/scope-manager'; import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES, TSESLint } from '@typescript-eslint/utils'; +import { + getDeclaredVariables, + getFilename, + getScope, + getSourceCode, +} from '@typescript-eslint/utils/eslint-utils'; import { collectUnusedVariables as _collectUnusedVariables, @@ -97,8 +103,8 @@ export default createRule({ }, defaultOptions: [{}], create(context, [firstOption]) { - const filename = context.getFilename(); - const sourceCode = context.getSourceCode(); + const filename = getFilename(context); + const sourceCode = getSourceCode(context); const MODULE_DECL_CACHE = new Map(); const options = ((): TranslatedOptions => { @@ -196,7 +202,7 @@ export default createRule({ */ function isAfterLastUsedArg(variable: TSESLint.Scope.Variable): boolean { const def = variable.defs[0]; - const params = context.getDeclaredVariables(def.node); + const params = getDeclaredVariables(context, def.node); const posteriorParams = params.slice(params.indexOf(variable) + 1); // If any used parameters occur after this parameter, do not report. @@ -314,7 +320,7 @@ export default createRule({ node: TSESTree.TSModuleDeclaration, ): void { if (node.id.type === AST_NODE_TYPES.Identifier) { - let scope = context.getScope(); + let scope = getScope(context); if (scope.upper) { scope = scope.upper; } @@ -546,7 +552,7 @@ export default createRule({ break; } - let scope = context.getScope(); + let scope = getScope(context); const shouldUseUpperScope = [ AST_NODE_TYPES.TSModuleDeclaration, AST_NODE_TYPES.TSDeclareFunction, 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 67f6ee524b86..0a6fa75e7246 100644 --- a/packages/eslint-plugin/src/rules/no-use-before-define.ts +++ b/packages/eslint-plugin/src/rules/no-use-before-define.ts @@ -1,6 +1,7 @@ import { DefinitionType } from '@typescript-eslint/scope-manager'; import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES, TSESLint } from '@typescript-eslint/utils'; +import { getScope } from '@typescript-eslint/utils/eslint-utils'; import { createRule } from '../util'; @@ -383,7 +384,7 @@ export default createRule({ return { Program(): void { - findVariablesInScope(context.getScope()); + findVariablesInScope(getScope(context)); }, }; }, diff --git a/packages/eslint-plugin/src/rules/no-useless-empty-export.ts b/packages/eslint-plugin/src/rules/no-useless-empty-export.ts index 524e0fc9c082..462b40304e70 100644 --- a/packages/eslint-plugin/src/rules/no-useless-empty-export.ts +++ b/packages/eslint-plugin/src/rules/no-useless-empty-export.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getFilename } from '@typescript-eslint/utils/eslint-utils'; import { createRule, isDefinitionFile } from '../util'; @@ -43,7 +44,7 @@ export default createRule({ // In a definition file, export {} is necessary to make the module properly // encapsulated, even when there are other exports // https://github.com/typescript-eslint/typescript-eslint/issues/4975 - if (isDefinitionFile(context.getFilename())) { + if (isDefinitionFile(getFilename(context))) { return {}; } function checkNode( diff --git a/packages/eslint-plugin/src/rules/no-var-requires.ts b/packages/eslint-plugin/src/rules/no-var-requires.ts index 61a300678215..480bf3dccbff 100644 --- a/packages/eslint-plugin/src/rules/no-var-requires.ts +++ b/packages/eslint-plugin/src/rules/no-var-requires.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES, ASTUtils } from '@typescript-eslint/utils'; +import { getScope } from '@typescript-eslint/utils/eslint-utils'; import { createRule } from '../util'; @@ -41,7 +42,7 @@ export default createRule({ AST_NODE_TYPES.VariableDeclarator, ].includes(parent.type) ) { - const variable = ASTUtils.findVariable(context.getScope(), 'require'); + const variable = ASTUtils.findVariable(getScope(context), 'require'); if (!variable?.identifiers.length) { context.report({ 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 c9dcdf8fee9a..8a9fa392becd 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,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import * as tsutils from 'ts-api-utils'; import * as ts from 'typescript'; @@ -30,7 +31,7 @@ export default createRule({ create(context) { const services = getParserServices(context); - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const getTypesIfNotLoose = (node: TSESTree.Node): ts.Type[] | undefined => { const type = services.getTypeAtLocation(node); diff --git a/packages/eslint-plugin/src/rules/object-curly-spacing.ts b/packages/eslint-plugin/src/rules/object-curly-spacing.ts index c448af3702c8..66792ba75018 100644 --- a/packages/eslint-plugin/src/rules/object-curly-spacing.ts +++ b/packages/eslint-plugin/src/rules/object-curly-spacing.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES, AST_TOKEN_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import type { InferMessageIdsTypeFromRule, @@ -33,7 +34,7 @@ export default createRule({ // eslint-disable-next-line no-restricted-syntax -- Use raw options for extended rules. const [firstOption, secondOption] = context.options; const spaced = firstOption === 'always'; - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); /** * Determines whether an option is set, relative to the spacing option. @@ -67,9 +68,9 @@ export default createRule({ node: TSESTree.TSMappedType | TSESTree.TSTypeLiteral, token: TSESTree.Token, ): void { - const nextToken = context - .getSourceCode() - .getTokenAfter(token, { includeComments: true })!; + const nextToken = getSourceCode(context).getTokenAfter(token, { + includeComments: true, + })!; context.report({ node, @@ -93,9 +94,9 @@ export default createRule({ node: TSESTree.TSMappedType | TSESTree.TSTypeLiteral, token: TSESTree.Token, ): void { - const previousToken = context - .getSourceCode() - .getTokenBefore(token, { includeComments: true })!; + const previousToken = getSourceCode(context).getTokenBefore(token, { + includeComments: true, + })!; context.report({ node, 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 255ceb0c712a..8d561a6f046a 100644 --- a/packages/eslint-plugin/src/rules/padding-line-between-statements.ts +++ b/packages/eslint-plugin/src/rules/padding-line-between-statements.ts @@ -1,5 +1,6 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule, @@ -408,8 +409,7 @@ function verifyForNever( const nextToken = paddingLines[0][1]; const start = prevToken.range[1]; const end = nextToken.range[0]; - const text = context - .getSourceCode() + const text = getSourceCode(context) .text.slice(start, end) .replace(PADDING_LINE_SEQUENCE, replacerToRemovePaddingLines); @@ -445,7 +445,7 @@ function verifyForAlways( node: nextNode, messageId: 'expectedBlankLine', fix(fixer) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); let prevToken = getActualLastToken(prevNode, sourceCode)!; const nextToken = sourceCode.getFirstTokenBetween(prevToken, nextNode, { @@ -645,7 +645,7 @@ export default createRule({ }, defaultOptions: [], create(context) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); // eslint-disable-next-line no-restricted-syntax -- We need all raw options. const configureList = context.options || []; diff --git a/packages/eslint-plugin/src/rules/parameter-properties.ts b/packages/eslint-plugin/src/rules/parameter-properties.ts index 1d7d5d7ccadb..17fee949b01e 100644 --- a/packages/eslint-plugin/src/rules/parameter-properties.ts +++ b/packages/eslint-plugin/src/rules/parameter-properties.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule } from '../util'; @@ -149,7 +150,7 @@ export default createRule({ return created; } - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); function typeAnnotationsMatch( classProperty: TSESTree.PropertyDefinition, diff --git a/packages/eslint-plugin/src/rules/prefer-enum-initializers.ts b/packages/eslint-plugin/src/rules/prefer-enum-initializers.ts index a1df9525e801..112caf8ae3c1 100644 --- a/packages/eslint-plugin/src/rules/prefer-enum-initializers.ts +++ b/packages/eslint-plugin/src/rules/prefer-enum-initializers.ts @@ -1,4 +1,5 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule } from '../util'; @@ -23,7 +24,7 @@ export default createRule<[], MessageIds>({ }, defaultOptions: [], create(context) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); function TSEnumDeclaration(node: TSESTree.TSEnumDeclaration): void { const { members } = node; diff --git a/packages/eslint-plugin/src/rules/prefer-for-of.ts b/packages/eslint-plugin/src/rules/prefer-for-of.ts index a7ee36868bd9..c25ef5e21bb4 100644 --- a/packages/eslint-plugin/src/rules/prefer-for-of.ts +++ b/packages/eslint-plugin/src/rules/prefer-for-of.ts @@ -1,5 +1,9 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { + getDeclaredVariables, + getSourceCode, +} from '@typescript-eslint/utils/eslint-utils'; import { createRule } from '../util'; @@ -161,7 +165,7 @@ export default createRule({ indexVar: TSESLint.Scope.Variable, arrayExpression: TSESTree.Expression, ): boolean { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const arrayText = sourceCode.getText(arrayExpression); return indexVar.references.every(reference => { const id = reference.identifier; @@ -204,7 +208,7 @@ export default createRule({ return; } - const [indexVar] = context.getDeclaredVariables(node.init); + const [indexVar] = getDeclaredVariables(context, node.init); if ( isIncrement(node.update, indexName) && isIndexOnlyUsedWithArray(node.body, indexVar, arrayExpression) diff --git a/packages/eslint-plugin/src/rules/prefer-function-type.ts b/packages/eslint-plugin/src/rules/prefer-function-type.ts index 9655093236eb..8e97c47d6fb5 100644 --- a/packages/eslint-plugin/src/rules/prefer-function-type.ts +++ b/packages/eslint-plugin/src/rules/prefer-function-type.ts @@ -1,5 +1,6 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES, AST_TOKEN_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule } from '../util'; @@ -28,7 +29,7 @@ export default createRule({ }, defaultOptions: [], create(context) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); /** * Checks if there the interface has exactly one supertype that isn't named 'Function' diff --git a/packages/eslint-plugin/src/rules/prefer-includes.ts b/packages/eslint-plugin/src/rules/prefer-includes.ts index 65f717c4126a..58cd34b70d2c 100644 --- a/packages/eslint-plugin/src/rules/prefer-includes.ts +++ b/packages/eslint-plugin/src/rules/prefer-includes.ts @@ -2,6 +2,7 @@ import type { AST as RegExpAST } from '@eslint-community/regexpp'; import { parseRegExpLiteral } from '@eslint-community/regexpp'; import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getScope } from '@typescript-eslint/utils/eslint-utils'; import * as ts from 'typescript'; import { @@ -32,7 +33,7 @@ export default createRule({ }, create(context) { - const globalScope = context.getScope(); + const globalScope = getScope(context); const services = getParserServices(context); const checker = services.program.getTypeChecker(); diff --git a/packages/eslint-plugin/src/rules/prefer-namespace-keyword.ts b/packages/eslint-plugin/src/rules/prefer-namespace-keyword.ts index 0c945a6b29d5..79aa237dd039 100644 --- a/packages/eslint-plugin/src/rules/prefer-namespace-keyword.ts +++ b/packages/eslint-plugin/src/rules/prefer-namespace-keyword.ts @@ -1,4 +1,5 @@ import { AST_NODE_TYPES, AST_TOKEN_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule } from '../util'; @@ -20,7 +21,7 @@ export default createRule({ }, defaultOptions: [], create(context) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); return { TSModuleDeclaration(node): void { diff --git a/packages/eslint-plugin/src/rules/prefer-nullish-coalescing.ts b/packages/eslint-plugin/src/rules/prefer-nullish-coalescing.ts index e9e340f93240..83d4747d5eb1 100644 --- a/packages/eslint-plugin/src/rules/prefer-nullish-coalescing.ts +++ b/packages/eslint-plugin/src/rules/prefer-nullish-coalescing.ts @@ -1,5 +1,6 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES, AST_TOKEN_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import * as tsutils from 'ts-api-utils'; import * as ts from 'typescript'; @@ -125,7 +126,7 @@ export default createRule({ ) { const parserServices = getParserServices(context); const compilerOptions = parserServices.program.getCompilerOptions(); - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const checker = parserServices.program.getTypeChecker(); const isStrictNullChecks = tsutils.isStrictCompilerOptionEnabled( compilerOptions, diff --git a/packages/eslint-plugin/src/rules/prefer-optional-chain.ts b/packages/eslint-plugin/src/rules/prefer-optional-chain.ts index a1e9bb95f22d..52de4cbc357d 100644 --- a/packages/eslint-plugin/src/rules/prefer-optional-chain.ts +++ b/packages/eslint-plugin/src/rules/prefer-optional-chain.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import type { RuleFix } from '@typescript-eslint/utils/ts-eslint'; import * as ts from 'typescript'; @@ -102,7 +103,7 @@ export default createRule< }, ], create(context, [options]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const parserServices = getParserServices(context); const seenLogicals = new Set(); diff --git a/packages/eslint-plugin/src/rules/prefer-readonly.ts b/packages/eslint-plugin/src/rules/prefer-readonly.ts index b9980536fb23..d34a57b47679 100644 --- a/packages/eslint-plugin/src/rules/prefer-readonly.ts +++ b/packages/eslint-plugin/src/rules/prefer-readonly.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES, ASTUtils } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import * as tsutils from 'ts-api-utils'; import * as ts from 'typescript'; @@ -184,7 +185,7 @@ export default createRule({ }, 'ClassDeclaration, ClassExpression:exit'(): void { const finalizedClassScope = classScopeStack.pop()!; - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); for (const violatingNode of finalizedClassScope.finalizeUnmodifiedPrivateNonReadonlys()) { const { esNode, nameNode } = 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 e1f3ce4783c1..4ea5d7f59794 100644 --- a/packages/eslint-plugin/src/rules/prefer-reduce-type-parameter.ts +++ b/packages/eslint-plugin/src/rules/prefer-reduce-type-parameter.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule, @@ -92,9 +93,9 @@ export default createRule({ fixes.push( fixer.insertTextAfter( callee, - `<${context - .getSourceCode() - .getText(secondArg.typeAnnotation)}>`, + `<${getSourceCode(context).getText( + secondArg.typeAnnotation, + )}>`, ), ); } diff --git a/packages/eslint-plugin/src/rules/prefer-regexp-exec.ts b/packages/eslint-plugin/src/rules/prefer-regexp-exec.ts index 7bbf5feba250..9cbbd67bcccf 100644 --- a/packages/eslint-plugin/src/rules/prefer-regexp-exec.ts +++ b/packages/eslint-plugin/src/rules/prefer-regexp-exec.ts @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/prefer-literal-enum-member */ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getScope, getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import * as tsutils from 'ts-api-utils'; import type * as ts from 'typescript'; @@ -38,10 +39,10 @@ export default createRule({ }, create(context) { - const globalScope = context.getScope(); + const globalScope = getScope(context); const services = getParserServices(context); const checker = services.program.getTypeChecker(); - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); /** * Check if a given node type is a string. 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 82451e181320..e6bd0e29fa40 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 @@ -2,6 +2,7 @@ import type { AST as RegExpAST } from '@eslint-community/regexpp'; import { RegExpParser } from '@eslint-community/regexpp'; import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getScope, getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule, @@ -38,8 +39,8 @@ export default createRule({ }, create(context) { - const globalScope = context.getScope(); - const sourceCode = context.getSourceCode(); + const globalScope = getScope(context); + const sourceCode = getSourceCode(context); const services = getParserServices(context); const checker = services.program.getTypeChecker(); 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 d388be9ec955..55507cf1e486 100644 --- a/packages/eslint-plugin/src/rules/prefer-ts-expect-error.ts +++ b/packages/eslint-plugin/src/rules/prefer-ts-expect-error.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_TOKEN_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import type { RuleFix, RuleFixer } from '@typescript-eslint/utils/ts-eslint'; import { createRule } from '../util'; @@ -25,7 +26,7 @@ export default createRule<[], MessageIds>({ create(context) { const tsIgnoreRegExpSingleLine = /^\s*\/?\s*@ts-ignore/; const tsIgnoreRegExpMultiLine = /^\s*(?:\/|\*)*\s*@ts-ignore/; - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); function isLineComment(comment: TSESTree.Comment): boolean { return comment.type === AST_TOKEN_TYPES.Line; diff --git a/packages/eslint-plugin/src/rules/promise-function-async.ts b/packages/eslint-plugin/src/rules/promise-function-async.ts index 334f8d008f4b..2c286cb45506 100644 --- a/packages/eslint-plugin/src/rules/promise-function-async.ts +++ b/packages/eslint-plugin/src/rules/promise-function-async.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES, AST_TOKEN_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import * as ts from 'typescript'; import { @@ -98,7 +99,7 @@ export default createRule({ ]); const services = getParserServices(context); const checker = services.program.getTypeChecker(); - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); function validateNode( node: diff --git a/packages/eslint-plugin/src/rules/require-await.ts b/packages/eslint-plugin/src/rules/require-await.ts index c2dd66f8252d..04cea0ad38de 100644 --- a/packages/eslint-plugin/src/rules/require-await.ts +++ b/packages/eslint-plugin/src/rules/require-await.ts @@ -1,5 +1,6 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import * as tsutils from 'ts-api-utils'; import type * as ts from 'typescript'; @@ -46,7 +47,7 @@ export default createRule({ const services = getParserServices(context); const checker = services.program.getTypeChecker(); - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); let scopeInfo: ScopeInfo | null = null; /** diff --git a/packages/eslint-plugin/src/rules/return-await.ts b/packages/eslint-plugin/src/rules/return-await.ts index df0810d41c05..c4c574d4bc3e 100644 --- a/packages/eslint-plugin/src/rules/return-await.ts +++ b/packages/eslint-plugin/src/rules/return-await.ts @@ -1,5 +1,6 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import * as tsutils from 'ts-api-utils'; import * as ts from 'typescript'; @@ -54,7 +55,7 @@ export default createRule({ create(context, [option]) { const services = getParserServices(context); const checker = services.program.getTypeChecker(); - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const scopeInfoStack: ScopeInfo[] = []; diff --git a/packages/eslint-plugin/src/rules/sort-type-constituents.ts b/packages/eslint-plugin/src/rules/sort-type-constituents.ts index 552599312e19..23877e65b794 100644 --- a/packages/eslint-plugin/src/rules/sort-type-constituents.ts +++ b/packages/eslint-plugin/src/rules/sort-type-constituents.ts @@ -1,5 +1,6 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule, getEnumNames, typeNodeRequiresParentheses } from '../util'; @@ -165,7 +166,7 @@ export default createRule({ }, ], create(context, [{ checkIntersections, checkUnions, groupOrder }]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const collator = new Intl.Collator('en', { sensitivity: 'base', diff --git a/packages/eslint-plugin/src/rules/space-before-blocks.ts b/packages/eslint-plugin/src/rules/space-before-blocks.ts index 902c47e5ce2e..f0e45ae7e329 100644 --- a/packages/eslint-plugin/src/rules/space-before-blocks.ts +++ b/packages/eslint-plugin/src/rules/space-before-blocks.ts @@ -1,4 +1,5 @@ import type { TSESTree } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import type { InferMessageIdsTypeFromRule, @@ -34,7 +35,7 @@ export default createRule({ defaultOptions: ['always'], create(context, [config]) { const rules = baseRule.create(context); - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); let requireSpace = true; 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 b7d5458b041e..19836a9081f4 100644 --- a/packages/eslint-plugin/src/rules/space-before-function-paren.ts +++ b/packages/eslint-plugin/src/rules/space-before-function-paren.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule, isOpeningParenToken } from '../util'; @@ -61,7 +62,7 @@ export default createRule({ defaultOptions: ['always'], create(context, [firstOption]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const baseConfig = typeof firstOption === 'string' ? firstOption : 'always'; const overrideConfig = typeof firstOption === 'object' ? firstOption : {}; diff --git a/packages/eslint-plugin/src/rules/space-infix-ops.ts b/packages/eslint-plugin/src/rules/space-infix-ops.ts index 53df0b4e39d5..2bf643b08736 100644 --- a/packages/eslint-plugin/src/rules/space-infix-ops.ts +++ b/packages/eslint-plugin/src/rules/space-infix-ops.ts @@ -1,4 +1,5 @@ import { AST_TOKEN_TYPES, TSESTree } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import type { InferMessageIdsTypeFromRule, @@ -38,7 +39,7 @@ export default createRule({ ], create(context) { const rules = baseRule.create(context); - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); function report(operator: TSESTree.Token): void { context.report({ diff --git a/packages/eslint-plugin/src/rules/strict-boolean-expressions.ts b/packages/eslint-plugin/src/rules/strict-boolean-expressions.ts index db0d4474a14c..7ead3c9367ad 100644 --- a/packages/eslint-plugin/src/rules/strict-boolean-expressions.ts +++ b/packages/eslint-plugin/src/rules/strict-boolean-expressions.ts @@ -3,6 +3,7 @@ import type { TSESTree, } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import * as tsutils from 'ts-api-utils'; import * as ts from 'typescript'; @@ -160,7 +161,7 @@ export default createRule({ const services = getParserServices(context); const checker = services.program.getTypeChecker(); const compilerOptions = services.program.getCompilerOptions(); - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const isStrictNullChecks = tsutils.isStrictCompilerOptionEnabled( compilerOptions, 'strictNullChecks', diff --git a/packages/eslint-plugin/src/rules/switch-exhaustiveness-check.ts b/packages/eslint-plugin/src/rules/switch-exhaustiveness-check.ts index 6abdbf27fc6e..f4dce14fbdee 100644 --- a/packages/eslint-plugin/src/rules/switch-exhaustiveness-check.ts +++ b/packages/eslint-plugin/src/rules/switch-exhaustiveness-check.ts @@ -1,4 +1,5 @@ import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import * as tsutils from 'ts-api-utils'; import * as ts from 'typescript'; @@ -30,7 +31,7 @@ export default createRule({ }, defaultOptions: [], create(context) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const services = getParserServices(context); const checker = services.program.getTypeChecker(); const compilerOptions = services.program.getCompilerOptions(); diff --git a/packages/eslint-plugin/src/rules/triple-slash-reference.ts b/packages/eslint-plugin/src/rules/triple-slash-reference.ts index 22f6b49da617..eb60916865f8 100644 --- a/packages/eslint-plugin/src/rules/triple-slash-reference.ts +++ b/packages/eslint-plugin/src/rules/triple-slash-reference.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES, AST_TOKEN_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule } from '../util'; @@ -55,7 +56,7 @@ export default createRule({ ], create(context, [{ lib, path, types }]) { let programNode: TSESTree.Node; - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const references: { comment: TSESTree.Comment; importName: string; diff --git a/packages/eslint-plugin/src/rules/type-annotation-spacing.ts b/packages/eslint-plugin/src/rules/type-annotation-spacing.ts index f9ca288649e0..a5bc4c3fb838 100644 --- a/packages/eslint-plugin/src/rules/type-annotation-spacing.ts +++ b/packages/eslint-plugin/src/rules/type-annotation-spacing.ts @@ -1,4 +1,5 @@ import type { TSESTree } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule, @@ -154,7 +155,7 @@ export default createRule({ ], create(context, [options]) { const punctuators = [':', '=>']; - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const ruleSet = createRules(options); diff --git a/packages/eslint-plugin/src/rules/unbound-method.ts b/packages/eslint-plugin/src/rules/unbound-method.ts index e1c2aed6a019..8691e37ba9f0 100644 --- a/packages/eslint-plugin/src/rules/unbound-method.ts +++ b/packages/eslint-plugin/src/rules/unbound-method.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getFilename } from '@typescript-eslint/utils/eslint-utils'; import * as tsutils from 'ts-api-utils'; import * as ts from 'typescript'; @@ -167,7 +168,7 @@ export default createRule({ create(context, [{ ignoreStatic }]) { const services = getParserServices(context); const currentSourceFile = services.program.getSourceFile( - context.getFilename(), + getFilename(context), ); function checkMethodAndReport( diff --git a/packages/eslint-plugin/src/rules/unified-signatures.ts b/packages/eslint-plugin/src/rules/unified-signatures.ts index 950125e8686f..d51b9bb1fea9 100644 --- a/packages/eslint-plugin/src/rules/unified-signatures.ts +++ b/packages/eslint-plugin/src/rules/unified-signatures.ts @@ -1,5 +1,6 @@ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import type { Equal } from '../util'; import { arraysAreEqual, createRule } from '../util'; @@ -99,7 +100,7 @@ export default createRule({ }, ], create(context, [{ ignoreDifferentlyNamedParameters }]) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); //---------------------------------------------------------------------- // Helpers diff --git a/packages/eslint-plugin/src/util/collectUnusedVariables.ts b/packages/eslint-plugin/src/util/collectUnusedVariables.ts index 518a696911b7..e4028e23e203 100644 --- a/packages/eslint-plugin/src/util/collectUnusedVariables.ts +++ b/packages/eslint-plugin/src/util/collectUnusedVariables.ts @@ -10,6 +10,7 @@ import { ESLintUtils, TSESLint, } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; class UnusedVarsVisitor< TMessageIds extends string, @@ -29,7 +30,7 @@ class UnusedVarsVisitor< }); this.#scopeManager = ESLintUtils.nullThrows( - context.getSourceCode().scopeManager, + getSourceCode(context).scopeManager, 'Missing required scope manager', ); } @@ -40,7 +41,7 @@ class UnusedVarsVisitor< >( context: TSESLint.RuleContext, ): ReadonlySet { - const program = context.getSourceCode().ast; + const program = getSourceCode(context).ast; const cached = this.RESULTS_CACHE.get(program); if (cached) { return cached; 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 06300a7821ca..a7cd216a4f4d 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 @@ -22,6 +22,7 @@ ruleTester.defineRule('use-every-a', context => { * Mark a variable as used */ function useA(): void { + // eslint-disable-next-line deprecation/deprecation context.markVariableAsUsed('a'); } return { diff --git a/packages/eslint-plugin/tests/util/getWrappedCode.test.ts b/packages/eslint-plugin/tests/util/getWrappedCode.test.ts index bc57bfdabf09..a3edc6db68ea 100644 --- a/packages/eslint-plugin/tests/util/getWrappedCode.test.ts +++ b/packages/eslint-plugin/tests/util/getWrappedCode.test.ts @@ -1,5 +1,6 @@ import { RuleTester } from '@typescript-eslint/rule-tester'; import type { TSESTree } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import * as ts from 'typescript'; import { @@ -36,7 +37,7 @@ const removeFunctionRule = createRule({ }, create(context) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const parserServices = getParserServices(context, true); const report = (node: TSESTree.CallExpression): void => { diff --git a/packages/eslint-plugin/tests/util/getWrappingFixer.test.ts b/packages/eslint-plugin/tests/util/getWrappingFixer.test.ts index ac7c8740b0d3..78e5e21bad5a 100644 --- a/packages/eslint-plugin/tests/util/getWrappingFixer.test.ts +++ b/packages/eslint-plugin/tests/util/getWrappingFixer.test.ts @@ -1,5 +1,6 @@ import { RuleTester } from '@typescript-eslint/rule-tester'; import type { TSESTree } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule, getWrappingFixer } from '../../src/util'; import { getFixturesRootDir } from '../RuleTester'; @@ -29,7 +30,7 @@ const voidEverythingRule = createRule({ }, create(context) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const report = (node: TSESTree.Node): void => { context.report({ @@ -322,7 +323,7 @@ const removeFunctionRule = createRule({ }, create(context) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); const report = (node: TSESTree.CallExpression): void => { context.report({ diff --git a/packages/eslint-plugin/tests/util/isNodeEqual.test.ts b/packages/eslint-plugin/tests/util/isNodeEqual.test.ts index a2473fb88dbd..aeea58099f88 100644 --- a/packages/eslint-plugin/tests/util/isNodeEqual.test.ts +++ b/packages/eslint-plugin/tests/util/isNodeEqual.test.ts @@ -1,5 +1,6 @@ import { RuleTester } from '@typescript-eslint/rule-tester'; import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; +import { getSourceCode } from '@typescript-eslint/utils/eslint-utils'; import { createRule, isNodeEqual } from '../../src/util'; import { getFixturesRootDir } from '../RuleTester'; @@ -20,7 +21,7 @@ const rule = createRule({ }, create(context) { - const sourceCode = context.getSourceCode(); + const sourceCode = getSourceCode(context); return { LogicalExpression: (node: TSESTree.LogicalExpression): void => { diff --git a/packages/utils/src/eslint-utils/context.ts b/packages/utils/src/eslint-utils/context.ts new file mode 100644 index 000000000000..93e8283a7b61 --- /dev/null +++ b/packages/utils/src/eslint-utils/context.ts @@ -0,0 +1,49 @@ +// Wrappers around ESLint's deprecation of existing methods +// We'll be able to drop them once we no longer support ESLint <8.40.0. +/* eslint-disable deprecation/deprecation */ +import type { Scope, SourceCode } from '../ts-eslint'; +import type { RuleContext } from '../ts-eslint/Rule'; +import type { TSESTree } from '../ts-estree'; + +export function getAncestors( + context: Readonly>, +): TSESTree.Node[] { + // TODO: Use `SourceCode#getAncestors` (we'll be forced to soon) + return context.getAncestors(); +} + +export function getCwd( + context: Readonly>, +): string { + return context.cwd ?? context.getCwd(); +} + +export function getDeclaredVariables( + context: Readonly>, + node: TSESTree.Node, +): readonly Scope.Variable[] { + const sourceCode = getSourceCode(context); + return ( + sourceCode.getDeclaredVariables?.(node) ?? + context.getDeclaredVariables(node) + ); +} + +export function getFilename( + context: Readonly>, +): string { + return context.filename ?? context.getFilename(); +} + +export function getScope( + context: Readonly>, +): Scope.Scope { + // TODO: Use `SourceCode#getScope` (we'll be forced to soon) + return context.getScope(); +} + +export function getSourceCode( + context: Readonly>, +): Readonly { + return context.sourceCode ?? context.getSourceCode(); +} diff --git a/packages/utils/src/eslint-utils/index.ts b/packages/utils/src/eslint-utils/index.ts index baf3e82bc653..29062e4e7083 100644 --- a/packages/utils/src/eslint-utils/index.ts +++ b/packages/utils/src/eslint-utils/index.ts @@ -1,4 +1,5 @@ export * from './applyDefault'; +export * from './context'; export * from './getParserServices'; export * from './InferTypesFromRule'; export * from './RuleCreator'; From 8544f421dd2da262cb66a89dd4c0341355e3f3ee Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Mon, 13 Nov 2023 11:36:16 -0500 Subject: [PATCH 2/3] Fixed introduced linting complaints --- packages/typescript-estree/src/create-program/getScriptKind.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/typescript-estree/src/create-program/getScriptKind.ts b/packages/typescript-estree/src/create-program/getScriptKind.ts index 80158f468f7b..54ee2e144db5 100644 --- a/packages/typescript-estree/src/create-program/getScriptKind.ts +++ b/packages/typescript-estree/src/create-program/getScriptKind.ts @@ -2,7 +2,7 @@ import path from 'path'; import * as ts from 'typescript'; function getScriptKind(filePath: string, jsx: boolean): ts.ScriptKind { - const extension = path.extname(filePath).toLowerCase(); + const extension = path.extname(filePath).toLowerCase() as ts.Extension; // note - we only respect the user's jsx setting for unknown extensions // this is so that we always match TS's internal script kind logic, preventing // weird errors due to a mismatch. From 15b95a948bf073c07877594ae165e49b65bb2b24 Mon Sep 17 00:00:00 2001 From: Josh Goldberg Date: Mon, 13 Nov 2023 11:39:03 -0500 Subject: [PATCH 3/3] Again: fixed introduced linting complaints --- packages/website/src/components/ErrorsViewer.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/website/src/components/ErrorsViewer.tsx b/packages/website/src/components/ErrorsViewer.tsx index 17481e30f942..1ea30d5f623f 100644 --- a/packages/website/src/components/ErrorsViewer.tsx +++ b/packages/website/src/components/ErrorsViewer.tsx @@ -35,12 +35,14 @@ function severityClass( severity: Monaco.MarkerSeverity, ): AlertBlockProps['type'] { switch (severity) { + /* eslint-disable @typescript-eslint/no-unsafe-enum-comparison -- Monaco is imported as a type */ case 8: return 'danger'; case 4: return 'warning'; case 2: return 'note'; + /* eslint-enable @typescript-eslint/no-unsafe-enum-comparison */ } return 'info'; }