diff --git a/.eslintrc.js b/.eslintrc.js index 0cbb0a0772cb..ac2e363f4e13 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -20,9 +20,8 @@ module.exports = { extends: [ 'eslint:recommended', 'plugin:eslint-plugin/recommended', - 'plugin:@typescript-eslint/recommended-type-checked', + 'plugin:@typescript-eslint/strict-type-checked', 'plugin:@typescript-eslint/stylistic-type-checked', - // TODO: consider enabling strict-type-checked ], parserOptions: { sourceType: 'module', @@ -53,7 +52,10 @@ module.exports = { // make sure we're not leveraging any deprecated APIs 'deprecation/deprecation': 'error', - // TODO(#7138): Investigate enabling these soon ✨ + // TODO(#7338): Investigate enabling these soon ✨ + '@typescript-eslint/consistent-indexed-object-style': 'off', + '@typescript-eslint/no-unnecessary-condition': 'off', + '@typescript-eslint/no-dynamic-delete': 'off', '@typescript-eslint/prefer-nullish-coalescing': 'off', // TODO(#7130): Investigate changing these in or removing these from presets @@ -85,6 +87,12 @@ module.exports = { '@typescript-eslint/no-explicit-any': 'error', '@typescript-eslint/no-non-null-assertion': 'off', '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/prefer-literal-enum-member': [ + 'error', + { + allowBitwiseExpressions: true, + }, + ], '@typescript-eslint/unbound-method': 'off', '@typescript-eslint/restrict-template-expressions': [ 'error', diff --git a/packages/ast-spec/tests/ast-node-types.type-test.ts b/packages/ast-spec/tests/ast-node-types.type-test.ts index dc3d9a1bd506..f906a86139eb 100644 --- a/packages/ast-spec/tests/ast-node-types.type-test.ts +++ b/packages/ast-spec/tests/ast-node-types.type-test.ts @@ -12,4 +12,5 @@ type TakesString> = T; type _Test = // forcing the test onto a new line so it isn't covered by the expect error // If there are any enum members that don't have a corresponding TSESTree.Node, then this line will error with "Type 'string | number | symbol' is not assignable to type 'string'." + // eslint-disable-next-line @typescript-eslint/no-invalid-void-type TakesString | void; diff --git a/packages/eslint-plugin/src/rules/default-param-last.ts b/packages/eslint-plugin/src/rules/default-param-last.ts index e76ce14fa057..b8638031ac5a 100644 --- a/packages/eslint-plugin/src/rules/default-param-last.ts +++ b/packages/eslint-plugin/src/rules/default-param-last.ts @@ -24,7 +24,7 @@ export default createRule({ * @private */ function isOptionalParam(node: TSESTree.Parameter): boolean { - return 'optional' in node && node.optional === true; + return 'optional' in node && node.optional; } /** 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 59b223912c3b..e72079c064b8 100644 --- a/packages/eslint-plugin/src/rules/explicit-function-return-type.ts +++ b/packages/eslint-plugin/src/rules/explicit-function-return-type.ts @@ -138,7 +138,7 @@ export default createRule({ case AST_NODE_TYPES.Property: { if ( parent.key.type === AST_NODE_TYPES.Identifier && - parent.computed === false + !parent.computed ) { funcName = parent.key.name; } diff --git a/packages/eslint-plugin/src/rules/naming-convention-utils/enums.ts b/packages/eslint-plugin/src/rules/naming-convention-utils/enums.ts index b92928b86477..7b96072291d9 100644 --- a/packages/eslint-plugin/src/rules/naming-convention-utils/enums.ts +++ b/packages/eslint-plugin/src/rules/naming-convention-utils/enums.ts @@ -50,6 +50,7 @@ enum Selectors { type SelectorsString = keyof typeof Selectors; enum MetaSelectors { + /* eslint-disable @typescript-eslint/prefer-literal-enum-member */ default = -1, variableLike = 0 | Selectors.variable | @@ -79,6 +80,7 @@ enum MetaSelectors { Selectors.classProperty | Selectors.objectLiteralProperty | Selectors.typeProperty, + /* eslint-enable @typescript-eslint/prefer-literal-enum-member */ } type MetaSelectorsString = keyof typeof MetaSelectors; type IndividualAndMetaSelectorsString = MetaSelectorsString | SelectorsString; diff --git a/packages/eslint-plugin/src/rules/naming-convention-utils/parse-options.ts b/packages/eslint-plugin/src/rules/naming-convention-utils/parse-options.ts index 885c25a8035f..557393268f9b 100644 --- a/packages/eslint-plugin/src/rules/naming-convention-utils/parse-options.ts +++ b/packages/eslint-plugin/src/rules/naming-convention-utils/parse-options.ts @@ -87,6 +87,7 @@ function parseOptions(context: Context): ParsedOptions { const result = getEnumNames(Selectors).reduce((acc, k) => { acc[k] = createValidator(k, context, normalizedOptions); return acc; + // eslint-disable-next-line @typescript-eslint/prefer-reduce-type-parameter }, {} as ParsedOptions); return result; diff --git a/packages/eslint-plugin/src/rules/no-empty-function.ts b/packages/eslint-plugin/src/rules/no-empty-function.ts index 363b393e9d27..f7189d6dacb1 100644 --- a/packages/eslint-plugin/src/rules/no-empty-function.ts +++ b/packages/eslint-plugin/src/rules/no-empty-function.ts @@ -155,7 +155,7 @@ export default createRule({ isAllowedOverrideMethods && isBodyEmpty(node) && node.parent?.type === AST_NODE_TYPES.MethodDefinition && - node.parent.override === true + node.parent.override ); } diff --git a/packages/eslint-plugin/src/rules/no-namespace.ts b/packages/eslint-plugin/src/rules/no-namespace.ts index 516225271956..d99b10051797 100644 --- a/packages/eslint-plugin/src/rules/no-namespace.ts +++ b/packages/eslint-plugin/src/rules/no-namespace.ts @@ -52,10 +52,7 @@ export default createRule({ const filename = context.getFilename(); function isDeclaration(node: TSESTree.Node): boolean { - if ( - node.type === AST_NODE_TYPES.TSModuleDeclaration && - node.declare === true - ) { + if (node.type === AST_NODE_TYPES.TSModuleDeclaration && node.declare) { return true; } 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 44d540cd44ea..ce241f321a39 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 @@ -26,9 +26,7 @@ function isDefinitionWithAssignment(definition: Definition): boolean { } const variableDeclarator = definition.node; - return ( - variableDeclarator.definite === true || variableDeclarator.init != null - ); + return variableDeclarator.definite || variableDeclarator.init != null; } export default createRule({ diff --git a/packages/eslint-plugin/src/rules/no-redeclare.ts b/packages/eslint-plugin/src/rules/no-redeclare.ts index 296dc4a6d14f..9b404e6d8424 100644 --- a/packages/eslint-plugin/src/rules/no-redeclare.ts +++ b/packages/eslint-plugin/src/rules/no-redeclare.ts @@ -71,8 +71,7 @@ export default createRule({ node?: TSESTree.Comment | TSESTree.Identifier; loc?: TSESTree.SourceLocation; }, - void, - unknown + void > { if ( options?.builtinGlobals && diff --git a/packages/eslint-plugin/src/rules/no-shadow.ts b/packages/eslint-plugin/src/rules/no-shadow.ts index dbc86e930cde..9e2359e8b9f1 100644 --- a/packages/eslint-plugin/src/rules/no-shadow.ts +++ b/packages/eslint-plugin/src/rules/no-shadow.ts @@ -284,7 +284,7 @@ export default createRule({ * @returns Whether or not the variable name is allowed. */ function isAllowed(variable: TSESLint.Scope.Variable): boolean { - return options.allow!.indexOf(variable.name) !== -1; + return options.allow!.includes(variable.name); } /** diff --git a/packages/eslint-plugin/src/rules/no-unsafe-assignment.ts b/packages/eslint-plugin/src/rules/no-unsafe-assignment.ts index 819959b781d7..c16a4904756b 100644 --- a/packages/eslint-plugin/src/rules/no-unsafe-assignment.ts +++ b/packages/eslint-plugin/src/rules/no-unsafe-assignment.ts @@ -186,7 +186,7 @@ export default createRule({ } let key: string; - if (receiverProperty.computed === false) { + if (!receiverProperty.computed) { key = receiverProperty.key.type === AST_NODE_TYPES.Identifier ? receiverProperty.key.name diff --git a/packages/eslint-plugin/src/rules/prefer-regexp-exec.ts b/packages/eslint-plugin/src/rules/prefer-regexp-exec.ts index 8e61a735c13e..7bbf5feba250 100644 --- a/packages/eslint-plugin/src/rules/prefer-regexp-exec.ts +++ b/packages/eslint-plugin/src/rules/prefer-regexp-exec.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/prefer-literal-enum-member */ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import * as tsutils from 'ts-api-utils'; diff --git a/packages/eslint-plugin/src/util/collectUnusedVariables.ts b/packages/eslint-plugin/src/util/collectUnusedVariables.ts index 4df1a178fbdb..8ec63de10dc6 100644 --- a/packages/eslint-plugin/src/util/collectUnusedVariables.ts +++ b/packages/eslint-plugin/src/util/collectUnusedVariables.ts @@ -323,7 +323,7 @@ class UnusedVarsVisitor< protected TSModuleDeclaration(node: TSESTree.TSModuleDeclaration): void { // -- global augmentation can be in any file, and they do not need exports - if (node.global === true) { + if (node.global) { this.markVariableAsUsed('global', node.parent); } } diff --git a/packages/eslint-plugin/src/util/getOperatorPrecedence.ts b/packages/eslint-plugin/src/util/getOperatorPrecedence.ts index b899e1f8cc99..3d3152f436f5 100644 --- a/packages/eslint-plugin/src/util/getOperatorPrecedence.ts +++ b/packages/eslint-plugin/src/util/getOperatorPrecedence.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/prefer-literal-enum-member -- the enums come from TS so to make merging upstream easier we purposely avoid adding literal values. */ import type { TSESTree } from '@typescript-eslint/utils'; import { AST_NODE_TYPES } from '@typescript-eslint/utils'; import { SyntaxKind } from 'typescript'; diff --git a/packages/eslint-plugin/tools/generate-configs.ts b/packages/eslint-plugin/tools/generate-configs.ts index fdd536d47179..ccce38829ef3 100644 --- a/packages/eslint-plugin/tools/generate-configs.ts +++ b/packages/eslint-plugin/tools/generate-configs.ts @@ -74,10 +74,8 @@ async function main(): Promise { ); const EXTENDS = ['./configs/base', './configs/eslint-recommended']; - type RuleEntry = [ - string, - TSESLint.RuleModule, - ]; + // TODO: migrate to import { RuleModule } from '@typescript-eslint/utils/ts-eslint' + type RuleEntry = [string, TSESLint.RuleModule]; const allRuleEntries: RuleEntry[] = Object.entries(rules).sort((a, b) => a[0].localeCompare(b[0]), diff --git a/packages/rule-tester/src/RuleTester.ts b/packages/rule-tester/src/RuleTester.ts index 0aab722a4502..85bd223d8609 100644 --- a/packages/rule-tester/src/RuleTester.ts +++ b/packages/rule-tester/src/RuleTester.ts @@ -237,7 +237,7 @@ export class RuleTester extends TestFramework { // convenience iterator to make it easy to loop all tests without a concat const allTestsIterator = { - *[Symbol.iterator](): Generator, void, unknown> { + *[Symbol.iterator](): Generator, void> { for (const testCase of normalizedTests.valid) { yield testCase; } diff --git a/packages/rule-tester/src/TestFramework.ts b/packages/rule-tester/src/TestFramework.ts index dea77d746249..f7ed21b51e17 100644 --- a/packages/rule-tester/src/TestFramework.ts +++ b/packages/rule-tester/src/TestFramework.ts @@ -51,6 +51,7 @@ let OVERRIDE_IT_SKIP: Maybe = null; * allows the user to manually supply functions in case they want to roll their * own tooling */ +// eslint-disable-next-line @typescript-eslint/no-extraneous-class export abstract class TestFramework { /** * Runs a function after all the tests in this file have completed. diff --git a/packages/rule-tester/tests/RuleTester.test.ts b/packages/rule-tester/tests/RuleTester.test.ts index 07ad0f31f8ab..ad03048a767a 100644 --- a/packages/rule-tester/tests/RuleTester.test.ts +++ b/packages/rule-tester/tests/RuleTester.test.ts @@ -119,7 +119,7 @@ beforeEach(() => { jest.clearAllMocks(); }); -const NOOP_RULE: RuleModule<'error', []> = { +const NOOP_RULE: RuleModule<'error'> = { meta: { messages: { error: 'error', diff --git a/packages/scope-manager/src/definition/DefinitionBase.ts b/packages/scope-manager/src/definition/DefinitionBase.ts index 2418e5e8af48..01976f164eb0 100644 --- a/packages/scope-manager/src/definition/DefinitionBase.ts +++ b/packages/scope-manager/src/definition/DefinitionBase.ts @@ -9,7 +9,7 @@ abstract class DefinitionBase< TType extends DefinitionType, TNode extends TSESTree.Node, TParent extends TSESTree.Node | null, - TName extends TSESTree.Node = TSESTree.BindingName, + TName extends TSESTree.Node, > { /** * A unique ID for this instance - primarily used to help debugging and testing diff --git a/packages/scope-manager/tests/util/getSpecificNode.ts b/packages/scope-manager/tests/util/getSpecificNode.ts index e9d23cf90c97..520d43bc7a86 100644 --- a/packages/scope-manager/tests/util/getSpecificNode.ts +++ b/packages/scope-manager/tests/util/getSpecificNode.ts @@ -1,17 +1,13 @@ import type { AST_NODE_TYPES, TSESTree } from '@typescript-eslint/types'; import { simpleTraverse } from '@typescript-eslint/typescript-estree'; -function getSpecificNode< - TSelector extends AST_NODE_TYPES, - TNode extends Extract, ->(ast: TSESTree.Node, selector: TSelector): TNode; function getSpecificNode< TSelector extends AST_NODE_TYPES, TNode extends Extract, >( ast: TSESTree.Node, selector: TSelector, - cb: (node: TNode) => boolean | null | undefined, + cb?: (node: TNode) => boolean | null | undefined, ): TNode; function getSpecificNode< TSelector extends AST_NODE_TYPES, diff --git a/packages/scope-manager/tests/util/serializers/DefinitionBase.ts b/packages/scope-manager/tests/util/serializers/DefinitionBase.ts index 7402ee1cc68b..08f88fe750e0 100644 --- a/packages/scope-manager/tests/util/serializers/DefinitionBase.ts +++ b/packages/scope-manager/tests/util/serializers/DefinitionBase.ts @@ -1,9 +1,17 @@ +import type { TSESTree } from '@typescript-eslint/types'; + import { DefinitionBase } from '../../../src/definition/DefinitionBase'; import { createSerializer } from './baseSerializer'; // hacking around the fact that you can't use abstract classes generically -// eslint-disable-next-line @typescript-eslint/no-explicit-any -class DefinitionInstance extends DefinitionBase { +class DefinitionInstance extends DefinitionBase< + /* eslint-disable @typescript-eslint/no-explicit-any */ + any, + any, + any, + /* eslint-enable @typescript-eslint/no-explicit-any */ + TSESTree.BindingName +> { isTypeDefinition = false; isVariableDefinition = false; } diff --git a/packages/typescript-estree/src/convert.ts b/packages/typescript-estree/src/convert.ts index a6e35dd4bcc2..eb4e7c39ea18 100644 --- a/packages/typescript-estree/src/convert.ts +++ b/packages/typescript-estree/src/convert.ts @@ -198,7 +198,7 @@ export class Converter { const isType = result.type === AST_NODE_TYPES.TSInterfaceDeclaration || result.type === AST_NODE_TYPES.TSTypeAliasDeclaration; - const isDeclare = 'declare' in result && result.declare === true; + const isDeclare = 'declare' in result && result.declare; return this.createNode(node, { type: AST_NODE_TYPES.ExportNamedDeclaration, // @ts-expect-error - TODO, narrow the types here diff --git a/packages/typescript-estree/src/parseSettings/ExpiringCache.ts b/packages/typescript-estree/src/parseSettings/ExpiringCache.ts index 49b564e061b9..344942747917 100644 --- a/packages/typescript-estree/src/parseSettings/ExpiringCache.ts +++ b/packages/typescript-estree/src/parseSettings/ExpiringCache.ts @@ -4,7 +4,7 @@ export const DEFAULT_TSCONFIG_CACHE_DURATION_SECONDS = 30; const ZERO_HR_TIME: [number, number] = [0, 0]; export interface CacheLike { - get(key: Key): Value | void; + get(key: Key): Value | undefined; set(key: Key, value: Value): this; } diff --git a/packages/typescript-estree/tests/lib/parse.test.ts b/packages/typescript-estree/tests/lib/parse.test.ts index 658493c9150c..1b39713f1557 100644 --- a/packages/typescript-estree/tests/lib/parse.test.ts +++ b/packages/typescript-estree/tests/lib/parse.test.ts @@ -362,7 +362,7 @@ describe('parseAndGenerateServices', () => { filePath: join(PROJECT_DIR, filePath), }); } catch (error) { - throw alignErrorPath(error as Error); + alignErrorPath(error as Error); } }; @@ -499,7 +499,7 @@ describe('parseAndGenerateServices', () => { filePath: join(PROJECT_DIR, filePath), }); } catch (error) { - throw alignErrorPath(error as Error); + alignErrorPath(error as Error); } }; diff --git a/packages/utils/src/eslint-utils/getParserServices.ts b/packages/utils/src/eslint-utils/getParserServices.ts index 4b65afe3cf66..6b4d50b88638 100644 --- a/packages/utils/src/eslint-utils/getParserServices.ts +++ b/packages/utils/src/eslint-utils/getParserServices.ts @@ -7,6 +7,7 @@ import type { const ERROR_MESSAGE = 'You have used a rule which requires parserServices to be generated. You must therefore provide a value for the "parserOptions.project" property for @typescript-eslint/parser.'; +/* eslint-disable @typescript-eslint/unified-signatures */ /** * Try to retrieve type-aware parser service from context. * This **_will_** throw if it is not available. @@ -83,5 +84,6 @@ function getParserServices( return context.parserServices; } +/* eslint-enable @typescript-eslint/unified-signatures */ export { getParserServices }; diff --git a/packages/utils/src/json-schema.ts b/packages/utils/src/json-schema.ts index 51ae016ca453..a3b2e5fdeceb 100644 --- a/packages/utils/src/json-schema.ts +++ b/packages/utils/src/json-schema.ts @@ -33,7 +33,6 @@ export type JSONSchema4TypeExtended = | JSONSchema4Object; // Workaround for infinite type recursion -// eslint-disable-next-line @typescript-eslint/consistent-indexed-object-style export interface JSONSchema4Object { [key: string]: JSONSchema4TypeExtended; } diff --git a/packages/utils/src/ts-eslint/SourceCode.ts b/packages/utils/src/ts-eslint/SourceCode.ts index 7e8352b13d9d..03b9c9dd2896 100644 --- a/packages/utils/src/ts-eslint/SourceCode.ts +++ b/packages/utils/src/ts-eslint/SourceCode.ts @@ -186,7 +186,7 @@ declare class TokenStore { */ getTokensAfter( node: TSESTree.Node | TSESTree.Token, - options?: T, + options?: T | number, ): SourceCode.ReturnTypeFromOptions[]; /** * Gets the `count` tokens that precedes a given node or token. @@ -196,31 +196,19 @@ declare class TokenStore { */ getTokensBefore( node: TSESTree.Node | TSESTree.Token, - options?: T, - ): SourceCode.ReturnTypeFromOptions[]; - /** - * Gets all of the tokens between two non-overlapping nodes. - * @param left Node before the desired token range. - * @param right Node after the desired token range. - * @param options The option object. If this is a function then it's `options.filter`. - * @returns Tokens between left and right. - */ - getTokensBetween( - left: TSESTree.Node | TSESTree.Token, - right: TSESTree.Node | TSESTree.Token, - padding?: T, + options?: T | number, ): SourceCode.ReturnTypeFromOptions[]; /** * Gets all of the tokens between two non-overlapping nodes. * @param left Node before the desired token range. * @param right Node after the desired token range. - * @param padding Number of extra tokens on either side of center. + * @param options The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`. * @returns Tokens between left and right. */ getTokensBetween( left: TSESTree.Node | TSESTree.Token, right: TSESTree.Node | TSESTree.Token, - padding?: number, + options?: T | number, ): SourceCode.ReturnTypeFromOptions[]; } diff --git a/packages/website-eslint/src/mock/eslint.js b/packages/website-eslint/src/mock/eslint.js index bb112732ff67..fac5d44d93e6 100644 --- a/packages/website-eslint/src/mock/eslint.js +++ b/packages/website-eslint/src/mock/eslint.js @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/no-extraneous-class */ class RuleTester {} class SourceCode {} diff --git a/packages/website/plugins/generated-rule-docs.ts b/packages/website/plugins/generated-rule-docs.ts index 207b11720bff..8d1cc8b56347 100644 --- a/packages/website/plugins/generated-rule-docs.ts +++ b/packages/website/plugins/generated-rule-docs.ts @@ -40,7 +40,7 @@ const eslintPluginDirectory = path.resolve( path.join(__dirname, '../../eslint-plugin'), ); -function nodeIsParent(node: unist.Node): node is unist.Parent { +function nodeIsParent(node: unist.Node): node is unist.Parent { return 'children' in node; } diff --git a/packages/website/src/hooks/useHistorySelector.ts b/packages/website/src/hooks/useHistorySelector.ts index 841c100b83b9..31745005ac11 100644 --- a/packages/website/src/hooks/useHistorySelector.ts +++ b/packages/website/src/hooks/useHistorySelector.ts @@ -2,7 +2,7 @@ import { useHistory } from '@docusaurus/router'; import type * as H from 'history'; import { useSyncExternalStore } from 'react'; -export type HistorySelector = (history: H.History) => T; +export type HistorySelector = (history: H.History) => T; export function useHistorySelector( selector: HistorySelector, pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy