-
-
Notifications
You must be signed in to change notification settings - Fork 2.8k
[no-misused-promises] checksVoidReturn=true doesn't catch the error when variadic arguments are used (like ...handlers: Array<() => void>
)
#4015
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Here is BTW what I have to do to work-around this eslint issue with variadic parameters: (Originally in express-serve-static-core, they're defined as methods with variadic This allows to write something like import asyncHandler from "express-async-handler";
...
app.get(
AppRoutes.connectApp.pattern,
asyncHandler(requireAuth),
asyncHandler(connectAppRoute)
); and have peace in mind that, if we accidentally forget asyncHandler wrapper for connectAppRoute, no-misused-promises will warn us. |
...handlers: Array<() => void>
)...handlers: Array<() => void>
)
Fixes typescript-eslint#4015 This extends 'no-misued-promises' with support for checking variadic arguments passed to a 'rest' parameter. If a function is declared with an argument like '...handlers: Array<() => void>', we now check if the type argument to `Array` is a void-returning function, and if so, check if any of the variadic arguments return a Promise.
Fixes typescript-eslint#4015 This extends 'no-misued-promises' with support for checking variadic arguments passed to a 'rest' parameter. If a function is declared with an argument like '...handlers: Array<() => void>', we now check if the type argument to `Array` is a void-returning function, and if so, check if any of the variadic arguments return a Promise.
…5731) * feat(eslint-plugin): Check 'rest' parameters in no-misused-promises Fixes #4015 This extends 'no-misued-promises' with support for checking variadic arguments passed to a 'rest' parameter. If a function is declared with an argument like '...handlers: Array<() => void>', we now check if the type argument to `Array` is a void-returning function, and if so, check if any of the variadic arguments return a Promise. * Address review comments * Fix spelling * Address additional review comments * nit: split up tests a bit, and add comments about () Co-authored-by: Josh Goldberg <git@joshuakgoldberg.com>
This PR contains the following updates: | Package | Type | Update | Change | |---|---|---|---| | [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint) | devDependencies | minor | [`5.39.0` -> `5.40.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2feslint-plugin/5.39.0/5.40.0) | | [@typescript-eslint/parser](https://github.com/typescript-eslint/typescript-eslint) | devDependencies | minor | [`5.39.0` -> `5.40.0`](https://renovatebot.com/diffs/npm/@typescript-eslint%2fparser/5.39.0/5.40.0) | --- ### Release Notes <details> <summary>typescript-eslint/typescript-eslint (@​typescript-eslint/eslint-plugin)</summary> ### [`v5.40.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#​5400-httpsgithubcomtypescript-eslinttypescript-eslintcomparev5390v5400-2022-10-10) [Compare Source](typescript-eslint/typescript-eslint@v5.39.0...v5.40.0) ##### Bug Fixes - **eslint-plugin:** \[consistent-indexed-object-style] handle interface generic ([#​5746](typescript-eslint/typescript-eslint#5746)) ([7a8a0a3](typescript-eslint/typescript-eslint@7a8a0a3)) - **eslint-plugin:** \[no-unnecessary-condition] handle void ([#​5766](typescript-eslint/typescript-eslint#5766)) ([ac8f06b](typescript-eslint/typescript-eslint@ac8f06b)) ##### Features - **eslint-plugin:** Check 'rest' parameters in no-misused-promises ([#​5731](typescript-eslint/typescript-eslint#5731)) ([6477f38](typescript-eslint/typescript-eslint@6477f38)), closes [#​4015](typescript-eslint/typescript-eslint#4015) - **utils:** add dependency constraint filtering for `RuleTester` ([#​5750](typescript-eslint/typescript-eslint#5750)) ([121f4c0](typescript-eslint/typescript-eslint@121f4c0)) </details> <details> <summary>typescript-eslint/typescript-eslint (@​typescript-eslint/parser)</summary> ### [`v5.40.0`](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/parser/CHANGELOG.md#​5400-httpsgithubcomtypescript-eslinttypescript-eslintcomparev5390v5400-2022-10-10) [Compare Source](typescript-eslint/typescript-eslint@v5.39.0...v5.40.0) **Note:** Version bump only for package [@​typescript-eslint/parser](https://github.com/typescript-eslint/parser) </details> --- ### Configuration 📅 **Schedule**: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined). 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about these updates again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox. --- This PR has been generated by [Renovate Bot](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzMi4yMjYuMCIsInVwZGF0ZWRJblZlciI6IjMyLjIyNi4wIn0=--> Co-authored-by: cabr2-bot <cabr2.help@gmail.com> Reviewed-on: https://codeberg.org/Calciumdibromid/CaBr2/pulls/1580 Reviewed-by: Epsilon_02 <epsilon_02@noreply.codeberg.org> Co-authored-by: Calciumdibromid Bot <cabr2_bot@noreply.codeberg.org> Co-committed-by: Calciumdibromid Bot <cabr2_bot@noreply.codeberg.org>
This issue affects e.g. express used with new route handlers which are required to be non-async in their TS typings. I think in case of variadic arguments, the plugin verifies just the 1st argument and, if it's okay, doesn't even check the rest of the arguments.
Repro
Expected Result
Both get() and get2() calls must raise an eslint error.
Actual Result
Only get2() is treated as incorrect, and get() is fine - although it should fail too:
Additional Info
Versions
@typescript-eslint/eslint-plugin
5.0.0
@typescript-eslint/parser
5.0.0
TypeScript
4.4.4
ESLint
8.0.1
node
16.11.1
The text was updated successfully, but these errors were encountered: