fix(ivy): report watch mode diagnostics correctly (#33862)
This commit changes the reporting of watch mode diagnostics for ngtsc to use the same formatting as non-watch mode diagnostics. This prints rich and contextual errors even in watch mode, which previously was not the case. Fixes #32213 PR Close #33862
This commit is contained in:
parent
4be8929844
commit
97fbdab3b8
@ -223,28 +223,36 @@ function reportErrorsAndExit(
|
|||||||
allDiagnostics: Diagnostics, options?: api.CompilerOptions,
|
allDiagnostics: Diagnostics, options?: api.CompilerOptions,
|
||||||
consoleError: (s: string) => void = console.error): number {
|
consoleError: (s: string) => void = console.error): number {
|
||||||
const errorsAndWarnings = filterErrorsAndWarnings(allDiagnostics);
|
const errorsAndWarnings = filterErrorsAndWarnings(allDiagnostics);
|
||||||
if (errorsAndWarnings.length) {
|
printDiagnostics(errorsAndWarnings, options, consoleError);
|
||||||
const formatHost = getFormatDiagnosticsHost(options);
|
|
||||||
if (options && options.enableIvy !== false) {
|
|
||||||
const ngDiagnostics = errorsAndWarnings.filter(api.isNgDiagnostic);
|
|
||||||
const tsDiagnostics = errorsAndWarnings.filter(api.isTsDiagnostic);
|
|
||||||
consoleError(replaceTsWithNgInErrors(
|
|
||||||
ts.formatDiagnosticsWithColorAndContext(tsDiagnostics, formatHost)));
|
|
||||||
consoleError(formatDiagnostics(ngDiagnostics, formatHost));
|
|
||||||
} else {
|
|
||||||
consoleError(formatDiagnostics(errorsAndWarnings, formatHost));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return exitCodeFromResult(allDiagnostics);
|
return exitCodeFromResult(allDiagnostics);
|
||||||
}
|
}
|
||||||
|
|
||||||
export function watchMode(
|
export function watchMode(
|
||||||
project: string, options: api.CompilerOptions, consoleError: (s: string) => void) {
|
project: string, options: api.CompilerOptions, consoleError: (s: string) => void) {
|
||||||
return performWatchCompilation(createPerformWatchHost(project, diagnostics => {
|
return performWatchCompilation(createPerformWatchHost(project, diagnostics => {
|
||||||
consoleError(formatDiagnostics(diagnostics, getFormatDiagnosticsHost(options)));
|
printDiagnostics(diagnostics, options, consoleError);
|
||||||
}, options, options => createEmitCallback(options)));
|
}, options, options => createEmitCallback(options)));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function printDiagnostics(
|
||||||
|
diagnostics: ReadonlyArray<ts.Diagnostic|api.Diagnostic>,
|
||||||
|
options: api.CompilerOptions | undefined, consoleError: (s: string) => void): void {
|
||||||
|
if (diagnostics.length === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
const formatHost = getFormatDiagnosticsHost(options);
|
||||||
|
if (options && options.enableIvy !== false) {
|
||||||
|
const ngDiagnostics = diagnostics.filter(api.isNgDiagnostic);
|
||||||
|
const tsDiagnostics = diagnostics.filter(api.isTsDiagnostic);
|
||||||
|
consoleError(replaceTsWithNgInErrors(
|
||||||
|
ts.formatDiagnosticsWithColorAndContext(tsDiagnostics, formatHost)));
|
||||||
|
consoleError(formatDiagnostics(ngDiagnostics, formatHost));
|
||||||
|
} else {
|
||||||
|
consoleError(formatDiagnostics(diagnostics, formatHost));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// CLI entry point
|
// CLI entry point
|
||||||
if (require.main === module) {
|
if (require.main === module) {
|
||||||
const args = process.argv.slice(2);
|
const args = process.argv.slice(2);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user