Merge remote-tracking branch 'origin/master' into importGotoDef
This commit is contained in:
commit
87500959f0
7 changed files with 178 additions and 126 deletions
114
src/lib/es6.d.ts
vendored
114
src/lib/es6.d.ts
vendored
|
@ -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;
|
||||
|
|
|
@ -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]
|
||||
};
|
||||
|
||||
|
|
|
@ -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("-----------------------------------------------");
|
||||
|
|
6
src/server/protocol.d.ts
vendored
6
src/server/protocol.d.ts
vendored
|
@ -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;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue