Skip to content

Commit dca9182

Browse files
authored
Always write tsbuildInfo when running tsc -b (microsoft#58626)
1 parent 359646b commit dca9182

File tree

172 files changed

+2665
-364
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

172 files changed

+2665
-364
lines changed

src/compiler/builder.ts

+12-6
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ import {
5555
HostForComputeHash,
5656
isArray,
5757
isDeclarationFileName,
58+
isIncrementalCompilation,
5859
isJsonSourceFile,
5960
isNumber,
6061
isString,
@@ -376,7 +377,7 @@ function createBuilderProgramState(
376377
}
377378
else {
378379
// We arent using old state, so atleast emit buildInfo with current information
379-
state.buildInfoEmitPending = true;
380+
state.buildInfoEmitPending = isIncrementalCompilation(compilerOptions);
380381
}
381382

382383
// Update changed files and copy semantic diagnostics if we can
@@ -1184,14 +1185,17 @@ export function isIncrementalBuildInfo(info: BuildInfo): info is IncrementalBuil
11841185
/**
11851186
* Gets the program information to be emitted in buildInfo so that we can use it to create new program
11861187
*/
1187-
function getBuildInfo(state: BuilderProgramStateWithDefinedProgram): IncrementalBuildInfo {
1188+
function getBuildInfo(state: BuilderProgramStateWithDefinedProgram): BuildInfo {
11881189
const currentDirectory = state.program.getCurrentDirectory();
11891190
const buildInfoDirectory = getDirectoryPath(getNormalizedAbsolutePath(getTsBuildInfoEmitOutputFilePath(state.compilerOptions)!, currentDirectory));
11901191
// Convert the file name to Path here if we set the fileName instead to optimize multiple d.ts file emits and having to compute Canonical path
11911192
const latestChangedDtsFile = state.latestChangedDtsFile ? relativeToBuildInfoEnsuringAbsolutePath(state.latestChangedDtsFile) : undefined;
11921193
const fileNames: string[] = [];
11931194
const fileNameToFileId = new Map<string, IncrementalBuildInfoFileId>();
11941195
const rootFileNames = new Set(state.program.getRootFileNames().map(f => toPath(f, currentDirectory, state.program.getCanonicalFileName)));
1196+
1197+
if (!isIncrementalCompilation(state.compilerOptions)) return { version };
1198+
11951199
const root: IncrementalBuildInfoRoot[] = [];
11961200
if (state.compilerOptions.outFile) {
11971201
// Copy all fileInfo, version and impliedFormat
@@ -1204,7 +1208,7 @@ function getBuildInfo(state: BuilderProgramStateWithDefinedProgram): Incremental
12041208
{ version: value.version, impliedFormat: value.impliedFormat, signature: undefined, affectsGlobalScope: undefined } :
12051209
value.version;
12061210
});
1207-
return {
1211+
const buildInfo: IncrementalBundleEmitBuildInfo = {
12081212
fileNames,
12091213
fileInfos,
12101214
root,
@@ -1221,7 +1225,8 @@ function getBuildInfo(state: BuilderProgramStateWithDefinedProgram): Incremental
12211225
false : // Pending emit is same as deteremined by compilerOptions
12221226
state.programEmitPending, // Actual value
12231227
version,
1224-
} satisfies IncrementalBundleEmitBuildInfo;
1228+
};
1229+
return buildInfo;
12251230
}
12261231

12271232
let fileIdsList: (readonly IncrementalBuildInfoFileId[])[] | undefined;
@@ -1295,7 +1300,7 @@ function getBuildInfo(state: BuilderProgramStateWithDefinedProgram): Incremental
12951300
}
12961301
}
12971302

1298-
return {
1303+
const buildInfo: IncrementalMultiFileEmitBuildInfo = {
12991304
fileNames,
13001305
fileIdsList,
13011306
fileInfos,
@@ -1310,7 +1315,8 @@ function getBuildInfo(state: BuilderProgramStateWithDefinedProgram): Incremental
13101315
emitSignatures,
13111316
latestChangedDtsFile,
13121317
version,
1313-
} satisfies IncrementalMultiFileEmitBuildInfo;
1318+
};
1319+
return buildInfo;
13141320

13151321
function relativeToBuildInfoEnsuringAbsolutePath(path: string) {
13161322
return relativeToBuildInfo(getNormalizedAbsolutePath(path, currentDirectory));

src/compiler/diagnosticMessages.json

+4
Original file line numberDiff line numberDiff line change
@@ -4617,6 +4617,10 @@
46174617
"category": "Error",
46184618
"code": 5110
46194619
},
4620+
"Option 'tsBuildInfoFile' cannot be specified without specifying option 'incremental' or 'composite' or if not running 'tsc -b'.": {
4621+
"category": "Error",
4622+
"code": 5111
4623+
},
46204624

46214625
"Generates a sourcemap for each corresponding '.d.ts' file.": {
46224626
"category": "Message",

src/compiler/emitter.ts

+6-1
Original file line numberDiff line numberDiff line change
@@ -479,7 +479,7 @@ export function forEachEmittedFile<T>(
479479

480480
export function getTsBuildInfoEmitOutputFilePath(options: CompilerOptions) {
481481
const configFile = options.configFilePath;
482-
if (!isIncrementalCompilation(options)) return undefined;
482+
if (!canEmitTsBuildInfo(options)) return undefined;
483483
if (options.tsBuildInfoFile) return options.tsBuildInfoFile;
484484
const outPath = options.outFile;
485485
let buildInfoExtensionLess: string;
@@ -498,6 +498,11 @@ export function getTsBuildInfoEmitOutputFilePath(options: CompilerOptions) {
498498
return buildInfoExtensionLess + Extension.TsBuildInfo;
499499
}
500500

501+
/** @internal */
502+
export function canEmitTsBuildInfo(options: CompilerOptions) {
503+
return isIncrementalCompilation(options) || !!options.tscBuild;
504+
}
505+
501506
/** @internal */
502507
export function getOutputPathsForBundle(options: CompilerOptions, forceDtsPaths: boolean): EmitFileNames {
503508
const outPath = options.outFile!;

src/compiler/program.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import {
88
AsExpression,
99
BuilderProgram,
1010
CancellationToken,
11+
canEmitTsBuildInfo,
1112
canHaveDecorators,
1213
canHaveIllegalDecorators,
1314
chainDiagnosticMessages,
@@ -195,7 +196,6 @@ import {
195196
isImportEqualsDeclaration,
196197
isImportSpecifier,
197198
isImportTypeNode,
198-
isIncrementalCompilation,
199199
isInJSFile,
200200
isJSDocImportTag,
201201
isLiteralImportTypeNode,
@@ -4324,8 +4324,8 @@ export function createProgram(rootNamesOrOptions: readonly string[] | CreateProg
43244324

43254325
const outputFile = options.outFile;
43264326
if (options.tsBuildInfoFile) {
4327-
if (!isIncrementalCompilation(options)) {
4328-
createDiagnosticForOptionName(Diagnostics.Option_0_cannot_be_specified_without_specifying_option_1_or_option_2, "tsBuildInfoFile", "incremental", "composite");
4327+
if (!canEmitTsBuildInfo(options)) {
4328+
createDiagnosticForOptionName(Diagnostics.Option_tsBuildInfoFile_cannot_be_specified_without_specifying_option_incremental_or_composite_or_if_not_running_tsc_b, "tsBuildInfoFile");
43294329
}
43304330
}
43314331
else if (options.incremental && !outputFile && !options.configFilePath) {

0 commit comments

Comments
 (0)