@@ -839,149 +839,135 @@ namespace ts.server {
839
839
exit ( ) {
840
840
}
841
841
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
741A
} {
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
+
842
963
onMessage ( message : string ) {
843
964
if ( this . logger . isVerbose ( ) ) {
844
965
this . logger . info ( "request: " + message ) ;
845
966
var start = this . hrtime ( ) ;
846
967
}
847
968
try {
848
969
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 ) ;
985
971
986
972
if ( this . logger . isVerbose ( ) ) {
987
973
var elapsed = this . hrtime ( start ) ;
0 commit comments