@@ -839,149 +839,135 @@ namespace ts.server {
839839 exit ( ) {
840840 }
841841
842+ private handlers : Map < ( request : protocol . Request ) => { response ?: any , responseRequired ?: boolean } > = {
843+ [ CommandNames . Exit ] : ( ) => {
844+ this . exit ( ) ;
845+ return { } ;
846+ } ,
847+ [ CommandNames . Definition ] : ( request : protocol . Request ) => {
848+ var defArgs = < protocol . FileLocationRequestArgs > request . arguments ;
849+ return { response : this . getDefinition ( defArgs . line , defArgs . offset , defArgs . file ) } ;
850+ } ,
851+ [ CommandNames . TypeDefinition ] : ( request : protocol . Request ) => {
852+ var defArgs = < protocol . FileLocationRequestArgs > request . arguments ;
853+ return { response : this . getTypeDefinition ( defArgs . line , defArgs . offset , defArgs . file ) } ;
854+ } ,
855+ [ CommandNames . References ] : ( request : protocol . Request ) => {
856+ var defArgs = < protocol . FileLocationRequestArgs > request . arguments ;
857+ return { response : this . getReferences ( defArgs . line , defArgs . offset , defArgs . file ) } ;
858+ } ,
859+ [ CommandNames . Rename ] : ( request : protocol . Request ) => {
860+ var renameArgs = < protocol . RenameRequestArgs > request . arguments ;
861+ return { response : this . getRenameLocations ( renameArgs . line , renameArgs . offset , renameArgs . file , renameArgs . findInComments , renameArgs . findInStrings ) }
862+ } ,
863+ [ CommandNames . Open ] : ( request : protocol . Request ) => {
864+ var openArgs = < protocol . OpenRequestArgs > request . arguments ;
865+ this . openClientFile ( openArgs . file ) ;
866+ return { }
867+ } ,
868+ [ CommandNames . Quickinfo ] : ( request : protocol . Request ) => {
869+ var quickinfoArgs = < protocol . FileLocationRequestArgs > request . arguments ;
870+ return { response : this . getQuickInfo ( quickinfoArgs . line , quickinfoArgs . offset , quickinfoArgs . file ) } ;
871+ } ,
872+ [ CommandNames . Format ] : ( request : protocol . Request ) => {
873+ var formatArgs = < protocol . FormatRequestArgs > request . arguments ;
874+ return { response : this . getFormattingEditsForRange ( formatArgs . line , formatArgs . offset , formatArgs . endLine , formatArgs . endOffset , formatArgs . file ) } ;
875+ } ,
876+ [ CommandNames . Formatonkey ] : ( request : protocol . Request ) => {
877+ var formatOnKeyArgs = < protocol . FormatOnKeyRequestArgs > request . arguments ;
878+ return { response : this . getFormattingEditsAfterKeystroke ( formatOnKeyArgs . line , formatOnKeyArgs . offset , formatOnKeyArgs . key , formatOnKeyArgs . file ) } ;
879+ } ,
880+ [ CommandNames . Completions ] : ( request : protocol . Request ) => {
881+ var completionsArgs = < protocol . CompletionsRequestArgs > request . arguments ;
882+ return { response : this . getCompletions ( completionsArgs . line , completionsArgs . offset , completionsArgs . prefix , completionsArgs . file ) }
883+ } ,
884+ [ CommandNames . CompletionDetails ] : ( request : protocol . Request ) => {
885+ var completionDetailsArgs = < protocol . CompletionDetailsRequestArgs > request . arguments ;
886+ return { response : this . getCompletionEntryDetails ( completionDetailsArgs . line , completionDetailsArgs . offset ,
887+ completionDetailsArgs . entryNames , completionDetailsArgs . file ) }
888+ } ,
889+ [ CommandNames . SignatureHelp ] : ( request : protocol . Request ) => {
890+ var signatureHelpArgs = < protocol . SignatureHelpRequestArgs > request . arguments ;
891+ return { response : this . getSignatureHelpItems ( signatureHelpArgs . line , signatureHelpArgs . offset , signatureHelpArgs . file ) }
892+ } ,
893+ [ CommandNames . Geterr ] : ( request : protocol . Request ) => {
894+ var geterrArgs = < protocol . GeterrRequestArgs > request . arguments ;
895+ return { response : this . getDiagnostics ( geterrArgs . delay , geterrArgs . files ) , responseRequired : false } ;
896+ } ,
897+ [ CommandNames . Change ] : ( request : protocol . Request ) => {
898+ var changeArgs = < protocol . ChangeRequestArgs > request . arguments ;
899+ this . change ( changeArgs . line , changeArgs . offset , changeArgs . endLine , changeArgs . endOffset ,
900+ changeArgs . insertString , changeArgs . file ) ;
901+ return { responseRequired : false }
902+ } ,
903+ [ CommandNames . Configure ] : ( request : protocol . Request ) => {
904+ var configureArgs = < protocol . ConfigureRequestArguments > request . arguments ;
905+ this . projectService . setHostConfiguration ( configureArgs ) ;
906+ this . output ( undefined , CommandNames . Configure , request . seq ) ;
907+ return { responseRequired : false }
908+ } ,
909+ [ CommandNames . Reload ] : ( request : protocol . Request ) => {
910+ var reloadArgs = < protocol . ReloadRequestArgs > request . arguments ;
911+ this . reload ( reloadArgs . file , reloadArgs . tmpfile , request . seq ) ;
912+ return { responseRequired : false }
913+ } ,
914+ [ CommandNames . Saveto ] : ( request : protocol . Request ) => {
915+ var savetoArgs = < protocol . SavetoRequestArgs > request . arguments ;
916+ this . saveToTmp ( savetoArgs . file , savetoArgs . tmpfile ) ;
917+ return { responseRequired : false }
918+ } ,
919+ [ CommandNames . Close ] : ( request : protocol . Request ) => {
920+ var closeArgs = < protocol . FileRequestArgs > request . arguments ;
921+ this . closeClientFile ( closeArgs . file ) ;
922+ return { responseRequired : false } ;
923+ } ,
924+ [ CommandNames . Navto ] : ( request : protocol . Request ) => {
925+ var navtoArgs = < protocol . NavtoRequestArgs > request . arguments ;
926+ return { response : this . getNavigateToItems ( navtoArgs . searchValue , navtoArgs . file , navtoArgs . maxResultCount ) } ;
927+ } ,
928+ [ CommandNames . Brace ] : ( request : protocol . Request ) => {
929+ var braceArguments = < protocol . FileLocationRequestArgs > request . arguments ;
930+ return { response : this . getBraceMatching ( braceArguments . line , braceArguments . offset , braceArguments . file ) } ;
931+ } ,
932+ [ CommandNames . NavBar ] : ( request : protocol . Request ) => {
933+ var navBarArgs = < protocol . FileRequestArgs > request . arguments ;
934+ return { response : this . getNavigationBarItems ( navBarArgs . file ) } ;
935+ } ,
936+ [ CommandNames . Occurrences ] : ( request : protocol . Request ) => {
937+ var { line, offset, file : fileName } = < protocol . FileLocationRequestArgs > request . arguments ;
938+ return { response : this . getOccurrences ( line , offset , fileName ) } ;
939+ } ,
940+ [ CommandNames . ProjectInfo ] : ( request : protocol . Request ) => {
941+ var { file, needFileNameList } = < protocol . ProjectInfoRequestArgs > request . arguments ;
942+ return { response : this . getProjectInfo ( file , needFileNameList ) } ;
943+ } ,
944+ } ;
945+ addProtocolHandler ( command : string , handler : ( request : protocol . Request ) => { response ?: any , responseRequired : boolean } ) {
946+ if ( this . handlers [ command ] ) {
947+ throw new Error ( `Protocol handler already exists for command "${ command } "` ) ;
948+ }
949+ this . handlers [ command ] = handler ;
950+ }
951+
952+ executeCommand ( request : protocol . Request ) : { response ?: any , responseRequired ?: boolean } {
953+ var handler = this . handlers [ request . command ] ;
954+ if ( handler ) {
955+ return handler ( request ) ;
956+ } else {
957+ this . projectService . log ( "Unrecognized JSON command: " + JSON . stringify ( request ) ) ;
958+ this . output ( undefined , CommandNames . Unknown , request . seq , "Unrecognized JSON command: " + request . command ) ;
959+ return { responseRequired : false } ;
960+ }
961+ }
962+
842963 onMessage ( message : string ) {
843964 if ( this . logger . isVerbose ( ) ) {
844965 this . logger . info ( "request: " + message ) ;
845966 var start = this . hrtime ( ) ;
846967 }
847968 try {
848969 var request = < protocol . Request > JSON . parse ( message ) ;
849- var response : any ;
850- var errorMessage : string ;
851- var responseRequired = true ;
852- switch ( request . command ) {
853- case CommandNames . Exit : {
854- this . exit ( ) ;
855- responseRequired = false ;
856- break ;
857- }
858- case CommandNames . Definition : {
859- var defArgs = < protocol . FileLocationRequestArgs > request . arguments ;
860- response = this . getDefinition ( defArgs . line , defArgs . offset , defArgs . file ) ;
861- break ;
862- }
863- case CommandNames . TypeDefinition : {
864- var defArgs = < protocol . FileLocationRequestArgs > request . arguments ;
865- response = this . getTypeDefinition ( defArgs . line , defArgs . offset , defArgs . file ) ;
866- break ;
867- }
868- case CommandNames . References : {
869- var refArgs = < protocol . FileLocationRequestArgs > request . arguments ;
870- response = this . getReferences ( refArgs . line , refArgs . offset , refArgs . file ) ;
871- break ;
872- }
873- case CommandNames . Rename : {
874- var renameArgs = < protocol . RenameRequestArgs > request . arguments ;
875- response = this . getRenameLocations ( renameArgs . line , renameArgs . offset , renameArgs . file , renameArgs . findInComments , renameArgs . findInStrings ) ;
876- break ;
877- }
878- case CommandNames . Open : {
879- var openArgs = < protocol . OpenRequestArgs > request . arguments ;
880- this . openClientFile ( openArgs . file ) ;
881- responseRequired = false ;
882- break ;
883- }
884- case CommandNames . Quickinfo : {
885- var quickinfoArgs = < protocol . FileLocationRequestArgs > request . arguments ;
886- response = this . getQuickInfo ( quickinfoArgs . line , quickinfoArgs . offset , quickinfoArgs . file ) ;
887- break ;
888- }
889- case CommandNames . Format : {
890- var formatArgs = < protocol . FormatRequestArgs > request . arguments ;
891- response = this . getFormattingEditsForRange ( formatArgs . line , formatArgs . offset , formatArgs . endLine , formatArgs . endOffset , formatArgs . file ) ;
892- break ;
893- }
894- case CommandNames . Formatonkey : {
895- var formatOnKeyArgs = < protocol . FormatOnKeyRequestArgs > request . arguments ;
896- response = this . getFormattingEditsAfterKeystroke ( formatOnKeyArgs . line , formatOnKeyArgs . offset , formatOnKeyArgs . key , formatOnKeyArgs . file ) ;
897- break ;
898- }
899- case CommandNames . Completions : {
900- var completionsArgs = < protocol . CompletionsRequestArgs > request . arguments ;
901- response = this . getCompletions ( completionsArgs . line , completionsArgs . offset , completionsArgs . prefix , completionsArgs . file ) ;
902- break ;
903- }
904- case CommandNames . CompletionDetails : {
905- var completionDetailsArgs = < protocol . CompletionDetailsRequestArgs > request . arguments ;
906- response =
907- this . getCompletionEntryDetails ( completionDetailsArgs . line , completionDetailsArgs . offset ,
908- completionDetailsArgs . entryNames , completionDetailsArgs . file ) ;
909- break ;
910- }
911- case CommandNames . SignatureHelp : {
912- var signatureHelpArgs = < protocol . SignatureHelpRequestArgs > request . arguments ;
913- response = this . getSignatureHelpItems ( signatureHelpArgs . line , signatureHelpArgs . offset , signatureHelpArgs . file ) ;
914- break ;
915- }
916- case CommandNames . Geterr : {
917- var geterrArgs = < protocol . GeterrRequestArgs > request . arguments ;
918- response = this . getDiagnostics ( geterrArgs . delay , geterrArgs . files ) ;
919- responseRequired = false ;
920- break ;
921- }
922- case CommandNames . Change : {
923- var changeArgs = < protocol . ChangeRequestArgs > request . arguments ;
924- this . change ( changeArgs . line , changeArgs . offset , changeArgs . endLine , changeArgs . endOffset ,
925- changeArgs . insertString , changeArgs . file ) ;
926- responseRequired = false ;
927- break ;
928- }
929- case CommandNames . Configure : {
930- var configureArgs = < protocol . ConfigureRequestArguments > request . arguments ;
931- this . projectService . setHostConfiguration ( configureArgs ) ;
932- this . output ( undefined , CommandNames . Configure , request . seq ) ;
933- responseRequired = false ;
934- break ;
935- }
936- case CommandNames . Reload : {
937- var reloadArgs = < protocol . ReloadRequestArgs > request . arguments ;
938- this . reload ( reloadArgs . file , reloadArgs . tmpfile , request . seq ) ;
939- responseRequired = false ;
940- break ;
941- }
942- case CommandNames . Saveto : {
943- var savetoArgs = < protocol . SavetoRequestArgs > request . arguments ;
944- this . saveToTmp ( savetoArgs . file , savetoArgs . tmpfile ) ;
945- responseRequired = false ;
946- break ;
947- }
948- case CommandNames . Close : {
949- var closeArgs = < protocol . FileRequestArgs > request . arguments ;
950- this . closeClientFile ( closeArgs . file ) ;
951- responseRequired = false ;
952- break ;
953- }
954- case CommandNames . Navto : {
955- var navtoArgs = < protocol . NavtoRequestArgs > request . arguments ;
956- response = this . getNavigateToItems ( navtoArgs . searchValue , navtoArgs . file , navtoArgs . maxResultCount ) ;
957- break ;
958- }
959- case CommandNames . Brace : {
960- var braceArguments = < protocol . FileLocationRequestArgs > request . arguments ;
961- response = this . getBraceMatching ( braceArguments . line , braceArguments . offset , braceArguments . file ) ;
962- break ;
963- }
964- case CommandNames . NavBar : {
965- var navBarArgs = < protocol . FileRequestArgs > request . arguments ;
966- response = this . getNavigationBarItems ( navBarArgs . file ) ;
967- break ;
968- }
969- case CommandNames . Occurrences : {
970- var { line, offset, file : fileName } = < protocol . FileLocationRequestArgs > request . arguments ;
971- response = this . getOccurrences ( line , offset , fileName ) ;
972- break ;
973- }
974- case CommandNames . ProjectInfo : {
975- var { file, needFileNameList } = < protocol . ProjectInfoRequestArgs > request . arguments ;
976- response = this . getProjectInfo ( file , needFileNameList ) ;
977- break ;
978- }
979- default : {
980- this . projectService . log ( "Unrecognized JSON command: " + message ) ;
981- this . output ( undefined , CommandNames . Unknown , request . seq , "Unrecognized JSON command: " + request . command ) ;
982- break ;
983- }
984- }
970+ var { response, responseRequired} = this . executeCommand ( request ) ;
985971
986972 if ( this . logger . isVerbose ( ) ) {
987973 var elapsed = this . hrtime ( start ) ;
0 commit comments