From 93bb224545ec753bb4c40190dd811d365b48fcb4 Mon Sep 17 00:00:00 2001 From: Daniel Rosenwasser Date: Wed, 8 Apr 2015 00:35:34 -0700 Subject: [PATCH] Actually implemented the session-side logic. --- src/server/session.ts | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/src/server/session.ts b/src/server/session.ts index f35235554e6..9c77747f349 100644 --- a/src/server/session.ts +++ b/src/server/session.ts @@ -285,6 +285,36 @@ module ts.server { })); } + getOccurrences(line: number, offset: number, fileName: string): 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: number, offset: number, fileName: string,findInComments: boolean, findInStrings: boolean): protocol.RenameResponseBody { var file = ts.normalizePath(fileName); var project = this.projectService.getProjectForFile(file); @@ -379,7 +409,7 @@ module ts.server { var nameSpan = nameInfo.textSpan; var nameColStart = compilerService.host.positionToLineOffset(file, nameSpan.start).offset; 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 refLineSpan = compilerService.host.lineToTextSpan(ref.fileName, start.line - 1); var snap = compilerService.host.getScriptSnapshot(ref.fileName); @@ -885,6 +915,10 @@ module ts.server { response = this.getNavigationBarItems(navBarArgs.file); break; } + case CommandNames.Occurrences: { + var occurrencesArgs = request.arguments; + response = this + } default: { this.projectService.log("Unrecognized JSON command: " + message); this.output(undefined, CommandNames.Unknown, request.seq, "Unrecognized JSON command: " + request.command);