Merge branch 'master' into GetOccurrencesSingleFile
This commit is contained in:
commit
020c12c6a6
|
@ -104,7 +104,7 @@ module ts.server {
|
||||||
var response: T = JSON.parse(responseBody);
|
var response: T = JSON.parse(responseBody);
|
||||||
}
|
}
|
||||||
catch (e) {
|
catch (e) {
|
||||||
throw new Error("Malformed response: Failed to parse server response: " + lastMessage + ". \r\n Error detailes: " + e.message);
|
throw new Error("Malformed response: Failed to parse server response: " + lastMessage + ". \r\n Error details: " + e.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
// verify the sequence numbers
|
// verify the sequence numbers
|
||||||
|
@ -446,6 +446,7 @@ module ts.server {
|
||||||
if (!response.body) {
|
if (!response.body) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
var helpItems: protocol.SignatureHelpItems = response.body;
|
var helpItems: protocol.SignatureHelpItems = response.body;
|
||||||
var span = helpItems.applicableSpan;
|
var span = helpItems.applicableSpan;
|
||||||
var start = this.lineOffsetToPosition(fileName, span.start);
|
var start = this.lineOffsetToPosition(fileName, span.start);
|
||||||
|
@ -465,7 +466,26 @@ module ts.server {
|
||||||
}
|
}
|
||||||
|
|
||||||
getOccurrencesAtPosition(fileName: string, position: number): ReferenceEntry[] {
|
getOccurrencesAtPosition(fileName: string, position: number): ReferenceEntry[] {
|
||||||
throw new Error("Not Implemented Yet.");
|
var lineOffset = this.positionToOneBasedLineOffset(fileName, position);
|
||||||
|
var args: protocol.FileLocationRequestArgs = {
|
||||||
|
file: fileName,
|
||||||
|
line: lineOffset.line,
|
||||||
|
offset: lineOffset.offset,
|
||||||
|
};
|
||||||
|
|
||||||
|
var request = this.processRequest<protocol.OccurrencesRequest>(CommandNames.Occurrences, args);
|
||||||
|
var response = this.processResponse<protocol.OccurrencesResponse>(request);
|
||||||
|
|
||||||
|
return response.body.map(entry => {
|
||||||
|
var fileName = entry.file;
|
||||||
|
var start = this.lineOffsetToPosition(fileName, entry.start);
|
||||||
|
var end = this.lineOffsetToPosition(fileName, entry.end);
|
||||||
|
return {
|
||||||
|
fileName,
|
||||||
|
textSpan: ts.createTextSpanFromBounds(start, end),
|
||||||
|
isWriteAccess: entry.isWriteAccess,
|
||||||
|
};
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getDocumentHighlights(fileName: string, position: number): DocumentHighlights[] {
|
getDocumentHighlights(fileName: string, position: number): DocumentHighlights[] {
|
||||||
|
|
19
src/server/protocol.d.ts
vendored
19
src/server/protocol.d.ts
vendored
|
@ -165,6 +165,25 @@ declare module ts.server.protocol {
|
||||||
body?: FileSpan[];
|
body?: FileSpan[];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get occurrences request; value of command field is
|
||||||
|
* "occurrences". Return response giving spans that are relevant
|
||||||
|
* in the file at a given line and column.
|
||||||
|
*/
|
||||||
|
export interface OccurrencesRequest extends FileLocationRequest {
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface OccurrencesResponseItem extends FileSpan {
|
||||||
|
/**
|
||||||
|
* True if the occurrence is a write location, false otherwise.
|
||||||
|
*/
|
||||||
|
isWriteAccess: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface OccurrencesResponse extends Response {
|
||||||
|
body?: OccurrencesResponseItem[];
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find references request; value of command field is
|
* Find references request; value of command field is
|
||||||
* "references". Return response giving the file locations that
|
* "references". Return response giving the file locations that
|
||||||
|
|
|
@ -89,6 +89,7 @@ module ts.server {
|
||||||
export var Geterr = "geterr";
|
export var Geterr = "geterr";
|
||||||
export var NavBar = "navbar";
|
export var NavBar = "navbar";
|
||||||
export var Navto = "navto";
|
export var Navto = "navto";
|
||||||
|
export var Occurrences = "occurrences";
|
||||||
export var Open = "open";
|
export var Open = "open";
|
||||||
export var Quickinfo = "quickinfo";
|
export var Quickinfo = "quickinfo";
|
||||||
export var References = "references";
|
export var References = "references";
|
||||||
|
@ -117,7 +118,7 @@ module ts.server {
|
||||||
|
|
||||||
constructor(private host: ServerHost, private logger: Logger) {
|
constructor(private host: ServerHost, private logger: Logger) {
|
||||||
this.projectService =
|
this.projectService =
|
||||||
new ProjectService(host, logger, (eventName,project,fileName) => {
|
new ProjectService(host, logger, (eventName, project, fileName) => {
|
||||||
this.handleEvent(eventName, project, fileName);
|
this.handleEvent(eventName, project, fileName);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -262,7 +263,7 @@ module ts.server {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
getDefinition(line: number, offset: number, fileName: string): protocol.FileSpan[] {
|
getDefinition({ line, offset, file: fileName }: protocol.FileLocationRequestArgs): protocol.FileSpan[] {
|
||||||
var file = ts.normalizePath(fileName);
|
var file = ts.normalizePath(fileName);
|
||||||
var project = this.projectService.getProjectForFile(file);
|
var project = this.projectService.getProjectForFile(file);
|
||||||
if (!project) {
|
if (!project) {
|
||||||
|
@ -284,7 +285,37 @@ module ts.server {
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
getRenameLocations(line: number, offset: number, fileName: string,findInComments: boolean, findInStrings: boolean): protocol.RenameResponseBody {
|
getOccurrences({ line, offset, file: fileName }: protocol.FileLocationRequestArgs): protocol.OccurrencesResponseItem[] {
|
||||||
|
fileName = ts.normalizePath(fileName);
|
||||||
|
let project = this.projectService.getProjectForFile(fileName);
|
||||||
|
|
||||||
|
if (!project) {
|
||||||
|
throw Errors.NoProject;
|
||||||
|
}
|
||||||
|
|
||||||
|
let { compilerService } = project;
|
||||||
|
let position = compilerService.host.lineOffsetToPosition(fileName, line, offset);
|
||||||
|
|
||||||
|
let occurrences = compilerService.languageService.getOccurrencesAtPosition(fileName, position);
|
||||||
|
|
||||||
|
if (!occurrences) {
|
||||||
|
return undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
return occurrences.map(occurrence => {
|
||||||
|
let { fileName, isWriteAccess, textSpan } = occurrence;
|
||||||
|
let start = compilerService.host.positionToLineOffset(fileName, textSpan.start);
|
||||||
|
let end = compilerService.host.positionToLineOffset(fileName, ts.textSpanEnd(textSpan));
|
||||||
|
return {
|
||||||
|
start,
|
||||||
|
end,
|
||||||
|
file: fileName,
|
||||||
|
isWriteAccess
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
getRenameLocations({line, offset, file: fileName, findInComments, findInStrings }: protocol.RenameRequestArgs): protocol.RenameResponseBody {
|
||||||
var file = ts.normalizePath(fileName);
|
var file = ts.normalizePath(fileName);
|
||||||
var project = this.projectService.getProjectForFile(file);
|
var project = this.projectService.getProjectForFile(file);
|
||||||
if (!project) {
|
if (!project) {
|
||||||
|
@ -352,7 +383,7 @@ module ts.server {
|
||||||
return { info: renameInfo, locs: bakedRenameLocs };
|
return { info: renameInfo, locs: bakedRenameLocs };
|
||||||
}
|
}
|
||||||
|
|
||||||
getReferences(line: number, offset: number, fileName: string): protocol.ReferencesResponseBody {
|
getReferences({ line, offset, file: fileName }: protocol.FileLocationRequestArgs): protocol.ReferencesResponseBody {
|
||||||
// TODO: get all projects for this file; report refs for all projects deleting duplicates
|
// TODO: get all projects for this file; report refs for all projects deleting duplicates
|
||||||
// can avoid duplicates by eliminating same ref file from subsequent projects
|
// can avoid duplicates by eliminating same ref file from subsequent projects
|
||||||
var file = ts.normalizePath(fileName);
|
var file = ts.normalizePath(fileName);
|
||||||
|
@ -378,7 +409,7 @@ module ts.server {
|
||||||
var nameSpan = nameInfo.textSpan;
|
var nameSpan = nameInfo.textSpan;
|
||||||
var nameColStart = compilerService.host.positionToLineOffset(file, nameSpan.start).offset;
|
var nameColStart = compilerService.host.positionToLineOffset(file, nameSpan.start).offset;
|
||||||
var nameText = compilerService.host.getScriptSnapshot(file).getText(nameSpan.start, ts.textSpanEnd(nameSpan));
|
var nameText = compilerService.host.getScriptSnapshot(file).getText(nameSpan.start, ts.textSpanEnd(nameSpan));
|
||||||
var bakedRefs: protocol.ReferencesResponseItem[] = references.map((ref) => {
|
var bakedRefs: protocol.ReferencesResponseItem[] = references.map(ref => {
|
||||||
var start = compilerService.host.positionToLineOffset(ref.fileName, ref.textSpan.start);
|
var start = compilerService.host.positionToLineOffset(ref.fileName, ref.textSpan.start);
|
||||||
var refLineSpan = compilerService.host.lineToTextSpan(ref.fileName, start.line - 1);
|
var refLineSpan = compilerService.host.lineToTextSpan(ref.fileName, start.line - 1);
|
||||||
var snap = compilerService.host.getScriptSnapshot(ref.fileName);
|
var snap = compilerService.host.getScriptSnapshot(ref.fileName);
|
||||||
|
@ -399,12 +430,12 @@ module ts.server {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
openClientFile(fileName: string) {
|
openClientFile({ file: fileName }: protocol.OpenRequestArgs) {
|
||||||
var file = ts.normalizePath(fileName);
|
var file = ts.normalizePath(fileName);
|
||||||
this.projectService.openClientFile(file);
|
this.projectService.openClientFile(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
getQuickInfo(line: number, offset: number, fileName: string): protocol.QuickInfoResponseBody {
|
getQuickInfo({ line, offset, file: fileName }: protocol.FileLocationRequestArgs): protocol.QuickInfoResponseBody {
|
||||||
var file = ts.normalizePath(fileName);
|
var file = ts.normalizePath(fileName);
|
||||||
var project = this.projectService.getProjectForFile(file);
|
var project = this.projectService.getProjectForFile(file);
|
||||||
if (!project) {
|
if (!project) {
|
||||||
|
@ -430,7 +461,7 @@ module ts.server {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
getFormattingEditsForRange(line: number, offset: number, endLine: number, endOffset: number, fileName: string): protocol.CodeEdit[] {
|
getFormattingEditsForRange({line, offset, endLine, endOffset, file: fileName}: protocol.FormatRequestArgs): protocol.CodeEdit[] {
|
||||||
var file = ts.normalizePath(fileName);
|
var file = ts.normalizePath(fileName);
|
||||||
var project = this.projectService.getProjectForFile(file);
|
var project = this.projectService.getProjectForFile(file);
|
||||||
if (!project) {
|
if (!project) {
|
||||||
|
@ -457,7 +488,7 @@ module ts.server {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getFormattingEditsAfterKeystroke(line: number, offset: number, key: string, fileName: string): protocol.CodeEdit[] {
|
getFormattingEditsAfterKeystroke({line, offset, key, file: fileName}: protocol.FormatOnKeyRequestArgs): protocol.CodeEdit[] {
|
||||||
var file = ts.normalizePath(fileName);
|
var file = ts.normalizePath(fileName);
|
||||||
|
|
||||||
var project = this.projectService.getProjectForFile(file);
|
var project = this.projectService.getProjectForFile(file);
|
||||||
|
@ -530,7 +561,7 @@ module ts.server {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getCompletions(line: number, offset: number, prefix: string, fileName: string): protocol.CompletionEntry[] {
|
getCompletions({ line, offset, prefix, file: fileName}: protocol.CompletionsRequestArgs): protocol.CompletionEntry[] {
|
||||||
if (!prefix) {
|
if (!prefix) {
|
||||||
prefix = "";
|
prefix = "";
|
||||||
}
|
}
|
||||||
|
@ -556,8 +587,7 @@ module ts.server {
|
||||||
}, []).sort((a, b) => a.name.localeCompare(b.name));
|
}, []).sort((a, b) => a.name.localeCompare(b.name));
|
||||||
}
|
}
|
||||||
|
|
||||||
getCompletionEntryDetails(line: number, offset: number,
|
getCompletionEntryDetails({ line, offset, entryNames, file: fileName}: protocol.CompletionDetailsRequestArgs): protocol.CompletionEntryDetails[] {
|
||||||
entryNames: string[], fileName: string): protocol.CompletionEntryDetails[] {
|
|
||||||
var file = ts.normalizePath(fileName);
|
var file = ts.normalizePath(fileName);
|
||||||
var project = this.projectService.getProjectForFile(file);
|
var project = this.projectService.getProjectForFile(file);
|
||||||
if (!project) {
|
if (!project) {
|
||||||
|
@ -576,20 +606,20 @@ module ts.server {
|
||||||
}, []);
|
}, []);
|
||||||
}
|
}
|
||||||
|
|
||||||
getSignatureHelpItems(line: number, offset: number, fileName: string): protocol.SignatureHelpItems {
|
getSignatureHelpItems({ line, offset, file: fileName }: protocol.SignatureHelpRequestArgs): protocol.SignatureHelpItems {
|
||||||
var file = ts.normalizePath(fileName);
|
var file = ts.normalizePath(fileName);
|
||||||
var project = this.projectService.getProjectForFile(file);
|
var project = this.projectService.getProjectForFile(file);
|
||||||
if (!project) {
|
if (!project) {
|
||||||
throw Errors.NoProject;
|
throw Errors.NoProject;
|
||||||
}
|
}
|
||||||
|
|
||||||
var compilerService = project.compilerService;
|
var compilerService = project.compilerService;
|
||||||
var position = compilerService.host.lineOffsetToPosition(file, line, offset);
|
var position = compilerService.host.lineOffsetToPosition(file, line, offset);
|
||||||
var helpItems = compilerService.languageService.getSignatureHelpItems(file, position);
|
var helpItems = compilerService.languageService.getSignatureHelpItems(file, position);
|
||||||
if (!helpItems) {
|
if (!helpItems) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
|
|
||||||
var span = helpItems.applicableSpan;
|
var span = helpItems.applicableSpan;
|
||||||
var result: protocol.SignatureHelpItems = {
|
var result: protocol.SignatureHelpItems = {
|
||||||
items: helpItems.items,
|
items: helpItems.items,
|
||||||
|
@ -601,11 +631,11 @@ module ts.server {
|
||||||
argumentIndex: helpItems.argumentIndex,
|
argumentIndex: helpItems.argumentIndex,
|
||||||
argumentCount: helpItems.argumentCount,
|
argumentCount: helpItems.argumentCount,
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
getDiagnostics(delay: number, fileNames: string[]) {
|
getDiagnostics({ delay, files: fileNames }: protocol.GeterrRequestArgs): void {
|
||||||
var checkList = fileNames.reduce((accum: PendingErrorCheck[], fileName: string) => {
|
var checkList = fileNames.reduce((accum: PendingErrorCheck[], fileName: string) => {
|
||||||
fileName = ts.normalizePath(fileName);
|
fileName = ts.normalizePath(fileName);
|
||||||
var project = this.projectService.getProjectForFile(fileName);
|
var project = this.projectService.getProjectForFile(fileName);
|
||||||
|
@ -616,11 +646,11 @@ module ts.server {
|
||||||
}, []);
|
}, []);
|
||||||
|
|
||||||
if (checkList.length > 0) {
|
if (checkList.length > 0) {
|
||||||
this.updateErrorCheck(checkList, this.changeSeq,(n) => n == this.changeSeq, delay)
|
this.updateErrorCheck(checkList, this.changeSeq, (n) => n == this.changeSeq, delay)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
change(line: number, offset: number, endLine: number, endOffset: number, insertString: string, fileName: string) {
|
change({ line, offset, endLine, endOffset, insertString, file: fileName }: protocol.ChangeRequestArgs): void {
|
||||||
var file = ts.normalizePath(fileName);
|
var file = ts.normalizePath(fileName);
|
||||||
var project = this.projectService.getProjectForFile(file);
|
var project = this.projectService.getProjectForFile(file);
|
||||||
if (project) {
|
if (project) {
|
||||||
|
@ -635,7 +665,7 @@ module ts.server {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
reload(fileName: string, tempFileName: string, reqSeq = 0) {
|
reload({ file: fileName, tmpfile: tempFileName }: protocol.ReloadRequestArgs, reqSeq = 0): void {
|
||||||
var file = ts.normalizePath(fileName);
|
var file = ts.normalizePath(fileName);
|
||||||
var tmpfile = ts.normalizePath(tempFileName);
|
var tmpfile = ts.normalizePath(tempFileName);
|
||||||
var project = this.projectService.getProjectForFile(file);
|
var project = this.projectService.getProjectForFile(file);
|
||||||
|
@ -648,7 +678,7 @@ module ts.server {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
saveToTmp(fileName: string, tempFileName: string) {
|
saveToTmp({ file: fileName, tmpfile: tempFileName }: protocol.SavetoRequestArgs): void {
|
||||||
var file = ts.normalizePath(fileName);
|
var file = ts.normalizePath(fileName);
|
||||||
var tmpfile = ts.normalizePath(tempFileName);
|
var tmpfile = ts.normalizePath(tempFileName);
|
||||||
|
|
||||||
|
@ -658,7 +688,7 @@ module ts.server {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
closeClientFile(fileName: string) {
|
closeClientFile({ file: fileName }: protocol.FileRequestArgs) {
|
||||||
var file = ts.normalizePath(fileName);
|
var file = ts.normalizePath(fileName);
|
||||||
this.projectService.closeClientFile(file);
|
this.projectService.closeClientFile(file);
|
||||||
}
|
}
|
||||||
|
@ -682,7 +712,7 @@ module ts.server {
|
||||||
}));
|
}));
|
||||||
}
|
}
|
||||||
|
|
||||||
getNavigationBarItems(fileName: string): protocol.NavigationBarItem[] {
|
getNavigationBarItems({ file: fileName }: protocol.FileRequestArgs): protocol.NavigationBarItem[]{
|
||||||
var file = ts.normalizePath(fileName);
|
var file = ts.normalizePath(fileName);
|
||||||
var project = this.projectService.getProjectForFile(file);
|
var project = this.projectService.getProjectForFile(file);
|
||||||
if (!project) {
|
if (!project) {
|
||||||
|
@ -698,7 +728,7 @@ module ts.server {
|
||||||
return this.decorateNavigationBarItem(project, fileName, items);
|
return this.decorateNavigationBarItem(project, fileName, items);
|
||||||
}
|
}
|
||||||
|
|
||||||
getNavigateToItems(searchValue: string, fileName: string, maxResultCount?: number): protocol.NavtoItem[] {
|
getNavigateToItems({ searchValue, file: fileName, maxResultCount }: protocol.NavtoRequestArgs): protocol.NavtoItem[]{
|
||||||
var file = ts.normalizePath(fileName);
|
var file = ts.normalizePath(fileName);
|
||||||
var project = this.projectService.getProjectForFile(file);
|
var project = this.projectService.getProjectForFile(file);
|
||||||
if (!project) {
|
if (!project) {
|
||||||
|
@ -737,7 +767,7 @@ module ts.server {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
getBraceMatching(line: number, offset: number, fileName: string): protocol.TextSpan[] {
|
getBraceMatching({ line, offset, file: fileName }: protocol.FileLocationRequestArgs): protocol.TextSpan[]{
|
||||||
var file = ts.normalizePath(fileName);
|
var file = ts.normalizePath(fileName);
|
||||||
|
|
||||||
var project = this.projectService.getProjectForFile(file);
|
var project = this.projectService.getProjectForFile(file);
|
||||||
|
@ -779,109 +809,91 @@ module ts.server {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CommandNames.Definition: {
|
case CommandNames.Definition: {
|
||||||
var defArgs = <protocol.FileLocationRequestArgs>request.arguments;
|
response = this.getDefinition(<protocol.FileLocationRequestArgs>request.arguments);
|
||||||
response = this.getDefinition(defArgs.line, defArgs.offset, defArgs.file);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CommandNames.References: {
|
case CommandNames.References: {
|
||||||
var refArgs = <protocol.FileLocationRequestArgs>request.arguments;
|
response = this.getReferences(<protocol.FileLocationRequestArgs>request.arguments);
|
||||||
response = this.getReferences(refArgs.line, refArgs.offset, refArgs.file);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CommandNames.Rename: {
|
case CommandNames.Rename: {
|
||||||
var renameArgs = <protocol.RenameRequestArgs>request.arguments;
|
response = this.getRenameLocations(<protocol.RenameRequestArgs>request.arguments);
|
||||||
response = this.getRenameLocations(renameArgs.line, renameArgs.offset, renameArgs.file, renameArgs.findInComments, renameArgs.findInStrings);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CommandNames.Open: {
|
case CommandNames.Open: {
|
||||||
var openArgs = <protocol.OpenRequestArgs>request.arguments;
|
this.openClientFile(<protocol.OpenRequestArgs>request.arguments);
|
||||||
this.openClientFile(openArgs.file);
|
|
||||||
responseRequired = false;
|
responseRequired = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CommandNames.Quickinfo: {
|
case CommandNames.Quickinfo: {
|
||||||
var quickinfoArgs = <protocol.FileLocationRequestArgs>request.arguments;
|
response = this.getQuickInfo(<protocol.FileLocationRequestArgs>request.arguments);
|
||||||
response = this.getQuickInfo(quickinfoArgs.line, quickinfoArgs.offset, quickinfoArgs.file);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CommandNames.Format: {
|
case CommandNames.Format: {
|
||||||
var formatArgs = <protocol.FormatRequestArgs>request.arguments;
|
response = this.getFormattingEditsForRange(<protocol.FormatRequestArgs>request.arguments);
|
||||||
response = this.getFormattingEditsForRange(formatArgs.line, formatArgs.offset, formatArgs.endLine, formatArgs.endOffset, formatArgs.file);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CommandNames.Formatonkey: {
|
case CommandNames.Formatonkey: {
|
||||||
var formatOnKeyArgs = <protocol.FormatOnKeyRequestArgs>request.arguments;
|
response = this.getFormattingEditsAfterKeystroke(<protocol.FormatOnKeyRequestArgs>request.arguments);
|
||||||
response = this.getFormattingEditsAfterKeystroke(formatOnKeyArgs.line, formatOnKeyArgs.offset, formatOnKeyArgs.key, formatOnKeyArgs.file);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CommandNames.Completions: {
|
case CommandNames.Completions: {
|
||||||
var completionsArgs = <protocol.CompletionsRequestArgs>request.arguments;
|
response = this.getCompletions(<protocol.CompletionsRequestArgs>request.arguments);
|
||||||
response = this.getCompletions(completionsArgs.line, completionsArgs.offset, completionsArgs.prefix, completionsArgs.file);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CommandNames.CompletionDetails: {
|
case CommandNames.CompletionDetails: {
|
||||||
var completionDetailsArgs = <protocol.CompletionDetailsRequestArgs>request.arguments;
|
response = this.getCompletionEntryDetails(<protocol.CompletionDetailsRequestArgs>request.arguments);
|
||||||
response =
|
|
||||||
this.getCompletionEntryDetails(completionDetailsArgs.line,completionDetailsArgs.offset,
|
|
||||||
completionDetailsArgs.entryNames,completionDetailsArgs.file);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CommandNames.SignatureHelp: {
|
case CommandNames.SignatureHelp: {
|
||||||
var signatureHelpArgs = <protocol.SignatureHelpRequestArgs>request.arguments;
|
response = this.getSignatureHelpItems(<protocol.SignatureHelpRequestArgs>request.arguments);
|
||||||
response = this.getSignatureHelpItems(signatureHelpArgs.line, signatureHelpArgs.offset, signatureHelpArgs.file);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CommandNames.Geterr: {
|
case CommandNames.Geterr: {
|
||||||
var geterrArgs = <protocol.GeterrRequestArgs>request.arguments;
|
this.getDiagnostics(<protocol.GeterrRequestArgs>request.arguments);
|
||||||
response = this.getDiagnostics(geterrArgs.delay, geterrArgs.files);
|
|
||||||
responseRequired = false;
|
responseRequired = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CommandNames.Change: {
|
case CommandNames.Change: {
|
||||||
var changeArgs = <protocol.ChangeRequestArgs>request.arguments;
|
this.change(<protocol.ChangeRequestArgs>request.arguments);
|
||||||
this.change(changeArgs.line, changeArgs.offset, changeArgs.endLine, changeArgs.endOffset,
|
|
||||||
changeArgs.insertString, changeArgs.file);
|
|
||||||
responseRequired = false;
|
responseRequired = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CommandNames.Configure: {
|
case CommandNames.Configure: {
|
||||||
var configureArgs = <protocol.ConfigureRequestArguments>request.arguments;
|
this.projectService.setHostConfiguration(<protocol.ConfigureRequestArguments>request.arguments);
|
||||||
this.projectService.setHostConfiguration(configureArgs);
|
|
||||||
this.output(undefined, CommandNames.Configure, request.seq);
|
this.output(undefined, CommandNames.Configure, request.seq);
|
||||||
responseRequired = false;
|
responseRequired = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CommandNames.Reload: {
|
case CommandNames.Reload: {
|
||||||
var reloadArgs = <protocol.ReloadRequestArgs>request.arguments;
|
this.reload(<protocol.ReloadRequestArgs>request.arguments);
|
||||||
this.reload(reloadArgs.file, reloadArgs.tmpfile, request.seq);
|
|
||||||
responseRequired = false;
|
responseRequired = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CommandNames.Saveto: {
|
case CommandNames.Saveto: {
|
||||||
var savetoArgs = <protocol.SavetoRequestArgs>request.arguments;
|
this.saveToTmp(<protocol.SavetoRequestArgs>request.arguments);
|
||||||
this.saveToTmp(savetoArgs.file, savetoArgs.tmpfile);
|
|
||||||
responseRequired = false;
|
responseRequired = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CommandNames.Close: {
|
case CommandNames.Close: {
|
||||||
var closeArgs = <protocol.FileRequestArgs>request.arguments;
|
this.closeClientFile(<protocol.FileRequestArgs>request.arguments);
|
||||||
this.closeClientFile(closeArgs.file);
|
|
||||||
responseRequired = false;
|
responseRequired = false;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CommandNames.Navto: {
|
case CommandNames.Navto: {
|
||||||
var navtoArgs = <protocol.NavtoRequestArgs>request.arguments;
|
response = this.getNavigateToItems(<protocol.NavtoRequestArgs>request.arguments);
|
||||||
response = this.getNavigateToItems(navtoArgs.searchValue, navtoArgs.file, navtoArgs.maxResultCount);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CommandNames.Brace: {
|
case CommandNames.Brace: {
|
||||||
var braceArguments = <protocol.FileLocationRequestArgs>request.arguments;
|
response = this.getBraceMatching(<protocol.FileLocationRequestArgs>request.arguments);
|
||||||
response = this.getBraceMatching(braceArguments.line, braceArguments.offset, braceArguments.file);
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case CommandNames.NavBar: {
|
case CommandNames.NavBar: {
|
||||||
var navBarArgs = <protocol.FileRequestArgs>request.arguments;
|
response = this.getNavigationBarItems(<protocol.FileRequestArgs>request.arguments);
|
||||||
response = this.getNavigationBarItems(navBarArgs.file);
|
break;
|
||||||
|
}
|
||||||
|
case CommandNames.Occurrences: {
|
||||||
|
response = this.getOccurrences(<protocol.FileLocationRequestArgs>request.arguments);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default: {
|
default: {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/// <reference path="fourslash.ts"/>
|
/// <reference path="../fourslash.ts"/>
|
||||||
|
|
||||||
//////curly braces
|
//////curly braces
|
||||||
////module Foo [|{
|
////module Foo [|{
|
|
@ -1,4 +1,4 @@
|
||||||
/// <reference path='fourslash.ts'/>
|
/// <reference path="../fourslash.ts"/>
|
||||||
|
|
||||||
////var x: string[] = [];
|
////var x: string[] = [];
|
||||||
////x.forEach(function (y) { y/*1*/
|
////x.forEach(function (y) { y/*1*/
|
|
@ -1,4 +1,4 @@
|
||||||
/// <reference path="fourslash.ts" />
|
/// <reference path="../fourslash.ts"/>
|
||||||
|
|
||||||
////class Foo {
|
////class Foo {
|
||||||
////}
|
////}
|
|
@ -1,4 +1,4 @@
|
||||||
/// <reference path='fourslash.ts'/>
|
/// <reference path="../fourslash.ts"/>
|
||||||
|
|
||||||
// @Filename: b.ts
|
// @Filename: b.ts
|
||||||
////import n = require('a/*1*/');
|
////import n = require('a/*1*/');
|
|
@ -1,4 +1,4 @@
|
||||||
/// <reference path='fourslash.ts' />
|
/// <reference path="../fourslash.ts"/>
|
||||||
|
|
||||||
/////**/module Default{var x= ( { } ) ;}
|
/////**/module Default{var x= ( { } ) ;}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/// <reference path='fourslash.ts' />
|
/// <reference path="../fourslash.ts"/>
|
||||||
|
|
||||||
////switch (1) {
|
////switch (1) {
|
||||||
//// case 1:
|
//// case 1:
|
|
@ -1,4 +1,4 @@
|
||||||
/// <reference path="fourslash.ts"/>
|
/// <reference path="../fourslash.ts"/>
|
||||||
|
|
||||||
////// Interface
|
////// Interface
|
||||||
////{| "itemName": "IPoint", "kind": "interface", "parentName": "" |}interface IPoint {
|
////{| "itemName": "IPoint", "kind": "interface", "parentName": "" |}interface IPoint {
|
|
@ -1,4 +1,4 @@
|
||||||
/// <reference path="fourslash.ts"/>
|
/// <reference path="../fourslash.ts"/>
|
||||||
|
|
||||||
/////// Module
|
/////// Module
|
||||||
////{| "itemName": "MyShapes", "kind": "module", "parentName": "", "matchKind": "substring" |}module MyShapes {
|
////{| "itemName": "MyShapes", "kind": "module", "parentName": "", "matchKind": "substring" |}module MyShapes {
|
22
tests/cases/fourslash/server/occurrences01.ts
Normal file
22
tests/cases/fourslash/server/occurrences01.ts
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
/// <reference path="../fourslash.ts"/>
|
||||||
|
|
||||||
|
////foo: [|switch|] (10) {
|
||||||
|
//// [|case|] 1:
|
||||||
|
//// [|case|] 2:
|
||||||
|
//// [|case|] 3:
|
||||||
|
//// [|break|];
|
||||||
|
//// [|break|] foo;
|
||||||
|
//// continue;
|
||||||
|
//// continue foo;
|
||||||
|
////}
|
||||||
|
|
||||||
|
let ranges = test.ranges();
|
||||||
|
|
||||||
|
for (let r of ranges) {
|
||||||
|
goTo.position(r.start);
|
||||||
|
verify.occurrencesAtPositionCount(ranges.length);
|
||||||
|
|
||||||
|
for (let range of ranges) {
|
||||||
|
verify.occurrencesAtPositionContains(range, /*isWriteAccess*/ false);
|
||||||
|
}
|
||||||
|
}
|
16
tests/cases/fourslash/server/occurrences02.ts
Normal file
16
tests/cases/fourslash/server/occurrences02.ts
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
/// <reference path="../fourslash.ts"/>
|
||||||
|
|
||||||
|
////function [|f|](x: typeof [|f|]) {
|
||||||
|
//// [|f|]([|f|]);
|
||||||
|
////}
|
||||||
|
|
||||||
|
let ranges = test.ranges();
|
||||||
|
|
||||||
|
for (let r of ranges) {
|
||||||
|
goTo.position(r.start);
|
||||||
|
verify.occurrencesAtPositionCount(ranges.length);
|
||||||
|
|
||||||
|
for (let range of ranges) {
|
||||||
|
verify.occurrencesAtPositionContains(range);
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
/// <reference path="fourslash.ts"/>
|
/// <reference path="../fourslash.ts"/>
|
||||||
|
|
||||||
////interface One {
|
////interface One {
|
||||||
//// commonProperty: number;
|
//// commonProperty: number;
|
|
@ -1,4 +1,4 @@
|
||||||
/// <reference path='fourslash.ts'/>
|
/// <reference path="../fourslash.ts"/>
|
||||||
|
|
||||||
// Global class reference.
|
// Global class reference.
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/// <reference path="fourslash.ts" />
|
/// <reference path="../fourslash.ts"/>
|
||||||
|
|
||||||
///////<reference path="./Bar.ts" />
|
///////<reference path="./Bar.ts" />
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/// <reference path="fourslash.ts"/>
|
/// <reference path="../fourslash.ts"/>
|
||||||
|
|
||||||
////function foo(data: number) {
|
////function foo(data: number) {
|
||||||
////}
|
////}
|
Loading…
Reference in a new issue