From 5b6c65ffe09bbdb150f8e8efee79b8124ed019e6 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Tue, 7 Apr 2015 23:31:09 -0700 Subject: [PATCH] Added support for getOccurrences to the server. --- src/server/client.ts | 22 +++++++++++++++++++++- src/server/protocol.d.ts | 19 +++++++++++++++++++ src/server/session.ts | 1 + 3 files changed, 41 insertions(+), 1 deletion(-) diff --git a/src/server/client.ts b/src/server/client.ts index d395d2a832..dfda9f23ed 100644 --- a/src/server/client.ts +++ b/src/server/client.ts @@ -446,6 +446,7 @@ module ts.server { if (!response.body) { return undefined; } + var helpItems: protocol.SignatureHelpItems = response.body; var span = helpItems.applicableSpan; var start = this.lineOffsetToPosition(fileName, span.start); @@ -465,7 +466,26 @@ module ts.server { } 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(CommandNames.Occurrences, args); + var response = this.processResponse(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, + }; + }); } getOutliningSpans(fileName: string): OutliningSpan[] { diff --git a/src/server/protocol.d.ts b/src/server/protocol.d.ts index 1d685be5d3..5bc1ffbe4d 100644 --- a/src/server/protocol.d.ts +++ b/src/server/protocol.d.ts @@ -165,6 +165,25 @@ declare module ts.server.protocol { 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 * "references". Return response giving the file locations that diff --git a/src/server/session.ts b/src/server/session.ts index 560f5869c0..f35235554e 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -89,6 +89,7 @@ module ts.server { export var Geterr = "geterr"; export var NavBar = "navbar"; export var Navto = "navto"; + export var Occurrences = "occurrences"; export var Open = "open"; export var Quickinfo = "quickinfo"; export var References = "references";