bug
bug copied to clipboard
-Wtostring-interpolated warns on an if expression of type String
Reproduction steps
2.13.16 With scalacOptions including
"-Wtostring-interpolated",
and optionally (to make it an error)
"-Wconf:cat=w-flag-tostring-interpolated:e",
compile this code:
val shouldCaps = true
val greeting = s"Hello ${if (shouldCaps) "WORLD" else "world"}"
println(greeting)
see https://scastie.scala-lang.org/MQWIvMVXSrCwU9u9D8NTCA
Output
there is a warning/error raised on line 2: "interpolation uses toString"
Expectation
compiles without warnings, as the type of the expression is a String
Additional info
Also fails on 3.7.1-RC1 Feature introduced in https://github.com/scala/scala/pull/10776
Funnily, the type of the expression is Any, probably because the expected type for interpolated exprs is Any, and if/else uses the expected type (there's no need to lub, given that the branches conform to the expected type).
It wouldn't be terrible if the lint must check arms of an if, or maybe also cases of a match; just a bit ugly.