-
Notifications
You must be signed in to change notification settings - Fork 12.4k
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
Refactor name resolution to separate component #57974
Conversation
c414a94
to
b3a07d6
Compare
@typescript-bot perf test this |
@jakebailey Here they are:
tscComparison Report - baseline..pr
System info unknown
Hosts
Scenarios
tsserverComparison Report - baseline..pr
System info unknown
Hosts
Scenarios
startupComparison Report - baseline..pr
System info unknown
Hosts
Scenarios
Developer Information: |
@typescript-bot perf test this faster |
@jakebailey Here they are:
tscComparison Report - baseline..pr
System info unknown
Hosts
Scenarios
Developer Information: |
@typescript-bot perf test this |
// If `result === lastSelfReferenceLocation.symbol`, that means that we are somewhere inside `lastSelfReferenceLocation` looking up a name, and resolving to `lastLocation` itself. | ||
// That means that this is a self-reference of `lastLocation`, and shouldn't count this when considering whether `lastLocation` is used. | ||
if (isUse && result && (!lastSelfReferenceLocation || result !== lastSelfReferenceLocation.symbol)) { | ||
result.isReferenced! |= meaning; |
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.
How safe is logic like this to exist outside of the checker/binder?
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.
Oh, this isn't safe at all in the first place. It's mutating a field directly on the Symbol
, which will never be reset in incremental compilation in the language service, but whose value should change as the file does. I don't know how this crops up as a visible error in the language service, but it almost definitely does. But it also has for... forever? And we haven't run into it yet? So.... pass. Deal with it later?
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.
Of the 3 kinds of reference tracking we are doing, this one is like number 1 most likely to be buggy, but it's only used for unused reference tracking, unlike NodeLinks["isVisible"]
and NodeLinks["referenced"]
both of which specifically track usages for imports in .d.ts
and .js
emit, respectively. So bugs in this one are probably rare to see reported, since usually they only result in missing suggestion diagnostics.
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.
...But if you do happen to know of issues along the lines of "this isn't marked as unused after I delete the code using it in this way" it's because this field here isn't on SymbolLinks
.
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.
I'm going to guess that it doesn't crop up as a problem because within a file that changes, we always blow away the information; in a file that stays the same, the information is still usually accurate.
I'm going to guess there's a bug to do with symbol merging across files.
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.
Should we maybe also move this to a markUsage
callback? I don't think this currently introduces any new bugs, since this is not called from anywhere else, and the future use I have in mind for this in the minimalist resolver will not really care about the usages.
@DanielRosenwasser Here they are:
tscComparison Report - baseline..pr
System info unknown
Hosts
Scenarios
tsserverComparison Report - baseline..pr
System info unknown
Hosts
Scenarios
startupComparison Report - baseline..pr
System info unknown
Hosts
Scenarios
Developer Information: |
1fc5f62
to
0c53615
Compare
I guess I don't really have any other comments here; on the whole, it sure seems like a lot of checker functions needing to be passed into... I don't really have a good vision of what the next change that requires this looks like, though, to understand how impactful this is. So, soft +1 from me, and I think others know better than me 😅 |
No description provided.