scala/scala3

False positive unused warning in 3.7 nightly on extension method with default argument

Closed this issue · 1 comments

Compiler version

3.7.0-RC1-bin-20250306-73ba485-NIGHTLY

Minimized code

With -Wunused:params enabled:

import java.time.ZonedDateTime

trait Foo[A] {
  def apply(a: A, t: ZonedDateTime): A
}

extension [A](a: A)(using f: Foo[A]) {
  def foo(t: ZonedDateTime = ZonedDateTime.now): A = f(a, t)
}

Output

-- [E198] Unused Symbol Warning: /Users/matt/scala3.7-nightly-unused/src/main/scala/example/Test.scala:7:14 ------------
7 |extension [A](a: A)(using f: Foo[A]) {
  |              ^
  |              unused explicit parameter
-- [E198] Unused Symbol Warning: /Users/matt/scala3.7-nightly-unused/src/main/scala/example/Test.scala:7:26 ------------
7 |extension [A](a: A)(using f: Foo[A]) {
  |                          ^
  |                          unused implicit parameter

Expectation

Both a and f are used in def foo so they should not be reported unused

I guess because defaults get dependencies they don't use.

    def foo$default$3[A >: Nothing <: Any](a: A)(using f: Foo[A]):
      java.time.ZonedDateTime @uncheckedVariance = java.time.ZonedDateTime.now()
    }