repl - new heuristic for import shadowing #14951
Closed
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Fixes #5074
Link to previous fix discussions: #4915
The main point of this pull request is changing how we handle imports in the following repl evaluations.
On the contrary to the compiler, repl should allow definition shadowing by imports and vice-versa.
The previous heuristic was handling only one-way shadowing which was the result of import handling in the following way:
import rs$line${i <- 0 until nextId}._
It could handle shadowing, when import shadowed the definition:
However, this couldn't work the way around as top-level imports are imported after wrapper:
The new proposed heuristic works in the following way:
We only need to check forward references as import handling in the following object stays the same (the first wrapper, then import ) hence all definitions which were defined before the import will be shadowed anyway.
for each intersection member we transform the import by prepending its exclusion ( ImportSelector(Ident(name), Ident(Wildcard)) to existing selectors.