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 2cb602917688..69af1244d3c7 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 32ef66ab9192..45aee8fe043b 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 5f941665df21..1474e330c030 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'; @@ -134,7 +135,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 93eabb54114e..8a4ed0a00da5 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 b3519db34e43..d67f054e9189 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 b6549128960f..851d6fcc19b0 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 10026c278293..1913cdfc4e52 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 31ffd08e30e6..601c47c4621d 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[], @@ -63,7 +64,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 a5fd18a7c836..ed3b0bf487a4 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 { @@ -251,9 +252,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 ebd902c4f7a9..7a10fd392fe8 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 2b1768bd9795..dc0f410f681b 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 d07adf152826..ee69229e766c 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 0091647a78c3..e6201df8e9e6 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 9cb7133cdc11..18919815cd19 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 a2aa7c6be143..b0bcb7d442f8 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 066226389612..5107aa7a9192 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, @@ -40,7 +41,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 2b30eff28396..0e4e26b4fa49 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 1e740ae4327d..548c39768b3c 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 db6c3673f146..02ee716a1b2b 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 aeda6785f4cf..76d91d52784e 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 for (const member of members) { 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 8168f0cea04e..31f00370196c 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 d23d1cd8fd47..2ffbf7b665bf 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 { @@ -158,7 +159,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; @@ -274,7 +275,7 @@ export default createRule({ baseModifiers.add(Modifiers.const); } - if (isGlobal(context.getScope())) { + if (isGlobal(getScope(context))) { baseModifiers.add(Modifiers.global); } } @@ -286,7 +287,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); } @@ -322,7 +323,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); @@ -576,7 +577,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); @@ -602,7 +603,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); @@ -624,7 +625,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); @@ -647,7 +648,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); @@ -669,7 +670,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 165ee127f3a7..e54c5f1db2a1 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 bffb85d197ef..acf4329e6051 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 606a3d8cffc5..122ff346a865 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 73cb181dd126..1d687105f8f7 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 5851ea3a8f93..7e6819064708 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 65d9064eae0b..2b79f31a67e6 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 40a0181191f9..25617ca41f25 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 fefd8e10b3e8..35d8531798ad 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 5b007b335626..b97971339617 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'; @@ -646,7 +647,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 254788abcab2..2ef17b07dd66 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 4da9a8bc9fe0..bc48bfd3dc71 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 e108c7acb300..96de86efe116 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 6289b7fe39a8..42097bc5f59a 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 bb00cb3c67df..47992ed91458 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 => { @@ -194,7 +200,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. @@ -312,7 +318,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; } @@ -544,7 +550,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 de0351b8209f..f4e7d335eec5 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'; @@ -378,7 +379,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 607ec34d7528..7ebf45250f05 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'; @@ -40,7 +41,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 466a0e9872cc..442c8135e072 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, @@ -406,8 +407,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); @@ -443,7 +443,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, { @@ -643,7 +643,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 dc45e41e420f..54fbd4fefc14 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; @@ -203,7 +207,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 b4f00dec0cb4..eecb8dc3ac4c 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 ef7ed54ee59d..4a63edfa5b27 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 8eb1422a0710..d18079492b29 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 f90c1ac23968..be498cb94ad0 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 3094da283846..edb502c4a451 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 b3c7aa7ba314..585bbe345b31 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 47995fb4befc..381d11529375 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 5497a2ac0209..f834e17decec 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 5bb2ee19b6bc..4cc53535378d 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 1491ebad4267..856ed2067727 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 0eda64ce1b55..fe377123ee26 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 | undefined; - 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 b5bcc59e7de4..442dd71162a2 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 4d4376b16d89..f0ace192655c 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 17c1d8ff46fc..e6237dc8667d 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 66cfa165b0b9..81184ec2a08a 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 a35599ebceab..1f5568e3d6ac 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/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. 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'; 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'; } diff --git a/packages/website/src/components/Playground.module.css b/packages/website/src/components/Playground.module.css index 927078415e71..88563aca7647 100644 --- a/packages/website/src/components/Playground.module.css +++ b/packages/website/src/components/Playground.module.css @@ -66,7 +66,9 @@ justify-content: stretch; align-items: stretch; outline: none; - transition: border-color 0.2s linear, background-color 0.2s linear; + transition: + border-color 0.2s linear, + background-color 0.2s linear; background-color: var(--resize-background-color); border-color: var(--resize-border-color); border-style: solid;