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

scalafix.internal.config.PrintStreamReporter.scala Maven / Gradle / Ivy

package scalafix.internal.config

import java.io.OutputStream
import scala.meta.Position
import java.io.PrintStream
import java.util.concurrent.atomic.AtomicInteger
import scalafix.internal.util.Severity
import metaconfig._
import org.langmeta.internal.ScalafixLangmetaHacks
import MetaconfigPendingUpstream._

/** A ScalafixReporter that emits messages to a PrintStream. */
case class PrintStreamReporter(
    outStream: PrintStream,
    minSeverity: Severity,
    filter: FilterMatcher,
    includeLoggerName: Boolean,
    format: OutputFormat
) extends ScalafixReporter {
  val reader: ConfDecoder[ScalafixReporter] =
    ConfDecoder.instanceF[ScalafixReporter] { c =>
      (
        c.getField(minSeverity) |@|
          c.getField(filter) |@|
          c.getField(includeLoggerName) |@|
          c.getField(format)
      ).map {
        case (((a, b), c), d) =>
          copy(
            minSeverity = a,
            filter = b,
            includeLoggerName = c,
            format = d
          )
      }
    }
  private val _errorCount = new AtomicInteger()
  override def reset: PrintStreamReporter = copy()
  override def reset(os: OutputStream): ScalafixReporter = os match {
    case ps: PrintStream => copy(outStream = ps)
    case _ => copy(outStream = new PrintStream(os))
  }
  override def withFormat(format: OutputFormat): ScalafixReporter =
    copy(format = format)

  override def report(message: String, position: Position, severity: Severity)(
      implicit ctx: LogContext): Unit = {
    if (severity == Severity.Error) {
      _errorCount.incrementAndGet()
    }
    val enclosing =
      if (includeLoggerName) s"(${ctx.enclosing.value}) " else ""
    val gutter = format match {
      case OutputFormat.Default => ""
      case OutputFormat.Sbt => s"[$severity] "
    }
    val formatted = ScalafixLangmetaHacks.formatMessage(
      position,
      enclosing + severity.toString,
      message)
    outStream.println(gutter + formatted)
  }

  /** Returns true if this reporter has seen an error */
  override def errorCount: Int = _errorCount.get()
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy