Uh oh!
There was an error while loading.Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork2.8k
fix(eslint-plugin): [promise-function-async] handle function overloading#10304
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 ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
fix(eslint-plugin): [promise-function-async] handle function overloading#10304
Uh oh!
There was an error while loading.Please reload this page.
Conversation
Thanks for the PR,@ronami! typescript-eslint is a 100% community driven project, and we are incredibly grateful that you are contributing to that community. The core maintainers work on this in their personal time, so please understand that it may not be possible for them to review your work immediately. Thanks again! 🙏Please, if you or your company is finding typescript-eslint valuable, help us sustain the project by sponsoring it transparently onhttps://opencollective.com/typescript-eslint. |
netlifybot commentedNov 7, 2024 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
✅ Deploy Preview fortypescript-eslint ready!
To edit notification comments on pull requests, go to yourNetlify site configuration. |
nx-cloudbot commentedNov 7, 2024 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
☁️ Nx Cloud ReportCI is running/has finished running commands for commit8f790ba. As they complete they will appear below. Click to see the status, the terminal output, and the build insights. 📂 See all runs for this CI Pipeline Execution ✅ Successfully ran 2 targetsSent with 💌 fromNxCloud. |
| export function overloadingThatIncludeAny(): number; | ||
| export function overloadingThatIncludeAny(a: boolean): any; | ||
| export function overloadingThatIncludeAny(a?: boolean): any | number { | ||
| return Promise.resolve(5); | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
This and the test below aren't exactly valid TypeScript code (will also be flagged byno-redundant-type-constituents), but it did fail while I was figuring out the edge cases on my first pass at it (I've iterated the possible function signatures and their return types). Please let me know if I should drop these.
codecovbot commentedNov 7, 2024 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@## main #10304 +/- ##==========================================+ Coverage 86.56% 86.76% +0.19%========================================== Files 431 443 +12 Lines 15188 15305 +117 Branches 4418 4455 +37 ==========================================+ Hits 13148 13279 +131+ Misses 1683 1672 -11+ Partials 357 354 -3
Flags with carried forward coverage won't be shown.Click here to find out more.
|
ronami commentedNov 7, 2024
It seems like this line is not covered on I'm not sure how |
kirkwaiblinger commentedNov 7, 2024
The actual Looks like it's validating that the node passed in is So the |
ronami commentedNov 10, 2024
Thanks! I've updated the PR to match this 👍 |
kirkwaiblinger commentedNov 11, 2024 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
I'm wondering if this should also be the case when theimplementation return type is not explicitly specified. I was playing around with this: exportfunctiona():Promise<void>exportfunctiona(x:boolean):void// should not flag (right?), doesexportfunctiona(x?:boolean){if(x==null)returnPromise.reject(newError())thrownewError()}exportfunctionb():Promise<void>exportfunctionb(x:boolean):void// should not flag, doesn't (fixed in this PR)exportfunctionb(x?:boolean):Promise<void>|void{if(x==null)returnPromise.reject(newError())thrownewError()}// should not flag, doesn'texportfunctionc(x?:boolean):Promise<void>|void{if(x==null)returnPromise.reject(newError())thrownewError()} |
ronami commentedNov 16, 2024 • edited
Loading Uh oh!
There was an error while loading.Please reload this page.
edited
Uh oh!
There was an error while loading.Please reload this page.
Interesting, I didn't take this into consideration. I was hoping I can get away with not having to checking every call signature. I made some changes to the PR to address this, thanks 👍 Edit: There's no review so I can't ask for a re-review or remove the |
kirkwaiblinger left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
Looks great to me! Just touchups requested. Thanks!
Uh oh!
There was an error while loading.Please reload this page.
Uh oh!
There was an error while loading.Please reload this page.
kirkwaiblinger left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others.Learn more.
68311ee intotypescript-eslint:mainUh oh!
There was an error while loading.Please reload this page.
##### [v8.17.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8170-2024-12-02)##### 🚀 Features- **eslint-plugin:** \[prefer-promise-reject-errors] options to allow any and unknown ([#10392](typescript-eslint/typescript-eslint#10392))##### 🩹 Fixes- **eslint-plugin:** \[promise-function-async] handle function overloading ([#10304](typescript-eslint/typescript-eslint#10304))- **eslint-plugin:** remove references to "extendDefaults" in no-restricted-types ([#10401](typescript-eslint/typescript-eslint#10401))- **eslint-plugin:** \[no-unnecessary-template-expressions] allow template expressions used to make trailing whitespace visible ([#10363](typescript-eslint/typescript-eslint#10363))##### ❤️ Thank You- Kim OhSeong [@bkks1004](https://github.com/bkks1004)- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)- Maria José Solano [@MariaSolOs](https://github.com/MariaSolOs)- Ronen AmielYou 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.
##### [v8.17.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8170-2024-12-02)##### 🚀 Features- **eslint-plugin:** \[prefer-promise-reject-errors] options to allow any and unknown ([#10392](typescript-eslint/typescript-eslint#10392))##### 🩹 Fixes- **eslint-plugin:** \[promise-function-async] handle function overloading ([#10304](typescript-eslint/typescript-eslint#10304))- **eslint-plugin:** remove references to "extendDefaults" in no-restricted-types ([#10401](typescript-eslint/typescript-eslint#10401))- **eslint-plugin:** \[no-unnecessary-template-expressions] allow template expressions used to make trailing whitespace visible ([#10363](typescript-eslint/typescript-eslint#10363))##### ❤️ Thank You- Kim OhSeong [@bkks1004](https://github.com/bkks1004)- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)- Maria José Solano [@MariaSolOs](https://github.com/MariaSolOs)- Ronen AmielYou 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.
| datasource | package | from | to || ---------- | -------------------------------- | ------ | ------ || npm | @typescript-eslint/eslint-plugin | 8.16.0 | 8.17.0 || npm | @typescript-eslint/parser | 8.16.0 | 8.17.0 |## [v8.17.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8170-2024-12-02)##### 🚀 Features- **eslint-plugin:** \[prefer-promise-reject-errors] options to allow any and unknown ([#10392](typescript-eslint/typescript-eslint#10392))##### 🩹 Fixes- **eslint-plugin:** \[promise-function-async] handle function overloading ([#10304](typescript-eslint/typescript-eslint#10304))- **eslint-plugin:** remove references to "extendDefaults" in no-restricted-types ([#10401](typescript-eslint/typescript-eslint#10401))- **eslint-plugin:** \[no-unnecessary-template-expressions] allow template expressions used to make trailing whitespace visible ([#10363](typescript-eslint/typescript-eslint#10363))##### ❤️ Thank You- Kim OhSeong [@bkks1004](https://github.com/bkks1004)- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)- Maria José Solano [@MariaSolOs](https://github.com/MariaSolOs)- Ronen AmielYou 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.
| datasource | package | from | to || ---------- | -------------------------------- | ------ | ------ || npm | @typescript-eslint/eslint-plugin | 8.16.0 | 8.17.0 || npm | @typescript-eslint/parser | 8.16.0 | 8.17.0 |## [v8.17.0](https://github.com/typescript-eslint/typescript-eslint/blob/HEAD/packages/eslint-plugin/CHANGELOG.md#8170-2024-12-02)##### 🚀 Features- **eslint-plugin:** \[prefer-promise-reject-errors] options to allow any and unknown ([#10392](typescript-eslint/typescript-eslint#10392))##### 🩹 Fixes- **eslint-plugin:** \[promise-function-async] handle function overloading ([#10304](typescript-eslint/typescript-eslint#10304))- **eslint-plugin:** remove references to "extendDefaults" in no-restricted-types ([#10401](typescript-eslint/typescript-eslint#10401))- **eslint-plugin:** \[no-unnecessary-template-expressions] allow template expressions used to make trailing whitespace visible ([#10363](typescript-eslint/typescript-eslint#10363))##### ❤️ Thank You- Kim OhSeong [@bkks1004](https://github.com/bkks1004)- Kirk Waiblinger [@kirkwaiblinger](https://github.com/kirkwaiblinger)- Maria José Solano [@MariaSolOs](https://github.com/MariaSolOs)- Ronen AmielYou 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.


Uh oh!
There was an error while loading.Please reload this page.
PR Checklist
@typescript-eslint/promise-function-asyncfunction overloading #5709Overview
This PRresolves#5709 and takes function overloading into consideration.
Currently, the rule flags the following as an issue and auto-fixes it with
async, even though the actual return type of the function isPromise<number> | number:This PR changes the rule to treat the above similarly to how it treats the following: