Skip to content

Commit

Permalink
refactor(compiler-cli): add forceEmit flag to performCompilation (#…
Browse files Browse the repository at this point in the history
…46355)

In Bazel worker-land, workers which use incremental compilation must still
emit all declared outputs and cannot rely on these outputs persisting from
previous builds.

This commit adds a flag to `performCompilation` which can be used by the
worker infrastructure to instruct the compiler to always emit all possible
output files, regardless of any incremental build optimizations.

PR Close #46355
  • Loading branch information
alxhub authored and jessicajaniuk committed Jun 14, 2022
1 parent 86303f7 commit 714183d
Show file tree
Hide file tree
Showing 3 changed files with 23 additions and 11 deletions.
5 changes: 4 additions & 1 deletion packages/compiler-cli/src/ngtsc/program.ts
Expand Up @@ -233,6 +233,7 @@ export class NgtscProgram implements api.Program {

emit(opts?: {
emitFlags?: api.EmitFlags|undefined;
forceEmit?: boolean;
cancellationToken?: ts.CancellationToken | undefined;
customTransformers?: api.CustomTransformers | undefined;
emitCallback?: api.TsEmitCallback | undefined;
Expand All @@ -255,6 +256,8 @@ export class NgtscProgram implements api.Program {
}
}

const forceEmit = opts?.forceEmit ?? false;

this.compiler.perfRecorder.memory(PerfCheckpoint.PreEmit);

const res = this.compiler.perfRecorder.inPhase(PerfPhase.TypeScriptEmit, () => {
Expand Down Expand Up @@ -295,7 +298,7 @@ export class NgtscProgram implements api.Program {
continue;
}

if (this.compiler.incrementalCompilation.safeToSkipEmit(targetSourceFile)) {
if (!forceEmit && this.compiler.incrementalCompilation.safeToSkipEmit(targetSourceFile)) {
this.compiler.perfRecorder.eventCount(PerfEvent.EmitSkipSourceFile);
continue;
}
Expand Down
6 changes: 4 additions & 2 deletions packages/compiler-cli/src/perform_compile.ts
Expand Up @@ -221,6 +221,7 @@ export function performCompilation({
gatherDiagnostics = defaultGatherDiagnostics,
customTransformers,
emitFlags = api.EmitFlags.Default,
forceEmit = false,
modifiedResourceFiles = null
}: {
rootNames: string[],
Expand All @@ -232,6 +233,7 @@ export function performCompilation({
gatherDiagnostics?: (program: api.Program) => ReadonlyArray<ts.Diagnostic>,
customTransformers?: api.CustomTransformers,
emitFlags?: api.EmitFlags,
forceEmit?: boolean,
modifiedResourceFiles?: Set<string>| null,
}): PerformCompilationResult {
let program: api.Program|undefined;
Expand All @@ -256,8 +258,8 @@ export function performCompilation({
}

if (!hasErrors(allDiagnostics)) {
emitResult =
program!.emit({emitCallback, mergeEmitResultsCallback, customTransformers, emitFlags});
emitResult = program!.emit(
{emitCallback, mergeEmitResultsCallback, customTransformers, emitFlags, forceEmit});
allDiagnostics.push(...emitResult.diagnostics);
return {diagnostics: allDiagnostics, program, emitResult};
}
Expand Down
23 changes: 15 additions & 8 deletions packages/compiler-cli/src/transformers/api.ts
Expand Up @@ -250,14 +250,21 @@ export interface Program {
*
* Angular structural information is required to emit files.
*/
emit({emitFlags, cancellationToken, customTransformers, emitCallback, mergeEmitResultsCallback}?:
{
emitFlags?: EmitFlags,
cancellationToken?: ts.CancellationToken,
customTransformers?: CustomTransformers,
emitCallback?: TsEmitCallback,
mergeEmitResultsCallback?: TsMergeEmitResultsCallback
}): ts.EmitResult;
emit({
emitFlags,
forceEmit,
cancellationToken,
customTransformers,
emitCallback,
mergeEmitResultsCallback,
}?: {
emitFlags?: EmitFlags,
forceEmit?: boolean,
cancellationToken?: ts.CancellationToken,
customTransformers?: CustomTransformers,
emitCallback?: TsEmitCallback,
mergeEmitResultsCallback?: TsMergeEmitResultsCallback
}): ts.EmitResult;

/**
* @internal
Expand Down

0 comments on commit 714183d

Please sign in to comment.