E205: Given Search Priority Warning

E205: Given Search Priority Warning

이 경고는 암시적 검색 알고리즘이 Scala 3.7 규칙에서 Scala 3.6 규칙과 다른 given 인스턴스를 선택할 때 발생해요. given 인스턴스 해석의 동작 변화를 알려 주는 마이그레이션 경고예요.

출처: Scala 3 Reference

본문

Scala 3.7에서는 given 검색 우선순위 규칙이 정제되었어요. 같은 타입에 여러 given 인스턴스가 사용 가능할 때, 특히 타입 특이성(type specificity)을 평가하는 방식에서 선택 알고리즘이 Scala 3.6과 다르게 결정할 수 있어요.

예시 (Example)

//> using options -source:3.6

trait A
trait B extends A
given b: B = ???
given a: A = ???

def example = summon[A]

에러 (Error)

-- [E205] Potential Issue Warning: example.scala:8:23 --------------------------
8 |def example = summon[A]
  |                       ^
  |            Given search preference for A between alternatives
  |              (b : B)
  |            and
  |              (a : A)
  |            will change in the future release.
  |            Current choice        : the first alternative
  |            Choice from Scala 3.7 : the second alternative
  |
  |            Suppress this warning by choosing -source 3.5, -source 3.7, or
  |            by using @annotation.nowarn("id=205")

해결 방법 (Solution)

모호성을 피하려면 원하는 given 인스턴스를 명시적으로 참조해요.

//> using options -source:3.6

trait A
trait B extends A
given b: B = ???
given a: A = ???

def example: A = a

대안으로 다음과 같이 경고를 억제할 수 있어요.

  • -source 3.5를 사용해 옛 동작을 유지하기
  • -source 3.7을 사용해 새 동작을 사용하기
  • @annotation.nowarn("id=205")를 추가해 경고를 지역적으로 억제하기