All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.wartremover.warts.SizeIs.scala Maven / Gradle / Ivy

package org.wartremover
package warts

object SizeIs extends WartTraverser {
  private def sizeMessage = "Maybe you can use `sizeIs` instead of `size`"
  private def lengthMessage = "Maybe you can use `lengthIs` instead of `length`"

  override def apply(u: WartUniverse): u.Traverser = {
    new u.Traverser(this) {
      import q.reflect.*
      override def traverseTree(tree: Tree)(owner: Symbol): Unit = {
        tree match {
          case t if hasWartAnnotation(t) =>
          case t if t.isExpr =>
            t.asExpr match {
              case '{ ($x1: Iterable[t]).size < ($x2: Int) } =>
                error(tree.pos, sizeMessage)
              case '{ ($x1: Iterable[t]).size == ($x2: Int) } =>
                error(tree.pos, sizeMessage)
              case '{ ($x1: Iterable[t]).size <= ($x2: Int) } =>
                error(tree.pos, sizeMessage)
              case '{ ($x1: Iterable[t]).size > ($x2: Int) } =>
                error(tree.pos, sizeMessage)
              case '{ ($x1: Iterable[t]).size >= ($x2: Int) } =>
                error(tree.pos, sizeMessage)

              case '{ ($x1: collection.Seq[t]).length < ($x2: Int) } =>
                error(tree.pos, lengthMessage)
              case '{ ($x1: collection.Seq[t]).length == ($x2: Int) } =>
                error(tree.pos, lengthMessage)
              case '{ ($x1: collection.Seq[t]).length == ($x2: Int) } =>
                error(tree.pos, lengthMessage)
              case '{ ($x1: collection.Seq[t]).length <= ($x2: Int) } =>
                error(tree.pos, lengthMessage)
              case '{ ($x1: collection.Seq[t]).length > ($x2: Int) } =>
                error(tree.pos, lengthMessage)
              case '{ ($x1: collection.Seq[t]).length >= ($x2: Int) } =>
                error(tree.pos, lengthMessage)

              case _ =>
                super.traverseTree(tree)(owner)
            }
          case _ =>
            super.traverseTree(tree)(owner)
        }
      }
    }
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy