@@ -7,13 +7,13 @@ import dotty.tools.dotc.ast.untpd.ImportSelector
7
7
import dotty .tools .dotc .config .ScalaSettings
8
8
import dotty .tools .dotc .core .Contexts .*
9
9
import dotty .tools .dotc .core .Decorators .{em , i }
10
- import dotty .tools .dotc .core .Flags ._
10
+ import dotty .tools .dotc .core .Flags .*
11
11
import dotty .tools .dotc .core .Phases .Phase
12
12
import dotty .tools .dotc .core .StdNames
13
13
import dotty .tools .dotc .report
14
14
import dotty .tools .dotc .reporting .Message
15
15
import dotty .tools .dotc .typer .ImportInfo
16
- import dotty .tools .dotc .util .Property
16
+ import dotty .tools .dotc .util .{ Property , SourcePosition , SrcPos }
17
17
import dotty .tools .dotc .core .Mode
18
18
import dotty .tools .dotc .core .Types .TypeTraverser
19
19
import dotty .tools .dotc .core .Types .Type
@@ -297,6 +297,7 @@ object CheckUnused:
297
297
* See the `isAccessibleAsIdent` extension method below in the file
298
298
*/
299
299
private val usedInScope = MutStack (MutSet [(Symbol ,Boolean , Option [Name ])]())
300
+ private val usedInPosition = MutSet [(SrcPos , Name )]()
300
301
/* unused import collected during traversal */
301
302
private val unusedImport = MutSet [ImportSelector ]()
302
303
@@ -346,6 +347,7 @@ object CheckUnused:
346
347
usedInScope.top += ((sym, sym.isAccessibleAsIdent, name))
347
348
usedInScope.top += ((sym.companionModule, sym.isAccessibleAsIdent, name))
348
349
usedInScope.top += ((sym.companionClass, sym.isAccessibleAsIdent, name))
350
+ name.map(n => usedInPosition += ((sym.sourcePos, n)))
349
351
350
352
/** Register a symbol that should be ignored */
351
353
def addIgnoredUsage (sym : Symbol )(using Context ): Unit =
@@ -450,6 +452,7 @@ object CheckUnused:
450
452
if ctx.settings.WunusedHas .locals then
451
453
localDefInScope
452
454
.filterNot(d => d.symbol.usedDefContains)
455
+ .filterNot(d => usedInPosition.exists { case (pos, name) => d.span.contains(pos.span) && name == d.symbol.name})
453
456
.map(d => d.namePos -> WarnTypes .LocalDefs ).toList
454
457
else
455
458
Nil
@@ -478,6 +481,7 @@ object CheckUnused:
478
481
if ctx.settings.WunusedHas .patvars then
479
482
patVarsInScope
480
483
.filterNot(d => d.symbol.usedDefContains)
484
+ .filterNot(d => usedInPosition.exists { case (pos, name) => d.span.contains(pos.span) && name == d.symbol.name})
481
485
.map(d => d.namePos -> WarnTypes .PatVars ).toList
482
486
else
483
487
Nil
0 commit comments