mirror of
https://github.com/denoland/deno
synced 2024-08-25 02:57:22 +00:00
Compiler exit before emit if preEmitDiagnostics found (#2441)
This commit is contained in:
parent
43c6c1a9f5
commit
60d4522641
|
@ -379,34 +379,39 @@ window.compilerMain = function compilerMain(): void {
|
|||
|
||||
const options = host.getCompilationSettings();
|
||||
const program = ts.createProgram(rootNames, options, host);
|
||||
|
||||
const preEmitDiagnostics = ts.getPreEmitDiagnostics(program).filter(
|
||||
({ code }): boolean => {
|
||||
// TS2691: An import path cannot end with a '.ts' extension. Consider
|
||||
// importing 'bad-module' instead.
|
||||
if (code === 2691) return false;
|
||||
// TS5009: Cannot find the common subdirectory path for the input files.
|
||||
if (code === 5009) return false;
|
||||
// TS5055: Cannot write file
|
||||
// 'http://localhost:4545/tests/subdir/mt_application_x_javascript.j4.js'
|
||||
// because it would overwrite input file.
|
||||
if (code === 5055) return false;
|
||||
// TypeScript is overly opinionated that only CommonJS modules kinds can
|
||||
// support JSON imports. Allegedly this was fixed in
|
||||
// Microsoft/TypeScript#26825 but that doesn't seem to be working here,
|
||||
// so we will ignore complaints about this compiler setting.
|
||||
if (code === 5070) return false;
|
||||
return true;
|
||||
}
|
||||
);
|
||||
if (preEmitDiagnostics.length > 0) {
|
||||
host._logDiagnostics(preEmitDiagnostics);
|
||||
// The above _logDiagnostics calls os.exit(). The return is here just for
|
||||
// clarity.
|
||||
return;
|
||||
}
|
||||
|
||||
const emitResult = program!.emit();
|
||||
|
||||
// TODO(ry) Print diagnostics in Rust.
|
||||
// https://github.com/denoland/deno/pull/2310
|
||||
|
||||
const diagnostics = ts
|
||||
.getPreEmitDiagnostics(program)
|
||||
.concat(emitResult.diagnostics)
|
||||
.filter(
|
||||
({ code }): boolean => {
|
||||
// TS2691: An import path cannot end with a '.ts' extension. Consider
|
||||
// importing 'bad-module' instead.
|
||||
if (code === 2691) return false;
|
||||
// TS5009: Cannot find the common subdirectory path for the input files.
|
||||
if (code === 5009) return false;
|
||||
// TS5055: Cannot write file
|
||||
// 'http://localhost:4545/tests/subdir/mt_application_x_javascript.j4.js'
|
||||
// because it would overwrite input file.
|
||||
if (code === 5055) return false;
|
||||
// TypeScript is overly opinionated that only CommonJS modules kinds can
|
||||
// support JSON imports. Allegedly this was fixed in
|
||||
// Microsoft/TypeScript#26825 but that doesn't seem to be working here,
|
||||
// so we will ignore complaints about this compiler setting.
|
||||
if (code === 5070) return false;
|
||||
return true;
|
||||
}
|
||||
);
|
||||
|
||||
const { diagnostics } = emitResult;
|
||||
if (diagnostics.length > 0) {
|
||||
host._logDiagnostics(diagnostics);
|
||||
// The above _logDiagnostics calls os.exit(). The return is here just for
|
||||
|
|
7
tests/error_003_typescript2.test
Normal file
7
tests/error_003_typescript2.test
Normal file
|
@ -0,0 +1,7 @@
|
|||
# Supposing that we've already attempted to run error_003_typescript.ts
|
||||
# we want to make sure that JS wasn't emitted. Running again without reload flag
|
||||
# should result in the same output.
|
||||
# https://github.com/denoland/deno/issues/2436
|
||||
args: run tests/error_003_typescript.ts
|
||||
exit_code: 1
|
||||
output: tests/error_003_typescript.ts.out
|
Loading…
Reference in a new issue