8000 Merge pull request #3543 from weswigham/lssl-interface-improvement · jango2015/TypeScript@2a9ab73 · GitHub
[go: up one dir, main page]

Skip to content

Commit 2a9ab73

Browse files
committed
Merge pull request microsoft#3543 from weswigham/lssl-interface-improvement
Improve Session interface for extensibility
2 parents c549471 + d1a2ae5 commit 2a9ab73

File tree

1 file changed

+122
-136
lines changed

1 file changed

+122
-136
lines changed

src/server/session.ts

Lines changed: 122 additions & 136 deletions
Original file line numberDiff line numberDiff line change
@@ -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 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+
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

Comments
 (0)
0