From fad1c0547df29a7971c5b2b3896e170db35f6b2e Mon Sep 17 00:00:00 2001 From: kingwl Date: Fri, 28 May 2021 18:13:57 +0800 Subject: [PATCH 1/8] Pass session into plugin --- src/server/editorServices.ts | 9 +++++++-- src/server/project.ts | 27 ++++++++++++++++++++------- src/server/session.ts | 1 + 3 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index ceebdc4020315..1f1f51d32d2f8 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -411,6 +411,7 @@ namespace ts.server { /** @deprecated use serverMode instead */ syntaxOnly?: boolean; serverMode?: LanguageServiceMode; + session: Session | undefined; } interface OriginalFileInfo { fileName: NormalizedPath; path: Path; } @@ -782,6 +783,7 @@ namespace ts.server { readonly packageJsonCache: PackageJsonCache; /*@internal*/ private packageJsonFilesMap: ESMap | undefined; + private session: Session | undefined; private performanceEventHandler?: PerformanceEventHandler; @@ -800,6 +802,8 @@ namespace ts.server { this.pluginProbeLocations = opts.pluginProbeLocations || emptyArray; this.allowLocalPluginLoads = !!opts.allowLocalPluginLoads; this.typesMapLocation = (opts.typesMapLocation === undefined) ? combinePaths(getDirectoryPath(this.getExecutingFilePath()), "typesMap.json") : opts.typesMapLocation; + this.session = opts.session; + if (opts.serverMode !== undefined) { this.serverMode = opts.serverMode; this.syntaxOnly = this.serverMode === LanguageServiceMode.Syntactic; @@ -2068,7 +2072,8 @@ namespace ts.server { canonicalConfigFilePath, this, this.documentRegistry, - configFileExistenceInfo.config.cachedDirectoryStructureHost); + configFileExistenceInfo.config.cachedDirectoryStructureHost, + this.session); this.configuredProjects.set(canonicalConfigFilePath, project); this.createConfigFileWatcherForParsedConfig(configFileName, canonicalConfigFilePath, project); return project; @@ -2517,7 +2522,7 @@ namespace ts.server { typeAcquisition = this.typeAcquisitionForInferredProjects; } watchOptionsAndErrors = watchOptionsAndErrors || undefined; - const project = new InferredProject(this, this.documentRegistry, compilerOptions, watchOptionsAndErrors?.watchOptions, projectRootPath, currentDirectory, this.currentPluginConfigOverrides, typeAcquisition); + const project = new InferredProject(this, this.documentRegistry, compilerOptions, watchOptionsAndErrors?.watchOptions, projectRootPath, currentDirectory, this.currentPluginConfigOverrides, typeAcquisition, this.session); project.setProjectErrors(watchOptionsAndErrors?.errors); if (isSingleInferredProject) { this.inferredProjects.unshift(project); diff --git a/src/server/project.ts b/src/server/project.ts index ef48ebf530bc2..d498737e0b846 100644 --- a/src/server/project.ts +++ b/src/server/project.ts @@ -84,6 +84,7 @@ namespace ts.server { languageService: LanguageService; languageServiceHost: LanguageServiceHost; serverHost: ServerHost; + session?: Session; config: any; } @@ -262,6 +263,8 @@ namespace ts.server { /*@internal*/ protected typeAcquisition: TypeAcquisition | undefined; + private session: Session | undefined; + /*@internal*/ constructor( /*@internal*/ readonly projectName: string, @@ -275,10 +278,12 @@ namespace ts.server { protected watchOptions: WatchOptions | undefined, directoryStructureHost: DirectoryStructureHost, currentDirectory: string | undefined, + session: Session | undefined, ) { this.directoryStructureHost = directoryStructureHost; this.currentDirectory = this.projectService.getNormalizedAbsolutePath(currentDirectory || ""); this.getCanonicalFileName = this.projectService.toCanonicalFileName; + this.session = session; this.cancellationToken = new ThrottledCancellationToken(this.projectService.cancellationToken, this.projectService.throttleWaitMilliseconds); if (!this.compilerOptions) { @@ -1603,7 +1608,8 @@ namespace ts.server { project: this, languageService: this.languageService, languageServiceHost: this, - serverHost: this.projectService.host + serverHost: this.projectService.host, + session: this.session }; const pluginModule = pluginModuleFactory({ typescript: ts }); @@ -1806,7 +1812,8 @@ namespace ts.server { projectRootPath: NormalizedPath | undefined, currentDirectory: string | undefined, pluginConfigOverrides: ESMap | undefined, - typeAcquisition: TypeAcquisition | undefined) { + typeAcquisition: TypeAcquisition | undefined, + session: Session | undefined) { super(InferredProject.newName(), ProjectKind.Inferred, projectService, @@ -1818,7 +1825,8 @@ namespace ts.server { /*compileOnSaveEnabled*/ false, watchOptions, projectService.host, - currentDirectory); + currentDirectory, + session); this.typeAcquisition = typeAcquisition; this.projectRootPath = projectRootPath && projectService.toCanonicalFileName(projectRootPath); if (!projectRootPath && !projectService.useSingleInferredProject) { @@ -1971,7 +1979,8 @@ namespace ts.server { /*compileOnSaveEnabled*/ false, hostProject.getWatchOptions(), hostProject.projectService.host, - hostProject.currentDirectory); + hostProject.currentDirectory, + /*session*/ undefined); this.rootFileNames = initialRootNames; this.useSourceOfProjectReferenceRedirect = maybeBind(this.hostProject, this.hostProject.useSourceOfProjectReferenceRedirect); @@ -2100,7 +2109,8 @@ namespace ts.server { readonly canonicalConfigFilePath: NormalizedPath, projectService: ProjectService, documentRegistry: DocumentRegistry, - cachedDirectoryStructureHost: CachedDirectoryStructureHost) { + cachedDirectoryStructureHost: CachedDirectoryStructureHost, + session: Session | undefined) { super(configFileName, ProjectKind.Configured, projectService, @@ -2112,6 +2122,7 @@ namespace ts.server { /*watchOptions*/ undefined, cachedDirectoryStructureHost, getDirectoryPath(configFileName), + session ); } @@ -2380,7 +2391,8 @@ namespace ts.server { public compileOnSaveEnabled: boolean, projectFilePath?: string, pluginConfigOverrides?: ESMap, - watchOptions?: WatchOptions) { + watchOptions?: WatchOptions, + session?: Session) { super(externalProjectName, ProjectKind.External, projectService, @@ -2391,7 +2403,8 @@ namespace ts.server { compileOnSaveEnabled, watchOptions, projectService.host, - getDirectoryPath(projectFilePath || normalizeSlashes(externalProjectName))); + getDirectoryPath(projectFilePath || normalizeSlashes(externalProjectName)), + session); this.enableGlobalPlugins(this.getCompilerOptions(), pluginConfigOverrides); } diff --git a/src/server/session.ts b/src/server/session.ts index ee2b7a243994c..999107910dc35 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -775,6 +775,7 @@ namespace ts.server { typesMapLocation: opts.typesMapLocation, syntaxOnly: opts.syntaxOnly, serverMode: opts.serverMode, + session: this }; this.projectService = new ProjectService(settings); this.projectService.setPerformanceEventHandler(this.performanceEventHandler.bind(this)); From 17e136c333653c0d2927834c8ffe354969618881 Mon Sep 17 00:00:00 2001 From: kingwl Date: Fri, 28 May 2021 18:19:19 +0800 Subject: [PATCH 2/8] Use unknown message type --- src/server/editorServices.ts | 2 +- src/server/project.ts | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index 1f1f51d32d2f8..9a36f77b60cf9 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -783,7 +783,7 @@ namespace ts.server { readonly packageJsonCache: PackageJsonCache; /*@internal*/ private packageJsonFilesMap: ESMap | undefined; - private session: Session | undefined; + private session: Session | undefined; private performanceEventHandler?: PerformanceEventHandler; diff --git a/src/server/project.ts b/src/server/project.ts index d498737e0b846..09a186628abaa 100644 --- a/src/server/project.ts +++ b/src/server/project.ts @@ -263,7 +263,7 @@ namespace ts.server { /*@internal*/ protected typeAcquisition: TypeAcquisition | undefined; - private session: Session | undefined; + private session: Session | undefined; /*@internal*/ constructor( @@ -278,7 +278,7 @@ namespace ts.server { protected watchOptions: WatchOptions | undefined, directoryStructureHost: DirectoryStructureHost, currentDirectory: string | undefined, - session: Session | undefined, + session: Session | undefined, ) { this.directoryStructureHost = directoryStructureHost; this.currentDirectory = this.projectService.getNormalizedAbsolutePath(currentDirectory || ""); @@ -1813,7 +1813,7 @@ namespace ts.server { currentDirectory: string | undefined, pluginConfigOverrides: ESMap | undefined, typeAcquisition: TypeAcquisition | undefined, - session: Session | undefined) { + session: Session | undefined) { super(InferredProject.newName(), ProjectKind.Inferred, projectService, @@ -2110,7 +2110,7 @@ namespace ts.server { projectService: ProjectService, documentRegistry: DocumentRegistry, cachedDirectoryStructureHost: CachedDirectoryStructureHost, - session: Session | undefined) { + session: Session | undefined) { super(configFileName, ProjectKind.Configured, projectService, From 0848362ab6034a53a203afe362f4e8c5da4c70a4 Mon Sep 17 00:00:00 2001 From: kingwl Date: Fri, 28 May 2021 18:20:32 +0800 Subject: [PATCH 3/8] Add missing unknown --- src/server/project.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/server/project.ts b/src/server/project.ts index 09a186628abaa..66b269fb3eccf 100644 --- a/src/server/project.ts +++ b/src/server/project.ts @@ -84,7 +84,7 @@ namespace ts.server { languageService: LanguageService; languageServiceHost: LanguageServiceHost; serverHost: ServerHost; - session?: Session; + session?: Session; config: any; } @@ -2392,7 +2392,7 @@ namespace ts.server { projectFilePath?: string, pluginConfigOverrides?: ESMap, watchOptions?: WatchOptions, - session?: Session) { + session?: Session) { super(externalProjectName, ProjectKind.External, projectService, From 6014d8e9398e8f9bac90194b194f482a84b75b63 Mon Sep 17 00:00:00 2001 From: kingwl Date: Mon, 31 May 2021 14:04:17 +0800 Subject: [PATCH 4/8] use editor services insted of every project --- src/server/editorServices.ts | 15 ++++++++------- src/server/project.ts | 27 ++++++++------------------- src/server/session.ts | 2 +- 3 files changed, 17 insertions(+), 27 deletions(-) diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index 9a36f77b60cf9..134cadf1bcb0f 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -394,7 +394,7 @@ namespace ts.server { config?: ParsedConfig; } - export interface ProjectServiceOptions { + export interface ProjectServiceOptions { host: ServerHost; logger: Logger; cancellationToken: HostCancellationToken; @@ -411,7 +411,7 @@ namespace ts.server { /** @deprecated use serverMode instead */ syntaxOnly?: boolean; serverMode?: LanguageServiceMode; - session: Session | undefined; + session: Session | undefined; } interface OriginalFileInfo { fileName: NormalizedPath; path: Path; } @@ -783,12 +783,14 @@ namespace ts.server { readonly packageJsonCache: PackageJsonCache; /*@internal*/ private packageJsonFilesMap: ESMap | undefined; - private session: Session | undefined; + + /*@internal*/ + readonly session: Session | undefined; private performanceEventHandler?: PerformanceEventHandler; - constructor(opts: ProjectServiceOptions) { + constructor(opts: ProjectServiceOptions) { this.host = opts.host; this.logger = opts.logger; this.cancellationToken = opts.cancellationToken; @@ -2072,8 +2074,7 @@ namespace ts.server { canonicalConfigFilePath, this, this.documentRegistry, - configFileExistenceInfo.config.cachedDirectoryStructureHost, - this.session); + configFileExistenceInfo.config.cachedDirectoryStructureHost); this.configuredProjects.set(canonicalConfigFilePath, project); this.createConfigFileWatcherForParsedConfig(configFileName, canonicalConfigFilePath, project); return project; @@ -2522,7 +2523,7 @@ namespace ts.server { typeAcquisition = this.typeAcquisitionForInferredProjects; } watchOptionsAndErrors = watchOptionsAndErrors || undefined; - const project = new InferredProject(this, this.documentRegistry, compilerOptions, watchOptionsAndErrors?.watchOptions, projectRootPath, currentDirectory, this.currentPluginConfigOverrides, typeAcquisition, this.session); + const project = new InferredProject(this, this.documentRegistry, compilerOptions, watchOptionsAndErrors?.watchOptions, projectRootPath, currentDirectory, this.currentPluginConfigOverrides, typeAcquisition); project.setProjectErrors(watchOptionsAndErrors?.errors); if (isSingleInferredProject) { this.inferredProjects.unshift(project); diff --git a/src/server/project.ts b/src/server/project.ts index 66b269fb3eccf..a974a0d8497b2 100644 --- a/src/server/project.ts +++ b/src/server/project.ts @@ -263,8 +263,6 @@ namespace ts.server { /*@internal*/ protected typeAcquisition: TypeAcquisition | undefined; - private session: Session | undefined; - /*@internal*/ constructor( /*@internal*/ readonly projectName: string, @@ -278,12 +276,10 @@ namespace ts.server { protected watchOptions: WatchOptions | undefined, directoryStructureHost: DirectoryStructureHost, currentDirectory: string | undefined, - session: Session | undefined, ) { this.directoryStructureHost = directoryStructureHost; this.currentDirectory = this.projectService.getNormalizedAbsolutePath(currentDirectory || ""); this.getCanonicalFileName = this.projectService.toCanonicalFileName; - this.session = session; this.cancellationToken = new ThrottledCancellationToken(this.projectService.cancellationToken, this.projectService.throttleWaitMilliseconds); if (!this.compilerOptions) { @@ -1609,7 +1605,7 @@ namespace ts.server { languageService: this.languageService, languageServiceHost: this, serverHost: this.projectService.host, - session: this.session + session: this.projectService.session }; const pluginModule = pluginModuleFactory({ typescript: ts }); @@ -1812,8 +1808,7 @@ namespace ts.server { projectRootPath: NormalizedPath | undefined, currentDirectory: string | undefined, pluginConfigOverrides: ESMap | undefined, - typeAcquisition: TypeAcquisition | undefined, - session: Session | undefined) { + typeAcquisition: TypeAcquisition | undefined) { super(InferredProject.newName(), ProjectKind.Inferred, projectService, @@ -1825,8 +1820,7 @@ namespace ts.server { /*compileOnSaveEnabled*/ false, watchOptions, projectService.host, - currentDirectory, - session); + currentDirectory); this.typeAcquisition = typeAcquisition; this.projectRootPath = projectRootPath && projectService.toCanonicalFileName(projectRootPath); if (!projectRootPath && !projectService.useSingleInferredProject) { @@ -1979,8 +1973,7 @@ namespace ts.server { /*compileOnSaveEnabled*/ false, hostProject.getWatchOptions(), hostProject.projectService.host, - hostProject.currentDirectory, - /*session*/ undefined); + hostProject.currentDirectory); this.rootFileNames = initialRootNames; this.useSourceOfProjectReferenceRedirect = maybeBind(this.hostProject, this.hostProject.useSourceOfProjectReferenceRedirect); @@ -2109,8 +2102,7 @@ namespace ts.server { readonly canonicalConfigFilePath: NormalizedPath, projectService: ProjectService, documentRegistry: DocumentRegistry, - cachedDirectoryStructureHost: CachedDirectoryStructureHost, - session: Session | undefined) { + cachedDirectoryStructureHost: CachedDirectoryStructureHost) { super(configFileName, ProjectKind.Configured, projectService, @@ -2121,8 +2113,7 @@ namespace ts.server { /*compileOnSaveEnabled*/ false, /*watchOptions*/ undefined, cachedDirectoryStructureHost, - getDirectoryPath(configFileName), - session + getDirectoryPath(configFileName) ); } @@ -2391,8 +2382,7 @@ namespace ts.server { public compileOnSaveEnabled: boolean, projectFilePath?: string, pluginConfigOverrides?: ESMap, - watchOptions?: WatchOptions, - session?: Session) { + watchOptions?: WatchOptions) { super(externalProjectName, ProjectKind.External, projectService, @@ -2403,8 +2393,7 @@ namespace ts.server { compileOnSaveEnabled, watchOptions, projectService.host, - getDirectoryPath(projectFilePath || normalizeSlashes(externalProjectName)), - session); + getDirectoryPath(projectFilePath || normalizeSlashes(externalProjectName))); this.enableGlobalPlugins(this.getCompilerOptions(), pluginConfigOverrides); } diff --git a/src/server/session.ts b/src/server/session.ts index 999107910dc35..84d886c6cb494 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -759,7 +759,7 @@ namespace ts.server { isCancellationRequested: () => this.cancellationToken.isCancellationRequested() }; this.errorCheck = new MultistepOperation(multistepOperationHost); - const settings: ProjectServiceOptions = { + const settings: ProjectServiceOptions = { host: this.host, logger: this.logger, cancellationToken: this.cancellationToken, From 8d0a7c50d29a2e4989aaf71d02b96fbf365f9df4 Mon Sep 17 00:00:00 2001 From: kingwl Date: Mon, 31 May 2021 14:33:47 +0800 Subject: [PATCH 5/8] Fix baseline --- src/testRunner/unittests/tsserver/helpers.ts | 1 + tests/baselines/reference/api/tsserverlibrary.d.ts | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/testRunner/unittests/tsserver/helpers.ts b/src/testRunner/unittests/tsserver/helpers.ts index b125667200c55..9e859efb279e8 100644 --- a/src/testRunner/unittests/tsserver/helpers.ts +++ b/src/testRunner/unittests/tsserver/helpers.ts @@ -389,6 +389,7 @@ namespace ts.projectSystem { super({ host, logger, + session: undefined, cancellationToken, useSingleInferredProject, useInferredProjectPerProjectRoot: false, diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index dcbd016c31e3b..66838e01bbd46 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -9554,6 +9554,7 @@ declare namespace ts.server { languageService: LanguageService; languageServiceHost: LanguageServiceHost; serverHost: ServerHost; + session?: Session; config: any; } interface PluginModule { @@ -9930,7 +9931,7 @@ declare namespace ts.server { configFileName?: NormalizedPath; configFileErrors?: readonly Diagnostic[]; } - export interface ProjectServiceOptions { + export interface ProjectServiceOptions { host: ServerHost; logger: Logger; cancellationToken: HostCancellationToken; @@ -9947,6 +9948,7 @@ declare namespace ts.server { /** @deprecated use serverMode instead */ syntaxOnly?: boolean; serverMode?: LanguageServiceMode; + session: Session | undefined; } export interface WatchOptionsAndErrors { watchOptions: WatchOptions; @@ -10022,7 +10024,7 @@ declare namespace ts.server { /** Tracks projects that we have already sent telemetry for. */ private readonly seenProjects; private performanceEventHandler?; - constructor(opts: ProjectServiceOptions); + constructor(opts: ProjectServiceOptions); toPath(fileName: string): Path; private loadTypesMap; updateTypingsForProject(response: SetTypings | InvalidateCachedTypings | PackageInstalledResponse): void; From 401187af9b2adea891fb7830d3b3bfad9dfa1a95 Mon Sep 17 00:00:00 2001 From: kingwl Date: Mon, 7 Jun 2021 00:52:54 +0800 Subject: [PATCH 6/8] Add plugin test --- src/testRunner/unittests/tsserver/plugins.ts | 51 +++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/src/testRunner/unittests/tsserver/plugins.ts b/src/testRunner/unittests/tsserver/plugins.ts index 68833409a4b6f..5d46dd203f9db 100644 --- a/src/testRunner/unittests/tsserver/plugins.ts +++ b/src/testRunner/unittests/tsserver/plugins.ts @@ -1,20 +1,31 @@ namespace ts.projectSystem { describe("unittests:: tsserver:: plugins loading", () => { + const testProtocolCommand = "testProtocolCommand"; + const testProtocolCommandRequest = "testProtocolCommandRequest"; + const testProtocolCommandResponse = "testProtocolCommandResponse"; + function createHostWithPlugin(files: readonly File[]) { const host = createServerHost(files); const pluginsLoaded: string[] = []; + const protocolHandlerRequests: [string, string][] = []; host.require = (_initialPath, moduleName) => { pluginsLoaded.push(moduleName); return { module: () => ({ create(info: server.PluginCreateInfo) { + info.session?.addProtocolHandler(testProtocolCommand, request => { + protocolHandlerRequests.push([request.command, request.arguments]); + return { + response: testProtocolCommandResponse + }; + }); return Harness.LanguageService.makeDefaultProxy(info); } }), error: undefined }; }; - return { host, pluginsLoaded }; + return { host, pluginsLoaded, protocolHandlerRequests }; } it("With local plugins", () => { @@ -51,5 +62,43 @@ namespace ts.projectSystem { service.openClientFile(aTs.path); assert.deepEqual(pluginsLoaded, expectedToLoad); }); + + it("With session and custom protocol message", () => { + const pluginName = "some-plugin"; + const expectedToLoad = [pluginName]; + const aTs: File = { path: "/a.ts", content: `class c { prop = "hello"; foo() { return this.prop; } }` }; + const tsconfig: File = { + path: "/tsconfig.json", + content: JSON.stringify({ + compilerOptions: { + plugins: [ + { name: pluginName } + ] + } + }) + }; + + const { host, pluginsLoaded, protocolHandlerRequests } = createHostWithPlugin([aTs, tsconfig, libFile]); + const session = createSession(host); + + const service = createProjectService(host, { session }); + service.openClientFile(aTs.path); + assert.deepEqual(pluginsLoaded, expectedToLoad); + + const resp = session.executeCommandSeq({ + command: testProtocolCommand, + arguments: testProtocolCommandRequest + }); + + assert.strictEqual(protocolHandlerRequests.length, 1); + const [command, args] = protocolHandlerRequests[0]; + assert.strictEqual(command, testProtocolCommand); + assert.strictEqual(args, testProtocolCommandRequest); + + const expectedResp: server.HandlerResponse = { + response: testProtocolCommandResponse + }; + assert.deepEqual(resp, expectedResp); + }); }); } \ No newline at end of file From 5f4883ab46b2c2ee8affeb0e8c652505ea0c1199 Mon Sep 17 00:00:00 2001 From: kingwl Date: Wed, 9 Jun 2021 01:01:08 +0800 Subject: [PATCH 7/8] Avoid type parameter --- src/server/editorServices.ts | 6 +++--- src/server/session.ts | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index 134cadf1bcb0f..5a78b203e5a4b 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -394,7 +394,7 @@ namespace ts.server { config?: ParsedConfig; } - export interface ProjectServiceOptions { + export interface ProjectServiceOptions { host: ServerHost; logger: Logger; cancellationToken: HostCancellationToken; @@ -411,7 +411,7 @@ namespace ts.server { /** @deprecated use serverMode instead */ syntaxOnly?: boolean; serverMode?: LanguageServiceMode; - session: Session | undefined; + session: Session | undefined; } interface OriginalFileInfo { fileName: NormalizedPath; path: Path; } @@ -790,7 +790,7 @@ namespace ts.server { private performanceEventHandler?: PerformanceEventHandler; - constructor(opts: ProjectServiceOptions) { + constructor(opts: ProjectServiceOptions) { this.host = opts.host; this.logger = opts.logger; this.cancellationToken = opts.cancellationToken; diff --git a/src/server/session.ts b/src/server/session.ts index 84d886c6cb494..999107910dc35 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -759,7 +759,7 @@ namespace ts.server { isCancellationRequested: () => this.cancellationToken.isCancellationRequested() }; this.errorCheck = new MultistepOperation(multistepOperationHost); - const settings: ProjectServiceOptions = { + const settings: ProjectServiceOptions = { host: this.host, logger: this.logger, cancellationToken: this.cancellationToken, From c2c8ea45190fa889954bac47b73d3f8dd5aa8a9b Mon Sep 17 00:00:00 2001 From: kingwl Date: Wed, 9 Jun 2021 11:33:40 +0800 Subject: [PATCH 8/8] Accept baseline --- tests/baselines/reference/api/tsserverlibrary.d.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 66838e01bbd46..76c1e3c657278 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -9931,7 +9931,7 @@ declare namespace ts.server { configFileName?: NormalizedPath; configFileErrors?: readonly Diagnostic[]; } - export interface ProjectServiceOptions { + export interface ProjectServiceOptions { host: ServerHost; logger: Logger; cancellationToken: HostCancellationToken; @@ -9948,7 +9948,7 @@ declare namespace ts.server { /** @deprecated use serverMode instead */ syntaxOnly?: boolean; serverMode?: LanguageServiceMode; - session: Session | undefined; + session: Session | undefined; } export interface WatchOptionsAndErrors { watchOptions: WatchOptions; @@ -10024,7 +10024,7 @@ declare namespace ts.server { /** Tracks projects that we have already sent telemetry for. */ private readonly seenProjects; private performanceEventHandler?; - constructor(opts: ProjectServiceOptions); + constructor(opts: ProjectServiceOptions); toPath(fileName: string): Path; private loadTypesMap; updateTypingsForProject(response: SetTypings | InvalidateCachedTypings | PackageInstalledResponse): void;