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(type-utils): preventing isUnsafeAssignment infinite recursive calls#8237
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
Uh oh!
There was an error while loading.Please reload this page.
Conversation
Thanks for the PR,@yeonjuan! 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 commentedJan 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.
✅ Deploy Preview fortypescript-eslint ready!
To edit notification comments on pull requests, go to yourNetlify site configuration. |
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.
LGTM, thanks for the double-fix! 🚀 🚀
Just suggesting changes for the one refactor. If I missed something on it then no worries we can ship as-is.
visited = new Map<ts.Type, Set<ts.Type>>(), | ||
): false | { sender: ts.Type; receiver: ts.Type } { |
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.
[Refactor] This code works great as-is, but has a couple of little paper cuts IMO:
- Each call now has to check whether
visited
exists(this is not really a big issue at all, certainly not a blocker) - Callers now can see this
visited
Map
even though there's no reason for them to provide it
What do you think about making a non-exported worker function so the public signature doesn't need to havevisited
?
senderNode:TSESTree.Node|null,):false|{sender:ts.Type; receiver:ts.Type}{returnisUnsafeAssignmentWorker(type,receiver,checker,senderNode,newMap());
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.
What do you think about making a non-exported worker function so the public signature doesn't need to have visited?
I think it's much better. let me refactor it! :)
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.
Uh oh!
There was an error while loading.Please reload this page.
PR Checklist
Overview
This PR prevents infinite recursive calls to
isUnsafeAssignment
for code with circular references.no-unsafe-argument
(#7298,#5014)playground
no-unsafe-assignment
(unreported issue)playground