55
66import * as path from 'path' ;
77import * as vscode from 'vscode' ;
8+ import { OngoingRequestCancellerFactory } from '../tsServer/cancellation' ;
89import { ClientCapabilities , ClientCapability } from '../typescriptService' ;
910import API from '../utils/api' ;
1011import { SeparateSyntaxServerConfiguration , TsServerLogLevel , TypeScriptServiceConfiguration } from '../utils/configuration' ;
@@ -17,7 +18,7 @@ import { ChildServerProcess } from '../utils/serverProcess';
1718import { TelemetryReporter } from '../utils/telemetry' ;
1819import Tracer from '../utils/tracer' ;
1920import { TypeScriptVersion , TypeScriptVersionProvider } from '../utils/versionProvider' ;
20- import { GetErrRoutingTsServer , ITypeScriptServer , PipeRequestCanceller , ProcessBasedTsServer , SyntaxRoutingTsServer , TsServerDelegate } from './server' ;
21+ import { GetErrRoutingTsServer , ITypeScriptServer , ProcessBasedTsServer , SyntaxRoutingTsServer , TsServerDelegate } from './server' ;
2122
2223const enum ServerKind {
2324 Main = 'main' ,
@@ -55,6 +56,7 @@ export class TypeScriptServerSpawner {
5556 capabilities : ClientCapabilities ,
5657 configuration : TypeScriptServiceConfiguration ,
5758 pluginManager : PluginManager ,
59+ cancellerFactory : OngoingRequestCancellerFactory ,
5860 delegate : TsServerDelegate ,
5961 ) : ITypeScriptServer {
6062 let primaryServer : ITypeScriptServer ;
@@ -65,26 +67,26 @@ export class TypeScriptServerSpawner {
6567 {
6668 const enableDynamicRouting = serverType === CompositeServerType . DynamicSeparateSyntax ;
6769 primaryServer = new SyntaxRoutingTsServer ( {
68- syntax : this . spawnTsServer ( ServerKind . Syntax , version , configuration , pluginManager ) ,
69- semantic : this . spawnTsServer ( ServerKind . Semantic , version , configuration , pluginManager )
70+ syntax : this . spawnTsServer ( ServerKind . Syntax , version , configuration , pluginManager , cancellerFactory ) ,
71+ semantic : this . spawnTsServer ( ServerKind . Semantic , version , configuration , pluginManager , cancellerFactory ) ,
7072 } , delegate , enableDynamicRouting ) ;
7173 break ;
7274 }
7375 case CompositeServerType . Single :
7476 {
75- primaryServer = this . spawnTsServer ( ServerKind . Main , version , configuration , pluginManager ) ;
77+ primaryServer = this . spawnTsServer ( ServerKind . Main , version , configuration , pluginManager , cancellerFactory ) ;
7678 break ;
7779 }
7880 case CompositeServerType . SyntaxOnly :
7981 {
80- primaryServer = this . spawnTsServer ( ServerKind . Syntax , version , configuration , pluginManager ) ;
82+ primaryServer = this . spawnTsServer ( ServerKind . Syntax , version , configuration , pluginManager , cancellerFactory ) ;
8183 break ;
8284 }
8385 }
8486
8587 if ( this . shouldUseSeparateDiagnosticsServer ( configuration ) ) {
8688 return new GetErrRoutingTsServer ( {
87- getErr : this . spawnTsServer ( ServerKind . Diagnostics , version , configuration , pluginManager ) ,
89+ getErr : this . spawnTsServer ( ServerKind . Diagnostics , version , configuration , pluginManager , cancellerFactory ) ,
8890 primary : primaryServer ,
8991 } , delegate ) ;
9092 }
@@ -126,10 +128,12 @@ export class TypeScriptServerSpawner {
126128 version : TypeScriptVersion ,
127129 configuration : TypeScriptServiceConfiguration ,
128130 pluginManager : PluginManager ,
131+ cancellerFactory : OngoingRequestCancellerFactory ,
129132 ) : ITypeScriptServer {
130133 const apiVersion = version . apiVersion || API . defaultVersion ;
131134
132- const { args, cancellationPipeName, tsServerLogFile } = this . getTsServerArgs ( kind , configuration , version , apiVersion , pluginManager ) ;
135+ const canceller = cancellerFactory . create ( kind , this . _tracer ) ;
136+ const { args, tsServerLogFile } = this . getTsServerArgs ( kind , configuration , version , apiVersion , pluginManager , canceller . cancellationPipeName ) ;
133137
134138 if ( TypeScriptServerSpawner . isLoggingEnabled ( configuration ) ) {
135139 if ( tsServerLogFile ) {
@@ -147,7 +151,7 @@ export class TypeScriptServerSpawner {
147151 kind ,
148152 new ChildServerProcess ( childProcess ) ,
149153 tsServerLogFile ,
150- new PipeRequestCanceller ( kind , cancellationPipeName , this . _tracer ) ,
154+ canceller ,
151155 version ,
152156 this . _telemetryReporter ,
153157 this . _tracer ) ;
@@ -171,7 +175,8 @@ export class TypeScriptServerSpawner {
171175 currentVersion : TypeScriptVersion ,
172176 apiVersion : API ,
173177 pluginManager : PluginManager ,
174- ) : { args : string [ ] , cancellationPipeName : string , tsServerLogFile : string | undefined } {
178+ cancellationPipeName : string | undefined ,
179+ ) : { args : string [ ] , tsServerLogFile : string | undefined } {
175180 const args : string [ ] = [ ] ;
176181 let tsServerLogFile : string | undefined ;
177182
@@ -193,8 +198,9 @@ export class TypeScriptServerSpawner {
193198 args . push ( '--enableTelemetry' ) ;
194199 }
195200
196- const cancellationPipeName = electron . getTempFile ( 'tscancellation' ) ;
197- args . push ( '--cancellationPipeName' , cancellationPipeName + '*' ) ;
201+ if ( cancellationPipeName ) {
202+ args . push ( '--cancellationPipeName' , cancellationPipeName + '*' ) ;
203+ }
198204
199205 if ( TypeScriptServerSpawner . isLoggingEnabled ( configuration ) ) {
200206 const logDir = this . _logDirectoryProvider . getNewLogDirectory ( ) ;
@@ -238,7 +244,7 @@ export class TypeScriptServerSpawner {
238244 args . push ( '--validateDefaultNpmLocation' ) ;
239245 }
240246
241- return { args, cancellationPipeName , tsServerLogFile } ;
247+ return { args, tsServerLogFile } ;
242248 }
243249
244250 private static getDebugPort ( kind : ServerKind ) : number | undefined {
0 commit comments