@@ -14,6 +14,7 @@ import {Disposable, CancellationToken, OutputChannel, workspace, window} from 'v
1414import { ErrorMessage , UnresolvedDependenciesMessage , MSBuildProjectDiagnostics , ProjectInformationResponse } from './protocol' ;
1515import getLaunchTargets , { LaunchTarget } from './launchTargetFinder' ;
1616import TelemetryReporter from 'vscode-extension-telemetry' ;
17+ import * as vscode from 'vscode'
1718
1819enum ServerState {
1920 Starting ,
@@ -31,29 +32,29 @@ interface Request {
3132
3233module Events {
3334 export const StateChanged = 'stateChanged' ;
34-
35+
3536 export const StdOut = 'stdout' ;
3637 export const StdErr = 'stderr' ;
37-
38+
3839 export const Error = 'Error' ;
3940 export const ServerError = 'ServerError' ;
40-
41+
4142 export const UnresolvedDependencies = 'UnresolvedDependencies' ;
4243 export const PackageRestoreStarted = 'PackageRestoreStarted' ;
4344 export const PackageRestoreFinished = 'PackageRestoreFinished' ;
44-
45+
4546 export const ProjectChanged = 'ProjectChanged' ;
4647 export const ProjectAdded = 'ProjectAdded' ;
4748 export const ProjectRemoved = 'ProjectRemoved' ;
48-
49+
4950 export const MsBuildProjectDiagnostics = 'MsBuildProjectDiagnostics' ;
50-
51+
5152 export const BeforeServerStart = 'BeforeServerStart' ;
5253 export const ServerStart = 'ServerStart' ;
5354 export const ServerStop = 'ServerStop' ;
54-
55+
5556 export const MultipleLaunchTargets = 'server:MultipleLaunchTargets' ;
56-
57+
5758 export const Started = 'started' ;
5859}
5960
@@ -65,7 +66,7 @@ class Delays {
6566 idleDelays : number = 0 ; // 501-1500 milliseconds
6667 nonFocusDelays : number = 0 ; // 1501-3000 milliseconds
6768 bigDelays : number = 0 ; // 3000+ milliseconds
68-
69+
6970 public report ( elapsedTime : number ) {
7071 if ( elapsedTime <= 25 ) {
7172 this . immediateDelays += 1 ;
@@ -89,8 +90,8 @@ class Delays {
8990 this . bigDelays += 1 ;
9091 }
9192 }
92-
93- public toMeasures ( ) : { [ key : string ] : number } {
93+
94+ public toMeasures ( ) : { [ key : string ] : number } {
9495 return {
9596 immedateDelays : this . immediateDelays ,
9697 nearImmediateDelays : this . nearImmediateDelays ,
@@ -115,6 +116,8 @@ export abstract class OmnisharpServer {
115116 private _isProcessingQueue = false ;
116117 private _channel : OutputChannel ;
117118
119+ private _isDebugEnable : boolean = false ;
120+
118121 protected _serverProcess : ChildProcess ;
119122 protected _extraArgv : string [ ] ;
120123
@@ -132,28 +135,28 @@ export abstract class OmnisharpServer {
132135 return this . _state ;
133136 }
134137
135- private _setState ( value : ServerState ) : void {
138+ private _setState ( value : ServerState ) : void {
136139 if ( typeof value !== 'undefined' && value !== this . _state ) {
137140 this . _state = value ;
138141 this . _fireEvent ( Events . StateChanged , this . _state ) ;
139142 }
140143 }
141-
144+
142145 private _recordRequestDelay ( requestName : string , elapsedTime : number ) {
143146 let delays = this . _requestDelays [ requestName ] ;
144147 if ( ! delays ) {
145148 delays = new Delays ( ) ;
146149 this . _requestDelays [ requestName ] = delays ;
147150 }
148-
151+
149152 delays . report ( elapsedTime ) ;
150153 }
151-
154+
152155 public reportAndClearTelemetry ( ) {
153156 for ( var path in this . _requestDelays ) {
154157 const eventName = 'omnisharp' + path ;
155158 const measures = this . _requestDelays [ path ] . toMeasures ( ) ;
156-
159+
157160 this . _reporter . sendTelemetryEvent ( eventName , null , measures ) ;
158161 }
159162
@@ -168,6 +171,10 @@ export abstract class OmnisharpServer {
168171 return this . _channel ;
169172 }
170173
174+ public isDebugEnable ( ) : boolean {
175+ return this . _isDebugEnable ;
176+ }
177+
171178 // --- eventing
172179
173180 public onStdout ( listener : ( e : string ) => any , thisArg ?: any ) {
@@ -186,7 +193,7 @@ export abstract class OmnisharpServer {
186193 return this . _addListener ( Events . ServerError , listener , thisArg ) ;
187194 }
188195
189- public onUnresolvedDependencies ( listener : ( e : UnresolvedDependenciesMessage ) => any , thisArg ?:any ) {
196+ public onUnresolvedDependencies ( listener : ( e : UnresolvedDependenciesMessage ) => any , thisArg ?: any ) {
190197 return this . _addListener ( Events . UnresolvedDependencies , listener , thisArg ) ;
191198 }
192199
@@ -214,7 +221,7 @@ export abstract class OmnisharpServer {
214221 return this . _addListener ( Events . MsBuildProjectDiagnostics , listener , thisArg ) ;
215222 }
216223
217- public onBeforeServerStart ( listener : ( e :string ) => any ) {
224+ public onBeforeServerStart ( listener : ( e : string ) => any ) {
218225 return this . _addListener ( Events . BeforeServerStart , listener ) ;
219226 }
220227
@@ -271,6 +278,13 @@ export abstract class OmnisharpServer {
271278 this . _setState ( ServerState . Started ) ;
272279 this . _fireEvent ( Events . ServerStart , solutionPath ) ;
273280 return this . _doConnect ( ) ;
281+ } ) . then ( _ => {
282+ return vscode . commands . getCommands ( )
283+ . then ( commands => {
284+ if ( commands . find ( c => c == "vscode.startDebug" ) ) {
285+ this . _isDebugEnable = true ;
286+ }
287+ } ) ;
274288 } ) . then ( _ => {
275289 this . _processQueue ( ) ;
276290 } , err => {
@@ -300,7 +314,7 @@ export abstract class OmnisharpServer {
300314 return reject ( err ) ;
301315 }
302316 } ) ;
303-
317+
304318 killer . on ( 'exit' , resolve ) ;
305319 killer . on ( 'error' , reject ) ;
306320 } ) ;
@@ -309,7 +323,7 @@ export abstract class OmnisharpServer {
309323 this . _serverProcess . kill ( 'SIGTERM' ) ;
310324 ret = Promise . resolve < OmnisharpServer > ( undefined ) ;
311325 }
312-
326+
313327 return ret . then ( _ => {
314328 this . _start = null ;
315329 this . _serverProcess = null ;
@@ -327,7 +341,7 @@ export abstract class OmnisharpServer {
327341 }
328342 }
329343
330- public autoStart ( preferredPath :string ) : Thenable < void > {
344+ public autoStart ( preferredPath : string ) : Thenable < void > {
331345 return getLaunchTargets ( ) . then ( targets => {
332346 if ( targets . length === 0 ) {
333347 return new Promise < void > ( ( resolve , reject ) => {
@@ -368,23 +382,23 @@ export abstract class OmnisharpServer {
368382 if ( this . _getState ( ) !== ServerState . Started ) {
369383 return Promise . reject < TResponse > ( 'server has been stopped or not started' ) ;
370384 }
371-
385+
372386 let startTime : number ;
373387 let request : Request ;
374-
388+
375389 let promise = new Promise < TResponse > ( ( resolve , reject ) => {
376390 startTime = Date . now ( ) ;
377-
391+
378392 request = {
379393 path,
380394 data,
381395 onSuccess : value => resolve ( value ) ,
382396 onError : err => reject ( err ) ,
383397 _enqueued : Date . now ( )
384398 } ;
385-
399+
386400 this . _queue . push ( request ) ;
387-
401+
388402 if ( this . _getState ( ) === ServerState . Started && ! this . _isProcessingQueue ) {
389403 this . _processQueue ( ) ;
390404 }
@@ -406,7 +420,7 @@ export abstract class OmnisharpServer {
406420 let endTime = Date . now ( ) ;
407421 let elapsedTime = endTime - startTime ;
408422 this . _recordRequestDelay ( path , elapsedTime ) ;
409-
423+
410424 return response ;
411425 } ) ;
412426 }
@@ -504,19 +518,17 @@ export class StdioOmnisharpServer extends OmnisharpServer {
504518
505519 // timeout logic
506520 const handle = setTimeout ( ( ) => {
507- if ( listener )
508- {
521+ if ( listener ) {
509522 listener . dispose ( ) ;
510523 }
511-
524+
512525 reject ( new Error ( 'Failed to start OmniSharp' ) ) ;
513526 } , StdioOmnisharpServer . StartupTimeout ) ;
514527
515528 // handle started-event
516529 listener = this . onOmnisharpStart ( ( ) => {
517- if ( listener )
518- {
519- listener . dispose ( ) ;
530+ if ( listener ) {
531+ listener . dispose ( ) ;
520532 }
521533 clearTimeout ( handle ) ;
522534 resolve ( this ) ;
@@ -552,17 +564,17 @@ export class StdioOmnisharpServer extends OmnisharpServer {
552564
553565 switch ( packet . Type ) {
554566 case 'response' :
555- this . _handleResponsePacket ( < WireProtocol . ResponsePacket > packet ) ;
567+ this . _handleResponsePacket ( < WireProtocol . ResponsePacket > packet ) ;
556568 break ;
557569 case 'event' :
558- this . _handleEventPacket ( < WireProtocol . EventPacket > packet ) ;
570+ this . _handleEventPacket ( < WireProtocol . EventPacket > packet ) ;
559571 break ;
560572 default :
561573 console . warn ( 'unknown packet: ' , packet ) ;
562574 break ;
563575 }
564576 } ;
565-
577+
566578 this . _rl . addListener ( 'line' , onLineReceived ) ;
567579 this . _callOnStop . push ( ( ) => this . _rl . removeListener ( 'line' , onLineReceived ) ) ;
568580 }
@@ -590,7 +602,7 @@ export class StdioOmnisharpServer extends OmnisharpServer {
590602
591603 if ( packet . Event === 'log' ) {
592604 // handle log events
593- const entry = < { LogLevel : string ; Name : string ; Message : string ; } > packet . Body ;
605+ const entry = < { LogLevel : string ; Name : string ; Message : string ; } > packet . Body ;
594606 this . _fireEvent ( Events . StdOut , `[${ entry . LogLevel } :${ entry . Name } ] ${ entry . Message } \n` ) ;
595607 return ;
596608 } else {
0 commit comments