From f7ea0bab60d4198c04f81de624ea61b6d75bcc9c Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Mon, 1 Jul 2019 14:29:32 -0700 Subject: [PATCH] Refactoring --- src/compiler/program.ts | 7 ++++++- src/compiler/types.ts | 2 ++ src/compiler/utilities.ts | 4 ---- src/server/editorServices.ts | 2 +- src/server/project.ts | 8 +++++--- src/server/session.ts | 2 +- src/services/services.ts | 1 - src/services/sourcemaps.ts | 4 +--- 8 files changed, 16 insertions(+), 14 deletions(-) diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 9da4b2efe06..78e5f314879 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -814,7 +814,7 @@ namespace ts { let projectReferenceRedirects: Map | undefined; let mapFromFileToProjectReferenceRedirects: Map | undefined; let mapFromToProjectReferenceRedirectSource: Map | undefined; - const useSourceOfReference = useSourceInsteadOfReferenceRedirect(host); + const useSourceOfReference = !!host.useSourceInsteadOfReferenceRedirect && host.useSourceInsteadOfReferenceRedirect(); const shouldCreateNewSourceFile = shouldProgramCreateNewSourceFiles(oldProgram, options); const structuralIsReused = tryReuseStructureFromOldProgram(); @@ -964,6 +964,7 @@ namespace ts { getResolvedProjectReferenceToRedirect, getResolvedProjectReferenceByPath, forEachResolvedProjectReference, + isSourceOfProjectReferenceRedirect, emitBuildInfo }; @@ -2496,6 +2497,10 @@ namespace ts { return mapFromToProjectReferenceRedirectSource.get(toPath(file)); } + function isSourceOfProjectReferenceRedirect(fileName: string) { + return useSourceOfReference && !!getResolvedProjectReferenceToRedirect(fileName); + } + function forEachProjectReference( projectReferences: ReadonlyArray | undefined, resolvedProjectReferences: ReadonlyArray | undefined, diff --git a/src/compiler/types.ts b/src/compiler/types.ts index ff0aba6acad..16ea47beecc 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -2993,6 +2993,7 @@ namespace ts { /*@internal*/ getResolvedProjectReferenceToRedirect(fileName: string): ResolvedProjectReference | undefined; /*@internal*/ forEachResolvedProjectReference(cb: (resolvedProjectReference: ResolvedProjectReference | undefined, resolvedProjectReferencePath: Path) => T | undefined): T | undefined; /*@internal*/ getResolvedProjectReferenceByPath(projectReferencePath: Path): ResolvedProjectReference | undefined; + /*@internal*/ isSourceOfProjectReferenceRedirect(fileName: string): boolean; /*@internal*/ getProgramBuildInfo?(): ProgramBuildInfo | undefined; /*@internal*/ emitBuildInfo(writeFile?: WriteFileCallback, cancellationToken?: CancellationToken): EmitResult; } @@ -3090,6 +3091,7 @@ namespace ts { getSourceFile(fileName: string): SourceFile | undefined; getResolvedTypeReferenceDirectives(): ReadonlyMap; getProjectReferenceRedirect(fileName: string): string | undefined; + isSourceOfProjectReferenceRedirect(fileName: string): boolean; readonly redirectTargetsMap: RedirectTargetsMap; } diff --git a/src/compiler/utilities.ts b/src/compiler/utilities.ts index 47877e1b27f..562d066b64e 100644 --- a/src/compiler/utilities.ts +++ b/src/compiler/utilities.ts @@ -4616,10 +4616,6 @@ namespace ts { return false; } } - - export function useSourceInsteadOfReferenceRedirect(host: { useSourceInsteadOfReferenceRedirect?(): boolean; }) { - return host.useSourceInsteadOfReferenceRedirect && host.useSourceInsteadOfReferenceRedirect(); - } } namespace ts { diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index e379d1fda2c..6fea0bc4171 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -2570,7 +2570,7 @@ namespace ts.server { /*@internal*/ getOriginalLocationEnsuringConfiguredProject(project: Project, location: DocumentPosition): DocumentPosition | undefined { - const originalLocation = useSourceInsteadOfReferenceRedirect(project) && project.getResolvedProjectReferenceToRedirect(location.fileName) ? + const originalLocation = project.isSourceOfProjectReferenceRedirect(location.fileName) ? location : project.getSourceMapper().tryGetSourcePosition(location); if (!originalLocation) return undefined; diff --git a/src/server/project.ts b/src/server/project.ts index 4e038b94773..cd5a3fec855 100644 --- a/src/server/project.ts +++ b/src/server/project.ts @@ -196,9 +196,6 @@ namespace ts.server { /*@internal*/ originalConfiguredProjects: Map | undefined; - /*@internal*/ - useSourceInsteadOfReferenceRedirect?: () => boolean; - /*@internal*/ getResolvedProjectReferenceToRedirect(_fileName: string): ResolvedProjectReference | undefined { return undefined; @@ -1231,6 +1228,11 @@ namespace ts.server { this.rootFilesMap.delete(info.path); } + /*@internal*/ + isSourceOfProjectReferenceRedirect(fileName: string) { + return !!this.program && this.program.isSourceOfProjectReferenceRedirect(fileName); + } + protected enableGlobalPlugins(options: CompilerOptions, pluginConfigOverrides: Map | undefined) { const host = this.projectService.host; diff --git a/src/server/session.ts b/src/server/session.ts index 088a3a1a249..ff339b06a81 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -443,7 +443,7 @@ namespace ts.server { function getDefinitionInProject(definition: DocumentPosition | undefined, definingProject: Project, project: Project): DocumentPosition | undefined { if (!definition || project.containsFile(toNormalizedPath(definition.fileName))) return definition; - const mappedDefinition = useSourceInsteadOfReferenceRedirect(definingProject) && definingProject.getResolvedProjectReferenceToRedirect(definition.fileName) ? + const mappedDefinition = definingProject.isSourceOfProjectReferenceRedirect(definition.fileName) ? definition : definingProject.getLanguageService().getSourceMapper().tryGetGeneratedPosition(definition); return mappedDefinition && project.containsFile(toNormalizedPath(mappedDefinition.fileName)) ? mappedDefinition : undefined; diff --git a/src/services/services.ts b/src/services/services.ts index 7de7934653e..2f9ba6eec94 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -1151,7 +1151,6 @@ namespace ts { fileExists: maybeBind(host, host.fileExists), readFile: maybeBind(host, host.readFile), getDocumentPositionMapper: maybeBind(host, host.getDocumentPositionMapper), - useSourceInsteadOfReferenceRedirect: maybeBind(host, host.useSourceInsteadOfReferenceRedirect), getSourceFileLike: maybeBind(host, host.getSourceFileLike), log }); diff --git a/src/services/sourcemaps.ts b/src/services/sourcemaps.ts index c4c14e58686..6ab656b4236 100644 --- a/src/services/sourcemaps.ts +++ b/src/services/sourcemaps.ts @@ -17,7 +17,6 @@ namespace ts { readFile?(path: string, encoding?: string): string | undefined; getSourceFileLike?(fileName: string): SourceFileLike | undefined; getDocumentPositionMapper?(generatedFileName: string, sourceFileName?: string): DocumentPositionMapper | undefined; - /* @internal */ useSourceInsteadOfReferenceRedirect?(): boolean; log(s: string): void; } @@ -72,8 +71,7 @@ namespace ts { const program = host.getProgram()!; // If this is source file of project reference source (instead of redirect) there is no generated position - if (useSourceInsteadOfReferenceRedirect(host) && - program.getResolvedProjectReferenceToRedirect(sourceFile.fileName)) { + if (program.isSourceOfProjectReferenceRedirect(sourceFile.fileName)) { return undefined; }