@@ -450,6 +450,7 @@ object CheckUnused:
450
450
val refs = mutable.Set .empty[Symbol ] // references
451
451
val asss = mutable.Set .empty[Symbol ] // targets of assignment
452
452
val skip = mutable.Set .empty[Symbol ] // methods to skip (don't warn about their params)
453
+ val nowarn = mutable.Set .empty[Symbol ] // marked @nowarn
453
454
val imps = new IdentityHashMap [Import , Unit ] // imports
454
455
val sels = new IdentityHashMap [ImportSelector , Unit ] // matched selectors
455
456
def register (tree : Tree )(using Context ): Unit = if inlined.isEmpty then
@@ -462,17 +463,20 @@ object CheckUnused:
462
463
then
463
464
imps.put(imp, ())
464
465
case tree : Bind =>
465
- if ! tree.name.isInstanceOf [DerivedName ] && ! tree.name.is(WildcardParamName ) && ! tree.hasAttachment(NoWarn ) then
466
+ if ! tree.name.isInstanceOf [DerivedName ] && ! tree.name.is(WildcardParamName ) then
467
+ if tree.hasAttachment(NoWarn ) then
468
+ nowarn.addOne(tree.symbol)
466
469
pats.addOne((tree.symbol, tree.namePos))
467
470
case tree : ValDef if tree.hasAttachment(PatternVar ) =>
468
471
if ! tree.name.isInstanceOf [DerivedName ] then
469
472
pats.addOne((tree.symbol, tree.namePos))
470
473
case tree : NamedDefTree =>
471
474
if (tree.symbol ne NoSymbol )
472
475
&& ! tree.name.isWildcard
473
- && ! tree.hasAttachment(NoWarn )
474
476
&& ! tree.symbol.is(ModuleVal ) // track only the ModuleClass using the object symbol, with correct namePos
475
477
then
478
+ if tree.hasAttachment(NoWarn ) then
479
+ nowarn.addOne(tree.symbol)
476
480
defs.addOne((tree.symbol.userSymbol, tree.namePos))
477
481
case _ =>
478
482
if tree.symbol ne NoSymbol then
@@ -634,7 +638,7 @@ object CheckUnused:
634
638
val byPos = infos.pats.groupMap(uniformPos(_, _))((sym, pos) => sym)
635
639
for (pos, syms) <- byPos if pos.span.exists && ! syms.exists(_.hasAnnotation(defn.UnusedAnnot )) do
636
640
if ! syms.exists(infos.refs(_)) then
637
- if ! syms.exists(v => ! v.isLocal && ! v.is(Private )) then
641
+ if ! syms.exists(v => ! v.isLocal && ! v.is(Private ) || infos.nowarn(v) ) then
638
642
warnAt(pos)(UnusedSymbol .patVars)
639
643
else if syms.exists(_.is(Mutable )) then // check unassigned var
640
644
val sym = // recover the original
0 commit comments