-
-
Notifications
You must be signed in to change notification settings - Fork 375
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
perf(semantic): keep a single map of unresolved references #4107
perf(semantic): keep a single map of unresolved references #4107
Conversation
This reworks `ScopeTree` in order to keep a single (root) map of unresolved references. The `SemanticBuilder` keeps track of all intermediate ones while walking scopes, and it can get rid of all non-root ones once done.
Your org has enabled the Graphite merge queue for merging into mainAdd the label “merge” to the PR and Graphite will automatically add it to the merge queue when it’s ready to merge. Or use the label “hotfix” to add to the merge queue as a hot fix. You must have a Graphite account and log in to Graphite in order to use the merge queue. Sign up using this link. |
/cc @overlookmotel |
CodSpeed Performance ReportMerging #4107 will not alter performanceComparing Summary
|
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.
Clever! Thank you!
@lucab Given your recent contributions, I have sent you invitation to the repo with write permission so you can use graphite. https://github.com/oxc-project/oxc/invitations |
## [0.17.2] - 2024-07-08 ### Features - 115ac3b allocator: Introduce `FromIn` and `IntoIn` traits. (#4088) (rzvxa) - 720983a napi/transform: Allow setting `sourceType` to `transform` (#4113) (Boshen) - e386b62 semantic: Check for invalid type import assignments (#4097) (DonIsaac) ### Bug Fixes - 5472b7c codegen: 256 indentations level is not enough for codegen (Boshen) - 5c31236 isolated-declarations: Keep literal value for readonly property (#4106) (Dunqing) - e67c7d1 isolated-declarations: Do not infer type for private parameters (#4105) (Dunqing) - 3fcad5e isolated_declarations: Remove nested AssignmentPatterns from inside parameters (#4077) (michaelm) - f8d77e4 isolated_declarations: Infer type of template literal expressions as string (#4068) (michaelm) - 0f02608 semantic: Bind `TSImportEqualsDeclaration`s (#4100) (Don Isaac) - 4413e2d transformer: Missing initializer for readonly consructor properties (#4103) (Don Isaac) ### Performance - 7ed27b7 isolated-declarations: Use `FxHashSet` instead of `Vec` to speed up the `contain` (#4074) (Dunqing) - 9114c8e semantic: Keep a single map of unresolved references (#4107) (Luca Bruno) Co-authored-by: Boshen <Boshen@users.noreply.github.com>
For reference, I tried to push oxc/crates/oxc_transformer/src/react/jsx.rs Lines 983 to 992 in c3f08ce
|
Nice work @lucab! I can see potential for one further optimization... When exiting a scope, Instead of Does that make sense, and do you think it could work/make a difference? |
Personally, I think |
This tweaks `SemanticBuilder` logic in order to accumulate unresolved references in a stack, getting rid of the previous index-vector which is not required under the current access pattern. Ref: #4107 (comment)
This reworks
ScopeTree
in order to keep a single (root) map of unresolved references. TheSemanticBuilder
keeps track of all intermediate ones while walking scopes, and it can get rid of all non-root ones once done.Ref: oxc-project/backlog#32