Skip to content

Commit af2fda3

Browse files
committed
Fix WUnused with indents in derived code
1 parent 424da9f commit af2fda3

File tree

2 files changed

+26
-8
lines changed

2 files changed

+26
-8
lines changed

compiler/src/dotty/tools/dotc/transform/CheckUnused.scala

+7-7
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,14 @@ import dotty.tools.dotc.reporting.Message
1515
import dotty.tools.dotc.typer.ImportInfo
1616
import dotty.tools.dotc.util.{Property, SrcPos}
1717
import dotty.tools.dotc.core.Mode
18-
import dotty.tools.dotc.core.Types.TypeTraverser
19-
import dotty.tools.dotc.core.Types.Type
20-
import dotty.tools.dotc.core.Types.AnnotatedType
18+
import dotty.tools.dotc.core.Types.{AnnotatedType, ConstantType, NameFilter, NamedType, NoType, TermRef, Type, TypeTraverser}
2119
import dotty.tools.dotc.core.Flags.flagsString
2220
import dotty.tools.dotc.core.Flags
2321
import dotty.tools.dotc.core.Names.Name
2422
import dotty.tools.dotc.transform.MegaPhase.MiniPhase
2523
import dotty.tools.dotc.core.Annotations
2624
import dotty.tools.dotc.core.Definitions
27-
import dotty.tools.dotc.core.Types.ConstantType
2825
import dotty.tools.dotc.core.NameKinds.WildcardParamName
29-
import dotty.tools.dotc.core.Types.TermRef
30-
import dotty.tools.dotc.core.Types.NameFilter
3126
import dotty.tools.dotc.core.Symbols.Symbol
3227

3328

@@ -82,6 +77,12 @@ class CheckUnused extends MiniPhase:
8277

8378
override def prepareForIdent(tree: tpd.Ident)(using Context): Context =
8479
if tree.symbol.exists then
80+
val prefixes = LazyList.iterate(tree.typeOpt.normalizedPrefix)(_.normalizedPrefix).takeWhile(_ != NoType)
81+
for {
82+
prefix <- prefixes
83+
} {
84+
unusedDataApply(_.registerUsed(prefix.classSymbol, None))
85+
}
8586
unusedDataApply(_.registerUsed(tree.symbol, Some(tree.name)))
8687
else if tree.hasType then
8788
unusedDataApply(_.registerUsed(tree.tpe.classSymbol, Some(tree.name)))
@@ -409,7 +410,6 @@ object CheckUnused:
409410
val kept = used.filterNot { t =>
410411
val (sym, isAccessible, optName) = t
411412
// keep the symbol for outer scope, if it matches **no** import
412-
413413
// This is the first matching wildcard selector
414414
var selWildCard: Option[ImportSelector] = None
415415

tests/neg-custom-args/fatal-warnings/i15503i.scala

+19-1
Original file line numberDiff line numberDiff line change
@@ -207,4 +207,22 @@ package foo.test.i16925:
207207
for {
208208
i <- 1 to 2 if true
209209
_ = println(i) // OK
210-
} yield ()
210+
} yield ()
211+
212+
213+
package foo.test.i16679:
214+
object myPackage:
215+
trait CaseClassName[A]:
216+
def name: String
217+
object CaseClassName:
218+
trait CaseClassByStringName[A] extends CaseClassName[A]
219+
import scala.deriving.Mirror
220+
object CaseClassByStringName:
221+
inline final def derived[A](using inline A: Mirror.Of[A]): CaseClassByStringName[A] =
222+
new CaseClassByStringName[A]:
223+
def name: String = A.toString
224+
225+
object secondPackage:
226+
import myPackage.CaseClassName
227+
case class CoolClass(i: Int) derives CaseClassName.CaseClassByStringName
228+
println(summon[CaseClassName[CoolClass]].name)

0 commit comments

Comments
 (0)