scapegoat-scala/scapegoat

false positive VariableShadowing when use copy in map

Opened this issue · 1 comments

Bellow code generate VariableShadowing warning.

[scapegoat] [VariableShadowing] Variable shadowing
[warn]   Variable shadowing is very useful, but can easily lead to nasty bugs in your code. Shadowed variables can be potentially confusing to other maintainers when the same name is adopted to have a new meaning in a nested scope.
[warn]   <artifact> val x$3: String = cat.copy$default$2
[warn]     Some(cat).map(_ => cat.copy(age = cat.age + 1))
[warn]                            ^
  final case class Cat(name: String, owner: String, age: Int)
  def grow(cat: Cat): Option[Cat] = {
    Some(cat).map(_ => cat.copy(age = cat.age + 1))
  }

What is important is that Cat has more than two fields and copy has to be done in map.

java: 11.0.12
scala: 2.13.6
sbt.version: 1.5.5
scapegoat: 1.4.10
sbt-scapegoat: 1.1.1

  private def test() = Vector(Vector(1, 23), Vector(2, 3, 5, 6)).collect(_.collect(_ == 5))

The above code where collect is inside of collect also generate false positive for variable shadowing

[scapegoat] [VariableShadowing] Variable shadowing
[error]   Variable shadowing is very useful, but can easily lead to nasty bugs in your code. Shadowed variables can be potentially confusing to other maintainers when the same name is adopted to have a new meaning in a nested scope.
[error]   <synthetic> val default: A1 => B1 = _
[error]   private def test() = Vector(Vector(1, 23), Vector(2, 3, 5, 6)).collect(_.collect(_ == 5))