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

bloop.cli.options.LoggingOptions.scala Maven / Gradle / Ivy

package bloop.cli.options

import caseapp._
import coursier.cache.loggers.RefreshLogger
import bloop.rifle.BloopRifleLogger
import bloop.cli.Logger
import java.io.OutputStream

// format: off
final case class LoggingOptions(
  @HelpMessage("Increase verbosity (can be specified multiple times)")
  @Name("v")
    verbose: Int @@ Counter = Tag.of(0),
  @HelpMessage("Decrease verbosity")
  @Name("q")
    quiet: Boolean = false,
  @HelpMessage("Use progress bars")
    progress: Option[Boolean] = None
) {
  // format: on

  lazy val verbosity = Tag.unwrap(verbose) - (if (quiet) 1 else 0)

  def logger: Logger =
    new Logger {
      def error(message: String) =
        System.err.println(message)
      def message(message: => String) =
        if (verbosity >= 0)
          System.err.println(message)
      def log(s: => String) =
        if (verbosity >= 0)
          System.err.println(s)
      def debug(s: => String) =
        if (verbosity >= 2)
          System.err.println(s)

      def coursierLogger(printBefore: String): coursier.cache.CacheLogger =
        RefreshLogger.create()
      def bloopRifleLogger: BloopRifleLogger =
        new BloopRifleLogger {
          def bloopBspStderr: Option[OutputStream] = None
          def bloopBspStdout: Option[OutputStream] = None
          def bloopCliInheritStderr: Boolean = false
          def bloopCliInheritStdout: Boolean = false
          def debug(msg: => String): Unit =
            if (verbosity >= 2) {
              System.err.println(msg)
            }
          def debug(msg: => String, ex: Throwable): Unit =
            if (verbosity >= 2) {
              System.err.println(msg)
              if (verbosity >= 3)
                ex.printStackTrace(System.err)
            }
          def error(msg: => String, ex: Throwable) = {
            System.err.println(msg)
            if (verbosity >= 1)
              ex.printStackTrace(System.err)
          }
          def error(msg: => String) =
            System.err.println(msg)
          def info(msg: => String) =
            if (verbosity >= 0)
              System.err.println(msg)
        }
    }
}

object LoggingOptions {
  lazy val parser: Parser[LoggingOptions] = Parser.derive
  implicit lazy val parserAux: Parser.Aux[LoggingOptions, parser.D] = parser
  implicit lazy val help: Help[LoggingOptions] = Help.derive
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy