scapegoat-scala / scapegoat

Scala compiler plugin for static code analysis
Apache License 2.0
530 stars 90 forks source link

GADTs cause false positive `asInstanceOf` reports #378

Closed erdeszt closed 1 year ago

erdeszt commented 4 years ago

This code:

sealed trait MyGADT[T]
final case class VariantInt(value:    Int) extends MyGADT[Int]
final case class VariantString(value: String) extends MyGADT[String]

def doStuff[T](gadt: MyGADT[T]): T = {
  gadt match {
    case VariantInt(value)    => value
    case VariantString(value) => value
  }
}

Produces the following false positives:

[error] MyGADT.scala:7:34: [scapegoat] Use of asInstanceOf    
[error]   Use of asInstanceOf is considered a bad practice - consider using pattern matching instead.                                                            
[error]   value.asInstanceOf[T]                                                                                                                                  
[error]       case VariantInt(value)    => value
[error] MyGADT.scala:8:34: [scapegoat] Use of asInstanceOf    
[error]   Use of asInstanceOf is considered a bad practice - consider using pattern matching instead.                                                            
[error]   value.asInstanceOf[T]                                                                                                                                  
[error]       case VariantInt(value)    => value
mccartney commented 4 years ago

I cannot reproduce using latest master - as demonstrated in a unit test added in #432.