Addressed PR comments: added simplified/full version, changed design

This commit is contained in:
Armando Aguirre
2017-10-18 14:48:06 -07:00
parent b86153da88
commit 8004fec2ce
8 changed files with 76 additions and 33 deletions

View File

@@ -268,8 +268,23 @@ namespace ts.server {
}));
}
getDefinitionAndBoundSpan(_fileName: string, _position: number): DefinitionInfoAndBoundSpan {
return notImplemented();
getDefinitionAndBoundSpan(fileName: string, position: number): DefinitionInfoAndBoundSpan {
const args: protocol.FileLocationRequestArgs = this.createFileLocationRequestArgs(fileName, position);
const request = this.processRequest<protocol.DefinitionRequest>(CommandNames.DefinitionAndBoundSpan, args);
const response = this.processResponse<protocol.DefinitionInfoAndBoundSpanReponse>(request);
return {
definitions: response.body.definitions.map(entry => ({
containerKind: ScriptElementKind.unknown,
containerName: "",
fileName: entry.file,
textSpan: this.decodeSpan(entry),
kind: ScriptElementKind.unknown,
name: ""
})),
textSpan: this.decodeSpan(response.body.textSpan, request.arguments.file)
};
}
getTypeDefinitionAtPosition(fileName: string, position: number): DefinitionInfo[] {

View File

@@ -703,6 +703,10 @@ namespace ts.server.protocol {
body?: FileSpan[];
}
export interface DefinitionInfoAndBoundSpanReponse extends Response {
body?: DefinitionInfoAndBoundSpan;
}
/**
* Definition response message. Gives text range for definition.
*/

View File

@@ -601,7 +601,7 @@ namespace ts.server {
}
if (simplifiedResult) {
return this.getSimplifiedDefinition(definitions, project);
return this.getSimplifiedDefinitions(definitions, project);
}
else {
return definitions;
@@ -624,28 +624,29 @@ namespace ts.server {
if (simplifiedResult) {
return {
definitions: this.getSimplifiedDefinition(definitionAndBoundSpan.definitions, project),
textSpan: this.getSimplifiedTextSpan(definitionAndBoundSpan.textSpan, scriptInfo)
definitions: this.getSimplifiedDefinitions(definitionAndBoundSpan.definitions, project),
textSpan: this.getSimplifiedTextSpan(scriptInfo, definitionAndBoundSpan.textSpan)
};
}
return definitionAndBoundSpan;
}
private getSimplifiedDefinition(definitions: ReadonlyArray<DefinitionInfo>, project: Project): ReadonlyArray<protocol.FileSpan> {
return definitions.map(def => {
const defScriptInfo = project.getScriptInfo(def.fileName);
const simplifiedTextSpan = this.getSimplifiedTextSpan(def.textSpan, defScriptInfo);
return {
file: def.fileName,
start: simplifiedTextSpan.start,
end: simplifiedTextSpan.end
};
});
private getSimplifiedDefinitions(definitions: ReadonlyArray<DefinitionInfo>, project: Project): ReadonlyArray<protocol.FileSpan> {
return definitions.map(def => this.getSimplifiedFileSpan(def.fileName, def.textSpan, project));
}
private getSimplifiedTextSpan(textSpan: TextSpan, scriptInfo: ScriptInfo): protocol.TextSpan {
private getSimplifiedFileSpan(fileName: string, textSpan: TextSpan, project: Project): protocol.FileSpan {
const scriptInfo = project.getScriptInfo(fileName);
const simplifiedTextSpan = this.getSimplifiedTextSpan(scriptInfo, textSpan);
return {
file: fileName,
...simplifiedTextSpan
};
}
private getSimplifiedTextSpan(scriptInfo: ScriptInfo, textSpan: TextSpan): protocol.TextSpan {
return {
start: scriptInfo.positionToLineOffset(textSpan.start),
end: scriptInfo.positionToLineOffset(textSpanEnd(textSpan))