@@ -80,6 +80,7 @@ module ts.server {
8080 export var Close = "close" ;
8181 export var Completions = "completions" ;
8282 export var CompletionDetails = "completionEntryDetails" ;
83+ export var SignatureHelp = "signatureHelp" ;
8384 export var Configure = "configure" ;
8485 export var Definition = "definition" ;
8586 export var Format = "format" ;
@@ -577,6 +578,35 @@ module ts.server {
577578 } , [ ] ) ;
578579 }
579580
581+ getSignatureHelpItems ( line : number , offset : number , fileName : string ) : protocol . SignatureHelpItems {
582+ var file = ts . normalizePath ( fileName ) ;
583+ var project = this . projectService . getProjectForFile ( file ) ;
584+ if ( ! project ) {
585+ throw Errors . NoProject ;
586+ }
587+
588+ var compilerService = project . compilerService ;
589+ var position = compilerService . host . lineOffsetToPosition ( file , line , offset ) ;
590+ var helpItems = compilerService . languageService . getSignatureHelpItems ( file , position ) ;
591+ if ( ! helpItems ) {
592+ return undefined ;
593+ }
594+
595+ var span = helpItems . applicableSpan ;
596+ var result :protocol . SignatureHelpItems = {
597+ items : helpItems . items ,
598+ applicableSpan : {
599+ start : compilerService . host . positionToLineOffset ( file , span . start ) ,
600+ end : compilerService . host . positionToLineOffset ( file , span . start + span . length )
601+ } ,
602+ selectedItemIndex : helpItems . selectedItemIndex ,
603+ argumentIndex : helpItems . argumentIndex ,
604+ argumentCount : helpItems . argumentCount ,
605+ }
606+
607+ return result ;
608+ }
609+
580610 getDiagnostics ( delay : number , fileNames : string [ ] ) {
581611 var checkList = fileNames . reduce ( ( accum : PendingErrorCheck [ ] , fileName : string ) => {
582612 fileName = ts . normalizePath ( fileName ) ;
@@ -790,6 +820,11 @@ module ts.server {
790820 completionDetailsArgs . entryNames , completionDetailsArgs . file ) ;
791821 break ;
792822 }
823+ case CommandNames . SignatureHelp : {
824+ var signatureHelpArgs = < protocol . SignatureHelpRequestArgs > request . arguments ;
825+ response = this . getSignatureHelpItems ( signatureHelpArgs . line , signatureHelpArgs . offset , signatureHelpArgs . file ) ;
826+ break ;
827+ }
793828 case CommandNames . Geterr : {
794829 var geterrArgs = < protocol . GeterrRequestArgs > request . arguments ;
795830 response = this . getDiagnostics ( geterrArgs . delay , geterrArgs . files ) ;
0 commit comments