Skip to content

Commit 632a396

Browse files
szymon-rdKordyjan
authored andcommitted
Fix WUnused with indents in derived code
1 parent 452fac6 commit 632a396

File tree

2 files changed

+24
-7
lines changed

2 files changed

+24
-7
lines changed

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

Lines changed: 7 additions & 7 deletions
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, 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

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -165,3 +165,20 @@ package foo.test.i16925:
165165
i <- 1 to 2 if true
166166
_ = println(i) // OK
167167
} yield ()
168+
169+
package foo.test.i16679:
170+
object myPackage:
171+
trait CaseClassName[A]:
172+
def name: String
173+
object CaseClassName:
174+
trait CaseClassByStringName[A] extends CaseClassName[A]
175+
import scala.deriving.Mirror
176+
object CaseClassByStringName:
177+
inline final def derived[A](using inline A: Mirror.Of[A]): CaseClassByStringName[A] =
178+
new CaseClassByStringName[A]:
179+
def name: String = A.toString
180+
181+
object secondPackage:
182+
import myPackage.CaseClassName // OK
183+
case class CoolClass(i: Int) derives CaseClassName.CaseClassByStringName
184+
println(summon[CaseClassName[CoolClass]].name)

0 commit comments

Comments
 (0)