Skip to content

Commit 7d2de4c

Browse files
committed
Initialize the map for dts to reference and source to reference when parsing project reference as its always needed
1 parent 81c9518 commit 7d2de4c

File tree

9 files changed

+89
-116
lines changed

9 files changed

+89
-116
lines changed

src/compiler/builderState.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ export namespace BuilderState {
206206
* Gets the path to reference file from file name, it could be resolvedPath if present otherwise path
207207
*/
208208
function getReferencedFileFromFileName(program: Program, fileName: string, sourceFileDirectory: Path, getCanonicalFileName: GetCanonicalFileName): Path {
209-
return toPath(program.getProjectReferenceRedirect(fileName) || fileName, sourceFileDirectory, getCanonicalFileName);
209+
return toPath(program.getRedirectFromSourceFile(fileName)?.outputDts || fileName, sourceFileDirectory, getCanonicalFileName);
210210
}
211211

212212
/**

src/compiler/checker.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4719,7 +4719,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
47194719
);
47204720
}
47214721
else if (resolvedModule.resolvedUsingTsExtension && shouldRewrite) {
4722-
const redirect = host.getResolvedProjectReferenceToRedirect(sourceFile.path);
4722+
const redirect = host.getRedirectFromSourceFile(sourceFile.path)?.resolvedRef;
47234723
if (redirect) {
47244724
const ignoreCase = !host.useCaseSensitiveFileNames();
47254725
const ownRootDir = host.getCommonSourceDirectory();
@@ -4814,9 +4814,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
48144814
if (moduleNotFoundError) {
48154815
// See if this was possibly a projectReference redirect
48164816
if (resolvedModule) {
4817-
const redirect = host.getProjectReferenceRedirect(resolvedModule.resolvedFileName);
4818-
if (redirect) {
4819-
error(errorNode, Diagnostics.Output_file_0_has_not_been_built_from_source_file_1, redirect, resolvedModule.resolvedFileName);
4817+
const redirect = host.getRedirectFromSourceFile(resolvedModule.resolvedFileName);
4818+
if (redirect?.outputDts) {
4819+
error(errorNode, Diagnostics.Output_file_0_has_not_been_built_from_source_file_1, redirect.outputDts, resolvedModule.resolvedFileName);
48204820
return undefined;
48214821
}
48224822
}
@@ -53374,7 +53374,7 @@ function createBasicNodeBuilderModuleSpecifierResolutionHost(host: TypeCheckerHo
5337453374
getPackageJsonInfoCache: () => host.getPackageJsonInfoCache?.(),
5337553375
useCaseSensitiveFileNames: () => host.useCaseSensitiveFileNames(),
5337653376
redirectTargetsMap: host.redirectTargetsMap,
53377-
getProjectReferenceRedirect: fileName => host.getProjectReferenceRedirect(fileName),
53377+
getRedirectFromSourceFile: fileName => host.getRedirectFromSourceFile(fileName),
5337853378
isSourceOfProjectReferenceRedirect: fileName => host.isSourceOfProjectReferenceRedirect(fileName),
5337953379
fileExists: fileName => host.fileExists(fileName),
5338053380
getFileIncludeReasons: () => host.getFileIncludeReasons(),

src/compiler/moduleSpecifiers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -719,7 +719,7 @@ export function forEachFileNameOfModule<T>(
719719
): T | undefined {
720720
const getCanonicalFileName = hostGetCanonicalFileName(host);
721721
const cwd = host.getCurrentDirectory();
722-
const referenceRedirect = host.isSourceOfProjectReferenceRedirect(importedFileName) ? host.getProjectReferenceRedirect(importedFileName) : undefined;
722+
const referenceRedirect = host.isSourceOfProjectReferenceRedirect(importedFileName) ? host.getRedirectFromSourceFile(importedFileName)?.outputDts : undefined;
723723
const importedPath = toPath(importedFileName, cwd, getCanonicalFileName);
724724
const redirects = host.redirectTargetsMap.get(importedPath) || emptyArray;
725725
const importedFileNames = [...(referenceRedirect ? [referenceRedirect] : emptyArray), importedFileName, ...redirects];

src/compiler/program.ts

Lines changed: 58 additions & 96 deletions
Large diffs are not rendered by default.

src/compiler/resolutionCache.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -872,7 +872,7 @@ export function createResolutionCache(resolutionHost: ResolutionCacheHost, rootD
872872

873873
// All the resolutions in this file are invalidated if this file wasn't resolved using same redirect
874874
const program = resolutionHost.getCurrentProgram();
875-
const oldRedirect = program && program.getResolvedProjectReferenceToRedirect(containingFile);
875+
const oldRedirect = program && program.getRedirectFromSourceFile(containingFile)?.resolvedRef;
876876
const unmatchedRedirects = oldRedirect ?
877877
!redirectedReference || redirectedReference.sourceFile.path !== oldRedirect.sourceFile.path :
878878
!!redirectedReference;

src/compiler/types.ts

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -4553,6 +4553,17 @@ export interface ParseConfigHost extends ModuleResolutionHost {
45534553
*/
45544554
export type ResolvedConfigFileName = string & { _isResolvedConfigFileName: never; };
45554555

4556+
/** @internal */
4557+
export interface ResolvedRefAndOutputDts {
4558+
resolvedRef: ResolvedProjectReference;
4559+
outputDts?: string; // Not set if its a json source file
4560+
}
4561+
/** @internal */
4562+
export interface ResolvedRefAndSource {
4563+
resolvedRef: ResolvedProjectReference;
4564+
source?: string; // Not set if options have --outFile
4565+
}
4566+
45564567
export interface WriteFileCallbackData {
45574568
/** @internal */ sourceMapUrlPos?: number;
45584569
/** @internal */ buildInfo?: BuildInfo;
@@ -4907,12 +4918,11 @@ export interface Program extends ScriptReferenceHost {
49074918

49084919
getProjectReferences(): readonly ProjectReference[] | undefined;
49094920
getResolvedProjectReferences(): readonly (ResolvedProjectReference | undefined)[] | undefined;
4910-
/** @internal */ getProjectReferenceRedirect(fileName: string): string | undefined;
49114921
/**
49124922
* @internal
49134923
* Get the referenced project if the file is input file from that reference project
49144924
*/
4915-
getResolvedProjectReferenceToRedirect(fileName: string): ResolvedProjectReference | undefined;
4925+
getRedirectFromSourceFile(fileName: string): ResolvedRefAndOutputDts | undefined;
49164926
/** @internal */ forEachResolvedProjectReference<T>(cb: (resolvedProjectReference: ResolvedProjectReference) => T | undefined): T | undefined;
49174927
/** @internal */ getResolvedProjectReferenceByPath(projectReferencePath: Path): ResolvedProjectReference | undefined;
49184928
/** @internal */ getRedirectReferenceForResolutionFromSourceOfProject(filePath: Path): ResolvedProjectReference | undefined;
@@ -5031,7 +5041,7 @@ export interface TypeCheckerHost extends ModuleSpecifierResolutionHost, SourceFi
50315041

50325042
getSourceFiles(): readonly SourceFile[];
50335043
getSourceFile(fileName: string): SourceFile | undefined;
5034-
getProjectReferenceRedirect(fileName: string): string | undefined;
5044+
getRedirectFromSourceFile(fileName: string): ResolvedRefAndOutputDts | undefined;
50355045
isSourceOfProjectReferenceRedirect(fileName: string): boolean;
50365046
getEmitSyntaxForUsageLocation(file: SourceFile, usage: StringLiteralLike): ResolutionMode;
50375047
getRedirectReferenceForResolutionFromSourceOfProject(filePath: Path): ResolvedProjectReference | undefined;
@@ -8566,7 +8576,7 @@ export const enum EmitHint {
85668576
export interface SourceFileMayBeEmittedHost {
85678577
getCompilerOptions(): CompilerOptions;
85688578
isSourceFileFromExternalLibrary(file: SourceFile): boolean;
8569-
getResolvedProjectReferenceToRedirect(fileName: string): ResolvedProjectReference | undefined;
8579+
getRedirectFromSourceFile(fileName: string): ResolvedRefAndOutputDts | undefined;
85708580
isSourceOfProjectReferenceRedirect(fileName: string): boolean;
85718581
getCurrentDirectory(): string;
85728582
getCanonicalFileName: GetCanonicalFileName;
@@ -9966,7 +9976,7 @@ export interface ModuleSpecifierResolutionHost {
99669976
getNearestAncestorDirectoryWithPackageJson?(fileName: string, rootDir?: string): string | undefined;
99679977

99689978
readonly redirectTargetsMap: RedirectTargetsMap;
9969-
getProjectReferenceRedirect(fileName: string): string | undefined;
9979+
getRedirectFromSourceFile(fileName: string): ResolvedRefAndOutputDts | undefined;
99709980
isSourceOfProjectReferenceRedirect(fileName: string): boolean;
99719981
getFileIncludeReasons(): MultiMap<Path, FileIncludeReason>;
99729982
getCommonSourceDirectory(): string;

src/compiler/utilities.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6591,7 +6591,7 @@ export function sourceFileMayBeEmitted(sourceFile: SourceFile, host: SourceFileM
65916591
if (host.isSourceOfProjectReferenceRedirect(sourceFile.fileName)) return false;
65926592
// Any non json file should be emitted
65936593
if (!isJsonSourceFile(sourceFile)) return true;
6594-
if (host.getResolvedProjectReferenceToRedirect(sourceFile.fileName)) return false;
6594+
if (host.getRedirectFromSourceFile(sourceFile.fileName)) return false;
65956595
// Emit json file if outFile is specified
65966596
if (options.outFile) return true;
65976597
// Json file is not emitted if outDir is not specified
@@ -12141,12 +12141,12 @@ export function getLibFileNameFromLibReference(libReference: FileReference): str
1214112141
/** @internal */
1214212142
export function forEachResolvedProjectReference<T>(
1214312143
resolvedProjectReferences: readonly (ResolvedProjectReference | undefined)[] | undefined,
12144-
cb: (resolvedProjectReference: ResolvedProjectReference, parent: ResolvedProjectReference | undefined) => T | undefined,
12144+
cb: (resolvedProjectReference: ResolvedProjectReference) => T | undefined,
1214512145
): T | undefined {
1214612146
return forEachProjectReference(
1214712147
/*projectReferences*/ undefined,
1214812148
resolvedProjectReferences,
12149-
(resolvedRef, parent) => resolvedRef && cb(resolvedRef, parent),
12149+
resolvedRef => resolvedRef && cb(resolvedRef),
1215012150
);
1215112151
}
1215212152

src/server/project.ts

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ import {
109109
resolutionExtensionIsTSOrJson,
110110
ResolvedModuleWithFailedLookupLocations,
111111
ResolvedProjectReference,
112+
ResolvedRefAndOutputDts,
112113
ResolvedTypeReferenceDirectiveWithFailedLookupLocations,
113114
resolvePackageNameToPackageJson,
114115
returnFalse,
@@ -462,7 +463,7 @@ export abstract class Project implements LanguageServiceHost, ModuleResolutionHo
462463
noDtsResolutionProject?: AuxiliaryProject | undefined;
463464

464465
/** @internal */
465-
getResolvedProjectReferenceToRedirect(_fileName: string): ResolvedProjectReference | undefined {
466+
getRedirectFromSourceFile(_fileName: string): ResolvedRefAndOutputDts | undefined {
466467
return undefined;
467468
}
468469

@@ -3044,9 +3045,9 @@ export class ConfiguredProject extends Project {
30443045
}
30453046

30463047
/** @internal */
3047-
override getResolvedProjectReferenceToRedirect(fileName: string): ResolvedProjectReference | undefined {
3048+
override getRedirectFromSourceFile(fileName: string): ResolvedRefAndOutputDts | undefined {
30483049
const program = this.getCurrentProgram();
3049-
return program && program.getResolvedProjectReferenceToRedirect(fileName);
3050+
return program && program.getRedirectFromSourceFile(fileName);
30503051
}
30513052

30523053
/** @internal */

src/services/utilities.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2458,7 +2458,7 @@ export function createModuleSpecifierResolutionHost(program: Program, host: Lang
24582458
getPackageJsonInfoCache: () => program.getModuleResolutionCache()?.getPackageJsonInfoCache(),
24592459
getGlobalTypingsCacheLocation: maybeBind(host, host.getGlobalTypingsCacheLocation),
24602460
redirectTargetsMap: program.redirectTargetsMap,
2461-
getProjectReferenceRedirect: fileName => program.getProjectReferenceRedirect(fileName),
2461+
getRedirectFromSourceFile: fileName => program.getRedirectFromSourceFile(fileName),
24622462
isSourceOfProjectReferenceRedirect: fileName => program.isSourceOfProjectReferenceRedirect(fileName),
24632463
getNearestAncestorDirectoryWithPackageJson: maybeBind(host, host.getNearestAncestorDirectoryWithPackageJson),
24642464
getFileIncludeReasons: () => program.getFileIncludeReasons(),

0 commit comments

Comments
 (0)