Scala 2.13 Scalafix: ExplicitResultTypes
for implicit definitions
#538
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.
This is a precursor to:
Scala 2.13.11 added a warning that implicit definitions should have an explicit type (because implicit resolution is already complicated enough for the compiler, and things like file-order can actually make a difference to whether implicit scopes are correctly searched: scala/bug#8697 (comment)):
The warning looks like this:
...this prepares us for Scala 3, where the explicit type is required.
More widely, beyond implicit definitions, in library code, the best practice is to always add an explicit type to all your public members, even when you're happy with what's being inferred - otherwise you can unintentionally break binary-compatibility just by changing the implementation of a field:
Automatically fixing this code issue
Scalafix actually does a better job than
-quickfix
for this particular task, because it adds imports if it needs to, so that you end up with this in your code:...rather than something like:
Fixing while still on Scala 2.12 - use Scalafix
In this commit, we're only trying to fix the implicit definitions, so I've added this in a new
.scalafix.conf
config file:The Scalafix rule needs to be run while the project is still on Scala 2.12, not Scala 2.13 (otherwise sbt will say: "Error downloading ch.epfl.scala:sbt-scalafix;sbtVersion=1.0;scalaVersion=2.13:0.13.0").
Once the Scalafix plugin is made available to sbt (by adding
addSbtPlugin("ch.epfl.scala" % "sbt-scalafix" % "0.13.0")
to eitherproject/plugins.sbt
or~/.sbt/1.0/plugins.sbt
), you can run these commands on the sbt prompt to automatically generate the changes in this PR: