Merge branch 'master' into GetOccurrencesSingleFile

This commit is contained in:
Cyrus Najmabadi 2015-04-08 23:36:22 -07:00
commit 020c12c6a6
17 changed files with 170 additions and 81 deletions

View file

@ -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[] {

View file

@ -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

View file

@ -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: {

View file

@ -1,4 +1,4 @@
/// <reference path="fourslash.ts"/> /// <reference path="../fourslash.ts"/>
//////curly braces //////curly braces
////module Foo [|{ ////module Foo [|{

View file

@ -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*/

View file

@ -1,4 +1,4 @@
/// <reference path="fourslash.ts" /> /// <reference path="../fourslash.ts"/>
////class Foo { ////class Foo {
////} ////}

View file

@ -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*/');

View file

@ -1,4 +1,4 @@
/// <reference path='fourslash.ts' /> /// <reference path="../fourslash.ts"/>
/////**/module Default{var x= ( { } ) ;} /////**/module Default{var x= ( { } ) ;}

View file

@ -1,4 +1,4 @@
/// <reference path='fourslash.ts' /> /// <reference path="../fourslash.ts"/>
////switch (1) { ////switch (1) {
//// case 1: //// case 1:

View file

@ -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 {

View file

@ -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 {

View 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);
}
}

View 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);
}
}

View file

@ -1,4 +1,4 @@
/// <reference path="fourslash.ts"/> /// <reference path="../fourslash.ts"/>
////interface One { ////interface One {
//// commonProperty: number; //// commonProperty: number;

View file

@ -1,4 +1,4 @@
/// <reference path='fourslash.ts'/> /// <reference path="../fourslash.ts"/>
// Global class reference. // Global class reference.

View file

@ -1,4 +1,4 @@
/// <reference path="fourslash.ts" /> /// <reference path="../fourslash.ts"/>
///////<reference path="./Bar.ts" /> ///////<reference path="./Bar.ts" />

View file

@ -1,4 +1,4 @@
/// <reference path="fourslash.ts"/> /// <reference path="../fourslash.ts"/>
////function foo(data: number) { ////function foo(data: number) {
////} ////}