bug icon indicating copy to clipboard operation
bug copied to clipboard

-Wtostring-interpolated warns on an if expression of type String

Open johnduffell opened this issue 5 months ago • 1 comments

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

johnduffell avatar Jun 13 '25 14:06 johnduffell

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.

som-snytt avatar Jun 13 '25 17:06 som-snytt