Skip to content
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

Resolve references lazily #1228

Open
wants to merge 10 commits into
base: main
Choose a base branch
from

Conversation

ggiraldez
Copy link
Contributor

@ggiraldez ggiraldez commented Jan 22, 2025

This hopefully reduces resolution time when not all references (eg. those in dependencies) need to be resolved, but requires the BindingGraph to retain both the StackGraph and the Resolver (with the database of partial path candidates and the partial paths arena).

This PR also includes an optimization to the resolution algorithm. When selecting candidates to extend an already complete partial path, discard those that would immediately push a @typeof symbol (eg. through the path that replaces a variable by its type) since we know those will never resolve. This can halve the number of evaluated partial paths (ie. references that resolve to a variable/field definition) and provide a very significant performance gain in some cases.

Copy link

changeset-bot bot commented Jan 22, 2025

⚠️ No Changeset found

Latest commit: b131f68

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

Only don't include extensions when recursion is not allowed in resolution.
…ol is pushed next

This avoids a lot of extra work for the resolution when the identifier being
resolved is a variable that has a type. Since the definition is found but then
replace by the sequence `@typeof` and the type of the variable, which will never
resolve. This path *is* used when resolving for members of the type of the
variable.
@ggiraldez ggiraldez changed the title Switch to lazily resolving references Resolve references lazily Jan 24, 2025
@ggiraldez ggiraldez marked this pull request as ready for review January 24, 2025 22:50
@ggiraldez ggiraldez requested review from a team as code owners January 24, 2025 22:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant