Skip to content

Commit 5c21fad

Browse files
authored
Merge pull request #31432 from microsoft/builderAPI
Api for tsc --build and --incremental
2 parents 9da0524 + 098c900 commit 5c21fad

23 files changed

+2345
-1452
lines changed

src/compiler/builder.ts

Lines changed: 10 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -796,6 +796,7 @@ namespace ts {
796796
(result as SemanticDiagnosticsBuilderProgram).getSemanticDiagnosticsOfNextAffectedFile = getSemanticDiagnosticsOfNextAffectedFile;
797797
}
798798
else if (kind === BuilderProgramKind.EmitAndSemanticDiagnosticsBuilderProgram) {
799+
(result as EmitAndSemanticDiagnosticsBuilderProgram).getSemanticDiagnosticsOfNextAffectedFile = getSemanticDiagnosticsOfNextAffectedFile;
799800
(result as EmitAndSemanticDiagnosticsBuilderProgram).emitNextAffectedFile = emitNextAffectedFile;
800801
}
801802
else {
@@ -913,6 +914,11 @@ namespace ts {
913914
);
914915
}
915916

917+
// Add file to affected file pending emit to handle for later emit time
918+
if (kind === BuilderProgramKind.EmitAndSemanticDiagnosticsBuilderProgram) {
919+
addToAffectedFilesPendingEmit(state, [(affected as SourceFile).path]);
920+
}
921+
916922
// Get diagnostics for the affected file if its not ignored
917923
if (ignoreSourceFile && ignoreSourceFile(affected as SourceFile)) {
918924
// Get next affected file
@@ -951,18 +957,8 @@ namespace ts {
951957

952958
// When semantic builder asks for diagnostics of the whole program,
953959
// ensure that all the affected files are handled
954-
let affected: SourceFile | Program | undefined;
955-
let affectedFilesPendingEmit: Path[] | undefined;
956-
while (affected = getNextAffectedFile(state, cancellationToken, computeHash)) {
957-
if (affected !== state.program && kind === BuilderProgramKind.EmitAndSemanticDiagnosticsBuilderProgram) {
958-
(affectedFilesPendingEmit || (affectedFilesPendingEmit = [])).push((affected as SourceFile).path);
959-
}
960-
doneWithAffectedFile(state, affected);
961-
}
962-
963-
// In case of emit builder, cache the files to be emitted
964-
if (affectedFilesPendingEmit) {
965-
addToAffectedFilesPendingEmit(state, affectedFilesPendingEmit);
960+
// tslint:disable-next-line no-empty
961+
while (getSemanticDiagnosticsOfNextAffectedFile(cancellationToken)) {
966962
}
967963

968964
let diagnostics: Diagnostic[] | undefined;
@@ -997,7 +993,7 @@ namespace ts {
997993
return map;
998994
}
999995

1000-
export function createBuildProgramUsingProgramBuildInfo(program: ProgramBuildInfo): EmitAndSemanticDiagnosticsBuilderProgram & SemanticDiagnosticsBuilderProgram {
996+
export function createBuildProgramUsingProgramBuildInfo(program: ProgramBuildInfo): EmitAndSemanticDiagnosticsBuilderProgram {
1001997
const fileInfos = createMapFromTemplate(program.fileInfos);
1002998
const state: ReusableBuilderProgramState = {
1003999
fileInfos,
@@ -1181,7 +1177,7 @@ namespace ts {
11811177
* The builder that can handle the changes in program and iterate through changed file to emit the files
11821178
* The semantic diagnostics are cached per file and managed by clearing for the changed/affected files
11831179
*/
1184-
export interface EmitAndSemanticDiagnosticsBuilderProgram extends BuilderProgram {
1180+
export interface EmitAndSemanticDiagnosticsBuilderProgram extends SemanticDiagnosticsBuilderProgram {
11851181
/**
11861182
* Emits the next affected file's emit result (EmitResult and sourceFiles emitted) or returns undefined if iteration is complete
11871183
* The first of writeFile if provided, writeFile of BuilderProgramHost if provided, writeFile of compiler host

src/compiler/commandLineParser.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1022,8 +1022,7 @@ namespace ts {
10221022
}
10231023
}
10241024

1025-
/* @internal */
1026-
export interface OptionsBase {
1025+
interface OptionsBase {
10271026
[option: string]: CompilerOptionsValue | undefined;
10281027
}
10291028

src/compiler/emitter.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -284,7 +284,6 @@ namespace ts {
284284
// Write build information if applicable
285285
if (!buildInfoPath || targetSourceFile || emitSkipped) return;
286286
const program = host.getProgramBuildInfo();
287-
if (!bundle && !program) return;
288287
if (host.isEmitBlocked(buildInfoPath) || compilerOptions.noEmit) {
289288
emitSkipped = true;
290289
return;
@@ -638,7 +637,12 @@ namespace ts {
638637
}
639638

640639
/*@internal*/
641-
export function emitUsingBuildInfo(config: ParsedCommandLine, host: EmitUsingBuildInfoHost, getCommandLine: (ref: ProjectReference) => ParsedCommandLine | undefined): EmitUsingBuildInfoResult {
640+
export function emitUsingBuildInfo(
641+
config: ParsedCommandLine,
642+
host: EmitUsingBuildInfoHost,
643+
getCommandLine: (ref: ProjectReference) => ParsedCommandLine | undefined,
644+
customTransformers?: CustomTransformers
645+
): EmitUsingBuildInfoResult {
642646
const { buildInfoPath, jsFilePath, sourceMapFilePath, declarationFilePath, declarationMapPath } = getOutputPathsForBundle(config.options, /*forceDtsPaths*/ false);
643647
const buildInfoText = host.readFile(Debug.assertDefined(buildInfoPath));
644648
if (!buildInfoText) return buildInfoPath!;
@@ -723,7 +727,12 @@ namespace ts {
723727
useCaseSensitiveFileNames: () => host.useCaseSensitiveFileNames(),
724728
getProgramBuildInfo: returnUndefined
725729
};
726-
emitFiles(notImplementedResolver, emitHost, /*targetSourceFile*/ undefined, getTransformers(config.options), /*emitOnlyDtsFiles*/ false);
730+
emitFiles(
731+
notImplementedResolver,
732+
emitHost,
733+
/*targetSourceFile*/ undefined,
734+
getTransformers(config.options, customTransformers)
735+
);
727736
return outputFiles;
728737
}
729738

0 commit comments

Comments
 (0)