Always exclude package objects from the implicit scope #8458
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.
Unlike Scala 2, in Dotty when constructing the implicit scope for a type
pkgA.Foo
, we do not include the main package object (pkgA.package
).We don't include the package objects we define for top-level definitions
either.
However, when constructing the implicit scope for a type defined in a
package object (e.g.
pkgA.foo$package.Foo
), we did including theimplicits defined in the enclosing package object. This is problematic
because at the source-level it's hard to distinguish which definitions
will be included in the package object. For example, in the testcase
included in this commit,
summon[ToString[A.AB]]
used to succeedbecause both the type
AB
and the given alias forToString[AB]
endedup wrapped in a package object, but the other summon calls failed
because classes and given instances are not wrapped in a package object.
To fix this inconsistency, we now always exclude package objects from
the implicit scope, even for types defined in the package object itself.
The companion object of classes and opaque types stays the preferred
place to put implicit definitions and is not affected by this change.