-
-
Notifications
You must be signed in to change notification settings - Fork 2.8k
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
fix(type-utils): preventing isUnsafeAssignment infinite recursive calls #8237
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 on https://opencollective.com/typescript-eslint. |
✅ Deploy Preview for typescript-eslint ready!
To edit notification comments on pull requests, go to your Netlify 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 have visited
?
senderNode: TSESTree.Node | null,
): false | { sender: ts.Type; receiver: ts.Type } {
return isUnsafeAssignmentWorker(type, receiver, checker, senderNode, new Map());
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.
01556f5
into
typescript-eslint:main
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