diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 37efc0409b22..05d3bc1f30e4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,6 +4,7 @@ on: push: branches: - main + - v8 pull_request: branches: - '**' @@ -201,19 +202,19 @@ jobs: # packages don't collect coverage on purpose, so forcing `--coverage=true` # would override the config - name: Run unit tests with coverage for ${{ matrix.package }} - if: env.PRIMARY_NODE_VERSION == matrix.node-version + if: env.PRIMARY_NODE_VERSION == matrix.node-version && matrix.os == 'ubuntu-latest' run: npx nx test ${{ matrix.package }} env: CI: true - name: Run unit tests for ${{ matrix.package }} - if: env.PRIMARY_NODE_VERSION != matrix.node-version + if: env.PRIMARY_NODE_VERSION != matrix.node-version || matrix.os != 'ubuntu-latest' run: npx nx test ${{ matrix.package }} --coverage=false env: CI: true - name: Store coverage for uploading - if: env.PRIMARY_NODE_VERSION == matrix.node-version - uses: actions/upload-artifact@v3 + if: env.PRIMARY_NODE_VERSION == matrix.node-version && matrix.os == 'ubuntu-latest' + uses: actions/upload-artifact@v4 with: name: ${{ matrix.package }}-coverage path: packages/${{ matrix.package }}/coverage/lcov.info @@ -300,3 +301,36 @@ jobs: NX_CLOUD_DISTRIBUTED_EXECUTION: false NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} NPM_CONFIG_PROVENANCE: true + + publish_canary_version_v8: + name: Publish the latest v8 code as a canary version + runs-on: ubuntu-latest + permissions: + id-token: write + needs: [integration_tests, lint_with_build, lint_without_build, unit_tests] + if: github.repository == 'typescript-eslint/typescript-eslint' && github.ref == 'refs/heads/v8' + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 0 # we need the tags to be available + + - name: Install + uses: ./.github/actions/prepare-install + with: + node-version: ${{ env.PRIMARY_NODE_VERSION }} + registry-url: 'https://registry.npmjs.org' + + - name: Build + uses: ./.github/actions/prepare-build + + - name: Figure out and apply the next canary version + run: npx nx run repo-tools:apply-canary-version + + - name: Publish all packages to npm with the canary tag + # NOTE: this needs to be npx, rather than yarn, to make sure the authenticated npm registry is used + run: npx lerna publish premajor --loglevel=verbose --canary --exact --force-publish --yes --dist-tag rc-v8 + env: + NX_CLOUD_DISTRIBUTED_EXECUTION: false + NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} + NPM_CONFIG_PROVENANCE: true diff --git a/CHANGELOG.md b/CHANGELOG.md index 1fcf54bf760e..c84e110e22c5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,22 @@ +## 7.7.1 (2024-04-22) + + +### 🩹 Fixes + +- **eslint-plugin:** [no-unsafe-assignment] handle shorthand property assignment ([#8800](https://github.com/typescript-eslint/typescript-eslint/pull/8800)) +- **eslint-plugin:** [explicit-function-return-type] fix checking wrong ancestor's return type ([#8809](https://github.com/typescript-eslint/typescript-eslint/pull/8809)) +- **eslint-plugin:** [prefer-optional-chain] only look at left operand for `requireNullish` ([#8559](https://github.com/typescript-eslint/typescript-eslint/pull/8559)) +- **eslint-plugin:** [no-for-in-array] refine report location ([#8874](https://github.com/typescript-eslint/typescript-eslint/pull/8874)) +- **eslint-plugin:** [no-unnecessary-type-assertion] allow non-null assertion for void type ([#8912](https://github.com/typescript-eslint/typescript-eslint/pull/8912)) + +### ❤️ Thank You + +- Abraham Guo +- Kirk Waiblinger @kirkwaiblinger +- YeonJuan @yeonjuan + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.7.0 (2024-04-15) diff --git a/docs/maintenance/Releases.mdx b/docs/maintenance/Releases.mdx index cf9758911bbb..b26f933ad049 100644 --- a/docs/maintenance/Releases.mdx +++ b/docs/maintenance/Releases.mdx @@ -23,9 +23,9 @@ Per [Users > Releases > Major Releases](../users/Releases.mdx#major-releases), w - `v${major}` - `v${major}-canary-auto-release` 1. Raise a PR from `v${major}-canary-auto-release` to `main` modifying the [`ci.yml` workflow](https://github.com/typescript-eslint/typescript-eslint/blob/main/.github/workflows/ci.yml) [example: [chore: add auto-canary release for v6](https://github.com/typescript-eslint/typescript-eslint/pull/5883)]: - - Under `pushes:` at the beginning of the file, add an `- v${major}` list item. + - Under `push:` > `branches:` at the beginning of the file, add an `- v${major}` list item. - Add a `publish_canary_version_v${major}` step the same as `publish_canary_version` except: - - Add the condition: `if: github.ref == 'refs/heads/v${major}'`. + - Change the `if` condition's branch check to: `if: github.ref == 'refs/heads/v${major}'`. - Its publish command should be `npx lerna publish premajor --loglevel=verbose --canary --exact --force-publish --yes --dist-tag rc-v${major}`. - Merge this into `main` once reviewed and rebase the `v${major}` branch. diff --git a/docs/users/Shared_Configurations.mdx b/docs/users/Shared_Configurations.mdx index e0b18cffece8..0069359ee1b9 100644 --- a/docs/users/Shared_Configurations.mdx +++ b/docs/users/Shared_Configurations.mdx @@ -321,7 +321,7 @@ export default tseslint.config( }, // Added lines start { - files: ['*.js'], + files: ['**/*.js'], ...tseslint.configs.disableTypeChecked, }, // Added lines end @@ -346,7 +346,7 @@ module.exports = { // Added lines start overrides: [ { - files: ['*.js'], + files: ['**/*.js'], extends: ['plugin:@typescript-eslint/disable-type-checked'], }, ], diff --git a/packages/ast-spec/CHANGELOG.md b/packages/ast-spec/CHANGELOG.md index 069cb338a776..baf1d7f7804f 100644 --- a/packages/ast-spec/CHANGELOG.md +++ b/packages/ast-spec/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.7.1 (2024-04-22) + +This was a version bump only for ast-spec to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.7.0 (2024-04-15) This was a version bump only for ast-spec to align it with other projects, there were no code changes. diff --git a/packages/ast-spec/package.json b/packages/ast-spec/package.json index fda4218df1d0..b8b43e86453b 100644 --- a/packages/ast-spec/package.json +++ b/packages/ast-spec/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/ast-spec", - "version": "7.7.0", + "version": "7.7.1", "description": "Complete specification for the TypeScript-ESTree AST", "private": true, "keywords": [ diff --git a/packages/eslint-plugin-internal/CHANGELOG.md b/packages/eslint-plugin-internal/CHANGELOG.md index 7938e87c4aeb..44420b2cfba0 100644 --- a/packages/eslint-plugin-internal/CHANGELOG.md +++ b/packages/eslint-plugin-internal/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.7.1 (2024-04-22) + +This was a version bump only for eslint-plugin-internal to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.7.0 (2024-04-15) This was a version bump only for eslint-plugin-internal to align it with other projects, there were no code changes. diff --git a/packages/eslint-plugin-internal/package.json b/packages/eslint-plugin-internal/package.json index 8ff65ceecfcc..55837d3e58a7 100644 --- a/packages/eslint-plugin-internal/package.json +++ b/packages/eslint-plugin-internal/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/eslint-plugin-internal", - "version": "7.7.0", + "version": "7.7.1", "private": true, "main": "dist/index.js", "types": "index.d.ts", @@ -15,10 +15,10 @@ }, "dependencies": { "@prettier/sync": "^0.5.1", - "@typescript-eslint/rule-tester": "7.7.0", - "@typescript-eslint/scope-manager": "7.7.0", - "@typescript-eslint/type-utils": "7.7.0", - "@typescript-eslint/utils": "7.7.0", + "@typescript-eslint/rule-tester": "7.7.1", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/type-utils": "7.7.1", + "@typescript-eslint/utils": "7.7.1", "prettier": "^3.2.5" }, "devDependencies": { diff --git a/packages/eslint-plugin/CHANGELOG.md b/packages/eslint-plugin/CHANGELOG.md index a1bcd5637aa3..440117f007ba 100644 --- a/packages/eslint-plugin/CHANGELOG.md +++ b/packages/eslint-plugin/CHANGELOG.md @@ -1,3 +1,27 @@ +## 7.7.1 (2024-04-22) + + +### 🩹 Fixes + +- **eslint-plugin:** [no-unsafe-assignment] handle shorthand property assignment + +- **eslint-plugin:** [explicit-function-return-type] fix checking wrong ancestor's return type + +- **eslint-plugin:** [prefer-optional-chain] only look at left operand for `requireNullish` + +- **eslint-plugin:** [no-for-in-array] refine report location + +- **eslint-plugin:** [no-unnecessary-type-assertion] allow non-null assertion for void type + + +### ❤️ Thank You + +- Abraham Guo +- Kirk Waiblinger +- YeonJuan + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.7.0 (2024-04-15) diff --git a/packages/eslint-plugin/docs/rules/prefer-optional-chain.mdx b/packages/eslint-plugin/docs/rules/prefer-optional-chain.mdx index 47fcec6d598f..ee7aa6abf42f 100644 --- a/packages/eslint-plugin/docs/rules/prefer-optional-chain.mdx +++ b/packages/eslint-plugin/docs/rules/prefer-optional-chain.mdx @@ -265,7 +265,7 @@ When this option is `true` the rule will skip operands that are not typed with ` -```ts option='{ "requireNullish": true }' skipValidation +```ts option='{ "requireNullish": true }' declare const thing1: string | null; thing1 && thing1.toString(); ``` diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json index 17281aa1344e..d6cd43c42f43 100644 --- a/packages/eslint-plugin/package.json +++ b/packages/eslint-plugin/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/eslint-plugin", - "version": "7.7.0", + "version": "7.7.1", "description": "TypeScript plugin for ESLint", "files": [ "dist", @@ -62,10 +62,10 @@ }, "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "7.7.0", - "@typescript-eslint/type-utils": "7.7.0", - "@typescript-eslint/utils": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/type-utils": "7.7.1", + "@typescript-eslint/utils": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", "debug": "^4.3.4", "graphemer": "^1.4.0", "ignore": "^5.3.1", @@ -78,8 +78,8 @@ "@types/marked": "*", "@types/mdast": "^4.0.3", "@types/natural-compare": "*", - "@typescript-eslint/rule-schema-to-typescript-types": "7.7.0", - "@typescript-eslint/rule-tester": "7.7.0", + "@typescript-eslint/rule-schema-to-typescript-types": "7.7.1", + "@typescript-eslint/rule-tester": "7.7.1", "ajv": "^6.12.6", "chalk": "^5.3.0", "cross-env": "^7.0.3", diff --git a/packages/eslint-plugin/src/rules/no-for-in-array.ts b/packages/eslint-plugin/src/rules/no-for-in-array.ts index ad70180f3570..6d104b639ebe 100644 --- a/packages/eslint-plugin/src/rules/no-for-in-array.ts +++ b/packages/eslint-plugin/src/rules/no-for-in-array.ts @@ -6,6 +6,7 @@ import { getParserServices, isTypeArrayTypeOrUnionOfArrayTypes, } from '../util'; +import { getForStatementHeadLoc } from '../util/getForStatementHeadLoc'; export default createRule({ name: 'no-for-in-array', @@ -36,7 +37,7 @@ export default createRule({ (type.flags & ts.TypeFlags.StringLike) !== 0 ) { context.report({ - node, + loc: getForStatementHeadLoc(context.sourceCode, node), messageId: 'forInViolation', }); } 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 a73962b9acbd..f23d434c7aec 100644 --- a/packages/eslint-plugin/src/rules/no-unnecessary-type-assertion.ts +++ b/packages/eslint-plugin/src/rules/no-unnecessary-type-assertion.ts @@ -189,7 +189,7 @@ export default createRule({ const type = getConstrainedTypeAtLocation(services, node.expression); - if (!isNullableType(type)) { + if (!isNullableType(type) && !isTypeFlagSet(type, ts.TypeFlags.Void)) { if ( node.expression.type === AST_NODE_TYPES.Identifier && isPossiblyUsedBeforeAssigned(node.expression) @@ -217,6 +217,7 @@ export default createRule({ ts.TypeFlags.Undefined, ); const typeIncludesNull = isTypeFlagSet(type, ts.TypeFlags.Null); + const typeIncludesVoid = isTypeFlagSet(type, ts.TypeFlags.Void); const contextualTypeIncludesUndefined = isTypeFlagSet( contextualType, @@ -226,6 +227,10 @@ export default createRule({ contextualType, ts.TypeFlags.Null, ); + const contextualTypeIncludesVoid = isTypeFlagSet( + contextualType, + ts.TypeFlags.Void, + ); // make sure that the parent accepts the same types // i.e. assigning `string | null | undefined` to `string | undefined` is invalid @@ -235,8 +240,11 @@ export default createRule({ const isValidNull = typeIncludesNull ? contextualTypeIncludesNull : true; + const isValidVoid = typeIncludesVoid + ? contextualTypeIncludesVoid + : true; - if (isValidUndefined && isValidNull) { + if (isValidUndefined && isValidNull && isValidVoid) { context.report({ node, messageId: 'contextuallyUnnecessary', diff --git a/packages/eslint-plugin/src/rules/prefer-optional-chain-utils/analyzeChain.ts b/packages/eslint-plugin/src/rules/prefer-optional-chain-utils/analyzeChain.ts index 5ebb8e02ae51..24ba787dec77 100644 --- a/packages/eslint-plugin/src/rules/prefer-optional-chain-utils/analyzeChain.ts +++ b/packages/eslint-plugin/src/rules/prefer-optional-chain-utils/analyzeChain.ts @@ -20,6 +20,7 @@ import { NullThrowsReasons, OperatorPrecedence, } from '../../util'; +import { checkNullishAndReport } from './checkNullishAndReport'; import { compareNodes, NodeComparisonResult } from './compareNodes'; import type { ValidOperand } from './gatherLogicalOperands'; import { NullishComparisonType } from './gatherLogicalOperands'; @@ -493,20 +494,26 @@ export function analyzeChain( ): void => { if (subChain.length > 1) { const subChainFlat = subChain.flat(); - context.report({ - messageId: 'preferOptionalChain', - loc: { - start: subChainFlat[0].node.loc.start, - end: subChainFlat[subChainFlat.length - 1].node.loc.end, + checkNullishAndReport( + context, + parserServices, + options, + subChainFlat.slice(0, -1).map(({ node }) => node), + { + messageId: 'preferOptionalChain', + loc: { + start: subChainFlat[0].node.loc.start, + end: subChainFlat[subChainFlat.length - 1].node.loc.end, + }, + ...getFixer( + context.sourceCode, + parserServices, + operator, + options, + subChainFlat, + ), }, - ...getFixer( - context.sourceCode, - parserServices, - operator, - options, - subChainFlat, - ), - }); + ); } // we've reached the end of a chain of logical expressions diff --git a/packages/eslint-plugin/src/rules/prefer-optional-chain-utils/checkNullishAndReport.ts b/packages/eslint-plugin/src/rules/prefer-optional-chain-utils/checkNullishAndReport.ts new file mode 100644 index 000000000000..404b3736040a --- /dev/null +++ b/packages/eslint-plugin/src/rules/prefer-optional-chain-utils/checkNullishAndReport.ts @@ -0,0 +1,38 @@ +import { isTypeFlagSet } from '@typescript-eslint/type-utils'; +import type { + ParserServicesWithTypeInformation, + TSESTree, +} from '@typescript-eslint/utils'; +import type { + ReportDescriptor, + RuleContext, +} from '@typescript-eslint/utils/ts-eslint'; +import { unionTypeParts } from 'ts-api-utils'; +import * as ts from 'typescript'; + +import type { + PreferOptionalChainMessageIds, + PreferOptionalChainOptions, +} from './PreferOptionalChainOptions'; + +export function checkNullishAndReport( + context: RuleContext< + PreferOptionalChainMessageIds, + [PreferOptionalChainOptions] + >, + parserServices: ParserServicesWithTypeInformation, + { requireNullish }: PreferOptionalChainOptions, + maybeNullishNodes: TSESTree.Expression[], + descriptor: ReportDescriptor, +): void { + if ( + !requireNullish || + maybeNullishNodes.some(node => + unionTypeParts(parserServices.getTypeAtLocation(node)).some(t => + isTypeFlagSet(t, ts.TypeFlags.Null | ts.TypeFlags.Undefined), + ), + ) + ) { + context.report(descriptor); + } +} diff --git a/packages/eslint-plugin/src/rules/prefer-optional-chain-utils/gatherLogicalOperands.ts b/packages/eslint-plugin/src/rules/prefer-optional-chain-utils/gatherLogicalOperands.ts index 4b90947da0ed..54c44f4edda9 100644 --- a/packages/eslint-plugin/src/rules/prefer-optional-chain-utils/gatherLogicalOperands.ts +++ b/packages/eslint-plugin/src/rules/prefer-optional-chain-utils/gatherLogicalOperands.ts @@ -90,10 +90,6 @@ function isValidFalseBooleanCheckType( } } - if (options.requireNullish === true) { - return types.some(t => isTypeFlagSet(t, NULLISH_FLAGS)); - } - let allowedFlags = NULLISH_FLAGS | ts.TypeFlags.Object; if (options.checkAny === true) { allowedFlags |= ts.TypeFlags.Any; diff --git a/packages/eslint-plugin/src/rules/prefer-optional-chain.ts b/packages/eslint-plugin/src/rules/prefer-optional-chain.ts index 605045b99fd2..18acdd72caf2 100644 --- a/packages/eslint-plugin/src/rules/prefer-optional-chain.ts +++ b/packages/eslint-plugin/src/rules/prefer-optional-chain.ts @@ -10,6 +10,7 @@ import { OperatorPrecedence, } from '../util'; import { analyzeChain } from './prefer-optional-chain-utils/analyzeChain'; +import { checkNullishAndReport } from './prefer-optional-chain-utils/checkNullishAndReport'; import type { ValidOperand } from './prefer-optional-chain-utils/gatherLogicalOperands'; import { gatherLogicalOperands, @@ -141,9 +142,9 @@ export default createRule< return leftPrecedence < OperatorPrecedence.LeftHandSide; } - context.report({ - node: parentNode, + checkNullishAndReport(context, parserServices, options, [leftNode], { messageId: 'preferOptionalChain', + node: parentNode, suggest: [ { messageId: 'optionalChainSuggest', diff --git a/packages/eslint-plugin/src/util/explicitReturnTypeUtils.ts b/packages/eslint-plugin/src/util/explicitReturnTypeUtils.ts index 1cfc834c1c1b..2604e6185cc0 100644 --- a/packages/eslint-plugin/src/util/explicitReturnTypeUtils.ts +++ b/packages/eslint-plugin/src/util/explicitReturnTypeUtils.ts @@ -337,15 +337,12 @@ function ancestorHasReturnType(node: FunctionNode): boolean { // const x: Foo = () => {}; // Assume that a typed variable types the function expression case AST_NODE_TYPES.VariableDeclarator: - if (ancestor.id.typeAnnotation) { - return true; - } - break; + return !!ancestor.id.typeAnnotation; + case AST_NODE_TYPES.PropertyDefinition: - if (ancestor.typeAnnotation) { - return true; - } - break; + return !!ancestor.typeAnnotation; + case AST_NODE_TYPES.ExpressionStatement: + return false; } ancestor = ancestor.parent; diff --git a/packages/eslint-plugin/src/util/getForStatementHeadLoc.ts b/packages/eslint-plugin/src/util/getForStatementHeadLoc.ts new file mode 100644 index 000000000000..8a7711fbe0b6 --- /dev/null +++ b/packages/eslint-plugin/src/util/getForStatementHeadLoc.ts @@ -0,0 +1,34 @@ +import type { TSESLint, TSESTree } from '@typescript-eslint/utils'; +import { nullThrows } from '@typescript-eslint/utils/eslint-utils'; + +/** + * Gets the location of the head of the given for statement variant for reporting. + * + * - `for (const foo in bar) expressionOrBlock` + * ^^^^^^^^^^^^^^^^^^^^^^ + * + * - `for (const foo of bar) expressionOrBlock` + * ^^^^^^^^^^^^^^^^^^^^^^ + * + * - `for await (const foo of bar) expressionOrBlock` + * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + * + * - `for (let i = 0; i < 10; i++) expressionOrBlock` + * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + */ +export function getForStatementHeadLoc( + sourceCode: TSESLint.SourceCode, + node: + | TSESTree.ForInStatement + | TSESTree.ForOfStatement + | TSESTree.ForStatement, +): TSESTree.SourceLocation { + const closingParens = nullThrows( + sourceCode.getTokenBefore(node.body, token => token.value === ')'), + 'for statement must have a closing parenthesis.', + ); + return { + start: structuredClone(node.loc.start), + end: structuredClone(closingParens.loc.end), + }; +} diff --git a/packages/eslint-plugin/tests/docs-eslint-output-snapshots/no-for-in-array.shot b/packages/eslint-plugin/tests/docs-eslint-output-snapshots/no-for-in-array.shot index e5f4312e8cf0..dd18cfc5434d 100644 --- a/packages/eslint-plugin/tests/docs-eslint-output-snapshots/no-for-in-array.shot +++ b/packages/eslint-plugin/tests/docs-eslint-output-snapshots/no-for-in-array.shot @@ -6,18 +6,14 @@ exports[`Validating rule docs no-for-in-array.mdx code examples ESLint output 1` declare const array: string[]; for (const i in array) { -~~~~~~~~~~~~~~~~~~~~~~~~ For-in loops over arrays skips holes, returns indices as strings, and may visit the prototype chain or other enumerable properties. Use a more robust iteration method such as for-of or array.forEach instead. +~~~~~~~~~~~~~~~~~~~~~~ For-in loops over arrays skips holes, returns indices as strings, and may visit the prototype chain or other enumerable properties. Use a more robust iteration method such as for-of or array.forEach instead. console.log(array[i]); -~~~~~~~~~~~~~~~~~~~~~~~~ } -~ for (const i in array) { -~~~~~~~~~~~~~~~~~~~~~~~~ For-in loops over arrays skips holes, returns indices as strings, and may visit the prototype chain or other enumerable properties. Use a more robust iteration method such as for-of or array.forEach instead. +~~~~~~~~~~~~~~~~~~~~~~ For-in loops over arrays skips holes, returns indices as strings, and may visit the prototype chain or other enumerable properties. Use a more robust iteration method such as for-of or array.forEach instead. console.log(i, array[i]); -~~~~~~~~~~~~~~~~~~~~~~~~~~~ } -~ " `; diff --git a/packages/eslint-plugin/tests/docs-eslint-output-snapshots/prefer-optional-chain.shot b/packages/eslint-plugin/tests/docs-eslint-output-snapshots/prefer-optional-chain.shot index 36130171307f..980b3f8058df 100644 --- a/packages/eslint-plugin/tests/docs-eslint-output-snapshots/prefer-optional-chain.shot +++ b/packages/eslint-plugin/tests/docs-eslint-output-snapshots/prefer-optional-chain.shot @@ -202,6 +202,7 @@ Options: { "requireNullish": true } declare const thing1: string | null; thing1 && thing1.toString(); +~~~~~~~~~~~~~~~~~~~~~~~~~~~ Prefer using an optional chain expression instead, as it's more concise and easier to read. " `; diff --git a/packages/eslint-plugin/tests/rules/explicit-function-return-type.test.ts b/packages/eslint-plugin/tests/rules/explicit-function-return-type.test.ts index 2036927e0ca9..7556cee3ce77 100644 --- a/packages/eslint-plugin/tests/rules/explicit-function-return-type.test.ts +++ b/packages/eslint-plugin/tests/rules/explicit-function-return-type.test.ts @@ -1016,6 +1016,74 @@ class Foo { }, { code: ` +function foo(): any { + const bar = () => () => console.log('aa'); +} + `, + options: [ + { + allowTypedFunctionExpressions: true, + }, + ], + errors: [ + { + messageId: 'missingReturnType', + line: 3, + endLine: 3, + column: 24, + endColumn: 26, + }, + ], + }, + { + code: ` +let anyValue: any; +function foo(): any { + anyValue = () => () => console.log('aa'); +} + `, + options: [ + { + allowTypedFunctionExpressions: true, + }, + ], + errors: [ + { + messageId: 'missingReturnType', + line: 4, + endLine: 4, + column: 23, + endColumn: 25, + }, + ], + }, + { + code: ` +class Foo { + foo(): any { + const bar = () => () => { + return console.log('foo'); + }; + } +} + `, + options: [ + { + allowTypedFunctionExpressions: true, + }, + ], + errors: [ + { + messageId: 'missingReturnType', + line: 4, + endLine: 4, + column: 26, + endColumn: 28, + }, + ], + }, + { + code: ` var funcExpr = function () { return 'test'; }; @@ -1171,6 +1239,31 @@ const x: Foo = { }, ], }, + { + code: ` +function foo(): any { + class Foo { + foo = () => () => { + return console.log('foo'); + }; + } +} + `, + options: [ + { + allowTypedFunctionExpressions: true, + }, + ], + errors: [ + { + messageId: 'missingReturnType', + line: 4, + endLine: 4, + column: 20, + endColumn: 22, + }, + ], + }, { code: '() => () => {};', options: [{ allowHigherOrderFunctions: true }], diff --git a/packages/eslint-plugin/tests/rules/no-for-in-array.test.ts b/packages/eslint-plugin/tests/rules/no-for-in-array.test.ts index cb0fff64e361..35b1e1ae23a9 100644 --- a/packages/eslint-plugin/tests/rules/no-for-in-array.test.ts +++ b/packages/eslint-plugin/tests/rules/no-for-in-array.test.ts @@ -1,5 +1,4 @@ -import { RuleTester } from '@typescript-eslint/rule-tester'; -import { AST_NODE_TYPES } from '@typescript-eslint/utils'; +import { noFormat, RuleTester } from '@typescript-eslint/rule-tester'; import rule from '../../src/rules/no-for-in-array'; import { getFixturesRootDir } from '../RuleTester'; @@ -38,7 +37,10 @@ for (const x in [3, 4, 5]) { errors: [ { messageId: 'forInViolation', - type: AST_NODE_TYPES.ForInStatement, + line: 2, + column: 1, + endLine: 2, + endColumn: 27, }, ], }, @@ -52,7 +54,10 @@ for (const x in z) { errors: [ { messageId: 'forInViolation', - type: AST_NODE_TYPES.ForInStatement, + line: 3, + column: 1, + endLine: 3, + endColumn: 19, }, ], }, @@ -67,7 +72,10 @@ const fn = (arr: number[]) => { errors: [ { messageId: 'forInViolation', - type: AST_NODE_TYPES.ForInStatement, + line: 3, + column: 3, + endLine: 3, + endColumn: 23, }, ], }, @@ -82,7 +90,10 @@ const fn = (arr: number[] | string[]) => { errors: [ { messageId: 'forInViolation', - type: AST_NODE_TYPES.ForInStatement, + line: 3, + column: 3, + endLine: 3, + endColumn: 23, }, ], }, @@ -97,7 +108,72 @@ const fn = (arr: T) => { errors: [ { messageId: 'forInViolation', - type: AST_NODE_TYPES.ForInStatement, + line: 3, + column: 3, + endLine: 3, + endColumn: 23, + }, + ], + }, + { + code: noFormat` +for (const x + in + ( + ( + ( + [3, 4, 5] + ) + ) + ) + ) + // weird + /* spot for a */ + // comment + /* ) */ + /* ( */ + { + console.log(x); +} + `, + errors: [ + { + messageId: 'forInViolation', + line: 2, + column: 1, + endLine: 11, + endColumn: 4, + }, + ], + }, + { + code: noFormat` +for (const x + in + ( + ( + ( + [3, 4, 5] + ) + ) + ) + ) + // weird + /* spot for a */ + // comment + /* ) */ + /* ( */ + + ((((console.log('body without braces '))))); + + `, + errors: [ + { + messageId: 'forInViolation', + line: 2, + column: 1, + endLine: 11, + endColumn: 4, }, ], }, diff --git a/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts b/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts index 17efb3ff0baf..05f66efccd2f 100644 --- a/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unnecessary-type-assertion.test.ts @@ -88,6 +88,10 @@ let foo: number = bar!; declare const a: { data?: unknown }; const x = a.data!; + `, + ` +declare function foo(arg?: number): number | void; +const bar: number = foo()!; `, { code: ` @@ -692,6 +696,24 @@ y = 0; }, { code: ` +declare function foo(arg?: number): number | void; +const bar: number | void = foo()!; + `, + output: ` +declare function foo(arg?: number): number | void; +const bar: number | void = foo(); + `, + errors: [ + { + messageId: 'contextuallyUnnecessary', + line: 3, + column: 28, + endColumn: 34, + }, + ], + }, + { + code: ` declare function foo(): number; const a = foo()!; `, diff --git a/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts b/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts index 56da125a97ca..d1e2b7a8b8bb 100644 --- a/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts +++ b/packages/eslint-plugin/tests/rules/no-unsafe-assignment.test.ts @@ -157,6 +157,11 @@ declare function Foo(props: { a: string }): never; 'const x: Set = y as Set;', // https://github.com/typescript-eslint/typescript-eslint/issues/2109 'const x: Map = new Map();', + ` +type Foo = { bar: unknown }; +const bar: any = 1; +const foo: Foo = { bar }; + `, ], invalid: [ { @@ -389,5 +394,20 @@ const test: T = ['string', []] as any; }, ], }, + { + code: ` +type Foo = { bar: number }; +const bar: any = 1; +const foo: Foo = { bar }; + `, + errors: [ + { + messageId: 'anyAssignment', + line: 4, + column: 20, + endColumn: 23, + }, + ], + }, ], }); diff --git a/packages/eslint-plugin/tests/rules/prefer-optional-chain/prefer-optional-chain.test.ts b/packages/eslint-plugin/tests/rules/prefer-optional-chain/prefer-optional-chain.test.ts index 028998f7e521..91e908015fbb 100644 --- a/packages/eslint-plugin/tests/rules/prefer-optional-chain/prefer-optional-chain.test.ts +++ b/packages/eslint-plugin/tests/rules/prefer-optional-chain/prefer-optional-chain.test.ts @@ -815,22 +815,64 @@ describe('hand-crafted cases', () => { declare const x: string; x && x.length; `, - options: [ - { - requireNullish: true, - }, - ], + options: [{ requireNullish: true }], + }, + { + code: ` + declare const foo: string; + foo && foo.toString(); + `, + options: [{ requireNullish: true }], }, { code: ` declare const x: string | number | boolean | object; x && x.toString(); `, - options: [ - { - requireNullish: true, - }, - ], + options: [{ requireNullish: true }], + }, + { + code: ` + declare const foo: { bar: string }; + foo && foo.bar && foo.bar.toString(); + `, + options: [{ requireNullish: true }], + }, + { + code: ` + declare const foo: string; + foo && foo.toString() && foo.toString(); + `, + options: [{ requireNullish: true }], + }, + { + code: ` + declare const foo: { bar: string }; + foo && foo.bar && foo.bar.toString() && foo.bar.toString(); + `, + options: [{ requireNullish: true }], + }, + { + code: ` + declare const foo1: { bar: string | null }; + foo1 && foo1.bar; + `, + options: [{ requireNullish: true }], + }, + { + code: ` + declare const foo: string; + (foo || {}).toString(); + `, + options: [{ requireNullish: true }], + }, + + { + code: ` + declare const foo: string | null; + (foo || 'a' || {}).toString(); + `, + options: [{ requireNullish: true }], }, { code: ` @@ -1898,6 +1940,80 @@ describe('hand-crafted cases', () => { ], }, + // requireNullish + { + code: ` + declare const thing1: string | null; + thing1 && thing1.toString(); + `, + options: [{ requireNullish: true }], + errors: [{ messageId: 'preferOptionalChain' }], + }, + { + code: ` + declare const thing1: string | null; + thing1 && thing1.toString() && true; + `, + options: [{ requireNullish: true }], + errors: [{ messageId: 'preferOptionalChain' }], + }, + { + code: ` + declare const foo: string | null; + foo && foo.toString() && foo.toString(); + `, + options: [{ requireNullish: true }], + errors: [{ messageId: 'preferOptionalChain' }], + }, + { + code: ` + declare const foo: { bar: string | null | undefined } | null | undefined; + foo && foo.bar && foo.bar.toString(); + `, + output: ` + declare const foo: { bar: string | null | undefined } | null | undefined; + foo?.bar?.toString(); + `, + options: [{ requireNullish: true }], + errors: [{ messageId: 'preferOptionalChain' }], + }, + { + code: ` + declare const foo: { bar: string | null | undefined } | null | undefined; + foo && foo.bar && foo.bar.toString() && foo.bar.toString(); + `, + output: ` + declare const foo: { bar: string | null | undefined } | null | undefined; + foo?.bar?.toString() && foo.bar.toString(); + `, + options: [{ requireNullish: true }], + errors: [{ messageId: 'preferOptionalChain' }], + }, + { + code: ` + declare const foo: string | null; + (foo || {}).toString(); + `, + options: [{ requireNullish: true }], + errors: [{ messageId: 'preferOptionalChain' }], + }, + { + code: ` + declare const foo: string; + (foo || undefined || {}).toString(); + `, + options: [{ requireNullish: true }], + errors: [{ messageId: 'preferOptionalChain' }], + }, + { + code: ` + declare const foo: string | null; + (foo || undefined || {}).toString(); + `, + options: [{ requireNullish: true }], + errors: [{ messageId: 'preferOptionalChain' }], + }, + // allowPotentiallyUnsafeFixesThatModifyTheReturnTypeIKnowWhatImDoing { code: ` diff --git a/packages/integration-tests/CHANGELOG.md b/packages/integration-tests/CHANGELOG.md index 8ae4476c2a86..eba18856f8e5 100644 --- a/packages/integration-tests/CHANGELOG.md +++ b/packages/integration-tests/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.7.1 (2024-04-22) + +This was a version bump only for integration-tests to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.7.0 (2024-04-15) This was a version bump only for integration-tests to align it with other projects, there were no code changes. diff --git a/packages/integration-tests/package.json b/packages/integration-tests/package.json index d0cb209a41e4..d2b812c85797 100644 --- a/packages/integration-tests/package.json +++ b/packages/integration-tests/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/integration-tests", - "version": "7.7.0", + "version": "7.7.1", "private": true, "scripts": { "format": "prettier --write \"./**/*.{ts,mts,cts,tsx,js,mjs,cjs,jsx,json,md,css}\" --ignore-path ../../.prettierignore", diff --git a/packages/parser/CHANGELOG.md b/packages/parser/CHANGELOG.md index 3dd5e8975d32..1c85a787e210 100644 --- a/packages/parser/CHANGELOG.md +++ b/packages/parser/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.7.1 (2024-04-22) + +This was a version bump only for parser to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.7.0 (2024-04-15) This was a version bump only for parser to align it with other projects, there were no code changes. diff --git a/packages/parser/package.json b/packages/parser/package.json index 813f05ae7352..46870b381203 100644 --- a/packages/parser/package.json +++ b/packages/parser/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/parser", - "version": "7.7.0", + "version": "7.7.1", "description": "An ESLint custom parser which leverages TypeScript ESTree", "files": [ "dist", @@ -52,10 +52,10 @@ "eslint": "^8.56.0" }, "dependencies": { - "@typescript-eslint/scope-manager": "7.7.0", - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/typescript-estree": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/typescript-estree": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", "debug": "^4.3.4" }, "devDependencies": { diff --git a/packages/repo-tools/CHANGELOG.md b/packages/repo-tools/CHANGELOG.md index 150cef20d939..c41edbfeb087 100644 --- a/packages/repo-tools/CHANGELOG.md +++ b/packages/repo-tools/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.7.1 (2024-04-22) + +This was a version bump only for repo-tools to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.7.0 (2024-04-15) This was a version bump only for repo-tools to align it with other projects, there were no code changes. diff --git a/packages/repo-tools/package.json b/packages/repo-tools/package.json index c6d182ff3097..bfc2baa1fef7 100644 --- a/packages/repo-tools/package.json +++ b/packages/repo-tools/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/repo-tools", - "version": "7.7.0", + "version": "7.7.1", "private": true, "scripts": { "//": "NOTE: intentionally no build step in this package", diff --git a/packages/rule-schema-to-typescript-types/CHANGELOG.md b/packages/rule-schema-to-typescript-types/CHANGELOG.md index ad66113909ff..55317a5c3ddf 100644 --- a/packages/rule-schema-to-typescript-types/CHANGELOG.md +++ b/packages/rule-schema-to-typescript-types/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.7.1 (2024-04-22) + +This was a version bump only for rule-schema-to-typescript-types to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.7.0 (2024-04-15) This was a version bump only for rule-schema-to-typescript-types to align it with other projects, there were no code changes. diff --git a/packages/rule-schema-to-typescript-types/package.json b/packages/rule-schema-to-typescript-types/package.json index 0de9efc6bf5e..8ab24b92e711 100644 --- a/packages/rule-schema-to-typescript-types/package.json +++ b/packages/rule-schema-to-typescript-types/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/rule-schema-to-typescript-types", - "version": "7.7.0", + "version": "7.7.1", "private": true, "type": "commonjs", "exports": { @@ -34,8 +34,8 @@ "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@typescript-eslint/type-utils": "7.7.0", - "@typescript-eslint/utils": "7.7.0", + "@typescript-eslint/type-utils": "7.7.1", + "@typescript-eslint/utils": "7.7.1", "natural-compare": "^1.4.0", "prettier": "^3.2.5" }, diff --git a/packages/rule-tester/CHANGELOG.md b/packages/rule-tester/CHANGELOG.md index f18b89b37cc2..7d696f585491 100644 --- a/packages/rule-tester/CHANGELOG.md +++ b/packages/rule-tester/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.7.1 (2024-04-22) + +This was a version bump only for rule-tester to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.7.0 (2024-04-15) This was a version bump only for rule-tester to align it with other projects, there were no code changes. diff --git a/packages/rule-tester/package.json b/packages/rule-tester/package.json index a2d2c9e994d1..28f9fc92f11a 100644 --- a/packages/rule-tester/package.json +++ b/packages/rule-tester/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/rule-tester", - "version": "7.7.0", + "version": "7.7.1", "description": "Tooling to test ESLint rules", "files": [ "dist", @@ -48,8 +48,8 @@ }, "//": "NOTE - AJV is out-of-date, but it's intentionally synced with ESLint - https://github.com/eslint/eslint/blob/ad9dd6a933fd098a0d99c6a9aa059850535c23ee/package.json#L70", "dependencies": { - "@typescript-eslint/typescript-estree": "7.7.0", - "@typescript-eslint/utils": "7.7.0", + "@typescript-eslint/typescript-estree": "7.7.1", + "@typescript-eslint/utils": "7.7.1", "ajv": "^6.12.6", "lodash.merge": "4.6.2", "semver": "^7.6.0" @@ -60,7 +60,7 @@ }, "devDependencies": { "@types/lodash.merge": "4.6.9", - "@typescript-eslint/parser": "7.7.0", + "@typescript-eslint/parser": "7.7.1", "chai": "^4.4.1", "mocha": "^10.4.0", "sinon": "^16.1.3", diff --git a/packages/scope-manager/CHANGELOG.md b/packages/scope-manager/CHANGELOG.md index 505a16e212de..3c8be80dd39f 100644 --- a/packages/scope-manager/CHANGELOG.md +++ b/packages/scope-manager/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.7.1 (2024-04-22) + +This was a version bump only for scope-manager to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.7.0 (2024-04-15) This was a version bump only for scope-manager to align it with other projects, there were no code changes. diff --git a/packages/scope-manager/package.json b/packages/scope-manager/package.json index 5c10b9aed06f..5b7d1615a591 100644 --- a/packages/scope-manager/package.json +++ b/packages/scope-manager/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/scope-manager", - "version": "7.7.0", + "version": "7.7.1", "description": "TypeScript scope analyser for ESLint", "files": [ "dist", @@ -46,12 +46,12 @@ "typecheck": "npx nx typecheck" }, "dependencies": { - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0" + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1" }, "devDependencies": { "@types/glob": "*", - "@typescript-eslint/typescript-estree": "7.7.0", + "@typescript-eslint/typescript-estree": "7.7.1", "glob": "*", "jest-specific-snapshot": "*", "make-dir": "*", diff --git a/packages/type-utils/CHANGELOG.md b/packages/type-utils/CHANGELOG.md index df8295181f65..0a68332b77cf 100644 --- a/packages/type-utils/CHANGELOG.md +++ b/packages/type-utils/CHANGELOG.md @@ -1,3 +1,19 @@ +## 7.7.1 (2024-04-22) + + +### 🩹 Fixes + +- **eslint-plugin:** [no-unsafe-assignment] handle shorthand property assignment + + +### ❤️ Thank You + +- Abraham Guo +- Kirk Waiblinger +- YeonJuan + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.7.0 (2024-04-15) This was a version bump only for type-utils to align it with other projects, there were no code changes. diff --git a/packages/type-utils/package.json b/packages/type-utils/package.json index ec1b094c0993..f587e00c19cb 100644 --- a/packages/type-utils/package.json +++ b/packages/type-utils/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/type-utils", - "version": "7.7.0", + "version": "7.7.1", "description": "Type utilities for working with TypeScript + ESLint together", "files": [ "dist", @@ -46,13 +46,13 @@ "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@typescript-eslint/typescript-estree": "7.7.0", - "@typescript-eslint/utils": "7.7.0", + "@typescript-eslint/typescript-estree": "7.7.1", + "@typescript-eslint/utils": "7.7.1", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, "devDependencies": { - "@typescript-eslint/parser": "7.7.0", + "@typescript-eslint/parser": "7.7.1", "ajv": "^6.12.6", "downlevel-dts": "*", "jest": "29.7.0", diff --git a/packages/type-utils/src/getContextualType.ts b/packages/type-utils/src/getContextualType.ts index 8aee05fcb55d..ed96b0d7f6cf 100644 --- a/packages/type-utils/src/getContextualType.ts +++ b/packages/type-utils/src/getContextualType.ts @@ -24,7 +24,11 @@ export function getContextualType( return parent.type ? checker.getTypeFromTypeNode(parent.type) : undefined; } else if (ts.isJsxExpression(parent)) { return checker.getContextualType(parent); - } else if (ts.isPropertyAssignment(parent) && ts.isIdentifier(node)) { + } else if ( + ts.isIdentifier(node) && + (ts.isPropertyAssignment(parent) || + ts.isShorthandPropertyAssignment(parent)) + ) { return checker.getContextualType(node); } else if ( ts.isBinaryExpression(parent) && diff --git a/packages/types/CHANGELOG.md b/packages/types/CHANGELOG.md index 37e28f0e9c82..39b17158868d 100644 --- a/packages/types/CHANGELOG.md +++ b/packages/types/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.7.1 (2024-04-22) + +This was a version bump only for types to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.7.0 (2024-04-15) This was a version bump only for types to align it with other projects, there were no code changes. diff --git a/packages/types/package.json b/packages/types/package.json index 253a38370b1d..2e9480978bb0 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/types", - "version": "7.7.0", + "version": "7.7.1", "description": "Types for the TypeScript-ESTree AST spec", "files": [ "dist", diff --git a/packages/typescript-eslint/CHANGELOG.md b/packages/typescript-eslint/CHANGELOG.md index 8278aeaf3986..a499f9b3d45c 100644 --- a/packages/typescript-eslint/CHANGELOG.md +++ b/packages/typescript-eslint/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.7.1 (2024-04-22) + +This was a version bump only for typescript-eslint to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.7.0 (2024-04-15) This was a version bump only for typescript-eslint to align it with other projects, there were no code changes. diff --git a/packages/typescript-eslint/package.json b/packages/typescript-eslint/package.json index d222007c5739..4b1fef4cf88c 100644 --- a/packages/typescript-eslint/package.json +++ b/packages/typescript-eslint/package.json @@ -1,6 +1,6 @@ { "name": "typescript-eslint", - "version": "7.7.0", + "version": "7.7.1", "description": "Tooling which enables you to use TypeScript with ESLint", "files": [ "dist", @@ -55,9 +55,9 @@ "eslint": "^8.56.0" }, "dependencies": { - "@typescript-eslint/eslint-plugin": "7.7.0", - "@typescript-eslint/parser": "7.7.0", - "@typescript-eslint/utils": "7.7.0" + "@typescript-eslint/eslint-plugin": "7.7.1", + "@typescript-eslint/parser": "7.7.1", + "@typescript-eslint/utils": "7.7.1" }, "devDependencies": { "downlevel-dts": "*", diff --git a/packages/typescript-estree/CHANGELOG.md b/packages/typescript-estree/CHANGELOG.md index 94ce4cd015c0..be372ee510b8 100644 --- a/packages/typescript-estree/CHANGELOG.md +++ b/packages/typescript-estree/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.7.1 (2024-04-22) + +This was a version bump only for typescript-estree to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.7.0 (2024-04-15) diff --git a/packages/typescript-estree/package.json b/packages/typescript-estree/package.json index 119e8ed421cc..608c552e3073 100644 --- a/packages/typescript-estree/package.json +++ b/packages/typescript-estree/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/typescript-estree", - "version": "7.7.0", + "version": "7.7.1", "description": "A parser that converts TypeScript source code into an ESTree compatible form", "files": [ "dist", @@ -54,8 +54,8 @@ "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", diff --git a/packages/utils/CHANGELOG.md b/packages/utils/CHANGELOG.md index deff97bbf90e..ddb435b7fd88 100644 --- a/packages/utils/CHANGELOG.md +++ b/packages/utils/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.7.1 (2024-04-22) + +This was a version bump only for utils to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.7.0 (2024-04-15) This was a version bump only for utils to align it with other projects, there were no code changes. diff --git a/packages/utils/package.json b/packages/utils/package.json index 298a85d807e8..1d22762fcb7f 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/utils", - "version": "7.7.0", + "version": "7.7.1", "description": "Utilities for working with TypeScript + ESLint together", "files": [ "dist", @@ -70,16 +70,16 @@ "@eslint-community/eslint-utils": "^4.4.0", "@types/json-schema": "^7.0.15", "@types/semver": "^7.5.8", - "@typescript-eslint/scope-manager": "7.7.0", - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/typescript-estree": "7.7.0", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/typescript-estree": "7.7.1", "semver": "^7.6.0" }, "peerDependencies": { "eslint": "^8.56.0" }, "devDependencies": { - "@typescript-eslint/parser": "7.7.0", + "@typescript-eslint/parser": "7.7.1", "downlevel-dts": "*", "jest": "29.7.0", "prettier": "^3.2.5", diff --git a/packages/visitor-keys/CHANGELOG.md b/packages/visitor-keys/CHANGELOG.md index 4e8bc897169e..f1d100f9dcf8 100644 --- a/packages/visitor-keys/CHANGELOG.md +++ b/packages/visitor-keys/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.7.1 (2024-04-22) + +This was a version bump only for visitor-keys to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.7.0 (2024-04-15) This was a version bump only for visitor-keys to align it with other projects, there were no code changes. diff --git a/packages/visitor-keys/package.json b/packages/visitor-keys/package.json index a7e66a3d5ea8..a870779ce07e 100644 --- a/packages/visitor-keys/package.json +++ b/packages/visitor-keys/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/visitor-keys", - "version": "7.7.0", + "version": "7.7.1", "description": "Visitor keys used to help traverse the TypeScript-ESTree AST", "files": [ "dist", @@ -47,7 +47,7 @@ "typecheck": "tsc -p tsconfig.json --noEmit" }, "dependencies": { - "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/types": "7.7.1", "eslint-visitor-keys": "^3.4.3" }, "devDependencies": { diff --git a/packages/website-eslint/CHANGELOG.md b/packages/website-eslint/CHANGELOG.md index 257070d26ca1..ea05941e7ca9 100644 --- a/packages/website-eslint/CHANGELOG.md +++ b/packages/website-eslint/CHANGELOG.md @@ -1,3 +1,9 @@ +## 7.7.1 (2024-04-22) + +This was a version bump only for website-eslint to align it with other projects, there were no code changes. + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.7.0 (2024-04-15) This was a version bump only for website-eslint to align it with other projects, there were no code changes. diff --git a/packages/website-eslint/package.json b/packages/website-eslint/package.json index 65bd0ef731c9..18c67e2a89d1 100644 --- a/packages/website-eslint/package.json +++ b/packages/website-eslint/package.json @@ -1,6 +1,6 @@ { "name": "@typescript-eslint/website-eslint", - "version": "7.7.0", + "version": "7.7.1", "private": true, "description": "ESLint which works in browsers.", "files": [ @@ -23,16 +23,16 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@typescript-eslint/types": "7.7.0", - "@typescript-eslint/utils": "7.7.0" + "@typescript-eslint/types": "7.7.1", + "@typescript-eslint/utils": "7.7.1" }, "devDependencies": { "@eslint/js": "*", - "@typescript-eslint/eslint-plugin": "7.7.0", - "@typescript-eslint/parser": "7.7.0", - "@typescript-eslint/scope-manager": "7.7.0", - "@typescript-eslint/typescript-estree": "7.7.0", - "@typescript-eslint/visitor-keys": "7.7.0", + "@typescript-eslint/eslint-plugin": "7.7.1", + "@typescript-eslint/parser": "7.7.1", + "@typescript-eslint/scope-manager": "7.7.1", + "@typescript-eslint/typescript-estree": "7.7.1", + "@typescript-eslint/visitor-keys": "7.7.1", "esbuild": "~0.20.2", "eslint": "*", "esquery": "*", diff --git a/packages/website/CHANGELOG.md b/packages/website/CHANGELOG.md index 75a33f8d4099..71d1be37c0bf 100644 --- a/packages/website/CHANGELOG.md +++ b/packages/website/CHANGELOG.md @@ -1,3 +1,19 @@ +## 7.7.1 (2024-04-22) + + +### 🩹 Fixes + +- **eslint-plugin:** [explicit-function-return-type] fix checking wrong ancestor's return type + + +### ❤️ Thank You + +- Abraham Guo +- Kirk Waiblinger +- YeonJuan + +You can read about our [versioning strategy](https://main--typescript-eslint.netlify.app/users/versioning) and [releases](https://main--typescript-eslint.netlify.app/users/releases) on our website. + ## 7.7.0 (2024-04-15) This was a version bump only for website to align it with other projects, there were no code changes. diff --git a/packages/website/package.json b/packages/website/package.json index 7183a59fe49e..d8cb3f7c5549 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -1,6 +1,6 @@ { "name": "website", - "version": "7.7.0", + "version": "7.7.1", "private": true, "scripts": { "build": "docusaurus build", @@ -25,8 +25,8 @@ "@docusaurus/theme-common": "^3.2.1", "@mdx-js/react": "^3.0.1", "@prettier/sync": "*", - "@typescript-eslint/parser": "7.7.0", - "@typescript-eslint/website-eslint": "7.7.0", + "@typescript-eslint/parser": "7.7.1", + "@typescript-eslint/website-eslint": "7.7.1", "clsx": "^2.1.0", "eslint": "*", "json-schema": "^0.4.0", @@ -49,9 +49,9 @@ "@types/react": "*", "@types/react-helmet": "^6.1.11", "@types/react-router-dom": "^5.3.3", - "@typescript-eslint/eslint-plugin": "7.7.0", - "@typescript-eslint/rule-schema-to-typescript-types": "7.7.0", - "@typescript-eslint/types": "7.7.0", + "@typescript-eslint/eslint-plugin": "7.7.1", + "@typescript-eslint/rule-schema-to-typescript-types": "7.7.1", + "@typescript-eslint/types": "7.7.1", "copy-webpack-plugin": "^12.0.0", "cross-fetch": "*", "globby": "^11.1.0", diff --git a/packages/website/src/components/editor/LoadedEditor.tsx b/packages/website/src/components/editor/LoadedEditor.tsx index 01434408db7d..6dab67a39278 100644 --- a/packages/website/src/components/editor/LoadedEditor.tsx +++ b/packages/website/src/components/editor/LoadedEditor.tsx @@ -135,14 +135,14 @@ export const LoadedEditor: React.FC = ({ monaco.editor.setModelMarkers(model, 'eslint', diagnostics); updateMarkers(); }); - return () => disposable(); + return (): void => disposable(); }, [webLinter, monaco, codeActions, updateMarkers]); useEffect(() => { const disposable = webLinter.onParse((uri, model) => { onASTChange(model); }); - return () => disposable(); + return (): void => disposable(); }, [webLinter, onASTChange]); useEffect(() => { @@ -178,7 +178,7 @@ export const LoadedEditor: React.FC = ({ 'typescript', createProvideCodeActions(codeActions), ); - return () => disposable.dispose(); + return (): void => disposable.dispose(); }, [codeActions, monaco]); useEffect(() => { @@ -191,7 +191,9 @@ export const LoadedEditor: React.FC = ({ } } }); - return () => disposable.dispose(); + return (): void => { + disposable.dispose(); + }; }, [editor, tabs.eslintrc]); useEffect(() => { @@ -204,7 +206,7 @@ export const LoadedEditor: React.FC = ({ } }, 150), ); - return () => disposable.dispose(); + return (): void => disposable.dispose(); }, [onSelect, editor, tabs.code]); useEffect(() => { @@ -227,7 +229,7 @@ export const LoadedEditor: React.FC = ({ } }, }); - return () => disposable.dispose(); + return (): void => disposable.dispose(); }, [editor, monaco, webLinter]); useEffect(() => { @@ -243,7 +245,7 @@ export const LoadedEditor: React.FC = ({ }), ]; - return () => { + return (): void => { closable.forEach(c => c.close()); }; }, [system, onChange]); @@ -255,14 +257,14 @@ export const LoadedEditor: React.FC = ({ system.writeFile(model.uri.path, model.getValue()); } }); - return () => disposable.dispose(); + return (): void => disposable.dispose(); }, [editor, system]); useEffect(() => { const disposable = monaco.editor.onDidChangeMarkers(() => { updateMarkers(); }); - return () => disposable.dispose(); + return (): void => disposable.dispose(); }, [monaco.editor, updateMarkers]); const resize = useMemo(() => { diff --git a/packages/website/src/hooks/useMediaQuery.ts b/packages/website/src/hooks/useMediaQuery.ts index a092478ac882..422570aee8ef 100644 --- a/packages/website/src/hooks/useMediaQuery.ts +++ b/packages/website/src/hooks/useMediaQuery.ts @@ -29,7 +29,7 @@ const useMediaQuery = (mediaQuery: string): boolean => { } documentChangeHandler(); - return () => { + return (): void => { try { mediaQueryList.removeEventListener('change', documentChangeHandler); } catch { diff --git a/yarn.lock b/yarn.lock index a0a5231a40eb..8261e0088d37 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5538,17 +5538,17 @@ __metadata: resolution: "@typescript-eslint/eslint-plugin-internal@workspace:packages/eslint-plugin-internal" dependencies: "@prettier/sync": ^0.5.1 - "@typescript-eslint/rule-tester": 7.7.0 - "@typescript-eslint/scope-manager": 7.7.0 - "@typescript-eslint/type-utils": 7.7.0 - "@typescript-eslint/utils": 7.7.0 + "@typescript-eslint/rule-tester": 7.7.1 + "@typescript-eslint/scope-manager": 7.7.1 + "@typescript-eslint/type-utils": 7.7.1 + "@typescript-eslint/utils": 7.7.1 jest: 29.7.0 prettier: ^3.2.5 rimraf: "*" languageName: unknown linkType: soft -"@typescript-eslint/eslint-plugin@7.7.0, @typescript-eslint/eslint-plugin@workspace:packages/eslint-plugin": +"@typescript-eslint/eslint-plugin@7.7.1, @typescript-eslint/eslint-plugin@workspace:packages/eslint-plugin": version: 0.0.0-use.local resolution: "@typescript-eslint/eslint-plugin@workspace:packages/eslint-plugin" dependencies: @@ -5557,12 +5557,12 @@ __metadata: "@types/marked": "*" "@types/mdast": ^4.0.3 "@types/natural-compare": "*" - "@typescript-eslint/rule-schema-to-typescript-types": 7.7.0 - "@typescript-eslint/rule-tester": 7.7.0 - "@typescript-eslint/scope-manager": 7.7.0 - "@typescript-eslint/type-utils": 7.7.0 - "@typescript-eslint/utils": 7.7.0 - "@typescript-eslint/visitor-keys": 7.7.0 + "@typescript-eslint/rule-schema-to-typescript-types": 7.7.1 + "@typescript-eslint/rule-tester": 7.7.1 + "@typescript-eslint/scope-manager": 7.7.1 + "@typescript-eslint/type-utils": 7.7.1 + "@typescript-eslint/utils": 7.7.1 + "@typescript-eslint/visitor-keys": 7.7.1 ajv: ^6.12.6 chalk: ^5.3.0 cross-env: ^7.0.3 @@ -5609,15 +5609,15 @@ __metadata: languageName: unknown linkType: soft -"@typescript-eslint/parser@7.7.0, @typescript-eslint/parser@workspace:packages/parser": +"@typescript-eslint/parser@7.7.1, @typescript-eslint/parser@workspace:packages/parser": version: 0.0.0-use.local resolution: "@typescript-eslint/parser@workspace:packages/parser" dependencies: "@types/glob": "*" - "@typescript-eslint/scope-manager": 7.7.0 - "@typescript-eslint/types": 7.7.0 - "@typescript-eslint/typescript-estree": 7.7.0 - "@typescript-eslint/visitor-keys": 7.7.0 + "@typescript-eslint/scope-manager": 7.7.1 + "@typescript-eslint/types": 7.7.1 + "@typescript-eslint/typescript-estree": 7.7.1 + "@typescript-eslint/visitor-keys": 7.7.1 debug: ^4.3.4 downlevel-dts: "*" glob: "*" @@ -5648,25 +5648,25 @@ __metadata: languageName: unknown linkType: soft -"@typescript-eslint/rule-schema-to-typescript-types@7.7.0, @typescript-eslint/rule-schema-to-typescript-types@workspace:packages/rule-schema-to-typescript-types": +"@typescript-eslint/rule-schema-to-typescript-types@7.7.1, @typescript-eslint/rule-schema-to-typescript-types@workspace:packages/rule-schema-to-typescript-types": version: 0.0.0-use.local resolution: "@typescript-eslint/rule-schema-to-typescript-types@workspace:packages/rule-schema-to-typescript-types" dependencies: - "@typescript-eslint/type-utils": 7.7.0 - "@typescript-eslint/utils": 7.7.0 + "@typescript-eslint/type-utils": 7.7.1 + "@typescript-eslint/utils": 7.7.1 natural-compare: ^1.4.0 prettier: ^3.2.5 languageName: unknown linkType: soft -"@typescript-eslint/rule-tester@7.7.0, @typescript-eslint/rule-tester@workspace:packages/rule-tester": +"@typescript-eslint/rule-tester@7.7.1, @typescript-eslint/rule-tester@workspace:packages/rule-tester": version: 0.0.0-use.local resolution: "@typescript-eslint/rule-tester@workspace:packages/rule-tester" dependencies: "@types/lodash.merge": 4.6.9 - "@typescript-eslint/parser": 7.7.0 - "@typescript-eslint/typescript-estree": 7.7.0 - "@typescript-eslint/utils": 7.7.0 + "@typescript-eslint/parser": 7.7.1 + "@typescript-eslint/typescript-estree": 7.7.1 + "@typescript-eslint/utils": 7.7.1 ajv: ^6.12.6 chai: ^4.4.1 lodash.merge: 4.6.2 @@ -5681,14 +5681,14 @@ __metadata: languageName: unknown linkType: soft -"@typescript-eslint/scope-manager@7.7.0, @typescript-eslint/scope-manager@workspace:packages/scope-manager": +"@typescript-eslint/scope-manager@7.7.1, @typescript-eslint/scope-manager@workspace:packages/scope-manager": version: 0.0.0-use.local resolution: "@typescript-eslint/scope-manager@workspace:packages/scope-manager" dependencies: "@types/glob": "*" - "@typescript-eslint/types": 7.7.0 - "@typescript-eslint/typescript-estree": 7.7.0 - "@typescript-eslint/visitor-keys": 7.7.0 + "@typescript-eslint/types": 7.7.1 + "@typescript-eslint/typescript-estree": 7.7.1 + "@typescript-eslint/visitor-keys": 7.7.1 glob: "*" jest-specific-snapshot: "*" make-dir: "*" @@ -5717,13 +5717,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/type-utils@7.7.0, @typescript-eslint/type-utils@workspace:packages/type-utils": +"@typescript-eslint/type-utils@7.7.1, @typescript-eslint/type-utils@workspace:packages/type-utils": version: 0.0.0-use.local resolution: "@typescript-eslint/type-utils@workspace:packages/type-utils" dependencies: - "@typescript-eslint/parser": 7.7.0 - "@typescript-eslint/typescript-estree": 7.7.0 - "@typescript-eslint/utils": 7.7.0 + "@typescript-eslint/parser": 7.7.1 + "@typescript-eslint/typescript-estree": 7.7.1 + "@typescript-eslint/utils": 7.7.1 ajv: ^6.12.6 debug: ^4.3.4 downlevel-dts: "*" @@ -5740,7 +5740,7 @@ __metadata: languageName: unknown linkType: soft -"@typescript-eslint/types@7.7.0, @typescript-eslint/types@workspace:packages/types": +"@typescript-eslint/types@7.7.1, @typescript-eslint/types@workspace:packages/types": version: 0.0.0-use.local resolution: "@typescript-eslint/types@workspace:packages/types" dependencies: @@ -5840,14 +5840,14 @@ __metadata: languageName: unknown linkType: soft -"@typescript-eslint/typescript-estree@7.7.0, @typescript-eslint/typescript-estree@workspace:packages/typescript-estree": +"@typescript-eslint/typescript-estree@7.7.1, @typescript-eslint/typescript-estree@workspace:packages/typescript-estree": version: 0.0.0-use.local resolution: "@typescript-eslint/typescript-estree@workspace:packages/typescript-estree" dependencies: "@babel/code-frame": "*" "@babel/parser": "*" - "@typescript-eslint/types": 7.7.0 - "@typescript-eslint/visitor-keys": 7.7.0 + "@typescript-eslint/types": 7.7.1 + "@typescript-eslint/visitor-keys": 7.7.1 debug: ^4.3.4 glob: "*" globby: ^11.1.0 @@ -5905,17 +5905,17 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@7.7.0, @typescript-eslint/utils@workspace:packages/utils": +"@typescript-eslint/utils@7.7.1, @typescript-eslint/utils@workspace:packages/utils": version: 0.0.0-use.local resolution: "@typescript-eslint/utils@workspace:packages/utils" dependencies: "@eslint-community/eslint-utils": ^4.4.0 "@types/json-schema": ^7.0.15 "@types/semver": ^7.5.8 - "@typescript-eslint/parser": 7.7.0 - "@typescript-eslint/scope-manager": 7.7.0 - "@typescript-eslint/types": 7.7.0 - "@typescript-eslint/typescript-estree": 7.7.0 + "@typescript-eslint/parser": 7.7.1 + "@typescript-eslint/scope-manager": 7.7.1 + "@typescript-eslint/types": 7.7.1 + "@typescript-eslint/typescript-estree": 7.7.1 downlevel-dts: "*" jest: 29.7.0 prettier: ^3.2.5 @@ -5962,12 +5962,12 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/visitor-keys@7.7.0, @typescript-eslint/visitor-keys@workspace:packages/visitor-keys": +"@typescript-eslint/visitor-keys@7.7.1, @typescript-eslint/visitor-keys@workspace:packages/visitor-keys": version: 0.0.0-use.local resolution: "@typescript-eslint/visitor-keys@workspace:packages/visitor-keys" dependencies: "@types/eslint-visitor-keys": "*" - "@typescript-eslint/types": 7.7.0 + "@typescript-eslint/types": 7.7.1 downlevel-dts: "*" eslint-visitor-keys: ^3.4.3 jest: 29.7.0 @@ -5997,18 +5997,18 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/website-eslint@7.7.0, @typescript-eslint/website-eslint@workspace:packages/website-eslint": +"@typescript-eslint/website-eslint@7.7.1, @typescript-eslint/website-eslint@workspace:packages/website-eslint": version: 0.0.0-use.local resolution: "@typescript-eslint/website-eslint@workspace:packages/website-eslint" dependencies: "@eslint/js": "*" - "@typescript-eslint/eslint-plugin": 7.7.0 - "@typescript-eslint/parser": 7.7.0 - "@typescript-eslint/scope-manager": 7.7.0 - "@typescript-eslint/types": 7.7.0 - "@typescript-eslint/typescript-estree": 7.7.0 - "@typescript-eslint/utils": 7.7.0 - "@typescript-eslint/visitor-keys": 7.7.0 + "@typescript-eslint/eslint-plugin": 7.7.1 + "@typescript-eslint/parser": 7.7.1 + "@typescript-eslint/scope-manager": 7.7.1 + "@typescript-eslint/types": 7.7.1 + "@typescript-eslint/typescript-estree": 7.7.1 + "@typescript-eslint/utils": 7.7.1 + "@typescript-eslint/visitor-keys": 7.7.1 esbuild: ~0.20.2 eslint: "*" esquery: "*" @@ -19276,9 +19276,9 @@ __metadata: version: 0.0.0-use.local resolution: "typescript-eslint@workspace:packages/typescript-eslint" dependencies: - "@typescript-eslint/eslint-plugin": 7.7.0 - "@typescript-eslint/parser": 7.7.0 - "@typescript-eslint/utils": 7.7.0 + "@typescript-eslint/eslint-plugin": 7.7.1 + "@typescript-eslint/parser": 7.7.1 + "@typescript-eslint/utils": 7.7.1 downlevel-dts: "*" jest: 29.7.0 prettier: ^3.2.5 @@ -19983,11 +19983,11 @@ __metadata: "@types/react": "*" "@types/react-helmet": ^6.1.11 "@types/react-router-dom": ^5.3.3 - "@typescript-eslint/eslint-plugin": 7.7.0 - "@typescript-eslint/parser": 7.7.0 - "@typescript-eslint/rule-schema-to-typescript-types": 7.7.0 - "@typescript-eslint/types": 7.7.0 - "@typescript-eslint/website-eslint": 7.7.0 + "@typescript-eslint/eslint-plugin": 7.7.1 + "@typescript-eslint/parser": 7.7.1 + "@typescript-eslint/rule-schema-to-typescript-types": 7.7.1 + "@typescript-eslint/types": 7.7.1 + "@typescript-eslint/website-eslint": 7.7.1 clsx: ^2.1.0 copy-webpack-plugin: ^12.0.0 cross-fetch: "*" 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