abstract class Reporter extends ZincReporter
A flexible reporter whose configuration is provided by a ReporterConfig
.
This configuration indicated whether to use colors, how to format messages,
etc.
A reporter has internal state and must be instantiated per compilation.
Note: Implementations must be thread-safe or concurrency hazards will surface when compilation is carried out with Hydra.
- Alphabetic
- By Inheritance
- Reporter
- ZincReporter
- ConfigurableReporter
- Reporter
- AnyRef
- Any
- Hide All
- Show All
- Public
- Protected
Instance Constructors
- new Reporter(logger: Logger, cwd: AbsolutePath, config: ReporterConfig, _problems: Buffer[ProblemPerPhase])
- logger
The logger that will receive the output of the reporter.
- cwd
The current working directory of the user who started compilation.
- config
The configuration for this reporter.
Abstract Value Members
- abstract def printSummary(): Unit
- Definition Classes
- Reporter
- abstract def reportCancelledCompilation(): Unit
Report the compile cancellation of this project.
Report the compile cancellation of this project.
- Definition Classes
- ZincReporter
- abstract def reportCompilationProgress(progress: Long, total: Long): Unit
Report the progress from the compiler.
Report the progress from the compiler.
- Definition Classes
- ZincReporter
- abstract def reportEndCompilation(): Unit
A function called at the very end of compilation that processes the end of compilation from the reporter point of view as well as announce the end to the client.
A function called at the very end of compilation that processes the end of compilation from the reporter point of view as well as announce the end to the client.
This method is called when the caller knows for sure that announcing the end of compilation to the client is safe. For example, when a compilation fails and there are no background tasks to run. Compare this to the sister
reportEndCompilation
method which is used for the opposite.- Definition Classes
- ZincReporter
- abstract def reportEndIncrementalCycle(durationMs: Long, result: Try[Unit]): Unit
A function called after every incremental cycle, even if any compilation errors happen.
A function called after every incremental cycle, even if any compilation errors happen. This method is not called if the compilation is a no-op (e.g. same analysis as before).
- durationMs
The time it took to complete the incremental compiler cycle.
- result
The result of the incremental cycle. We don't use
bsp.StatusCode
because the bloop backend, where this method is used, should not depend on bsp4j.
- Definition Classes
- ZincReporter
- abstract def reportStartCompilation(previousProblems: List[ProblemPerPhase]): Unit
A function called *always* at the very beginning of compilation.
A function called *always* at the very beginning of compilation.
- Definition Classes
- ZincReporter
- abstract def reportStartIncrementalCycle(sources: Seq[VirtualFile], outputDirs: Seq[File]): Unit
A function called before every incremental cycle with the compilation inputs.
A function called before every incremental cycle with the compilation inputs. This method is not called if the compilation is a no-op (e.g. same analysis as before).
- Definition Classes
- ZincReporter
Concrete Value Members
- final def !=(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- final def ##: Int
- Definition Classes
- AnyRef → Any
- final def ==(arg0: Any): Boolean
- Definition Classes
- AnyRef → Any
- val _problems: Buffer[ProblemPerPhase]
- def allProblems: Seq[Problem]
All the
Problems
seen by this reporter.All the
Problems
seen by this reporter.- Definition Classes
- Reporter → ConfigurableReporter
- def allProblemsPerPhase: Seq[ProblemPerPhase]
- Definition Classes
- Reporter → ZincReporter
- final def asInstanceOf[T0]: T0
- Definition Classes
- Any
- def clone(): AnyRef
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.CloneNotSupportedException]) @native() @IntrinsicCandidate()
- def comment(pos: Position, msg: String): Unit
- Definition Classes
- Reporter → Reporter
- val config: ReporterConfig
The configuration for this reporter.
The configuration for this reporter.
- Definition Classes
- Reporter → ConfigurableReporter
- val converter: PlainVirtualFileConverter
- Attributes
- protected
- val cwd: AbsolutePath
The current working directory of the user who started compilation.
The current working directory of the user who started compilation.
- Definition Classes
- Reporter → ConfigurableReporter
- def enableFatalWarnings(): Unit
Enables internal bloop implementation of fatal warnings.
Enables internal bloop implementation of fatal warnings.
Having fatal warnings implemented inside the compiler has several drawbacks:
1. Bloop receives a failed compilation when there is a warning. A failed compilation doesn't allow us to cache the work done during an incremental compiler cycle and the compilation products generated are thrown away. This means next time we compile we need to redo the work of compiling all changed source files when we would only want to recompile the files that produced a fatal warning.
2. When warnings are produced, Metals doesn't have access to the class files generated by the failed compilation. This affects negatively the editing experience in the editor.
To work around these limitations, we remove
-Xfatal-warnings
from the scalac options passed to the compiler and we implement fatal warnings ourselves in our reporter implementation.Our implementation promotes warnings to errors just before we're going to report them but still represents warnings as warnings in the analysis file. At the same time, it also treats successful compilations with fatal warnings as errors at the very end of the compilation pipeline, after all the compilation passes have been done in a build graph, and guarantees that it works for clients that have their compilations deduplicated.
All in all, implementing fatal warnings reproduces the previous behavior in the compiler but without the inconveniences of handling compilation results as failures when only fatal warnings are solely responsible for the failed result.
- Definition Classes
- Reporter → ZincReporter
- final def eq(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- def equals(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef → Any
- val filesToPhaseStack: TrieMap[File, List[String]]
- Attributes
- protected
- final def getClass(): Class[_ <: AnyRef]
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- def getSourceFilesWithFatalWarnings: Set[File]
Tells the caller which source files have fatal warnings so that Bloop can mark them as changed and get recompiled in the next incremental cycle.
Tells the caller which source files have fatal warnings so that Bloop can mark them as changed and get recompiled in the next incremental cycle.
- Definition Classes
- Reporter → ZincReporter
- def hasErrors(): Boolean
true
if this reporter has received errors,false
otherwise.true
if this reporter has received errors,false
otherwise.- Definition Classes
- Reporter → ConfigurableReporter → Reporter
- def hasWarnings(): Boolean
true
if this reporter has received warnings,false
otherwise.true
if this reporter has received warnings,false
otherwise.- Definition Classes
- Reporter → ConfigurableReporter → Reporter
- def hashCode(): Int
- Definition Classes
- AnyRef → Any
- Annotations
- @native() @IntrinsicCandidate()
- final def isInstanceOf[T0]: Boolean
- Definition Classes
- Any
- def liftFatalWarning(problem: Problem): Problem
- Attributes
- protected
- def liftProblem(p: xsbti.Problem): Problem
- Attributes
- protected
- def log(xproblem: xsbti.Problem): Unit
- Definition Classes
- Reporter → Reporter
- val logger: Logger
- final def ne(arg0: AnyRef): Boolean
- Definition Classes
- AnyRef
- final def notify(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- final def notifyAll(): Unit
- Definition Classes
- AnyRef
- Annotations
- @native() @IntrinsicCandidate()
- val phasesAtFile: TrieMap[File, String]
- Attributes
- protected
- def problems(): Array[xsbti.Problem]
- Definition Classes
- Reporter → Reporter
- def processEndCompilation(previousSuccessfulProblems: List[ProblemPerPhase], code: StatusCode, clientClassesDir: Option[AbsolutePath], analysisOut: Option[AbsolutePath]): Unit
A function called at the very end of compilation that processes the state of the reporter.
A function called at the very end of compilation that processes the state of the reporter. The execution of this endpoint can clean or report more diagnostics with the client but it does not announce the end of compilation, which is instead done with announceEndCompilation.
- previousSuccessfulProblems
The problems reported in the previous compiler analysis that were successful.
- code
The status code for a given compilation. The status code can be used whenever there is a noop compile and it's successful or cancelled.
- clientClassesDir
The analysis file of the client in case it has been rewritten. compilation has been finished. When the request is deduplicated, this directory matches the classes directory of the deduplicated client.
- Definition Classes
- Reporter → ZincReporter
- def reportNextPhase(phase: String, sourceFile: File): Unit
Report when the compiler enters in a phase.
Report when the compiler enters in a phase.
- Definition Classes
- Reporter → ZincReporter
- def reset(): Unit
- Definition Classes
- Reporter → Reporter
- final def synchronized[T0](arg0: => T0): T0
- Definition Classes
- AnyRef
- def toString(): String
- Definition Classes
- AnyRef → Any
- final def wait(arg0: Long, arg1: Int): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
- final def wait(arg0: Long): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException]) @native()
- final def wait(): Unit
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.InterruptedException])
Deprecated Value Members
- def finalize(): Unit
- Attributes
- protected[lang]
- Definition Classes
- AnyRef
- Annotations
- @throws(classOf[java.lang.Throwable]) @Deprecated
- Deprecated