Merge remote-tracking branch 'origin/master' into importGotoDef

This commit is contained in:
Mohamed Hegazy 2015-02-23 15:43:43 -08:00
commit 87500959f0
7 changed files with 178 additions and 126 deletions

114
src/lib/es6.d.ts vendored
View file

@ -230,22 +230,22 @@ interface ArrayLike<T> {
interface Array<T> {
/** Iterator */
[Symbol.iterator] (): Iterator<T>;
[Symbol.iterator](): IterableIterator<T>;
/**
* Returns an array of key, value pairs for every entry in the array
*/
entries(): Iterator<[number, T]>;
entries(): IterableIterator<[number, T]>;
/**
* Returns an list of keys in the array
*/
keys(): Iterator<number>;
keys(): IterableIterator<number>;
/**
* Returns an list of values in the array
*/
values(): Iterator<T>;
values(): IterableIterator<T>;
/**
* Returns the value of the first element in the array where predicate is true, and undefined
@ -329,7 +329,7 @@ interface ArrayConstructor {
interface String {
/** Iterator */
[Symbol.iterator] (): Iterator<string>;
[Symbol.iterator](): IterableIterator<string>;
/**
* Returns a nonnegative integer Number less than 1114112 (0x110000) that is the code point
@ -447,14 +447,19 @@ interface IteratorResult<T> {
}
interface Iterator<T> {
[Symbol.iterator](): Iterator<T>;
next(): IteratorResult<T>;
return?(value?: any): IteratorResult<T>;
throw?(e?: any): IteratorResult<T>;
}
interface Iterable<T> {
[Symbol.iterator](): Iterator<T>;
}
interface IterableIterator<T> extends Iterator<T> {
[Symbol.iterator](): IterableIterator<T>;
}
interface GeneratorFunction extends Function {
}
@ -470,10 +475,11 @@ interface GeneratorFunctionConstructor {
}
declare var GeneratorFunction: GeneratorFunctionConstructor;
interface Generator<T> extends Iterator<T> {
interface Generator<T> extends IterableIterator<T> {
next(value?: any): IteratorResult<T>;
throw (exception: any): IteratorResult<T>;
return (value: T): IteratorResult<T>;
throw(exception: any): IteratorResult<T>;
return(value: T): IteratorResult<T>;
[Symbol.iterator](): Generator<T>;
[Symbol.toStringTag]: string;
}
@ -641,15 +647,15 @@ interface RegExp {
interface Map<K, V> {
clear(): void;
delete(key: K): boolean;
entries(): Iterator<[K, V]>;
entries(): IterableIterator<[K, V]>;
forEach(callbackfn: (value: V, index: K, map: Map<K, V>) => void, thisArg?: any): void;
get(key: K): V;
has(key: K): boolean;
keys(): Iterator<K>;
keys(): IterableIterator<K>;
set(key: K, value?: V): Map<K, V>;
size: number;
values(): Iterator<V>;
[Symbol.iterator]():Iterator<[K,V]>;
values(): IterableIterator<V>;
[Symbol.iterator]():IterableIterator<[K,V]>;
[Symbol.toStringTag]: string;
}
@ -680,13 +686,13 @@ interface Set<T> {
add(value: T): Set<T>;
clear(): void;
delete(value: T): boolean;
entries(): Iterator<[T, T]>;
entries(): IterableIterator<[T, T]>;
forEach(callbackfn: (value: T, index: T, set: Set<T>) => void, thisArg?: any): void;
has(value: T): boolean;
keys(): Iterator<T>;
keys(): IterableIterator<T>;
size: number;
values(): Iterator<T>;
[Symbol.iterator]():Iterator<T>;
values(): IterableIterator<T>;
[Symbol.iterator]():IterableIterator<T>;
[Symbol.toStringTag]: string;
}
@ -917,7 +923,7 @@ interface Int8Array {
/**
* Returns an array of key, value pairs for every entry in the array
*/
entries(): Iterator<[number, number]>;
entries(): IterableIterator<[number, number]>;
/**
* Determines whether all the members of an array satisfy the specified test.
@ -997,7 +1003,7 @@ interface Int8Array {
/**
* Returns an list of keys in the array
*/
keys(): Iterator<number>;
keys(): IterableIterator<number>;
/**
* Returns the index of the last occurrence of a value in an array.
@ -1134,10 +1140,10 @@ interface Int8Array {
/**
* Returns an list of values in the array
*/
values(): Iterator<number>;
values(): IterableIterator<number>;
[index: number]: number;
[Symbol.iterator] (): Iterator<number>;
[Symbol.iterator](): IterableIterator<number>;
}
interface Int8ArrayConstructor {
@ -1207,7 +1213,7 @@ interface Uint8Array {
/**
* Returns an array of key, value pairs for every entry in the array
*/
entries(): Iterator<[number, number]>;
entries(): IterableIterator<[number, number]>;
/**
* Determines whether all the members of an array satisfy the specified test.
@ -1287,7 +1293,7 @@ interface Uint8Array {
/**
* Returns an list of keys in the array
*/
keys(): Iterator<number>;
keys(): IterableIterator<number>;
/**
* Returns the index of the last occurrence of a value in an array.
@ -1424,10 +1430,10 @@ interface Uint8Array {
/**
* Returns an list of values in the array
*/
values(): Iterator<number>;
values(): IterableIterator<number>;
[index: number]: number;
[Symbol.iterator] (): Iterator<number>;
[Symbol.iterator](): IterableIterator<number>;
}
interface Uint8ArrayConstructor {
@ -1497,7 +1503,7 @@ interface Uint8ClampedArray {
/**
* Returns an array of key, value pairs for every entry in the array
*/
entries(): Iterator<[number, number]>;
entries(): IterableIterator<[number, number]>;
/**
* Determines whether all the members of an array satisfy the specified test.
@ -1577,7 +1583,7 @@ interface Uint8ClampedArray {
/**
* Returns an list of keys in the array
*/
keys(): Iterator<number>;
keys(): IterableIterator<number>;
/**
* Returns the index of the last occurrence of a value in an array.
@ -1714,10 +1720,10 @@ interface Uint8ClampedArray {
/**
* Returns an list of values in the array
*/
values(): Iterator<number>;
values(): IterableIterator<number>;
[index: number]: number;
[Symbol.iterator] (): Iterator<number>;
[Symbol.iterator](): IterableIterator<number>;
}
interface Uint8ClampedArrayConstructor {
@ -1787,7 +1793,7 @@ interface Int16Array {
/**
* Returns an array of key, value pairs for every entry in the array
*/
entries(): Iterator<[number, number]>;
entries(): IterableIterator<[number, number]>;
/**
* Determines whether all the members of an array satisfy the specified test.
@ -1867,7 +1873,7 @@ interface Int16Array {
/**
* Returns an list of keys in the array
*/
keys(): Iterator<number>;
keys(): IterableIterator<number>;
/**
* Returns the index of the last occurrence of a value in an array.
@ -2004,10 +2010,10 @@ interface Int16Array {
/**
* Returns an list of values in the array
*/
values(): Iterator<number>;
values(): IterableIterator<number>;
[index: number]: number;
[Symbol.iterator] (): Iterator<number>;
[Symbol.iterator](): IterableIterator<number>;
}
interface Int16ArrayConstructor {
@ -2077,7 +2083,7 @@ interface Uint16Array {
/**
* Returns an array of key, value pairs for every entry in the array
*/
entries(): Iterator<[number, number]>;
entries(): IterableIterator<[number, number]>;
/**
* Determines whether all the members of an array satisfy the specified test.
@ -2157,7 +2163,7 @@ interface Uint16Array {
/**
* Returns an list of keys in the array
*/
keys(): Iterator<number>;
keys(): IterableIterator<number>;
/**
* Returns the index of the last occurrence of a value in an array.
@ -2294,10 +2300,10 @@ interface Uint16Array {
/**
* Returns an list of values in the array
*/
values(): Iterator<number>;
values(): IterableIterator<number>;
[index: number]: number;
[Symbol.iterator] (): Iterator<number>;
[Symbol.iterator](): IterableIterator<number>;
}
interface Uint16ArrayConstructor {
@ -2367,7 +2373,7 @@ interface Int32Array {
/**
* Returns an array of key, value pairs for every entry in the array
*/
entries(): Iterator<[number, number]>;
entries(): IterableIterator<[number, number]>;
/**
* Determines whether all the members of an array satisfy the specified test.
@ -2447,7 +2453,7 @@ interface Int32Array {
/**
* Returns an list of keys in the array
*/
keys(): Iterator<number>;
keys(): IterableIterator<number>;
/**
* Returns the index of the last occurrence of a value in an array.
@ -2584,10 +2590,10 @@ interface Int32Array {
/**
* Returns an list of values in the array
*/
values(): Iterator<number>;
values(): IterableIterator<number>;
[index: number]: number;
[Symbol.iterator] (): Iterator<number>;
[Symbol.iterator](): IterableIterator<number>;
}
interface Int32ArrayConstructor {
@ -2657,7 +2663,7 @@ interface Uint32Array {
/**
* Returns an array of key, value pairs for every entry in the array
*/
entries(): Iterator<[number, number]>;
entries(): IterableIterator<[number, number]>;
/**
* Determines whether all the members of an array satisfy the specified test.
@ -2737,7 +2743,7 @@ interface Uint32Array {
/**
* Returns an list of keys in the array
*/
keys(): Iterator<number>;
keys(): IterableIterator<number>;
/**
* Returns the index of the last occurrence of a value in an array.
@ -2874,10 +2880,10 @@ interface Uint32Array {
/**
* Returns an list of values in the array
*/
values(): Iterator<number>;
values(): IterableIterator<number>;
[index: number]: number;
[Symbol.iterator] (): Iterator<number>;
[Symbol.iterator](): IterableIterator<number>;
}
interface Uint32ArrayConstructor {
@ -2947,7 +2953,7 @@ interface Float32Array {
/**
* Returns an array of key, value pairs for every entry in the array
*/
entries(): Iterator<[number, number]>;
entries(): IterableIterator<[number, number]>;
/**
* Determines whether all the members of an array satisfy the specified test.
@ -3027,7 +3033,7 @@ interface Float32Array {
/**
* Returns an list of keys in the array
*/
keys(): Iterator<number>;
keys(): IterableIterator<number>;
/**
* Returns the index of the last occurrence of a value in an array.
@ -3164,10 +3170,10 @@ interface Float32Array {
/**
* Returns an list of values in the array
*/
values(): Iterator<number>;
values(): IterableIterator<number>;
[index: number]: number;
[Symbol.iterator] (): Iterator<number>;
[Symbol.iterator](): IterableIterator<number>;
}
interface Float32ArrayConstructor {
@ -3237,7 +3243,7 @@ interface Float64Array {
/**
* Returns an array of key, value pairs for every entry in the array
*/
entries(): Iterator<[number, number]>;
entries(): IterableIterator<[number, number]>;
/**
* Determines whether all the members of an array satisfy the specified test.
@ -3317,7 +3323,7 @@ interface Float64Array {
/**
* Returns an list of keys in the array
*/
keys(): Iterator<number>;
keys(): IterableIterator<number>;
/**
* Returns the index of the last occurrence of a value in an array.
@ -3454,10 +3460,10 @@ interface Float64Array {
/**
* Returns an list of values in the array
*/
values(): Iterator<number>;
values(): IterableIterator<number>;
[index: number]: number;
[Symbol.iterator] (): Iterator<number>;
[Symbol.iterator](): IterableIterator<number>;
}
interface Float64ArrayConstructor {
@ -3516,7 +3522,7 @@ declare var Reflect: {
construct(target: Function, argumentsList: ArrayLike<any>): any;
defineProperty(target: any, propertyKey: PropertyKey, attributes: PropertyDescriptor): boolean;
deleteProperty(target: any, propertyKey: PropertyKey): boolean;
enumerate(target: any): Iterator<any>;
enumerate(target: any): IterableIterator<any>;
get(target: any, propertyKey: PropertyKey, receiver?: any): any;
getOwnPropertyDescriptor(target: any, propertyKey: PropertyKey): PropertyDescriptor;
getPrototypeOf(target: any): any;

View file

@ -208,9 +208,9 @@ module ts.server {
return response.body[0];
}
getNavigateToItems(searchTerm: string): NavigateToItem[] {
getNavigateToItems(searchValue: string): NavigateToItem[] {
var args: protocol.NavtoRequestArgs = {
searchTerm,
searchValue,
file: this.host.getScriptFileNames()[0]
};

View file

@ -65,6 +65,7 @@ module ts.server {
ls: ts.LanguageService = null;
compilationSettings: ts.CompilerOptions;
filenameToScript: ts.Map<ScriptInfo> = {};
roots: ScriptInfo[] = [];
constructor(public host: ServerHost, public project: Project) {
}
@ -144,7 +145,7 @@ module ts.server {
var scriptInfo = ts.lookUp(this.filenameToScript, info.fileName);
if (!scriptInfo) {
this.filenameToScript[info.fileName] = info;
return info;
this.roots.push(info);
}
}
@ -286,10 +287,12 @@ module ts.server {
return this.filenameToSourceFile[info.fileName];
}
getSourceFileFromName(filename: string) {
getSourceFileFromName(filename: string, requireOpen?: boolean) {
var info = this.projectService.getScriptInfo(filename);
if (info) {
return this.getSourceFile(info);
if ((!requireOpen) || info.isOpen) {
return this.getSourceFile(info);
}
}
}
@ -324,7 +327,7 @@ module ts.server {
// add a root file to project
addRoot(info: ScriptInfo) {
info.defaultProject = this;
return this.compilerService.host.addRoot(info);
this.compilerService.host.addRoot(info);
}
filesToString() {
@ -360,7 +363,7 @@ module ts.server {
}
interface ProjectServiceEventHandler {
(eventName: string, project: Project): void;
(eventName: string, project: Project, fileName: string): void;
}
export class ProjectService {
@ -392,7 +395,6 @@ module ts.server {
}
}
log(msg: string, type = "Err") {
this.psLogger.msg(msg, type);
}
@ -423,7 +425,20 @@ module ts.server {
for (var i = 0, len = referencingProjects.length; i < len; i++) {
referencingProjects[i].removeReferencedFile(info);
}
for (var j = 0, flen = this.openFileRoots.length; j < flen; j++) {
var openFile = this.openFileRoots[j];
if (this.eventHandler) {
this.eventHandler("context", openFile.defaultProject, openFile.fileName);
}
}
for (var j = 0, flen = this.openFilesReferenced.length; j < flen; j++) {
var openFile = this.openFilesReferenced[j];
if (this.eventHandler) {
this.eventHandler("context", openFile.defaultProject, openFile.fileName);
}
}
}
this.printProjects();
}
@ -503,19 +518,52 @@ module ts.server {
info.close();
}
findReferencingProjects(info: ScriptInfo) {
findReferencingProjects(info: ScriptInfo, excludedProject?: Project) {
var referencingProjects: Project[] = [];
info.defaultProject = undefined;
for (var i = 0, len = this.inferredProjects.length; i < len; i++) {
this.inferredProjects[i].updateGraph();
if (this.inferredProjects[i].getSourceFile(info)) {
info.defaultProject = this.inferredProjects[i];
referencingProjects.push(this.inferredProjects[i]);
if (this.inferredProjects[i] != excludedProject) {
if (this.inferredProjects[i].getSourceFile(info)) {
info.defaultProject = this.inferredProjects[i];
referencingProjects.push(this.inferredProjects[i]);
}
}
}
return referencingProjects;
}
updateProjectStructure() {
this.log("updating project structure from ...", "Info");
this.printProjects();
for (var i = 0, len = this.openFilesReferenced.length; i < len; i++) {
var refdFile = this.openFilesReferenced[i];
refdFile.defaultProject.updateGraph();
var sourceFile = refdFile.defaultProject.getSourceFile(refdFile);
if (!sourceFile) {
this.openFilesReferenced = copyListRemovingItem(refdFile, this.openFilesReferenced);
this.addOpenFile(refdFile);
}
}
var openFileRoots: ScriptInfo[] = [];
for (var i = 0, len = this.openFileRoots.length; i < len; i++) {
var rootFile = this.openFileRoots[i];
var rootedProject = rootFile.defaultProject;
var referencingProjects = this.findReferencingProjects(rootFile, rootedProject);
if (referencingProjects.length == 0) {
rootFile.defaultProject = rootedProject;
openFileRoots.push(rootFile);
}
else {
// remove project from inferred projects list
this.inferredProjects = copyListRemovingItem(rootedProject, this.inferredProjects);
this.openFilesReferenced.push(rootFile);
}
}
this.openFileRoots = openFileRoots;
this.printProjects();
}
getScriptInfo(filename: string) {
filename = ts.normalizePath(filename);
return ts.lookUp(this.filenameToScriptInfo, filename);
@ -621,6 +669,7 @@ module ts.server {
this.psLogger.startGroup();
for (var i = 0, len = this.inferredProjects.length; i < len; i++) {
var project = this.inferredProjects[i];
project.updateGraph();
this.psLogger.info("Project " + i.toString());
this.psLogger.info(project.filesToString());
this.psLogger.info("-----------------------------------------------");

View file

@ -676,7 +676,11 @@ declare module ts.server.protocol {
* Search term to navigate to from current location; term can
* be '.*' or an identifier prefix.
*/
searchTerm: string;
searchValue: string;
/**
* Optional limit on the number of items to return.
*/
maxResultCount?: number;
}
/**

View file

@ -82,7 +82,6 @@ module ts.server {
private watchedFiles: WatchedFile[] = [];
private nextFileToCheck = 0;
private watchTimer: NodeJS.Timer;
private static fileDeleted = 34;
// average async stat takes about 30 microseconds
// set chunk size to do 30 files in < 1 millisecond
@ -111,13 +110,7 @@ module ts.server {
fs.stat(watchedFile.fileName,(err, stats) => {
if (err) {
var msg = err.message;
if (err.errno) {
msg += " errno: " + err.errno.toString();
}
if (err.errno == WatchedFileSet.fileDeleted) {
watchedFile.callback(watchedFile.fileName);
}
watchedFile.callback(watchedFile.fileName);
}
else if (watchedFile.mtime.getTime() != stats.mtime.getTime()) {
watchedFile.mtime = WatchedFileSet.getModifiedTime(watchedFile.fileName);

View file

@ -52,30 +52,6 @@ module ts.server {
return 1;
}
}
function sortNavItems(items: ts.NavigateToItem[]) {
return items.sort((a, b) => {
if (a.matchKind < b.matchKind) {
return -1;
}
else if (a.matchKind == b.matchKind) {
var lowa = a.name.toLowerCase();
var lowb = b.name.toLowerCase();
if (lowa < lowb) {
return -1;
}
else if (lowa == lowb) {
return 0;
}
else {
return 1;
}
}
else {
return 1;
}
})
}
function formatDiag(fileName: string, project: Project, diag: ts.Diagnostic) {
return {
@ -122,7 +98,6 @@ module ts.server {
module Errors {
export var NoProject = new Error("No Project.");
export var NoContent = new Error("No Content.");
}
export interface ServerHost extends ts.System {
@ -138,7 +113,18 @@ module ts.server {
changeSeq = 0;
constructor(private host: ServerHost, private logger: Logger) {
this.projectService = new ProjectService(host, logger);
this.projectService =
new ProjectService(host, logger, (eventName,project,fileName) => {
this.handleEvent(eventName, project, fileName);
});
}
handleEvent(eventName: string, project: Project, fileName: string) {
if (eventName == "context") {
this.projectService.log("got context event, updating diagnostics for" + fileName, "Info");
this.updateErrorCheck([{ fileName, project }], this.changeSeq,
(n) => n == this.changeSeq, 100);
}
}
logError(err: Error, cmd: string) {
@ -215,6 +201,14 @@ module ts.server {
this.semanticCheck(file, project);
}
updateProjectStructure(seq: number, matchSeq: (seq: number) => boolean, ms = 1500) {
setTimeout(() => {
if (matchSeq(seq)) {
this.projectService.updateProjectStructure();
}
}, ms);
}
updateErrorCheck(checkList: PendingErrorCheck[], seq: number,
matchSeq: (seq: number) => boolean, ms = 1500, followMs = 200) {
if (followMs > ms) {
@ -231,7 +225,7 @@ module ts.server {
var checkOne = () => {
if (matchSeq(seq)) {
var checkSpec = checkList[index++];
if (checkSpec.project.getSourceFileFromName(checkSpec.fileName)) {
if (checkSpec.project.getSourceFileFromName(checkSpec.fileName, true)) {
this.syntacticCheck(checkSpec.fileName, checkSpec.project);
this.immediateId = setImmediate(() => {
this.semanticCheck(checkSpec.fileName, checkSpec.project);
@ -263,7 +257,7 @@ module ts.server {
var definitions = compilerService.languageService.getDefinitionAtPosition(file, position);
if (!definitions) {
throw Errors.NoContent;
return undefined;
}
return definitions.map(def => ({
@ -284,7 +278,7 @@ module ts.server {
var position = compilerService.host.lineColToPosition(file, line, col);
var renameInfo = compilerService.languageService.getRenameInfo(file, position);
if (!renameInfo) {
throw Errors.NoContent;
return undefined;
}
if (!renameInfo.canRename) {
@ -296,7 +290,7 @@ module ts.server {
var renameLocations = compilerService.languageService.findRenameLocations(file, position, findInStrings, findInComments);
if (!renameLocations) {
throw Errors.NoContent;
return undefined;
}
var bakedRenameLocs = renameLocations.map(location => (<protocol.FileSpan>{
@ -355,12 +349,12 @@ module ts.server {
var references = compilerService.languageService.getReferencesAtPosition(file, position);
if (!references) {
throw Errors.NoContent;
return undefined;
}
var nameInfo = compilerService.languageService.getQuickInfoAtPosition(file, position);
if (!nameInfo) {
throw Errors.NoContent;
return undefined;
}
var displayString = ts.displayPartsToString(nameInfo.displayParts);
@ -404,7 +398,7 @@ module ts.server {
var position = compilerService.host.lineColToPosition(file, line, col);
var quickInfo = compilerService.languageService.getQuickInfoAtPosition(file, position);
if (!quickInfo) {
throw Errors.NoContent;
return undefined;
}
var displayString = ts.displayPartsToString(quickInfo.displayParts);
@ -433,7 +427,7 @@ module ts.server {
// TODO: avoid duplicate code (with formatonkey)
var edits = compilerService.languageService.getFormattingEditsForRange(file, startPosition, endPosition, compilerService.formatCodeOptions);
if (!edits) {
throw Errors.NoContent;
return undefined;
}
return edits.map((edit) => {
@ -473,7 +467,7 @@ module ts.server {
}
if (!edits) {
throw Errors.NoContent;
return undefined;
}
return edits.map((edit) => {
@ -502,7 +496,7 @@ module ts.server {
var completions = compilerService.languageService.getCompletionsAtPosition(file, position);
if (!completions) {
throw Errors.NoContent;
return undefined;
}
return completions.entries.reduce((result: protocol.CompletionEntry[], entry: ts.CompletionEntry) => {
@ -559,6 +553,10 @@ module ts.server {
compilerService.host.editScript(file, start, end, insertString);
this.changeSeq++;
}
// update project structure on idle commented out
// until we can have the host return only the root files
// from getScriptFileNames()
//this.updateProjectStructure(this.changeSeq, (n) => n == this.changeSeq);
}
}
@ -619,13 +617,13 @@ module ts.server {
var compilerService = project.compilerService;
var items = compilerService.languageService.getNavigationBarItems(file);
if (!items) {
throw Errors.NoContent;
return undefined;
}
return this.decorateNavigationBarItem(project, fileName, items);
}
getNavigateToItems(searchTerm: string, fileName: string): protocol.NavtoItem[] {
getNavigateToItems(searchValue: string, fileName: string, maxResultCount?: number): protocol.NavtoItem[] {
var file = ts.normalizePath(fileName);
var project = this.projectService.getProjectForFile(file);
if (!project) {
@ -633,9 +631,9 @@ module ts.server {
}
var compilerService = project.compilerService;
var navItems = sortNavItems(compilerService.languageService.getNavigateToItems(searchTerm));
var navItems = compilerService.languageService.getNavigateToItems(searchValue, maxResultCount);
if (!navItems) {
throw Errors.NoContent;
return undefined;
}
return navItems.map((navItem) => {
@ -677,7 +675,7 @@ module ts.server {
var spans = compilerService.languageService.getBraceMatchingAtPosition(file, position);
if (!spans) {
throw Errors.NoContent;
return undefined;
}
return spans.map(span => ({
@ -690,6 +688,8 @@ module ts.server {
try {
var request = <protocol.Request>JSON.parse(message);
var response: any;
var errorMessage: string;
var responseRequired = true;
switch (request.command) {
case CommandNames.Definition: {
var defArgs = <protocol.FileLocationRequestArgs>request.arguments;
@ -709,6 +709,7 @@ module ts.server {
case CommandNames.Open: {
var openArgs = <protocol.FileRequestArgs>request.arguments;
this.openClientFile(openArgs.file);
responseRequired = false;
break;
}
case CommandNames.Quickinfo: {
@ -740,12 +741,14 @@ module ts.server {
case CommandNames.Geterr: {
var geterrArgs = <protocol.GeterrRequestArgs>request.arguments;
response = this.getDiagnostics(geterrArgs.delay, geterrArgs.files);
responseRequired = false;
break;
}
case CommandNames.Change: {
var changeArgs = <protocol.ChangeRequestArgs>request.arguments;
this.change(changeArgs.line, changeArgs.col, changeArgs.endLine, changeArgs.endCol,
changeArgs.insertString, changeArgs.file);
responseRequired = false;
break;
}
case CommandNames.Reload: {
@ -756,16 +759,18 @@ module ts.server {
case CommandNames.Saveto: {
var savetoArgs = <protocol.SavetoRequestArgs>request.arguments;
this.saveToTmp(savetoArgs.file, savetoArgs.tmpfile);
responseRequired = false;
break;
}
case CommandNames.Close: {
var closeArgs = <protocol.FileRequestArgs>request.arguments;
this.closeClientFile(closeArgs.file);
responseRequired = false;
break;
}
case CommandNames.Navto: {
var navtoArgs = <protocol.NavtoRequestArgs>request.arguments;
response = this.getNavigateToItems(navtoArgs.searchTerm, navtoArgs.file);
response = this.getNavigateToItems(navtoArgs.searchValue, navtoArgs.file, navtoArgs.maxResultCount);
break;
}
case CommandNames.Brace: {
@ -788,6 +793,9 @@ module ts.server {
if (response) {
this.output(response, request.command, request.seq);
}
else if (responseRequired) {
this.output(undefined, request.command, request.seq, "No content available.");
}
} catch (err) {
if (err instanceof OperationCanceledException) {

View file

@ -32,15 +32,7 @@ module ts {
}
function autoCollapse(node: Node) {
switch (node.kind) {
case SyntaxKind.ModuleBlock:
case SyntaxKind.ClassDeclaration:
case SyntaxKind.InterfaceDeclaration:
case SyntaxKind.EnumDeclaration:
return false;
}
return true;
return isFunctionBlock(node) && node.parent.kind !== SyntaxKind.ArrowFunction;
}
var depth = 0;