From fd6676049b43169de948d43f9f912bd5458518cf Mon Sep 17 00:00:00 2001 From: zhengbli Date: Thu, 7 Jul 2016 13:50:11 -0700 Subject: [PATCH 01/24] Avoid putting children tags in jsdoccomment --- src/compiler/parser.ts | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/compiler/parser.ts b/src/compiler/parser.ts index dc2e114977f..e12ff7c87dc 100644 --- a/src/compiler/parser.ts +++ b/src/compiler/parser.ts @@ -6374,6 +6374,9 @@ namespace ts { case SyntaxKind.AtToken: if (canParseTag) { parentTagTerminated = !tryParseChildTag(jsDocTypeLiteral); + if (!parentTagTerminated) { + resumePos = scanner.getStartPos(); + } } seenAsterisk = false; break; From 4721b91527119e7985273f5dc2e904496754c12b Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Fri, 8 Jul 2016 09:26:58 -0700 Subject: [PATCH 02/24] Fix multiple Salsa assignment-declarations Previously, all assignment-declarations needed to be of the same kind: either all `this.p = ...` assignments or `C.prototype.p = ...` assignments. --- src/compiler/checker.ts | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index d6db67d3fa8..8568f8cf4aa 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -3166,17 +3166,17 @@ namespace ts { } let type: Type = undefined; - // Handle module.exports = expr or this.p = expr - if (declaration.kind === SyntaxKind.BinaryExpression) { - type = getUnionType(map(symbol.declarations, (decl: BinaryExpression) => checkExpressionCached(decl.right))); - } - else if (declaration.kind === SyntaxKind.PropertyAccessExpression) { - // Declarations only exist for property access expressions for certain - // special assignment kinds - if (declaration.parent.kind === SyntaxKind.BinaryExpression) { - // Handle exports.p = expr or className.prototype.method = expr - type = checkExpressionCached((declaration.parent).right); - } + // Handle certain special assignment kinds, which happen to union across multiple declarations: + // * module.exports = expr + // * exports.p = expr + // * this.p = expr + // * className.prototype.method = expr + if (declaration.kind === SyntaxKind.BinaryExpression || + declaration.kind === SyntaxKind.PropertyAccessExpression && declaration.parent.kind === SyntaxKind.BinaryExpression) { + type = getUnionType(map(symbol.declarations, + decl => decl.kind === SyntaxKind.BinaryExpression ? + checkExpressionCached((decl).right) : + checkExpressionCached((decl.parent).right))); } if (type === undefined) { From f84b7319110cb08a3778458f83f62e67687ed06b Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Fri, 8 Jul 2016 09:40:54 -0700 Subject: [PATCH 03/24] Test for multiple salsa assignment-declarations --- .../reference/multipleDeclarations.js | 17 +++++++++++ .../reference/multipleDeclarations.symbols | 17 +++++++++++ .../reference/multipleDeclarations.types | 29 +++++++++++++++++++ .../conformance/salsa/multipleDeclarations.ts | 10 +++++++ 4 files changed, 73 insertions(+) create mode 100644 tests/baselines/reference/multipleDeclarations.js create mode 100644 tests/baselines/reference/multipleDeclarations.symbols create mode 100644 tests/baselines/reference/multipleDeclarations.types create mode 100644 tests/cases/conformance/salsa/multipleDeclarations.ts diff --git a/tests/baselines/reference/multipleDeclarations.js b/tests/baselines/reference/multipleDeclarations.js new file mode 100644 index 00000000000..5f5ac29e909 --- /dev/null +++ b/tests/baselines/reference/multipleDeclarations.js @@ -0,0 +1,17 @@ +//// [input.js] + +function C() { + this.m = null; +} +C.prototype.m = function() { + this.nothing(); +}; + + +//// [output.js] +function C() { + this.m = null; +} +C.prototype.m = function () { + this.nothing(); +}; diff --git a/tests/baselines/reference/multipleDeclarations.symbols b/tests/baselines/reference/multipleDeclarations.symbols new file mode 100644 index 00000000000..0c8569ab89e --- /dev/null +++ b/tests/baselines/reference/multipleDeclarations.symbols @@ -0,0 +1,17 @@ +=== tests/cases/conformance/salsa/input.js === + +function C() { +>C : Symbol(C, Decl(input.js, 0, 0)) + + this.m = null; +>m : Symbol(C.m, Decl(input.js, 1, 14), Decl(input.js, 3, 1)) +} +C.prototype.m = function() { +>C.prototype : Symbol(C.m, Decl(input.js, 1, 14), Decl(input.js, 3, 1)) +>C : Symbol(C, Decl(input.js, 0, 0)) +>prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) +>m : Symbol(C.m, Decl(input.js, 1, 14), Decl(input.js, 3, 1)) + + this.nothing(); +}; + diff --git a/tests/baselines/reference/multipleDeclarations.types b/tests/baselines/reference/multipleDeclarations.types new file mode 100644 index 00000000000..7c0a3de70c9 --- /dev/null +++ b/tests/baselines/reference/multipleDeclarations.types @@ -0,0 +1,29 @@ +=== tests/cases/conformance/salsa/input.js === + +function C() { +>C : () => void + + this.m = null; +>this.m = null : null +>this.m : any +>this : any +>m : any +>null : null +} +C.prototype.m = function() { +>C.prototype.m = function() { this.nothing();} : () => void +>C.prototype.m : any +>C.prototype : any +>C : () => void +>prototype : any +>m : any +>function() { this.nothing();} : () => void + + this.nothing(); +>this.nothing() : any +>this.nothing : any +>this : { m: () => void; } +>nothing : any + +}; + diff --git a/tests/cases/conformance/salsa/multipleDeclarations.ts b/tests/cases/conformance/salsa/multipleDeclarations.ts new file mode 100644 index 00000000000..6899be2ec89 --- /dev/null +++ b/tests/cases/conformance/salsa/multipleDeclarations.ts @@ -0,0 +1,10 @@ +// @filename: input.js +// @out: output.js +// @allowJs: true + +function C() { + this.m = null; +} +C.prototype.m = function() { + this.nothing(); +}; From ebc75a251196176ad08ab20d5115e73476668a1a Mon Sep 17 00:00:00 2001 From: zhengbli Date: Thu, 7 Jul 2016 16:27:54 -0700 Subject: [PATCH 04/24] Add test for parsed @typedef tag node shape --- tests/cases/unittests/jsDocParsing.ts | 180 ++++++++++++++++++++++++-- 1 file changed, 171 insertions(+), 9 deletions(-) diff --git a/tests/cases/unittests/jsDocParsing.ts b/tests/cases/unittests/jsDocParsing.ts index fb75b4d4940..e6cf4ffff4f 100644 --- a/tests/cases/unittests/jsDocParsing.ts +++ b/tests/cases/unittests/jsDocParsing.ts @@ -986,7 +986,7 @@ namespace ts { }); describe("DocComments", () => { - function parsesCorrectly(content: string, expected: string) { + function parsesCorrectly(content: string, expected: string | {}) { const comment = parseIsolatedJSDocComment(content); if (!comment) { Debug.fail("Comment failed to parse entirely"); @@ -995,30 +995,46 @@ namespace ts { Debug.fail("Comment has at least one diagnostic: " + comment.diagnostics[0].messageText); } - const result = JSON.stringify(comment.jsDocComment, (k, v) => { - return v && v.pos !== undefined - ? JSON.parse(Utils.sourceFileToJSON(v)) - : v; - }, 4); + const result = toJsonString(comment.jsDocComment); - if (result !== expected) { + const expectedString = typeof expected === "string" + ? expected + : toJsonString(expected); + if (result !== expectedString) { // Turn on a human-readable diff if (typeof require !== "undefined") { const chai = require("chai"); chai.config.showDiff = true; - chai.expect(JSON.parse(result)).equal(JSON.parse(expected)); + // Use deep equal to compare key value data instead of the two objects + chai.expect(JSON.parse(result)).deep.equal(JSON.parse(expectedString)); } else { - assert.equal(result, expected); + assert.equal(result, expectedString); } } } + function toJsonString(obj: {}) { + return JSON.stringify(obj, (k, v) => { + return v && v.pos !== undefined + ? JSON.parse(Utils.sourceFileToJSON(v)) + : v; + }, 4); + } + function parsesIncorrectly(content: string) { const type = parseIsolatedJSDocComment(content); assert.isTrue(!type || type.diagnostics.length > 0); } + function reIndentJSDocComment(jsdocComment: string) { + const result = jsdocComment + .replace(/[\t ]*\/\*\*/, "/**") + .replace(/[\t ]*\*\s?@/g, " * @") + .replace(/[\t ]*\*\s?\//, " */"); + return result; + } + describe("parsesIncorrectly", () => { it("emptyComment", () => { parsesIncorrectly("/***/"); @@ -2216,6 +2232,152 @@ namespace ts { } }`); }); + + it("typedefTagWithChildrenTags", () => { + const content = + `/** + * @typedef People + * @type {Object} + * @property {number} age + * @property {string} name + */`; + const expected = { + "end": 102, + "kind": "JSDocComment", + "pos": 0, + "tags": { + "0": { + "atToken": { + "end": 9, + "kind": "AtToken", + "pos": 8 + }, + "end": 97, + "jsDocTypeLiteral": { + "end": 97, + "jsDocPropertyTags": [ + { + "atToken": { + "end": 48, + "kind": "AtToken", + "pos": 46 + }, + "end": 69, + "kind": "JSDocPropertyTag", + "name": { + "end": 69, + "kind": "Identifier", + "pos": 66, + "text": "age" + }, + "pos": 46, + "tagName": { + "end": 56, + "kind": "Identifier", + "pos": 48, + "text": "property" + }, + "typeExpression": { + "end": 65, + "kind": "JSDocTypeExpression", + "pos": 57, + "type": { + "end": 64, + "kind": "NumberKeyword", + "pos": 58 + } + } + }, + { + "atToken": { + "end": 75, + "kind": "AtToken", + "pos": 73 + }, + "end": 97, + "kind": "JSDocPropertyTag", + "name": { + "end": 97, + "kind": "Identifier", + "pos": 93, + "text": "name" + }, + "pos": 73, + "tagName": { + "end": 83, + "kind": "Identifier", + "pos": 75, + "text": "property" + }, + "typeExpression": { + "end": 92, + "kind": "JSDocTypeExpression", + "pos": 84, + "type": { + "end": 91, + "kind": "StringKeyword", + "pos": 85 + } + } + } + ], + "jsDocTypeTag": { + "atToken": { + "end": 29, + "kind": "AtToken", + "pos": 27 + }, + "end": 42, + "kind": "JSDocTypeTag", + "pos": 27, + "tagName": { + "end": 33, + "kind": "Identifier", + "pos": 29, + "text": "type" + }, + "typeExpression": { + "end": 42, + "kind": "JSDocTypeExpression", + "pos": 34, + "type": { + "end": 41, + "kind": "JSDocTypeReference", + "name": { + "end": 41, + "kind": "Identifier", + "pos": 35, + "text": "Object" + }, + "pos": 35 + } + } + }, + "kind": "JSDocTypeLiteral", + "pos": 23 + }, + "kind": "JSDocTypedefTag", + "name": { + "end": 23, + "kind": "Identifier", + "pos": 17, + "text": "People" + }, + "pos": 8, + "tagName": { + "end": 16, + "kind": "Identifier", + "pos": 9, + "text": "typedef" + } + }, + "end": 97, + "length": 1, + "pos": 8 + } + }; + parsesCorrectly(reIndentJSDocComment(content), expected); + }); }); }); }); From 3c1a69b637e5df598e4db0325a2b80b2e23944a3 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Fri, 8 Jul 2016 12:52:54 -0700 Subject: [PATCH 05/24] Provide a symbol for salsa-inferred class types --- src/compiler/checker.ts | 2 +- .../reference/methodsReturningThis.js | 36 +++++ .../reference/methodsReturningThis.symbols | 101 +++++++++++++ .../reference/methodsReturningThis.types | 133 ++++++++++++++++++ ...turesUseJSDocForOptionalParameters.symbols | 2 + ...naturesUseJSDocForOptionalParameters.types | 18 +-- .../conformance/salsa/methodsReturningThis.ts | 21 +++ 7 files changed, 303 insertions(+), 10 deletions(-) create mode 100644 tests/baselines/reference/methodsReturningThis.js create mode 100644 tests/baselines/reference/methodsReturningThis.symbols create mode 100644 tests/baselines/reference/methodsReturningThis.types create mode 100644 tests/cases/conformance/salsa/methodsReturningThis.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index d6db67d3fa8..04071f5087f 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -11673,7 +11673,7 @@ namespace ts { function getInferredClassType(symbol: Symbol) { const links = getSymbolLinks(symbol); if (!links.inferredClassType) { - links.inferredClassType = createAnonymousType(undefined, symbol.members, emptyArray, emptyArray, /*stringIndexType*/ undefined, /*numberIndexType*/ undefined); + links.inferredClassType = createAnonymousType(symbol, symbol.members, emptyArray, emptyArray, /*stringIndexType*/ undefined, /*numberIndexType*/ undefined); } return links.inferredClassType; } diff --git a/tests/baselines/reference/methodsReturningThis.js b/tests/baselines/reference/methodsReturningThis.js new file mode 100644 index 00000000000..b0ebd84770d --- /dev/null +++ b/tests/baselines/reference/methodsReturningThis.js @@ -0,0 +1,36 @@ +//// [input.js] +function Class() +{ +} + +// error: 'Class' doesn't have property 'notPresent' +Class.prototype.containsError = function () { return this.notPresent; }; + +// lots of methods that return this, which caused out-of-memory in #9527 +Class.prototype.m1 = function (a, b, c, d, tx, ty) { return this; }; +Class.prototype.m2 = function (x, y) { return this; }; +Class.prototype.m3 = function (x, y) { return this; }; +Class.prototype.m4 = function (angle) { return this; }; +Class.prototype.m5 = function (matrix) { return this; }; +Class.prototype.m6 = function (x, y, pivotX, pivotY, scaleX, scaleY, rotation, skewX, skewY) { return this; }; +Class.prototype.m7 = function(matrix) { return this; }; +Class.prototype.m8 = function() { return this; }; +Class.prototype.m9 = function () { return this; }; + + + +//// [output.js] +function Class() { +} +// error: 'Class' doesn't have property 'notPresent' +Class.prototype.containsError = function () { return this.notPresent; }; +// lots of methods that return this, which caused out-of-memory in #9527 +Class.prototype.m1 = function (a, b, c, d, tx, ty) { return this; }; +Class.prototype.m2 = function (x, y) { return this; }; +Class.prototype.m3 = function (x, y) { return this; }; +Class.prototype.m4 = function (angle) { return this; }; +Class.prototype.m5 = function (matrix) { return this; }; +Class.prototype.m6 = function (x, y, pivotX, pivotY, scaleX, scaleY, rotation, skewX, skewY) { return this; }; +Class.prototype.m7 = function (matrix) { return this; }; +Class.prototype.m8 = function () { return this; }; +Class.prototype.m9 = function () { return this; }; diff --git a/tests/baselines/reference/methodsReturningThis.symbols b/tests/baselines/reference/methodsReturningThis.symbols new file mode 100644 index 00000000000..eccb1a64f89 --- /dev/null +++ b/tests/baselines/reference/methodsReturningThis.symbols @@ -0,0 +1,101 @@ +=== tests/cases/conformance/salsa/input.js === +function Class() +>Class : Symbol(Class, Decl(input.js, 0, 0)) +{ +} + +// error: 'Class' doesn't have property 'notPresent' +Class.prototype.containsError = function () { return this.notPresent; }; +>Class.prototype : Symbol(Class.containsError, Decl(input.js, 2, 1)) +>Class : Symbol(Class, Decl(input.js, 0, 0)) +>prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) +>containsError : Symbol(Class.containsError, Decl(input.js, 2, 1)) +>this : Symbol(Class, Decl(input.js, 0, 0)) + +// lots of methods that return this, which caused out-of-memory in #9527 +Class.prototype.m1 = function (a, b, c, d, tx, ty) { return this; }; +>Class.prototype : Symbol(Class.m1, Decl(input.js, 5, 72)) +>Class : Symbol(Class, Decl(input.js, 0, 0)) +>prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) +>m1 : Symbol(Class.m1, Decl(input.js, 5, 72)) +>a : Symbol(a, Decl(input.js, 8, 31)) +>b : Symbol(b, Decl(input.js, 8, 33)) +>c : Symbol(c, Decl(input.js, 8, 36)) +>d : Symbol(d, Decl(input.js, 8, 39)) +>tx : Symbol(tx, Decl(input.js, 8, 42)) +>ty : Symbol(ty, Decl(input.js, 8, 46)) +>this : Symbol(Class, Decl(input.js, 0, 0)) + +Class.prototype.m2 = function (x, y) { return this; }; +>Class.prototype : Symbol(Class.m2, Decl(input.js, 8, 68)) +>Class : Symbol(Class, Decl(input.js, 0, 0)) +>prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) +>m2 : Symbol(Class.m2, Decl(input.js, 8, 68)) +>x : Symbol(x, Decl(input.js, 9, 31)) +>y : Symbol(y, Decl(input.js, 9, 33)) +>this : Symbol(Class, Decl(input.js, 0, 0)) + +Class.prototype.m3 = function (x, y) { return this; }; +>Class.prototype : Symbol(Class.m3, Decl(input.js, 9, 54)) +>Class : Symbol(Class, Decl(input.js, 0, 0)) +>prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) +>m3 : Symbol(Class.m3, Decl(input.js, 9, 54)) +>x : Symbol(x, Decl(input.js, 10, 31)) +>y : Symbol(y, Decl(input.js, 10, 33)) +>this : Symbol(Class, Decl(input.js, 0, 0)) + +Class.prototype.m4 = function (angle) { return this; }; +>Class.prototype : Symbol(Class.m4, Decl(input.js, 10, 54)) +>Class : Symbol(Class, Decl(input.js, 0, 0)) +>prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) +>m4 : Symbol(Class.m4, Decl(input.js, 10, 54)) +>angle : Symbol(angle, Decl(input.js, 11, 31)) +>this : Symbol(Class, Decl(input.js, 0, 0)) + +Class.prototype.m5 = function (matrix) { return this; }; +>Class.prototype : Symbol(Class.m5, Decl(input.js, 11, 55)) +>Class : Symbol(Class, Decl(input.js, 0, 0)) +>prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) +>m5 : Symbol(Class.m5, Decl(input.js, 11, 55)) +>matrix : Symbol(matrix, Decl(input.js, 12, 31)) +>this : Symbol(Class, Decl(input.js, 0, 0)) + +Class.prototype.m6 = function (x, y, pivotX, pivotY, scaleX, scaleY, rotation, skewX, skewY) { return this; }; +>Class.prototype : Symbol(Class.m6, Decl(input.js, 12, 56)) +>Class : Symbol(Class, Decl(input.js, 0, 0)) +>prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) +>m6 : Symbol(Class.m6, Decl(input.js, 12, 56)) +>x : Symbol(x, Decl(input.js, 13, 31)) +>y : Symbol(y, Decl(input.js, 13, 33)) +>pivotX : Symbol(pivotX, Decl(input.js, 13, 36)) +>pivotY : Symbol(pivotY, Decl(input.js, 13, 44)) +>scaleX : Symbol(scaleX, Decl(input.js, 13, 52)) +>scaleY : Symbol(scaleY, Decl(input.js, 13, 60)) +>rotation : Symbol(rotation, Decl(input.js, 13, 68)) +>skewX : Symbol(skewX, Decl(input.js, 13, 78)) +>skewY : Symbol(skewY, Decl(input.js, 13, 85)) +>this : Symbol(Class, Decl(input.js, 0, 0)) + +Class.prototype.m7 = function(matrix) { return this; }; +>Class.prototype : Symbol(Class.m7, Decl(input.js, 13, 110)) +>Class : Symbol(Class, Decl(input.js, 0, 0)) +>prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) +>m7 : Symbol(Class.m7, Decl(input.js, 13, 110)) +>matrix : Symbol(matrix, Decl(input.js, 14, 30)) +>this : Symbol(Class, Decl(input.js, 0, 0)) + +Class.prototype.m8 = function() { return this; }; +>Class.prototype : Symbol(Class.m8, Decl(input.js, 14, 55)) +>Class : Symbol(Class, Decl(input.js, 0, 0)) +>prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) +>m8 : Symbol(Class.m8, Decl(input.js, 14, 55)) +>this : Symbol(Class, Decl(input.js, 0, 0)) + +Class.prototype.m9 = function () { return this; }; +>Class.prototype : Symbol(Class.m9, Decl(input.js, 15, 49)) +>Class : Symbol(Class, Decl(input.js, 0, 0)) +>prototype : Symbol(Function.prototype, Decl(lib.d.ts, --, --)) +>m9 : Symbol(Class.m9, Decl(input.js, 15, 49)) +>this : Symbol(Class, Decl(input.js, 0, 0)) + + diff --git a/tests/baselines/reference/methodsReturningThis.types b/tests/baselines/reference/methodsReturningThis.types new file mode 100644 index 00000000000..5bcaa992a71 --- /dev/null +++ b/tests/baselines/reference/methodsReturningThis.types @@ -0,0 +1,133 @@ +=== tests/cases/conformance/salsa/input.js === +function Class() +>Class : () => void +{ +} + +// error: 'Class' doesn't have property 'notPresent' +Class.prototype.containsError = function () { return this.notPresent; }; +>Class.prototype.containsError = function () { return this.notPresent; } : () => any +>Class.prototype.containsError : any +>Class.prototype : any +>Class : () => void +>prototype : any +>containsError : any +>function () { return this.notPresent; } : () => any +>this.notPresent : any +>this : { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>notPresent : any + +// lots of methods that return this, which caused out-of-memory in #9527 +Class.prototype.m1 = function (a, b, c, d, tx, ty) { return this; }; +>Class.prototype.m1 = function (a, b, c, d, tx, ty) { return this; } : (a: any, b: any, c: any, d: any, tx: any, ty: any) => { containsError: () => any; m1: any; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>Class.prototype.m1 : any +>Class.prototype : any +>Class : () => void +>prototype : any +>m1 : any +>function (a, b, c, d, tx, ty) { return this; } : (a: any, b: any, c: any, d: any, tx: any, ty: any) => { containsError: () => any; m1: any; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>a : any +>b : any +>c : any +>d : any +>tx : any +>ty : any +>this : { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } + +Class.prototype.m2 = function (x, y) { return this; }; +>Class.prototype.m2 = function (x, y) { return this; } : (x: any, y: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: any; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>Class.prototype.m2 : any +>Class.prototype : any +>Class : () => void +>prototype : any +>m2 : any +>function (x, y) { return this; } : (x: any, y: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: any; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>x : any +>y : any +>this : { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } + +Class.prototype.m3 = function (x, y) { return this; }; +>Class.prototype.m3 = function (x, y) { return this; } : (x: any, y: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: any; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>Class.prototype.m3 : any +>Class.prototype : any +>Class : () => void +>prototype : any +>m3 : any +>function (x, y) { return this; } : (x: any, y: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: any; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>x : any +>y : any +>this : { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } + +Class.prototype.m4 = function (angle) { return this; }; +>Class.prototype.m4 = function (angle) { return this; } : (angle: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: any; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>Class.prototype.m4 : any +>Class.prototype : any +>Class : () => void +>prototype : any +>m4 : any +>function (angle) { return this; } : (angle: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: any; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>angle : any +>this : { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } + +Class.prototype.m5 = function (matrix) { return this; }; +>Class.prototype.m5 = function (matrix) { return this; } : (matrix: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: any; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>Class.prototype.m5 : any +>Class.prototype : any +>Class : () => void +>prototype : any +>m5 : any +>function (matrix) { return this; } : (matrix: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: any; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>matrix : any +>this : { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } + +Class.prototype.m6 = function (x, y, pivotX, pivotY, scaleX, scaleY, rotation, skewX, skewY) { return this; }; +>Class.prototype.m6 = function (x, y, pivotX, pivotY, scaleX, scaleY, rotation, skewX, skewY) { return this; } : (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: any; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>Class.prototype.m6 : any +>Class.prototype : any +>Class : () => void +>prototype : any +>m6 : any +>function (x, y, pivotX, pivotY, scaleX, scaleY, rotation, skewX, skewY) { return this; } : (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: any; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } +>x : any +>y : any +>pivotX : any +>pivotY : any +>scaleX : any +>scaleY : any +>rotation : any +>skewX : any +>skewY : any +>this : { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } + +Class.prototype.m7 = function(matrix) { return this; }; +>Class.prototype.m7 = function(matrix) { return this; } : (matrix: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: any; m8: () => typeof Class; m9: () => typeof Class; } +>Class.prototype.m7 : any +>Class.prototype : any +>Class : () => void +>prototype : any +>m7 : any +>function(matrix) { return this; } : (matrix: any) => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: any; m8: () => typeof Class; m9: () => typeof Class; } +>matrix : any +>this : { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } + +Class.prototype.m8 = function() { return this; }; +>Class.prototype.m8 = function() { return this; } : () => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: any; m9: () => typeof Class; } +>Class.prototype.m8 : any +>Class.prototype : any +>Class : () => void +>prototype : any +>m8 : any +>function() { return this; } : () => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: any; m9: () => typeof Class; } +>this : { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } + +Class.prototype.m9 = function () { return this; }; +>Class.prototype.m9 = function () { return this; } : () => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: any; } +>Class.prototype.m9 : any +>Class.prototype : any +>Class : () => void +>prototype : any +>m9 : any +>function () { return this; } : () => { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: any; } +>this : { containsError: () => any; m1: (a: any, b: any, c: any, d: any, tx: any, ty: any) => typeof Class; m2: (x: any, y: any) => typeof Class; m3: (x: any, y: any) => typeof Class; m4: (angle: any) => typeof Class; m5: (matrix: any) => typeof Class; m6: (x: any, y: any, pivotX: any, pivotY: any, scaleX: any, scaleY: any, rotation: any, skewX: any, skewY: any) => typeof Class; m7: (matrix: any) => typeof Class; m8: () => typeof Class; m9: () => typeof Class; } + + diff --git a/tests/baselines/reference/signaturesUseJSDocForOptionalParameters.symbols b/tests/baselines/reference/signaturesUseJSDocForOptionalParameters.symbols index 5ea2756598e..52fc8b9a9a9 100644 --- a/tests/baselines/reference/signaturesUseJSDocForOptionalParameters.symbols +++ b/tests/baselines/reference/signaturesUseJSDocForOptionalParameters.symbols @@ -19,6 +19,8 @@ MyClass.prototype.optionalParam = function(required, notRequired) { >notRequired : Symbol(notRequired, Decl(jsDocOptionality.js, 8, 52)) return this; +>this : Symbol(MyClass, Decl(jsDocOptionality.js, 0, 0)) + }; let pInst = new MyClass(); >pInst : Symbol(pInst, Decl(jsDocOptionality.js, 11, 3)) diff --git a/tests/baselines/reference/signaturesUseJSDocForOptionalParameters.types b/tests/baselines/reference/signaturesUseJSDocForOptionalParameters.types index 2dcaa37b947..48d44bb5406 100644 --- a/tests/baselines/reference/signaturesUseJSDocForOptionalParameters.types +++ b/tests/baselines/reference/signaturesUseJSDocForOptionalParameters.types @@ -26,27 +26,27 @@ MyClass.prototype.optionalParam = function(required, notRequired) { >notRequired : string return this; ->this : { prop: null; optionalParam: (required: string, notRequired?: string) => { prop: null; optionalParam: any; }; } +>this : { prop: null; optionalParam: (required: string, notRequired?: string) => typeof MyClass; } }; let pInst = new MyClass(); ->pInst : { prop: null; optionalParam: (required: string, notRequired?: string) => { prop: null; optionalParam: any; }; } ->new MyClass() : { prop: null; optionalParam: (required: string, notRequired?: string) => { prop: null; optionalParam: any; }; } +>pInst : { prop: null; optionalParam: (required: string, notRequired?: string) => typeof MyClass; } +>new MyClass() : { prop: null; optionalParam: (required: string, notRequired?: string) => typeof MyClass; } >MyClass : () => void let c1 = pInst.optionalParam('hello') ->c1 : { prop: null; optionalParam: (required: string, notRequired?: string) => { prop: null; optionalParam: any; }; } ->pInst.optionalParam('hello') : { prop: null; optionalParam: (required: string, notRequired?: string) => { prop: null; optionalParam: any; }; } +>c1 : { prop: null; optionalParam: (required: string, notRequired?: string) => typeof MyClass; } +>pInst.optionalParam('hello') : { prop: null; optionalParam: (required: string, notRequired?: string) => typeof MyClass; } >pInst.optionalParam : (required: string, notRequired?: string) => { prop: null; optionalParam: any; } ->pInst : { prop: null; optionalParam: (required: string, notRequired?: string) => { prop: null; optionalParam: any; }; } +>pInst : { prop: null; optionalParam: (required: string, notRequired?: string) => typeof MyClass; } >optionalParam : (required: string, notRequired?: string) => { prop: null; optionalParam: any; } >'hello' : string let c2 = pInst.optionalParam('hello', null) ->c2 : { prop: null; optionalParam: (required: string, notRequired?: string) => { prop: null; optionalParam: any; }; } ->pInst.optionalParam('hello', null) : { prop: null; optionalParam: (required: string, notRequired?: string) => { prop: null; optionalParam: any; }; } +>c2 : { prop: null; optionalParam: (required: string, notRequired?: string) => typeof MyClass; } +>pInst.optionalParam('hello', null) : { prop: null; optionalParam: (required: string, notRequired?: string) => typeof MyClass; } >pInst.optionalParam : (required: string, notRequired?: string) => { prop: null; optionalParam: any; } ->pInst : { prop: null; optionalParam: (required: string, notRequired?: string) => { prop: null; optionalParam: any; }; } +>pInst : { prop: null; optionalParam: (required: string, notRequired?: string) => typeof MyClass; } >optionalParam : (required: string, notRequired?: string) => { prop: null; optionalParam: any; } >'hello' : string >null : null diff --git a/tests/cases/conformance/salsa/methodsReturningThis.ts b/tests/cases/conformance/salsa/methodsReturningThis.ts new file mode 100644 index 00000000000..4c9f0d5cd0b --- /dev/null +++ b/tests/cases/conformance/salsa/methodsReturningThis.ts @@ -0,0 +1,21 @@ +// @filename: input.js +// @out: output.js +// @allowJs: true +function Class() +{ +} + +// error: 'Class' doesn't have property 'notPresent' +Class.prototype.containsError = function () { return this.notPresent; }; + +// lots of methods that return this, which caused out-of-memory in #9527 +Class.prototype.m1 = function (a, b, c, d, tx, ty) { return this; }; +Class.prototype.m2 = function (x, y) { return this; }; +Class.prototype.m3 = function (x, y) { return this; }; +Class.prototype.m4 = function (angle) { return this; }; +Class.prototype.m5 = function (matrix) { return this; }; +Class.prototype.m6 = function (x, y, pivotX, pivotY, scaleX, scaleY, rotation, skewX, skewY) { return this; }; +Class.prototype.m7 = function(matrix) { return this; }; +Class.prototype.m8 = function() { return this; }; +Class.prototype.m9 = function () { return this; }; + From b543074861f71653eaef98d812708fe928398817 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Fri, 8 Jul 2016 15:13:32 -0700 Subject: [PATCH 06/24] Compile with --noImplicitThis 1. Add to various tsconfig.json 2. Add to Jakefile 3. Add annotations where needed. 4. Add workaround to shims.ts, which uses toplevel `this`. --- Jakefile.js | 2 +- src/compiler/core.ts | 6 +++--- src/compiler/program.ts | 2 +- src/compiler/sys.ts | 4 ++-- src/compiler/tsconfig.json | 1 + src/server/editorServices.ts | 2 +- src/server/tsconfig.json | 1 + src/services/shims.ts | 2 +- src/services/tsconfig.json | 1 + 9 files changed, 12 insertions(+), 9 deletions(-) diff --git a/Jakefile.js b/Jakefile.js index 828f4b084d1..0dd589f90e3 100644 --- a/Jakefile.js +++ b/Jakefile.js @@ -284,7 +284,7 @@ var builtLocalCompiler = path.join(builtLocalDirectory, compilerFilename); function compileFile(outFile, sources, prereqs, prefixes, useBuiltCompiler, opts, callback) { file(outFile, prereqs, function() { var compilerPath = useBuiltCompiler ? builtLocalCompiler : LKGCompiler; - var options = "--noImplicitAny --noEmitOnError --types --pretty"; + var options = "--noImplicitAny --noImplicitThis --noEmitOnError --types --pretty"; opts = opts || {}; // Keep comments when specifically requested // or when in debug mode. diff --git a/src/compiler/core.ts b/src/compiler/core.ts index fe4731a1c91..cc6a9e6db9a 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -1237,20 +1237,20 @@ namespace ts { getSignatureConstructor(): new (checker: TypeChecker) => Signature; } - function Symbol(flags: SymbolFlags, name: string) { + function Symbol(this: Symbol, flags: SymbolFlags, name: string) { this.flags = flags; this.name = name; this.declarations = undefined; } - function Type(checker: TypeChecker, flags: TypeFlags) { + function Type(this: Type, checker: TypeChecker, flags: TypeFlags) { this.flags = flags; } function Signature(checker: TypeChecker) { } - function Node(kind: SyntaxKind, pos: number, end: number) { + function Node(this: Node, kind: SyntaxKind, pos: number, end: number) { this.kind = kind; this.pos = pos; this.end = end; diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 2e4492efa7b..31332a92b0a 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -1398,7 +1398,7 @@ namespace ts { return noDiagnosticsTypeChecker || (noDiagnosticsTypeChecker = createTypeChecker(program, /*produceDiagnostics:*/ false)); } - function emit(sourceFile?: SourceFile, writeFileCallback?: WriteFileCallback, cancellationToken?: CancellationToken): EmitResult { + function emit(this: Program, sourceFile?: SourceFile, writeFileCallback?: WriteFileCallback, cancellationToken?: CancellationToken): EmitResult { return runWithCancellationToken(() => emitWorker(this, sourceFile, writeFileCallback, cancellationToken)); } diff --git a/src/compiler/sys.ts b/src/compiler/sys.ts index 338b6de1e63..5000be8a0ca 100644 --- a/src/compiler/sys.ts +++ b/src/compiler/sys.ts @@ -200,7 +200,7 @@ namespace ts { directoryExists(path: string) { return fso.FolderExists(path); }, - createDirectory(directoryName: string) { + createDirectory(this: System, directoryName: string) { if (!this.directoryExists(directoryName)) { fso.CreateFolder(directoryName); } @@ -500,7 +500,7 @@ namespace ts { }, fileExists, directoryExists, - createDirectory(directoryName: string) { + createDirectory(this: System, directoryName: string) { if (!this.directoryExists(directoryName)) { _fs.mkdirSync(directoryName); } diff --git a/src/compiler/tsconfig.json b/src/compiler/tsconfig.json index 76308c2cba4..5418ca1abe7 100644 --- a/src/compiler/tsconfig.json +++ b/src/compiler/tsconfig.json @@ -1,6 +1,7 @@ { "compilerOptions": { "noImplicitAny": true, + "noImplicitThis": true, "removeComments": true, "preserveConstEnums": true, "outFile": "../../built/local/tsc.js", diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index 6a2beccc243..fc2131d0922 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -2081,7 +2081,7 @@ namespace ts.server { const walkFns = { goSubtree: true, done: false, - leaf: function (relativeStart: number, relativeLength: number, ll: LineLeaf) { + leaf: function (this: ILineIndexWalker, relativeStart: number, relativeLength: number, ll: LineLeaf) { if (!f(ll, relativeStart, relativeLength)) { this.done = true; } diff --git a/src/server/tsconfig.json b/src/server/tsconfig.json index 0a8cfb89ab3..57c54b47ad8 100644 --- a/src/server/tsconfig.json +++ b/src/server/tsconfig.json @@ -1,6 +1,7 @@ { "compilerOptions": { "noImplicitAny": true, + "noImplicitThis": true, "removeComments": true, "preserveConstEnums": true, "out": "../../built/local/tsserver.js", diff --git a/src/services/shims.ts b/src/services/shims.ts index e8b9b59b3cd..e85bf537d30 100644 --- a/src/services/shims.ts +++ b/src/services/shims.ts @@ -16,7 +16,7 @@ /// /* @internal */ -let debugObjectHost = (this); +let debugObjectHost = new Function("return this")(); // We need to use 'null' to interface with the managed side. /* tslint:disable:no-null-keyword */ diff --git a/src/services/tsconfig.json b/src/services/tsconfig.json index 4bf6e87d7a6..26903bf28ec 100644 --- a/src/services/tsconfig.json +++ b/src/services/tsconfig.json @@ -1,6 +1,7 @@ { "compilerOptions": { "noImplicitAny": true, + "noImplicitThis": true, "removeComments": false, "preserveConstEnums": true, "outFile": "../../built/local/typescriptServices.js", From 37eac5fb7f9d2484cfef3ae344d91aa622b9aa86 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Sat, 9 Jul 2016 23:35:58 -0700 Subject: [PATCH 07/24] Update .mailmap --- .gitignore | 1 + .mailmap | 1 + 2 files changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index bbb2e62c8bc..fc901fbb7a4 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,7 @@ tests/baselines/reference/projectOutput/* tests/baselines/local/projectOutput/* tests/services/baselines/prototyping/local/* tests/services/browser/typescriptServices.js +scripts/authors.js scripts/configureNightly.js scripts/processDiagnosticMessages.d.ts scripts/processDiagnosticMessages.js diff --git a/.mailmap b/.mailmap index 03c21f2cf91..e66f669b8ee 100644 --- a/.mailmap +++ b/.mailmap @@ -125,6 +125,7 @@ Stan Thomas Stanislav Sysoev Steve Lucco steveluc Tarik # Tarik Ozket +Tetsuharu OHZEKI # Tetsuharu Ohzeki Tien Nguyen tien unknown #Tien Hoanhtien Tim Perry Tim Viiding-Spader From ca874bdd17c0c5e5e8b70c0db7bb847e2711b8f3 Mon Sep 17 00:00:00 2001 From: Bill Ticehurst Date: Sun, 10 Jul 2016 16:11:42 -0700 Subject: [PATCH 08/24] Fix module tracking --- src/compiler/program.ts | 37 ++++++++++++++++++++++++++----------- 1 file changed, 26 insertions(+), 11 deletions(-) diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 2e4492efa7b..5d636847045 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -1095,13 +1095,13 @@ namespace ts { // As all these operations happen - and are nested - within the createProgram call, they close over the below variables. // The current resolution depth is tracked by incrementing/decrementing as the depth first search progresses. const maxNodeModulesJsDepth = typeof options.maxNodeModuleJsDepth === "number" ? options.maxNodeModuleJsDepth : 2; - let currentNodeModulesJsDepth = 0; + let currentNodeModulesDepth = 0; // If a module has some of its imports skipped due to being at the depth limit under node_modules, then track // this, as it may be imported at a shallower depth later, and then it will need its skipped imports processed. const modulesWithElidedImports: Map = {}; - // Track source files that are JavaScript files found by searching under node_modules, as these shouldn't be compiled. + // Track source files that are source files found by searching under node_modules, as these shouldn't be compiled. const sourceFilesFoundSearchingNodeModules: Map = {}; const start = new Date().getTime(); @@ -1918,9 +1918,20 @@ namespace ts { reportFileNamesDifferOnlyInCasingError(fileName, file.fileName, refFile, refPos, refEnd); } + // If the file was previously found via a node_modules search, but is now being processed as a root file, + // then everything it sucks in may also be marked incorrectly, and needs to be checked again. + if (file && lookUp(sourceFilesFoundSearchingNodeModules, file.path) && currentNodeModulesDepth == 0) { + if (!options.noResolve) { + processReferencedFiles(file, getDirectoryPath(fileName), isDefaultLib); + processTypeReferenceDirectives(file); + } + + modulesWithElidedImports[file.path] = false; + processImportedModules(file, getDirectoryPath(fileName)); + } // See if we need to reprocess the imports due to prior skipped imports - if (file && lookUp(modulesWithElidedImports, file.path)) { - if (currentNodeModulesJsDepth < maxNodeModulesJsDepth) { + else if (file && lookUp(modulesWithElidedImports, file.path)) { + if (currentNodeModulesDepth < maxNodeModulesJsDepth) { modulesWithElidedImports[file.path] = false; processImportedModules(file, getDirectoryPath(fileName)); } @@ -2075,13 +2086,17 @@ namespace ts { const isJsFileFromNodeModules = isFromNodeModulesSearch && hasJavaScriptFileExtension(resolution.resolvedFileName); if (isFromNodeModulesSearch) { - sourceFilesFoundSearchingNodeModules[resolvedPath] = true; - } - if (isJsFileFromNodeModules) { - currentNodeModulesJsDepth++; + currentNodeModulesDepth++; } - const elideImport = isJsFileFromNodeModules && currentNodeModulesJsDepth > maxNodeModulesJsDepth; + if (currentNodeModulesDepth > 0) { + // If its already present with false, its a root file also. Don't override this. + if (!hasProperty(sourceFilesFoundSearchingNodeModules, resolvedPath)) { + sourceFilesFoundSearchingNodeModules[resolvedPath] = true; + } + } + + const elideImport = isJsFileFromNodeModules && currentNodeModulesDepth > maxNodeModulesJsDepth; const shouldAddFile = resolution && !options.noResolve && i < file.imports.length && !elideImport; if (elideImport) { @@ -2096,8 +2111,8 @@ namespace ts { file.imports[i].end); } - if (isJsFileFromNodeModules) { - currentNodeModulesJsDepth--; + if (isFromNodeModulesSearch) { + currentNodeModulesDepth--; } } } From db54bda17b86e3a81f2d45e57e4fca732d66725b Mon Sep 17 00:00:00 2001 From: Bill Ticehurst Date: Sun, 10 Jul 2016 16:38:21 -0700 Subject: [PATCH 09/24] Updated test with relative import --- .../amd/maxDepthExceeded/root.js | 1 + .../amd/nodeModulesMaxDepthExceeded.errors.txt | 13 ++++++++++++- .../amd/nodeModulesMaxDepthExceeded.json | 1 + .../node/maxDepthExceeded/root.js | 1 + .../node/nodeModulesMaxDepthExceeded.errors.txt | 13 ++++++++++++- .../node/nodeModulesMaxDepthExceeded.json | 1 + .../maxDepthExceeded/node_modules/m1/index.js | 3 +++ .../maxDepthExceeded/node_modules/m1/relative.js | 1 + .../NodeModulesSearch/maxDepthExceeded/root.ts | 2 ++ 9 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m1/relative.js diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/root.js b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/root.js index 73cef6fc02c..5a3916f07d1 100644 --- a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/root.js +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/root.js @@ -2,5 +2,6 @@ define(["require", "exports", "m1"], function (require, exports, m1) { "use strict"; m1.f1("test"); m1.f2.a = "10"; // Error: Should be number + m1.rel = 42; // Error: Should be boolean m1.f2.person.age = "10"; // OK if stopped at 2 modules: person will be "any". }); diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.errors.txt b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.errors.txt index f03b958275b..52c3611ceda 100644 --- a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.errors.txt +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.errors.txt @@ -1,4 +1,5 @@ maxDepthExceeded/root.ts(3,1): error TS2322: Type 'string' is not assignable to type 'number'. +maxDepthExceeded/root.ts(4,1): error TS2322: Type 'number' is not assignable to type 'boolean'. ==== entry.js (0 errors) ==== @@ -10,8 +11,12 @@ maxDepthExceeded/root.ts(3,1): error TS2322: Type 'string' is not assignable to "person": m3.person }; +==== relative.js (0 errors) ==== + exports.relativeProp = true; + ==== index.js (0 errors) ==== var m2 = require('m2'); + var rel = require('./relative'); /** * @param {string} p1 The first param @@ -22,11 +27,17 @@ maxDepthExceeded/root.ts(3,1): error TS2322: Type 'string' is not assignable to exports.f2 = m2; -==== maxDepthExceeded/root.ts (1 errors) ==== + exports.rel = rel.relativeProp; + +==== maxDepthExceeded/root.ts (2 errors) ==== import * as m1 from "m1"; m1.f1("test"); m1.f2.a = "10"; // Error: Should be number ~~~~~~~ !!! error TS2322: Type 'string' is not assignable to type 'number'. + m1.rel = 42; // Error: Should be boolean + ~~~~~~ +!!! error TS2322: Type 'number' is not assignable to type 'boolean'. + m1.f2.person.age = "10"; // OK if stopped at 2 modules: person will be "any". \ No newline at end of file diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.json b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.json index 80a0a0fb93d..a4ac37bb2a3 100644 --- a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.json +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.json @@ -8,6 +8,7 @@ "resolvedInputFiles": [ "lib.d.ts", "maxDepthExceeded/node_modules/m2/entry.js", + "maxDepthExceeded/node_modules/m1/relative.js", "maxDepthExceeded/node_modules/m1/index.js", "maxDepthExceeded/root.ts" ], diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/root.js b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/root.js index 28f91fb9b91..fb4faf236b2 100644 --- a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/root.js +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/root.js @@ -2,4 +2,5 @@ var m1 = require("m1"); m1.f1("test"); m1.f2.a = "10"; // Error: Should be number +m1.rel = 42; // Error: Should be boolean m1.f2.person.age = "10"; // OK if stopped at 2 modules: person will be "any". diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.errors.txt b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.errors.txt index f03b958275b..52c3611ceda 100644 --- a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.errors.txt +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.errors.txt @@ -1,4 +1,5 @@ maxDepthExceeded/root.ts(3,1): error TS2322: Type 'string' is not assignable to type 'number'. +maxDepthExceeded/root.ts(4,1): error TS2322: Type 'number' is not assignable to type 'boolean'. ==== entry.js (0 errors) ==== @@ -10,8 +11,12 @@ maxDepthExceeded/root.ts(3,1): error TS2322: Type 'string' is not assignable to "person": m3.person }; +==== relative.js (0 errors) ==== + exports.relativeProp = true; + ==== index.js (0 errors) ==== var m2 = require('m2'); + var rel = require('./relative'); /** * @param {string} p1 The first param @@ -22,11 +27,17 @@ maxDepthExceeded/root.ts(3,1): error TS2322: Type 'string' is not assignable to exports.f2 = m2; -==== maxDepthExceeded/root.ts (1 errors) ==== + exports.rel = rel.relativeProp; + +==== maxDepthExceeded/root.ts (2 errors) ==== import * as m1 from "m1"; m1.f1("test"); m1.f2.a = "10"; // Error: Should be number ~~~~~~~ !!! error TS2322: Type 'string' is not assignable to type 'number'. + m1.rel = 42; // Error: Should be boolean + ~~~~~~ +!!! error TS2322: Type 'number' is not assignable to type 'boolean'. + m1.f2.person.age = "10"; // OK if stopped at 2 modules: person will be "any". \ No newline at end of file diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.json b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.json index 80a0a0fb93d..a4ac37bb2a3 100644 --- a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.json +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.json @@ -8,6 +8,7 @@ "resolvedInputFiles": [ "lib.d.ts", "maxDepthExceeded/node_modules/m2/entry.js", + "maxDepthExceeded/node_modules/m1/relative.js", "maxDepthExceeded/node_modules/m1/index.js", "maxDepthExceeded/root.ts" ], diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m1/index.js b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m1/index.js index 7ff454a2402..0433199ffd5 100644 --- a/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m1/index.js +++ b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m1/index.js @@ -1,4 +1,5 @@ var m2 = require('m2'); +var rel = require('./relative'); /** * @param {string} p1 The first param @@ -8,3 +9,5 @@ exports.f1 = function(p1) { }; exports.f2 = m2; + +exports.rel = rel.relativeProp; diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m1/relative.js b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m1/relative.js new file mode 100644 index 00000000000..8b051584b85 --- /dev/null +++ b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/node_modules/m1/relative.js @@ -0,0 +1 @@ +exports.relativeProp = true; diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/root.ts b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/root.ts index 62604408648..f847ea6048a 100644 --- a/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/root.ts +++ b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/root.ts @@ -1,4 +1,6 @@ import * as m1 from "m1"; m1.f1("test"); m1.f2.a = "10"; // Error: Should be number +m1.rel = 42; // Error: Should be boolean + m1.f2.person.age = "10"; // OK if stopped at 2 modules: person will be "any". From 2ab1143f1cb694f43cd2622fc3fddbbe304a805b Mon Sep 17 00:00:00 2001 From: Bill Ticehurst Date: Sun, 10 Jul 2016 20:54:07 -0700 Subject: [PATCH 10/24] Fixed the node tracking and a harness bug --- src/compiler/program.ts | 2 ++ src/harness/projectsRunner.ts | 28 +++++++++++++------ .../moduleAugmentationInDependency2.js | 2 ++ tests/baselines/reference/nodeResolution6.js | 2 -- tests/baselines/reference/nodeResolution8.js | 2 -- .../pathMappingBasedModuleResolution5_node.js | 3 ++ .../amd/maxDepthExceeded/{ => built}/root.js | 0 .../nodeModulesMaxDepthExceeded.errors.txt | 2 +- .../amd/nodeModulesMaxDepthExceeded.json | 4 ++- .../node/maxDepthExceeded/{ => built}/root.js | 0 .../nodeModulesMaxDepthExceeded.errors.txt | 2 +- .../node/nodeModulesMaxDepthExceeded.json | 4 ++- .../maxDepthExceeded/tsconfig.json | 8 ++++-- 13 files changed, 40 insertions(+), 19 deletions(-) rename tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/{ => built}/root.js (100%) rename tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/{ => built}/root.js (100%) diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 5d636847045..57bb3d6ae42 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -1921,6 +1921,7 @@ namespace ts { // If the file was previously found via a node_modules search, but is now being processed as a root file, // then everything it sucks in may also be marked incorrectly, and needs to be checked again. if (file && lookUp(sourceFilesFoundSearchingNodeModules, file.path) && currentNodeModulesDepth == 0) { + sourceFilesFoundSearchingNodeModules[file.path] = false; if (!options.noResolve) { processReferencedFiles(file, getDirectoryPath(fileName), isDefaultLib); processTypeReferenceDirectives(file); @@ -1953,6 +1954,7 @@ namespace ts { filesByName.set(path, file); if (file) { + sourceFilesFoundSearchingNodeModules[path] = (currentNodeModulesDepth > 0); file.path = path; if (host.useCaseSensitiveFileNames()) { diff --git a/src/harness/projectsRunner.ts b/src/harness/projectsRunner.ts index fb92ff4dfab..4baf423a7ba 100644 --- a/src/harness/projectsRunner.ts +++ b/src/harness/projectsRunner.ts @@ -479,17 +479,27 @@ class ProjectRunner extends RunnerBase { it("Baseline of emitted result (" + moduleNameToString(moduleKind) + "): " + testCaseFileName, () => { if (testCase.baselineCheck) { + let errs = []; ts.forEach(compilerResult.outputFiles, outputFile => { - - Harness.Baseline.runBaseline("Baseline of emitted result (" + moduleNameToString(compilerResult.moduleKind) + "): " + testCaseFileName, getBaselineFolder(compilerResult.moduleKind) + outputFile.fileName, () => { - try { - return Harness.IO.readFile(getProjectOutputFolder(outputFile.fileName, compilerResult.moduleKind)); - } - catch (e) { - return undefined; - } - }); + // There may be multiple files with different baselines. Run all and report at the end, else + // it stops copying the remaining emitted files from 'local/projectOutput' to 'local/project'. + try { + Harness.Baseline.runBaseline("Baseline of emitted result (" + moduleNameToString(compilerResult.moduleKind) + "): " + testCaseFileName, getBaselineFolder(compilerResult.moduleKind) + outputFile.fileName, () => { + try { + return Harness.IO.readFile(getProjectOutputFolder(outputFile.fileName, compilerResult.moduleKind)); + } + catch (e) { + return undefined; + } + }); + } + catch (e) { + errs.push(e); + } }); + if (errs.length) { + throw Error(errs.join("\n ")); + } } }); diff --git a/tests/baselines/reference/moduleAugmentationInDependency2.js b/tests/baselines/reference/moduleAugmentationInDependency2.js index 0a5d83695a3..381f1e72d8f 100644 --- a/tests/baselines/reference/moduleAugmentationInDependency2.js +++ b/tests/baselines/reference/moduleAugmentationInDependency2.js @@ -8,6 +8,8 @@ export {}; //// [app.ts] import "A" +//// [index.js] +"use strict"; //// [app.js] "use strict"; require("A"); diff --git a/tests/baselines/reference/nodeResolution6.js b/tests/baselines/reference/nodeResolution6.js index 58a9b907250..196e8ae57cf 100644 --- a/tests/baselines/reference/nodeResolution6.js +++ b/tests/baselines/reference/nodeResolution6.js @@ -13,7 +13,5 @@ export declare var y; import y = require("a"); -//// [ref.js] -var x = 1; //// [b.js] "use strict"; diff --git a/tests/baselines/reference/nodeResolution8.js b/tests/baselines/reference/nodeResolution8.js index 36b53eec553..1d90399ff70 100644 --- a/tests/baselines/reference/nodeResolution8.js +++ b/tests/baselines/reference/nodeResolution8.js @@ -12,7 +12,5 @@ export declare var y; //// [b.ts] import y = require("a"); -//// [ref.js] -var x = 1; //// [b.js] "use strict"; diff --git a/tests/baselines/reference/pathMappingBasedModuleResolution5_node.js b/tests/baselines/reference/pathMappingBasedModuleResolution5_node.js index e4440299cc7..1958800f918 100644 --- a/tests/baselines/reference/pathMappingBasedModuleResolution5_node.js +++ b/tests/baselines/reference/pathMappingBasedModuleResolution5_node.js @@ -31,6 +31,9 @@ exports.x = 1; //// [file2.js] "use strict"; exports.y = 1; +//// [file4.js] +"use strict"; +exports.z1 = 1; //// [file1.js] "use strict"; var file1_1 = require("folder2/file1"); diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/root.js b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/root.js similarity index 100% rename from tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/root.js rename to tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/root.js diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.errors.txt b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.errors.txt index 52c3611ceda..7099c05d577 100644 --- a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.errors.txt +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.errors.txt @@ -14,7 +14,7 @@ maxDepthExceeded/root.ts(4,1): error TS2322: Type 'number' is not assignable to ==== relative.js (0 errors) ==== exports.relativeProp = true; -==== index.js (0 errors) ==== +==== maxDepthExceeded/node_modules/m1/index.js (0 errors) ==== var m2 = require('m2'); var rel = require('./relative'); diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.json b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.json index a4ac37bb2a3..86e856dc7b8 100644 --- a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.json +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/nodeModulesMaxDepthExceeded.json @@ -13,6 +13,8 @@ "maxDepthExceeded/root.ts" ], "emittedFiles": [ - "maxDepthExceeded/root.js" + "maxDepthExceeded/built/node_modules/m1/relative.js", + "maxDepthExceeded/built/node_modules/m1/index.js", + "maxDepthExceeded/built/root.js" ] } \ No newline at end of file diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/root.js b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/root.js similarity index 100% rename from tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/root.js rename to tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/root.js diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.errors.txt b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.errors.txt index 52c3611ceda..7099c05d577 100644 --- a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.errors.txt +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.errors.txt @@ -14,7 +14,7 @@ maxDepthExceeded/root.ts(4,1): error TS2322: Type 'number' is not assignable to ==== relative.js (0 errors) ==== exports.relativeProp = true; -==== index.js (0 errors) ==== +==== maxDepthExceeded/node_modules/m1/index.js (0 errors) ==== var m2 = require('m2'); var rel = require('./relative'); diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.json b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.json index a4ac37bb2a3..86e856dc7b8 100644 --- a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.json +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/nodeModulesMaxDepthExceeded.json @@ -13,6 +13,8 @@ "maxDepthExceeded/root.ts" ], "emittedFiles": [ - "maxDepthExceeded/root.js" + "maxDepthExceeded/built/node_modules/m1/relative.js", + "maxDepthExceeded/built/node_modules/m1/index.js", + "maxDepthExceeded/built/root.js" ] } \ No newline at end of file diff --git a/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/tsconfig.json b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/tsconfig.json index 0aafe67d688..52633bb5a98 100644 --- a/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/tsconfig.json +++ b/tests/cases/projects/NodeModulesSearch/maxDepthExceeded/tsconfig.json @@ -1,5 +1,9 @@ { "compilerOptions": { - "allowJs": true - } + "allowJs": true, + "maxNodeModuleJsDepth": 1, // Note: Module m1 is already included as a root file + "outDir": "built" + }, + "include": ["**/*"], + "exclude": ["node_modules/m2/**/*"] } From a7467a1d2b5795a1bae38885ee5127cce37a9682 Mon Sep 17 00:00:00 2001 From: Bill Ticehurst Date: Sun, 10 Jul 2016 21:40:38 -0700 Subject: [PATCH 11/24] fixed lint error --- src/harness/projectsRunner.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/harness/projectsRunner.ts b/src/harness/projectsRunner.ts index 4baf423a7ba..083f7a7bf39 100644 --- a/src/harness/projectsRunner.ts +++ b/src/harness/projectsRunner.ts @@ -479,7 +479,7 @@ class ProjectRunner extends RunnerBase { it("Baseline of emitted result (" + moduleNameToString(moduleKind) + "): " + testCaseFileName, () => { if (testCase.baselineCheck) { - let errs = []; + const errs = []; ts.forEach(compilerResult.outputFiles, outputFile => { // There may be multiple files with different baselines. Run all and report at the end, else // it stops copying the remaining emitted files from 'local/projectOutput' to 'local/project'. From b75053cae3733d0c402a36fab0d7fd2366ed9dc8 Mon Sep 17 00:00:00 2001 From: Bill Ticehurst Date: Sun, 10 Jul 2016 21:49:13 -0700 Subject: [PATCH 12/24] Fixed implicit any --- src/harness/projectsRunner.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/harness/projectsRunner.ts b/src/harness/projectsRunner.ts index 083f7a7bf39..cf3c78d8859 100644 --- a/src/harness/projectsRunner.ts +++ b/src/harness/projectsRunner.ts @@ -479,7 +479,7 @@ class ProjectRunner extends RunnerBase { it("Baseline of emitted result (" + moduleNameToString(moduleKind) + "): " + testCaseFileName, () => { if (testCase.baselineCheck) { - const errs = []; + const errs: Error[] = []; ts.forEach(compilerResult.outputFiles, outputFile => { // There may be multiple files with different baselines. Run all and report at the end, else // it stops copying the remaining emitted files from 'local/projectOutput' to 'local/project'. From 97025d026da460bd7dd76b2f175813fde2791f34 Mon Sep 17 00:00:00 2001 From: Bill Ticehurst Date: Sun, 10 Jul 2016 22:25:31 -0700 Subject: [PATCH 13/24] Added missing test files --- .gitignore | 1 + .../maxDepthExceeded/built/node_modules/m1/index.js | 10 ++++++++++ .../maxDepthExceeded/built/node_modules/m1/relative.js | 1 + .../maxDepthExceeded/built/node_modules/m1/index.js | 10 ++++++++++ .../maxDepthExceeded/built/node_modules/m1/relative.js | 1 + 5 files changed, 23 insertions(+) create mode 100644 tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/node_modules/m1/index.js create mode 100644 tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/node_modules/m1/relative.js create mode 100644 tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/node_modules/m1/index.js create mode 100644 tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/node_modules/m1/relative.js diff --git a/.gitignore b/.gitignore index fc901fbb7a4..0badfe0cf61 100644 --- a/.gitignore +++ b/.gitignore @@ -51,3 +51,4 @@ internal/ !**/.vscode/tasks.json !tests/cases/projects/projectOption/**/node_modules !tests/cases/projects/NodeModulesSearch/**/* +!tests/baselines/reference/project/nodeModules*/**/* diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/node_modules/m1/index.js b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/node_modules/m1/index.js new file mode 100644 index 00000000000..46d38afba6f --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/node_modules/m1/index.js @@ -0,0 +1,10 @@ +var m2 = require('m2'); +var rel = require('./relative'); +/** + * @param {string} p1 The first param + */ +exports.f1 = function (p1) { + return 42; +}; +exports.f2 = m2; +exports.rel = rel.relativeProp; diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/node_modules/m1/relative.js b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/node_modules/m1/relative.js new file mode 100644 index 00000000000..13432076541 --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/amd/maxDepthExceeded/built/node_modules/m1/relative.js @@ -0,0 +1 @@ +exports.relativeProp = true; diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/node_modules/m1/index.js b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/node_modules/m1/index.js new file mode 100644 index 00000000000..46d38afba6f --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/node_modules/m1/index.js @@ -0,0 +1,10 @@ +var m2 = require('m2'); +var rel = require('./relative'); +/** + * @param {string} p1 The first param + */ +exports.f1 = function (p1) { + return 42; +}; +exports.f2 = m2; +exports.rel = rel.relativeProp; diff --git a/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/node_modules/m1/relative.js b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/node_modules/m1/relative.js new file mode 100644 index 00000000000..13432076541 --- /dev/null +++ b/tests/baselines/reference/project/nodeModulesMaxDepthExceeded/node/maxDepthExceeded/built/node_modules/m1/relative.js @@ -0,0 +1 @@ +exports.relativeProp = true; From 21bf801c6cd98063ebcbd7439a49c1152717188f Mon Sep 17 00:00:00 2001 From: Bill Ticehurst Date: Sun, 10 Jul 2016 23:07:45 -0700 Subject: [PATCH 14/24] Removed duplicate logic --- src/compiler/program.ts | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 57bb3d6ae42..670d30b7d33 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -2091,13 +2091,6 @@ namespace ts { currentNodeModulesDepth++; } - if (currentNodeModulesDepth > 0) { - // If its already present with false, its a root file also. Don't override this. - if (!hasProperty(sourceFilesFoundSearchingNodeModules, resolvedPath)) { - sourceFilesFoundSearchingNodeModules[resolvedPath] = true; - } - } - const elideImport = isJsFileFromNodeModules && currentNodeModulesDepth > maxNodeModulesJsDepth; const shouldAddFile = resolution && !options.noResolve && i < file.imports.length && !elideImport; From cf15e825ee012cce09cff590510df7e0227b30d1 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 11 Jul 2016 09:30:58 -0700 Subject: [PATCH 15/24] Fix `this` in harness and improve gulpfile defaults --- Gulpfile.ts | 3 +++ src/harness/harness.ts | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/Gulpfile.ts b/Gulpfile.ts index 6f63fc23587..739fc0d3720 100644 --- a/Gulpfile.ts +++ b/Gulpfile.ts @@ -306,6 +306,9 @@ function needsUpdate(source: string | string[], dest: string | string[]): boolea function getCompilerSettings(base: tsc.Settings, useBuiltCompiler?: boolean): tsc.Settings { const copy: tsc.Settings = {}; + // TODO: Add --noImplicitThis --types --pretty when gulp-typescript adds support for them + copy.noImplicitAny = true; + copy.noEmitOnError = true; for (const key in base) { copy[key] = base[key]; } diff --git a/src/harness/harness.ts b/src/harness/harness.ts index 1977d95492c..985d00bcf63 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -127,7 +127,7 @@ namespace Utils { export function memoize(f: T): T { const cache: { [idx: string]: any } = {}; - return (function() { + return (function(this: any) { const key = Array.prototype.join.call(arguments); const cachedResult = cache[key]; if (cachedResult) { From 6d21cf6434fcb7009433928878911d5fac0d56eb Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 11 Jul 2016 10:32:35 -0700 Subject: [PATCH 16/24] Add more default options to gulpfile --- Gulpfile.ts | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/Gulpfile.ts b/Gulpfile.ts index 739fc0d3720..f0757c89bba 100644 --- a/Gulpfile.ts +++ b/Gulpfile.ts @@ -11,8 +11,11 @@ import newer = require("gulp-newer"); import tsc = require("gulp-typescript"); declare module "gulp-typescript" { interface Settings { - stripInternal?: boolean; + pretty?: boolean; newLine?: string; + noImplicitThis?: boolean; + stripInternal?: boolean; + types?: string[]; } interface CompileStream extends NodeJS.ReadWriteStream {} // Either gulp or gulp-typescript has some odd typings which don't reflect reality, making this required } @@ -306,9 +309,11 @@ function needsUpdate(source: string | string[], dest: string | string[]): boolea function getCompilerSettings(base: tsc.Settings, useBuiltCompiler?: boolean): tsc.Settings { const copy: tsc.Settings = {}; - // TODO: Add --noImplicitThis --types --pretty when gulp-typescript adds support for them - copy.noImplicitAny = true; copy.noEmitOnError = true; + copy.noImplicitAny = true; + copy.noImplicitThis = true; + copy.pretty = true; + copy.types = []; for (const key in base) { copy[key] = base[key]; } From a3d9a855460eee7e902023a01c2271f6f2432743 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 11 Jul 2016 11:00:06 -0700 Subject: [PATCH 17/24] Add --pretty to tsconfigs --- src/compiler/tsconfig.json | 1 + src/server/tsconfig.json | 1 + src/services/tsconfig.json | 1 + 3 files changed, 3 insertions(+) diff --git a/src/compiler/tsconfig.json b/src/compiler/tsconfig.json index 5418ca1abe7..827a9b81c4d 100644 --- a/src/compiler/tsconfig.json +++ b/src/compiler/tsconfig.json @@ -4,6 +4,7 @@ "noImplicitThis": true, "removeComments": true, "preserveConstEnums": true, + "pretty": true, "outFile": "../../built/local/tsc.js", "sourceMap": true, "declaration": true, diff --git a/src/server/tsconfig.json b/src/server/tsconfig.json index 57c54b47ad8..df7dcdfe8ad 100644 --- a/src/server/tsconfig.json +++ b/src/server/tsconfig.json @@ -4,6 +4,7 @@ "noImplicitThis": true, "removeComments": true, "preserveConstEnums": true, + "pretty": true, "out": "../../built/local/tsserver.js", "sourceMap": true, "stripInternal": true diff --git a/src/services/tsconfig.json b/src/services/tsconfig.json index 26903bf28ec..86efd254937 100644 --- a/src/services/tsconfig.json +++ b/src/services/tsconfig.json @@ -4,6 +4,7 @@ "noImplicitThis": true, "removeComments": false, "preserveConstEnums": true, + "pretty": true, "outFile": "../../built/local/typescriptServices.js", "sourceMap": true, "stripInternal": true, From a138e6307fa6e9d60e7179f4aa5e49617fd5fd9c Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 11 Jul 2016 11:30:22 -0700 Subject: [PATCH 18/24] Avoid using `this` in object literals where possible --- src/compiler/sys.ts | 14 ++++++++------ src/server/editorServices.ts | 4 ++-- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/compiler/sys.ts b/src/compiler/sys.ts index 5000be8a0ca..29ae2c60af1 100644 --- a/src/compiler/sys.ts +++ b/src/compiler/sys.ts @@ -182,7 +182,7 @@ namespace ts { return matchFiles(path, extensions, excludes, includes, /*useCaseSensitiveFileNames*/ false, shell.CurrentDirectory, getAccessibleFileSystemEntries); } - return { + const wscriptSystem: System = { args, newLine: "\r\n", useCaseSensitiveFileNames: false, @@ -200,8 +200,8 @@ namespace ts { directoryExists(path: string) { return fso.FolderExists(path); }, - createDirectory(this: System, directoryName: string) { - if (!this.directoryExists(directoryName)) { + createDirectory(directoryName: string) { + if (!wscriptSystem.directoryExists(directoryName)) { fso.CreateFolder(directoryName); } }, @@ -221,6 +221,7 @@ namespace ts { } } }; + return wscriptSystem; } function getNodeSystem(): System { @@ -439,7 +440,7 @@ namespace ts { return filter(_fs.readdirSync(path), p => fileSystemEntryExists(combinePaths(path, p), FileSystemEntryKind.Directory)); } - return { + const nodeSystem: System = { args: process.argv.slice(2), newLine: _os.EOL, useCaseSensitiveFileNames: useCaseSensitiveFileNames, @@ -500,8 +501,8 @@ namespace ts { }, fileExists, directoryExists, - createDirectory(this: System, directoryName: string) { - if (!this.directoryExists(directoryName)) { + createDirectory(directoryName: string) { + if (!nodeSystem.directoryExists(directoryName)) { _fs.mkdirSync(directoryName); } }, @@ -549,6 +550,7 @@ namespace ts { return _fs.realpathSync(path); } }; + return nodeSystem; } function getChakraSystem(): System { diff --git a/src/server/editorServices.ts b/src/server/editorServices.ts index fc2131d0922..8854ea9f432 100644 --- a/src/server/editorServices.ts +++ b/src/server/editorServices.ts @@ -2081,9 +2081,9 @@ namespace ts.server { const walkFns = { goSubtree: true, done: false, - leaf: function (this: ILineIndexWalker, relativeStart: number, relativeLength: number, ll: LineLeaf) { + leaf: function (relativeStart: number, relativeLength: number, ll: LineLeaf) { if (!f(ll, relativeStart, relativeLength)) { - this.done = true; + walkFns.done = true; } } }; From 6ad4482bac5afcc3c6275aca04b01d9d3d5e4c1d Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 11 Jul 2016 13:04:48 -0700 Subject: [PATCH 19/24] Update conflicting baseline. PR #9574 added a baseline that #9578 caused to be changed. The two PRs went in so close to each other that the CI build didn't catch the change to the new test's baseline. --- tests/baselines/reference/multipleDeclarations.symbols | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tests/baselines/reference/multipleDeclarations.symbols b/tests/baselines/reference/multipleDeclarations.symbols index 0c8569ab89e..a256943dd50 100644 --- a/tests/baselines/reference/multipleDeclarations.symbols +++ b/tests/baselines/reference/multipleDeclarations.symbols @@ -13,5 +13,7 @@ C.prototype.m = function() { >m : Symbol(C.m, Decl(input.js, 1, 14), Decl(input.js, 3, 1)) this.nothing(); +>this : Symbol(C, Decl(input.js, 0, 0)) + }; From 6414a5721c833148d646b91b6f68ee0ea1c265aa Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 11 Jul 2016 13:49:36 -0700 Subject: [PATCH 20/24] Remove another use of `this`, in program.ts --- src/compiler/program.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 31332a92b0a..af0a13d640b 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -1398,8 +1398,8 @@ namespace ts { return noDiagnosticsTypeChecker || (noDiagnosticsTypeChecker = createTypeChecker(program, /*produceDiagnostics:*/ false)); } - function emit(this: Program, sourceFile?: SourceFile, writeFileCallback?: WriteFileCallback, cancellationToken?: CancellationToken): EmitResult { - return runWithCancellationToken(() => emitWorker(this, sourceFile, writeFileCallback, cancellationToken)); + function emit(sourceFile?: SourceFile, writeFileCallback?: WriteFileCallback, cancellationToken?: CancellationToken): EmitResult { + return runWithCancellationToken(() => emitWorker(program, sourceFile, writeFileCallback, cancellationToken)); } function isEmitBlocked(emitFileName: string): boolean { From fb20df0568a8f82868edee4335da03771f738245 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Mon, 11 Jul 2016 16:00:16 -0700 Subject: [PATCH 21/24] Have tsconfig for harness --- Gulpfile.ts | 141 +- Jakefile.js | 15 +- package.json | 2 + src/harness/external/chai.d.ts | 179 --- src/harness/external/mocha.d.ts | 45 - src/harness/external/node.d.ts | 1296 ----------------- src/harness/harness.ts | 17 +- src/harness/tsconfig.json | 93 ++ src/server/node.d.ts | 682 --------- src/server/server.ts | 54 +- src/server/tsconfig.json | 6 +- src/server/tsconfig.library.json | 17 + tests/cases/unittests/incrementalParser.ts | 2 +- tests/cases/unittests/jsDocParsing.ts | 2 - tests/cases/unittests/matchFiles.ts | 1 - tests/cases/unittests/moduleResolution.ts | 7 - .../cases/unittests/reuseProgramStructure.ts | 1 - .../cases/unittests/services/colorization.ts | 3 +- .../unittests/services/patternMatcher.ts | 1 - .../unittests/services/preProcessFile.ts | 9 +- 20 files changed, 226 insertions(+), 2347 deletions(-) delete mode 100644 src/harness/external/chai.d.ts delete mode 100644 src/harness/external/mocha.d.ts delete mode 100644 src/harness/external/node.d.ts create mode 100644 src/harness/tsconfig.json delete mode 100644 src/server/node.d.ts create mode 100644 src/server/tsconfig.library.json diff --git a/Gulpfile.ts b/Gulpfile.ts index f0757c89bba..4ad06faf6cb 100644 --- a/Gulpfile.ts +++ b/Gulpfile.ts @@ -85,12 +85,9 @@ let host = cmdLineOptions["host"]; // Constants const compilerDirectory = "src/compiler/"; -const servicesDirectory = "src/services/"; -const serverDirectory = "src/server/"; const harnessDirectory = "src/harness/"; const libraryDirectory = "src/lib/"; const scriptsDirectory = "scripts/"; -const unittestsDirectory = "tests/cases/unittests/"; const docDirectory = "doc/"; const builtDirectory = "built/"; @@ -107,69 +104,6 @@ const nodeModulesPathPrefix = path.resolve("./node_modules/.bin/"); const isWin = /^win/.test(process.platform); const mocha = path.join(nodeModulesPathPrefix, "mocha") + (isWin ? ".cmd" : ""); -const compilerSources = require("./src/compiler/tsconfig.json").files.map((file) => path.join(compilerDirectory, file)); - -const servicesSources = require("./src/services/tsconfig.json").files.map((file) => path.join(servicesDirectory, file)); - -const serverCoreSources = require("./src/server/tsconfig.json").files.map((file) => path.join(serverDirectory, file)); - -const languageServiceLibrarySources = [ - "editorServices.ts", - "protocol.d.ts", - "session.ts" -].map(function (f) { - return path.join(serverDirectory, f); -}).concat(servicesSources); - -const harnessCoreSources = [ - "harness.ts", - "sourceMapRecorder.ts", - "harnessLanguageService.ts", - "fourslash.ts", - "runnerbase.ts", - "compilerRunner.ts", - "typeWriter.ts", - "fourslashRunner.ts", - "projectsRunner.ts", - "loggedIO.ts", - "rwcRunner.ts", - "test262Runner.ts", - "runner.ts" -].map(function (f) { - return path.join(harnessDirectory, f); -}); - -const harnessSources = harnessCoreSources.concat([ - "incrementalParser.ts", - "jsDocParsing.ts", - "services/colorization.ts", - "services/documentRegistry.ts", - "services/preProcessFile.ts", - "services/patternMatcher.ts", - "session.ts", - "versionCache.ts", - "convertToBase64.ts", - "transpile.ts", - "reuseProgramStructure.ts", - "cachingInServerLSHost.ts", - "moduleResolution.ts", - "tsconfigParsing.ts", - "commandLineParsing.ts", - "convertCompilerOptionsFromJson.ts", - "convertTypingOptionsFromJson.ts", - "tsserverProjectSystem.ts", - "matchFiles.ts", -].map(function (f) { - return path.join(unittestsDirectory, f); -})).concat([ - "protocol.d.ts", - "session.ts", - "client.ts", - "editorServices.ts" -].map(function (f) { - return path.join(serverDirectory, f); -})); - const es2015LibrarySources = [ "es2015.core.d.ts", "es2015.collection.d.ts", @@ -500,21 +434,18 @@ const tsserverLibraryFile = path.join(builtLocalDirectory, "tsserverlibrary.js") const tsserverLibraryDefinitionFile = path.join(builtLocalDirectory, "tsserverlibrary.d.ts"); gulp.task(tsserverLibraryFile, false, [servicesFile], (done) => { - const settings: tsc.Settings = getCompilerSettings({ - declaration: true, - outFile: tsserverLibraryFile - }, /*useBuiltCompiler*/ true); - const {js, dts}: {js: NodeJS.ReadableStream, dts: NodeJS.ReadableStream} = gulp.src(languageServiceLibrarySources) + const serverLibraryProject = tsc.createProject("src/server/tsconfig.library.json", getCompilerSettings({}, /*useBuiltCompiler*/ true)); + const {js, dts}: {js: NodeJS.ReadableStream, dts: NodeJS.ReadableStream} = serverLibraryProject.src() .pipe(sourcemaps.init()) .pipe(newer(tsserverLibraryFile)) - .pipe(tsc(settings)); + .pipe(tsc(serverLibraryProject)); return merge2([ js.pipe(prependCopyright()) .pipe(sourcemaps.write(".")) - .pipe(gulp.dest(".")), + .pipe(gulp.dest(builtLocalDirectory)), dts.pipe(prependCopyright()) - .pipe(gulp.dest(".")) + .pipe(gulp.dest(builtLocalDirectory)) ]); }); @@ -583,15 +514,13 @@ gulp.task("LKG", "Makes a new LKG out of the built js files", ["clean", "dontUse // Task to build the tests infrastructure using the built compiler const run = path.join(builtLocalDirectory, "run.js"); gulp.task(run, false, [servicesFile], () => { - const settings: tsc.Settings = getCompilerSettings({ - outFile: run - }, /*useBuiltCompiler*/ true); - return gulp.src(harnessSources) + const testProject = tsc.createProject("src/harness/tsconfig.json", getCompilerSettings({}, /*useBuiltCompiler*/true)); + return testProject.src() .pipe(newer(run)) .pipe(sourcemaps.init()) - .pipe(tsc(settings)) + .pipe(tsc(testProject)) .pipe(sourcemaps.write(".", { includeContent: false, sourceRoot: "../../" })) - .pipe(gulp.dest(".")); + .pipe(gulp.dest(builtLocalDirectory)); }); const internalTests = "internal/"; @@ -766,13 +695,11 @@ gulp.task(nodeServerOutFile, false, [servicesFile], () => { }); gulp.task("browserify", "Runs browserify on run.js to produce a file suitable for running tests in the browser", [servicesFile], (done) => { - const settings: tsc.Settings = getCompilerSettings({ - outFile: "built/local/bundle.js" - }, /*useBuiltCompiler*/ true); - return gulp.src(harnessSources) + const testProject = tsc.createProject("src/harness/tsconfig.json", getCompilerSettings({ outFile: "built/local/bundle.js" }, /*useBuiltCompiler*/ true)); + return testProject.src() .pipe(newer("built/local/bundle.js")) .pipe(sourcemaps.init()) - .pipe(tsc(settings)) + .pipe(tsc(testProject)) .pipe(through2.obj((file, enc, next) => { browserify(intoStream(file.contents)) .bundle((err, res) => { @@ -1013,36 +940,38 @@ function lintFile(options, path) { return lintFileContents(options, path, contents); } -const lintTargets = ["Gulpfile.ts"] - .concat(compilerSources) - .concat(harnessSources) - // Other harness sources - .concat(["instrumenter.ts"].map(function(f) { return path.join(harnessDirectory, f); })) - .concat(serverCoreSources) - .concat(tslintRulesFiles) - .concat(servicesSources); +const lintTargets = [ + "Gulpfile.ts", + "src/compiler/**/*.ts", + "src/harness/**/*.ts", + "tests/cases/unittests/**/*.ts", + "!tests/cases/unittests/services/formatting/**/*.ts", + "src/server/**/*.ts", + "scripts/tslint/**/*.ts", + "src/services/**/*.ts", +]; gulp.task("lint", "Runs tslint on the compiler sources. Optional arguments are: --f[iles]=regex", ["build-rules"], () => { + const fileMatcher = RegExp(cmdLineOptions["files"]); const lintOptions = getLinterOptions(); let failed = 0; - const fileMatcher = RegExp(cmdLineOptions["files"]); - const done = {}; - for (const i in lintTargets) { - const target = lintTargets[i]; - if (!done[target] && fileMatcher.test(target)) { - const result = lintFile(lintOptions, target); + return gulp.src(lintTargets) + .pipe(insert.transform((contents, file) => { + if (!fileMatcher.test(file.path)) return contents; + const result = lintFile(lintOptions, file.path); if (result.failureCount > 0) { console.log(result.output); failed += result.failureCount; } - done[target] = true; - } - } - if (failed > 0) { - console.error("Linter errors."); - process.exit(1); - } + return contents; // TODO (weswig): Automatically apply fixes? :3 + })) + .on("end", () => { + if (failed > 0) { + console.error("Linter errors."); + process.exit(1); + } + }); }); diff --git a/Jakefile.js b/Jakefile.js index 0dd589f90e3..3eb3520fafb 100644 --- a/Jakefile.js +++ b/Jakefile.js @@ -100,7 +100,6 @@ var servicesSources = [ })); var serverCoreSources = [ - "node.d.ts", "editorServices.ts", "protocol.d.ts", "session.ts", @@ -279,13 +278,18 @@ var builtLocalCompiler = path.join(builtLocalDirectory, compilerFilename); * @param {boolean} opts.stripInternal: true if compiler should remove declarations marked as @internal * @param {boolean} opts.noMapRoot: true if compiler omit mapRoot option * @param {boolean} opts.inlineSourceMap: true if compiler should inline sourceMap + * @param {Array} opts.types: array of types to include in compilation * @param callback: a function to execute after the compilation process ends */ function compileFile(outFile, sources, prereqs, prefixes, useBuiltCompiler, opts, callback) { file(outFile, prereqs, function() { - var compilerPath = useBuiltCompiler ? builtLocalCompiler : LKGCompiler; - var options = "--noImplicitAny --noImplicitThis --noEmitOnError --types --pretty"; opts = opts || {}; + var compilerPath = useBuiltCompiler ? builtLocalCompiler : LKGCompiler; + var options = "--noImplicitAny --noImplicitThis --noEmitOnError --types " + if (opts.types) { + options += opts.types.join(","); + } + options += " --pretty"; // Keep comments when specifically requested // or when in debug mode. if (!(opts.keepComments || useDebugMode)) { @@ -548,8 +552,7 @@ compileFile( }); var serverFile = path.join(builtLocalDirectory, "tsserver.js"); -compileFile(serverFile, serverSources,[builtLocalDirectory, copyright].concat(serverSources), /*prefixes*/ [copyright], /*useBuiltCompiler*/ true); - +compileFile(serverFile, serverSources,[builtLocalDirectory, copyright].concat(serverSources), /*prefixes*/ [copyright], /*useBuiltCompiler*/ true, { types: ["node"] }); var tsserverLibraryFile = path.join(builtLocalDirectory, "tsserverlibrary.js"); var tsserverLibraryDefinitionFile = path.join(builtLocalDirectory, "tsserverlibrary.d.ts"); compileFile( @@ -652,7 +655,7 @@ compileFile( /*prereqs*/ [builtLocalDirectory, tscFile].concat(libraryTargets).concat(harnessSources), /*prefixes*/ [], /*useBuiltCompiler:*/ true, - /*opts*/ { inlineSourceMap: true }); + /*opts*/ { inlineSourceMap: true, types: ["node", "mocha", "chai"] }); var internalTests = "internal/"; diff --git a/package.json b/package.json index 29871e77f70..72a220f53b1 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ }, "devDependencies": { "@types/browserify": "latest", + "@types/chai": "latest", "@types/del": "latest", "@types/glob": "latest", "@types/gulp": "latest", @@ -42,6 +43,7 @@ "@types/minimatch": "latest", "@types/minimist": "latest", "@types/mkdirp": "latest", + "@types/mocha": "latest", "@types/node": "latest", "@types/q": "latest", "@types/run-sequence": "latest", diff --git a/src/harness/external/chai.d.ts b/src/harness/external/chai.d.ts deleted file mode 100644 index 5e4e6e7d000..00000000000 --- a/src/harness/external/chai.d.ts +++ /dev/null @@ -1,179 +0,0 @@ -// Type definitions for chai 1.7.2 -// Project: http://chaijs.com/ -// Definitions by: Jed Hunsaker -// DefinitelyTyped: https://github.com/borisyankov/DefinitelyTyped - - -declare module chai { - - function expect(target: any, message?: string): Expect; - - // Provides a way to extend the internals of Chai - function use(fn: (chai: any, utils: any) => void): any; - - interface ExpectStatic { - (target: any): Expect; - } - - interface Assertions { - attr(name: string, value?: string): any; - css(name: string, value?: string): any; - data(name: string, value?: string): any; - class(className: string): any; - id(id: string): any; - html(html: string): any; - text(text: string): any; - value(value: string): any; - visible: any; - hidden: any; - selected: any; - checked: any; - disabled: any; - empty: any; - exist: any; - } - - interface Expect extends LanguageChains, NumericComparison, TypeComparison, Assertions { - not: Expect; - deep: Deep; - a: TypeComparison; - an: TypeComparison; - include: Include; - contain: Include; - ok: Expect; - true: Expect; - false: Expect; - null: Expect; - undefined: Expect; - exist: Expect; - empty: Expect; - arguments: Expect; - Arguments: Expect; - equal: Equal; - equals: Equal; - eq: Equal; - eql: Equal; - eqls: Equal; - property: Property; - ownProperty: OwnProperty; - haveOwnProperty: OwnProperty; - length: Length; - lengthOf: Length; - match(RegularExpression: RegExp, message?: string): Expect; - string(string: string, message?: string): Expect; - keys: Keys; - key(string: string): Expect; - throw: Throw; - throws: Throw; - Throw: Throw; - respondTo(method: string, message?: string): Expect; - itself: Expect; - satisfy(matcher: Function, message?: string): Expect; - closeTo(expected: number, delta: number, message?: string): Expect; - members: Members; - } - - interface LanguageChains { - to: Expect; - be: Expect; - been: Expect; - is: Expect; - that: Expect; - and: Expect; - have: Expect; - with: Expect; - at: Expect; - of: Expect; - same: Expect; - } - - interface NumericComparison { - above: NumberComparer; - gt: NumberComparer; - greaterThan: NumberComparer; - least: NumberComparer; - gte: NumberComparer; - below: NumberComparer; - lt: NumberComparer; - lessThan: NumberComparer; - most: NumberComparer; - lte: NumberComparer; - within(start: number, finish: number, message?: string): Expect; - } - - interface NumberComparer { - (value: number, message?: string): Expect; - } - - interface TypeComparison { - (type: string, message?: string): Expect; - instanceof: InstanceOf; - instanceOf: InstanceOf; - } - - interface InstanceOf { - (constructor: Object, message?: string): Expect; - } - - interface Deep { - equal: Equal; - property: Property; - } - - interface Equal { - (value: any, message?: string): Expect; - } - - interface Property { - (name: string, value?: any, message?: string): Expect; - } - - interface OwnProperty { - (name: string, message?: string): Expect; - } - - interface Length extends LanguageChains, NumericComparison { - (length: number, message?: string): Expect; - } - - interface Include { - (value: Object, message?: string): Expect; - (value: string, message?: string): Expect; - (value: number, message?: string): Expect; - keys: Keys; - members: Members; - } - - interface Keys { - (...keys: string[]): Expect; - (keys: any[]): Expect; - } - - interface Members { - (set: any[], message?: string): Expect; - } - - interface Throw { - (): Expect; - (expected: string, message?: string): Expect; - (expected: RegExp, message?: string): Expect; - (constructor: Error, expected?: string, message?: string): Expect; - (constructor: Error, expected?: RegExp, message?: string): Expect; - (constructor: Function, expected?: string, message?: string): Expect; - (constructor: Function, expected?: RegExp, message?: string): Expect; - } - - function assert(expression: any, message?: string): void; - module assert { - function equal(actual: any, expected: any, message?: string): void; - function notEqual(actual: any, expected: any, message?: string): void; - function deepEqual(actual: T, expected: T, message?: string): void; - function notDeepEqual(actual: T, expected: T, message?: string): void; - function lengthOf(object: any[], length: number, message?: string): void; - function isTrue(value: any, message?: string): void; - function isFalse(value: any, message?: string): void; - function isOk(actual: any, message?: string): void; - function isUndefined(value: any, message?: string): void; - function isDefined(value: any, message?: string): void; - } -} \ No newline at end of file diff --git a/src/harness/external/mocha.d.ts b/src/harness/external/mocha.d.ts deleted file mode 100644 index c498eb080b6..00000000000 --- a/src/harness/external/mocha.d.ts +++ /dev/null @@ -1,45 +0,0 @@ -// Type definitions for mocha 1.9.0 -// Project: http://visionmedia.github.io/mocha/ -// Definitions by: Kazi Manzur Rashid -// DefinitelyTyped: https://github.com/borisyankov/DefinitelyTyped - -declare var describe : { - (description: string, spec: () => void): void; - only(description: string, spec: () => void): void; - skip(description: string, spec: () => void): void; - timeout(ms: number): void; -} - -declare var it: { - (expectation: string, assertion?: () => void): void; - (expectation: string, assertion?: (done: () => void) => void): void; - only(expectation: string, assertion?: () => void): void; - only(expectation: string, assertion?: (done: () => void) => void): void; - skip(expectation: string, assertion?: () => void): void; - skip(expectation: string, assertion?: (done: () => void) => void): void; - timeout(ms: number): void; -}; - -/** Runs once before any 'it' blocks in the current 'describe' are run */ -declare function before(action: () => void): void; - -/** Runs once before any 'it' blocks in the current 'describe' are run */ -declare function before(action: (done: () => void) => void): void; - -/** Runs once after all 'it' blocks in the current 'describe' are run */ -declare function after(action: () => void): void; - -/** Runs once after all 'it' blocks in the current 'describe' are run */ -declare function after(action: (done: () => void) => void): void; - -/** Runs before each individual 'it' block in the current 'describe' is run */ -declare function beforeEach(action: () => void): void; - -/** Runs before each individual 'it' block in the current 'describe' is run */ -declare function beforeEach(action: (done: () => void) => void): void; - -/** Runs after each individual 'it' block in the current 'describe' is run */ -declare function afterEach(action: () => void): void; - -/** Runs after each individual 'it' block in the current 'describe' is run */ -declare function afterEach(action: (done: () => void) => void): void; \ No newline at end of file diff --git a/src/harness/external/node.d.ts b/src/harness/external/node.d.ts deleted file mode 100644 index b89174cef7c..00000000000 --- a/src/harness/external/node.d.ts +++ /dev/null @@ -1,1296 +0,0 @@ -// Type definitions for Node.js v0.10.1 -// Project: http://nodejs.org/ -// Definitions by: Microsoft TypeScript , DefinitelyTyped -// Definitions: https://github.com/borisyankov/DefinitelyTyped - -/************************************************ -* * -* Node.js v0.10.1 API * -* * -************************************************/ - -/************************************************ -* * -* GLOBAL * -* * -************************************************/ -declare var process: NodeJS.Process; -declare var global: any; - -declare var __filename: string; -declare var __dirname: string; - -declare function setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer; -declare function clearTimeout(timeoutId: NodeJS.Timer): void; -declare function setInterval(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer; -declare function clearInterval(intervalId: NodeJS.Timer): void; -declare function setImmediate(callback: (...args: any[]) => void, ...args: any[]): any; -declare function clearImmediate(immediateId: any): void; - -declare var require: { - (id: string): any; - resolve(id:string): string; - cache: any; - extensions: any; - main: any; -}; - -declare var module: { - exports: any; - require(id: string): any; - id: string; - filename: string; - loaded: boolean; - parent: any; - children: any[]; -}; - -// Same as module.exports -declare var exports: any; -declare var SlowBuffer: { - new (str: string, encoding?: string): Buffer; - new (size: number): Buffer; - new (array: any[]): Buffer; - prototype: Buffer; - isBuffer(obj: any): boolean; - byteLength(string: string, encoding?: string): number; - concat(list: Buffer[], totalLength?: number): Buffer; -}; - - -// Buffer class -interface Buffer extends NodeBuffer {} -declare var Buffer: { - new (str: string, encoding?: string): Buffer; - new (size: number): Buffer; - new (array: any[]): Buffer; - prototype: Buffer; - isBuffer(obj: any): boolean; - byteLength(string: string, encoding?: string): number; - concat(list: Buffer[], totalLength?: number): Buffer; -}; - -/************************************************ -* * -* GLOBAL INTERFACES * -* * -************************************************/ -declare module NodeJS { - export interface ErrnoException extends Error { - errno?: any; - code?: string; - path?: string; - syscall?: string; - } - - export interface EventEmitter { - addListener(event: string, listener: Function): EventEmitter; - on(event: string, listener: Function): EventEmitter; - once(event: string, listener: Function): EventEmitter; - removeListener(event: string, listener: Function): EventEmitter; - removeAllListeners(event?: string): EventEmitter; - setMaxListeners(n: number): void; - listeners(event: string): Function[]; - emit(event: string, ...args: any[]): boolean; - } - - export interface ReadableStream extends EventEmitter { - readable: boolean; - read(size?: number): any; - setEncoding(encoding: string): void; - pause(): void; - resume(): void; - pipe(destination: T, options?: { end?: boolean; }): T; - unpipe(destination?: T): void; - unshift(chunk: string): void; - unshift(chunk: Buffer): void; - wrap(oldStream: ReadableStream): ReadableStream; - } - - export interface WritableStream extends EventEmitter { - writable: boolean; - write(buffer: Buffer, cb?: Function): boolean; - write(str: string, cb?: Function): boolean; - write(str: string, encoding?: string, cb?: Function): boolean; - end(): void; - end(buffer: Buffer, cb?: Function): void; - end(str: string, cb?: Function): void; - end(str: string, encoding?: string, cb?: Function): void; - } - - export interface ReadWriteStream extends ReadableStream, WritableStream {} - - export interface Process extends EventEmitter { - stdout: WritableStream; - stderr: WritableStream; - stdin: ReadableStream; - argv: string[]; - execPath: string; - abort(): void; - chdir(directory: string): void; - cwd(): string; - env: any; - exit(code?: number): void; - getgid(): number; - setgid(id: number): void; - setgid(id: string): void; - getuid(): number; - setuid(id: number): void; - setuid(id: string): void; - version: string; - versions: { - http_parser: string; - node: string; - v8: string; - ares: string; - uv: string; - zlib: string; - openssl: string; - }; - config: { - target_defaults: { - cflags: any[]; - default_configuration: string; - defines: string[]; - include_dirs: string[]; - libraries: string[]; - }; - variables: { - clang: number; - host_arch: string; - node_install_npm: boolean; - node_install_waf: boolean; - node_prefix: string; - node_shared_openssl: boolean; - node_shared_v8: boolean; - node_shared_zlib: boolean; - node_use_dtrace: boolean; - node_use_etw: boolean; - node_use_openssl: boolean; - target_arch: string; - v8_no_strict_aliasing: number; - v8_use_snapshot: boolean; - visibility: string; - }; - }; - kill(pid: number, signal?: string): void; - pid: number; - title: string; - arch: string; - platform: string; - memoryUsage(): { rss: number; heapTotal: number; heapUsed: number; }; - nextTick(callback: Function): void; - umask(mask?: number): number; - uptime(): number; - hrtime(time?:number[]): number[]; - - // Worker - send?(message: any, sendHandle?: any): void; - } - - export interface Timer { - ref() : void; - unref() : void; - } -} - -/** - * @deprecated - */ -interface NodeBuffer { - [index: number]: number; - write(string: string, offset?: number, length?: number, encoding?: string): number; - toString(encoding?: string, start?: number, end?: number): string; - toJSON(): any; - length: number; - copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; - slice(start?: number, end?: number): Buffer; - readUInt8(offset: number, noAsset?: boolean): number; - readUInt16LE(offset: number, noAssert?: boolean): number; - readUInt16BE(offset: number, noAssert?: boolean): number; - readUInt32LE(offset: number, noAssert?: boolean): number; - readUInt32BE(offset: number, noAssert?: boolean): number; - readInt8(offset: number, noAssert?: boolean): number; - readInt16LE(offset: number, noAssert?: boolean): number; - readInt16BE(offset: number, noAssert?: boolean): number; - readInt32LE(offset: number, noAssert?: boolean): number; - readInt32BE(offset: number, noAssert?: boolean): number; - readFloatLE(offset: number, noAssert?: boolean): number; - readFloatBE(offset: number, noAssert?: boolean): number; - readDoubleLE(offset: number, noAssert?: boolean): number; - readDoubleBE(offset: number, noAssert?: boolean): number; - writeUInt8(value: number, offset: number, noAssert?: boolean): void; - writeUInt16LE(value: number, offset: number, noAssert?: boolean): void; - writeUInt16BE(value: number, offset: number, noAssert?: boolean): void; - writeUInt32LE(value: number, offset: number, noAssert?: boolean): void; - writeUInt32BE(value: number, offset: number, noAssert?: boolean): void; - writeInt8(value: number, offset: number, noAssert?: boolean): void; - writeInt16LE(value: number, offset: number, noAssert?: boolean): void; - writeInt16BE(value: number, offset: number, noAssert?: boolean): void; - writeInt32LE(value: number, offset: number, noAssert?: boolean): void; - writeInt32BE(value: number, offset: number, noAssert?: boolean): void; - writeFloatLE(value: number, offset: number, noAssert?: boolean): void; - writeFloatBE(value: number, offset: number, noAssert?: boolean): void; - writeDoubleLE(value: number, offset: number, noAssert?: boolean): void; - writeDoubleBE(value: number, offset: number, noAssert?: boolean): void; - fill(value: any, offset?: number, end?: number): void; -} - -/************************************************ -* * -* MODULES * -* * -************************************************/ -declare module "buffer" { - export var INSPECT_MAX_BYTES: number; -} - -declare module "querystring" { - export function stringify(obj: any, sep?: string, eq?: string): string; - export function parse(str: string, sep?: string, eq?: string, options?: { maxKeys?: number; }): any; - export function escape(): any; - export function unescape(): any; -} - -declare module "events" { - export class EventEmitter implements NodeJS.EventEmitter { - static listenerCount(emitter: EventEmitter, event: string): number; - - addListener(event: string, listener: Function): EventEmitter; - on(event: string, listener: Function): EventEmitter; - once(event: string, listener: Function): EventEmitter; - removeListener(event: string, listener: Function): EventEmitter; - removeAllListeners(event?: string): EventEmitter; - setMaxListeners(n: number): void; - listeners(event: string): Function[]; - emit(event: string, ...args: any[]): boolean; - } -} - -declare module "http" { - import events = require("events"); - import net = require("net"); - import stream = require("stream"); - - export interface Server extends events.EventEmitter { - listen(port: number, hostname?: string, backlog?: number, callback?: Function): Server; - listen(path: string, callback?: Function): Server; - listen(handle: any, listeningListener?: Function): Server; - close(cb?: any): Server; - address(): { port: number; family: string; address: string; }; - maxHeadersCount: number; - } - export interface ServerRequest extends events.EventEmitter, stream.Readable { - method: string; - url: string; - headers: any; - trailers: string; - httpVersion: string; - setEncoding(encoding?: string): void; - pause(): void; - resume(): void; - connection: net.Socket; - } - export interface ServerResponse extends events.EventEmitter, stream.Writable { - // Extended base methods - write(buffer: Buffer): boolean; - write(buffer: Buffer, cb?: Function): boolean; - write(str: string, cb?: Function): boolean; - write(str: string, encoding?: string, cb?: Function): boolean; - write(str: string, encoding?: string, fd?: string): boolean; - - writeContinue(): void; - writeHead(statusCode: number, reasonPhrase?: string, headers?: any): void; - writeHead(statusCode: number, headers?: any): void; - statusCode: number; - setHeader(name: string, value: string): void; - sendDate: boolean; - getHeader(name: string): string; - removeHeader(name: string): void; - write(chunk: any, encoding?: string): any; - addTrailers(headers: any): void; - - // Extended base methods - end(): void; - end(buffer: Buffer, cb?: Function): void; - end(str: string, cb?: Function): void; - end(str: string, encoding?: string, cb?: Function): void; - end(data?: any, encoding?: string): void; - } - export interface ClientRequest extends events.EventEmitter, stream.Writable { - // Extended base methods - write(buffer: Buffer): boolean; - write(buffer: Buffer, cb?: Function): boolean; - write(str: string, cb?: Function): boolean; - write(str: string, encoding?: string, cb?: Function): boolean; - write(str: string, encoding?: string, fd?: string): boolean; - - write(chunk: any, encoding?: string): void; - abort(): void; - setTimeout(timeout: number, callback?: Function): void; - setNoDelay(noDelay?: boolean): void; - setSocketKeepAlive(enable?: boolean, initialDelay?: number): void; - - // Extended base methods - end(): void; - end(buffer: Buffer, cb?: Function): void; - end(str: string, cb?: Function): void; - end(str: string, encoding?: string, cb?: Function): void; - end(data?: any, encoding?: string): void; - } - export interface ClientResponse extends events.EventEmitter, stream.Readable { - statusCode: number; - httpVersion: string; - headers: any; - trailers: any; - setEncoding(encoding?: string): void; - pause(): void; - resume(): void; - } - export interface Agent { maxSockets: number; sockets: any; requests: any; } - - export var STATUS_CODES: { - [errorCode: number]: string; - [errorCode: string]: string; - }; - export function createServer(requestListener?: (request: ServerRequest, response: ServerResponse) =>void ): Server; - export function createClient(port?: number, host?: string): any; - export function request(options: any, callback?: Function): ClientRequest; - export function get(options: any, callback?: Function): ClientRequest; - export var globalAgent: Agent; -} - -declare module "cluster" { - import child = require("child_process"); - import events = require("events"); - - export interface ClusterSettings { - exec?: string; - args?: string[]; - silent?: boolean; - } - - export class Worker extends events.EventEmitter { - id: string; - process: child.ChildProcess; - suicide: boolean; - send(message: any, sendHandle?: any): void; - kill(signal?: string): void; - destroy(signal?: string): void; - disconnect(): void; - } - - export var settings: ClusterSettings; - export var isMaster: boolean; - export var isWorker: boolean; - export function setupMaster(settings?: ClusterSettings): void; - export function fork(env?: any): Worker; - export function disconnect(callback?: Function): void; - export var worker: Worker; - export var workers: Worker[]; - - // Event emitter - export function addListener(event: string, listener: Function): void; - export function on(event: string, listener: Function): any; - export function once(event: string, listener: Function): void; - export function removeListener(event: string, listener: Function): void; - export function removeAllListeners(event?: string): void; - export function setMaxListeners(n: number): void; - export function listeners(event: string): Function[]; - export function emit(event: string, ...args: any[]): boolean; -} - -declare module "zlib" { - import stream = require("stream"); - export interface ZlibOptions { chunkSize?: number; windowBits?: number; level?: number; memLevel?: number; strategy?: number; dictionary?: any; } - - export interface Gzip extends stream.Transform { } - export interface Gunzip extends stream.Transform { } - export interface Deflate extends stream.Transform { } - export interface Inflate extends stream.Transform { } - export interface DeflateRaw extends stream.Transform { } - export interface InflateRaw extends stream.Transform { } - export interface Unzip extends stream.Transform { } - - export function createGzip(options?: ZlibOptions): Gzip; - export function createGunzip(options?: ZlibOptions): Gunzip; - export function createDeflate(options?: ZlibOptions): Deflate; - export function createInflate(options?: ZlibOptions): Inflate; - export function createDeflateRaw(options?: ZlibOptions): DeflateRaw; - export function createInflateRaw(options?: ZlibOptions): InflateRaw; - export function createUnzip(options?: ZlibOptions): Unzip; - - export function deflate(buf: Buffer, callback: (error: Error, result: any) =>void ): void; - export function deflateRaw(buf: Buffer, callback: (error: Error, result: any) =>void ): void; - export function gzip(buf: Buffer, callback: (error: Error, result: any) =>void ): void; - export function gunzip(buf: Buffer, callback: (error: Error, result: any) =>void ): void; - export function inflate(buf: Buffer, callback: (error: Error, result: any) =>void ): void; - export function inflateRaw(buf: Buffer, callback: (error: Error, result: any) =>void ): void; - export function unzip(buf: Buffer, callback: (error: Error, result: any) =>void ): void; - - // Constants - export var Z_NO_FLUSH: number; - export var Z_PARTIAL_FLUSH: number; - export var Z_SYNC_FLUSH: number; - export var Z_FULL_FLUSH: number; - export var Z_FINISH: number; - export var Z_BLOCK: number; - export var Z_TREES: number; - export var Z_OK: number; - export var Z_STREAM_END: number; - export var Z_NEED_DICT: number; - export var Z_ERRNO: number; - export var Z_STREAM_ERROR: number; - export var Z_DATA_ERROR: number; - export var Z_MEM_ERROR: number; - export var Z_BUF_ERROR: number; - export var Z_VERSION_ERROR: number; - export var Z_NO_COMPRESSION: number; - export var Z_BEST_SPEED: number; - export var Z_BEST_COMPRESSION: number; - export var Z_DEFAULT_COMPRESSION: number; - export var Z_FILTERED: number; - export var Z_HUFFMAN_ONLY: number; - export var Z_RLE: number; - export var Z_FIXED: number; - export var Z_DEFAULT_STRATEGY: number; - export var Z_BINARY: number; - export var Z_TEXT: number; - export var Z_ASCII: number; - export var Z_UNKNOWN: number; - export var Z_DEFLATED: number; - export var Z_NULL: number; -} - -declare module "os" { - export function tmpDir(): string; - export function hostname(): string; - export function type(): string; - export function platform(): string; - export function arch(): string; - export function release(): string; - export function uptime(): number; - export function loadavg(): number[]; - export function totalmem(): number; - export function freemem(): number; - export function cpus(): { model: string; speed: number; times: { user: number; nice: number; sys: number; idle: number; irq: number; }; }[]; - export function networkInterfaces(): any; - export var EOL: string; -} - -declare module "https" { - import tls = require("tls"); - import events = require("events"); - import http = require("http"); - - export interface ServerOptions { - pfx?: any; - key?: any; - passphrase?: string; - cert?: any; - ca?: any; - crl?: any; - ciphers?: string; - honorCipherOrder?: boolean; - requestCert?: boolean; - rejectUnauthorized?: boolean; - NPNProtocols?: any; - SNICallback?: (servername: string) => any; - } - - export interface RequestOptions { - host?: string; - hostname?: string; - port?: number; - path?: string; - method?: string; - headers?: any; - auth?: string; - agent?: any; - pfx?: any; - key?: any; - passphrase?: string; - cert?: any; - ca?: any; - ciphers?: string; - rejectUnauthorized?: boolean; - } - - export interface Agent { - maxSockets: number; - sockets: any; - requests: any; - } - export var Agent: { - new (options?: RequestOptions): Agent; - }; - export interface Server extends tls.Server { } - export function createServer(options: ServerOptions, requestListener?: Function): Server; - export function request(options: RequestOptions, callback?: (res: events.EventEmitter) =>void ): http.ClientRequest; - export function get(options: RequestOptions, callback?: (res: events.EventEmitter) =>void ): http.ClientRequest; - export var globalAgent: Agent; -} - -declare module "punycode" { - export function decode(string: string): string; - export function encode(string: string): string; - export function toUnicode(domain: string): string; - export function toASCII(domain: string): string; - export var ucs2: ucs2; - interface ucs2 { - decode(string: string): string; - encode(codePoints: number[]): string; - } - export var version: any; -} - -declare module "repl" { - import stream = require("stream"); - import events = require("events"); - - export interface ReplOptions { - prompt?: string; - input?: NodeJS.ReadableStream; - output?: NodeJS.WritableStream; - terminal?: boolean; - eval?: Function; - useColors?: boolean; - useGlobal?: boolean; - ignoreUndefined?: boolean; - writer?: Function; - } - export function start(options: ReplOptions): events.EventEmitter; -} - -declare module "readline" { - import events = require("events"); - import stream = require("stream"); - - export interface ReadLine extends events.EventEmitter { - setPrompt(prompt: string, length: number): void; - prompt(preserveCursor?: boolean): void; - question(query: string, callback: Function): void; - pause(): void; - resume(): void; - close(): void; - write(data: any, key?: any): void; - } - export interface ReadLineOptions { - input: NodeJS.ReadableStream; - output: NodeJS.WritableStream; - completer?: Function; - terminal?: boolean; - } - export function createInterface(options: ReadLineOptions): ReadLine; -} - -declare module "vm" { - export interface Context { } - export interface Script { - runInThisContext(): void; - runInNewContext(sandbox?: Context): void; - } - export function runInThisContext(code: string, filename?: string): void; - export function runInNewContext(code: string, sandbox?: Context, filename?: string): void; - export function runInContext(code: string, context: Context, filename?: string): void; - export function createContext(initSandbox?: Context): Context; - export function createScript(code: string, filename?: string): Script; -} - -declare module "child_process" { - import events = require("events"); - import stream = require("stream"); - - export interface ChildProcess extends events.EventEmitter { - stdin: stream.Writable; - stdout: stream.Readable; - stderr: stream.Readable; - pid: number; - kill(signal?: string): void; - send(message: any, sendHandle: any): void; - disconnect(): void; - } - - export function spawn(command: string, args?: string[], options?: { - cwd?: string; - stdio?: any; - custom?: any; - env?: any; - detached?: boolean; - }): ChildProcess; - export function exec(command: string, options: { - cwd?: string; - stdio?: any; - customFds?: any; - env?: any; - encoding?: string; - timeout?: number; - maxBuffer?: number; - killSignal?: string; - }, callback: (error: Error, stdout: Buffer, stderr: Buffer) =>void ): ChildProcess; - export function exec(command: string, callback: (error: Error, stdout: Buffer, stderr: Buffer) =>void ): ChildProcess; - export function execFile(file: string, args: string[], options: { - cwd?: string; - stdio?: any; - customFds?: any; - env?: any; - encoding?: string; - timeout?: number; - maxBuffer?: string; - killSignal?: string; - }, callback: (error: Error, stdout: Buffer, stderr: Buffer) =>void ): ChildProcess; - export function fork(modulePath: string, args?: string[], options?: { - cwd?: string; - env?: any; - encoding?: string; - }): ChildProcess; -} - -declare module "url" { - export interface Url { - href: string; - protocol: string; - auth: string; - hostname: string; - port: string; - host: string; - pathname: string; - search: string; - query: string; - slashes: boolean; - hash?: string; - path?: string; - } - - export interface UrlOptions { - protocol?: string; - auth?: string; - hostname?: string; - port?: string; - host?: string; - pathname?: string; - search?: string; - query?: any; - hash?: string; - path?: string; - } - - export function parse(urlStr: string, parseQueryString?: boolean , slashesDenoteHost?: boolean ): Url; - export function format(url: UrlOptions): string; - export function resolve(from: string, to: string): string; -} - -declare module "dns" { - export function lookup(domain: string, family: number, callback: (err: Error, address: string, family: number) =>void ): string; - export function lookup(domain: string, callback: (err: Error, address: string, family: number) =>void ): string; - export function resolve(domain: string, rrtype: string, callback: (err: Error, addresses: string[]) =>void ): string[]; - export function resolve(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; - export function resolve4(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; - export function resolve6(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; - export function resolveMx(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; - export function resolveTxt(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; - export function resolveSrv(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; - export function resolveNs(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; - export function resolveCname(domain: string, callback: (err: Error, addresses: string[]) =>void ): string[]; - export function reverse(ip: string, callback: (err: Error, domains: string[]) =>void ): string[]; -} - -declare module "net" { - import stream = require("stream"); - - export interface Socket extends stream.Duplex { - // Extended base methods - write(buffer: Buffer): boolean; - write(buffer: Buffer, cb?: Function): boolean; - write(str: string, cb?: Function): boolean; - write(str: string, encoding?: string, cb?: Function): boolean; - write(str: string, encoding?: string, fd?: string): boolean; - - connect(port: number, host?: string, connectionListener?: Function): void; - connect(path: string, connectionListener?: Function): void; - bufferSize: number; - setEncoding(encoding?: string): void; - write(data: any, encoding?: string, callback?: Function): void; - destroy(): void; - pause(): void; - resume(): void; - setTimeout(timeout: number, callback?: Function): void; - setNoDelay(noDelay?: boolean): void; - setKeepAlive(enable?: boolean, initialDelay?: number): void; - address(): { port: number; family: string; address: string; }; - remoteAddress: string; - remotePort: number; - bytesRead: number; - bytesWritten: number; - - // Extended base methods - end(): void; - end(buffer: Buffer, cb?: Function): void; - end(str: string, cb?: Function): void; - end(str: string, encoding?: string, cb?: Function): void; - end(data?: any, encoding?: string): void; - } - - export var Socket: { - new (options?: { fd?: string; type?: string; allowHalfOpen?: boolean; }): Socket; - }; - - export interface Server extends Socket { - listen(port: number, host?: string, backlog?: number, listeningListener?: Function): Server; - listen(path: string, listeningListener?: Function): Server; - listen(handle: any, listeningListener?: Function): Server; - close(callback?: Function): Server; - address(): { port: number; family: string; address: string; }; - maxConnections: number; - connections: number; - } - export function createServer(connectionListener?: (socket: Socket) =>void ): Server; - export function createServer(options?: { allowHalfOpen?: boolean; }, connectionListener?: (socket: Socket) =>void ): Server; - export function connect(options: { allowHalfOpen?: boolean; }, connectionListener?: Function): Socket; - export function connect(port: number, host?: string, connectionListener?: Function): Socket; - export function connect(path: string, connectionListener?: Function): Socket; - export function createConnection(options: { allowHalfOpen?: boolean; }, connectionListener?: Function): Socket; - export function createConnection(port: number, host?: string, connectionListener?: Function): Socket; - export function createConnection(path: string, connectionListener?: Function): Socket; - export function isIP(input: string): number; - export function isIPv4(input: string): boolean; - export function isIPv6(input: string): boolean; -} - -declare module "dgram" { - import events = require("events"); - - export function createSocket(type: string, callback?: Function): Socket; - - interface Socket extends events.EventEmitter { - send(buf: Buffer, offset: number, length: number, port: number, address: string, callback?: Function): void; - bind(port: number, address?: string): void; - close(): void; - address: { address: string; family: string; port: number; }; - setBroadcast(flag: boolean): void; - setMulticastTTL(ttl: number): void; - setMulticastLoopback(flag: boolean): void; - addMembership(multicastAddress: string, multicastInterface?: string): void; - dropMembership(multicastAddress: string, multicastInterface?: string): void; - } -} - -declare module "fs" { - import stream = require("stream"); - import events = require("events"); - - interface Stats { - isFile(): boolean; - isDirectory(): boolean; - isBlockDevice(): boolean; - isCharacterDevice(): boolean; - isSymbolicLink(): boolean; - isFIFO(): boolean; - isSocket(): boolean; - dev: number; - ino: number; - mode: number; - nlink: number; - uid: number; - gid: number; - rdev: number; - size: number; - blksize: number; - blocks: number; - atime: Date; - mtime: Date; - ctime: Date; - } - - interface FSWatcher extends events.EventEmitter { - close(): void; - } - - export interface ReadStream extends stream.Readable {} - export interface WriteStream extends stream.Writable {} - - export function rename(oldPath: string, newPath: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function renameSync(oldPath: string, newPath: string): void; - export function truncate(path: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function truncate(path: string, len: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function truncateSync(path: string, len?: number): void; - export function ftruncate(fd: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function ftruncate(fd: number, len: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function ftruncateSync(fd: number, len?: number): void; - export function chown(path: string, uid: number, gid: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function chownSync(path: string, uid: number, gid: number): void; - export function fchown(fd: number, uid: number, gid: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function fchownSync(fd: number, uid: number, gid: number): void; - export function lchown(path: string, uid: number, gid: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function lchownSync(path: string, uid: number, gid: number): void; - export function chmod(path: string, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function chmod(path: string, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function chmodSync(path: string, mode: number): void; - export function chmodSync(path: string, mode: string): void; - export function fchmod(fd: number, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function fchmod(fd: number, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function fchmodSync(fd: number, mode: number): void; - export function fchmodSync(fd: number, mode: string): void; - export function lchmod(path: string, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function lchmod(path: string, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function lchmodSync(path: string, mode: number): void; - export function lchmodSync(path: string, mode: string): void; - export function stat(path: string, callback?: (err: NodeJS.ErrnoException, stats: Stats) => any): void; - export function lstat(path: string, callback?: (err: NodeJS.ErrnoException, stats: Stats) => any): void; - export function fstat(fd: number, callback?: (err: NodeJS.ErrnoException, stats: Stats) => any): void; - export function statSync(path: string): Stats; - export function lstatSync(path: string): Stats; - export function fstatSync(fd: number): Stats; - export function link(srcpath: string, dstpath: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function linkSync(srcpath: string, dstpath: string): void; - export function symlink(srcpath: string, dstpath: string, type?: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function symlinkSync(srcpath: string, dstpath: string, type?: string): void; - export function readlink(path: string, callback?: (err: NodeJS.ErrnoException, linkString: string) => any): void; - export function readlinkSync(path: string): string; - export function realpath(path: string, callback?: (err: NodeJS.ErrnoException, resolvedPath: string) => any): void; - export function realpath(path: string, cache: {[path: string]: string}, callback: (err: NodeJS.ErrnoException, resolvedPath: string) =>any): void; - export function realpathSync(path: string, cache?: {[path: string]: string}): string; - export function unlink(path: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function unlinkSync(path: string): void; - export function rmdir(path: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function rmdirSync(path: string): void; - export function mkdir(path: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function mkdir(path: string, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function mkdir(path: string, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function mkdirSync(path: string, mode?: number): void; - export function mkdirSync(path: string, mode?: string): void; - export function readdir(path: string, callback?: (err: NodeJS.ErrnoException, files: string[]) => void): void; - export function readdirSync(path: string): string[]; - export function close(fd: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function closeSync(fd: number): void; - export function open(path: string, flags: string, callback?: (err: NodeJS.ErrnoException, fd: number) => any): void; - export function open(path: string, flags: string, mode: number, callback?: (err: NodeJS.ErrnoException, fd: number) => any): void; - export function open(path: string, flags: string, mode: string, callback?: (err: NodeJS.ErrnoException, fd: number) => any): void; - export function openSync(path: string, flags: string, mode?: number): number; - export function openSync(path: string, flags: string, mode?: string): number; - export function utimes(path: string, atime: number, mtime: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function utimes(path: string, atime: Date, mtime: Date, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function utimesSync(path: string, atime: number, mtime: number): void; - export function utimesSync(path: string, atime: Date, mtime: Date): void; - export function futimes(fd: number, atime: number, mtime: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function futimes(fd: number, atime: Date, mtime: Date, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function futimesSync(fd: number, atime: number, mtime: number): void; - export function futimesSync(fd: number, atime: Date, mtime: Date): void; - export function fsync(fd: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function fsyncSync(fd: number): void; - export function write(fd: number, buffer: Buffer, offset: number, length: number, position: number, callback?: (err: NodeJS.ErrnoException, written: number, buffer: Buffer) => void): void; - export function writeSync(fd: number, buffer: Buffer, offset: number, length: number, position: number): number; - export function read(fd: number, buffer: Buffer, offset: number, length: number, position: number, callback?: (err: NodeJS.ErrnoException, bytesRead: number, buffer: Buffer) => void): void; - export function readSync(fd: number, buffer: Buffer, offset: number, length: number, position: number): number; - export function readFile(filename: string, encoding: string, callback: (err: NodeJS.ErrnoException, data: string) => void): void; - export function readFile(filename: string, options: { encoding: string; flag?: string; }, callback: (err: NodeJS.ErrnoException, data: string) => void): void; - export function readFile(filename: string, options: { flag?: string; }, callback: (err: NodeJS.ErrnoException, data: Buffer) => void): void; - export function readFile(filename: string, callback: (err: NodeJS.ErrnoException, data: Buffer) => void ): void; - export function readFileSync(filename: string, encoding: string): string; - export function readFileSync(filename: string, options: { encoding: string; flag?: string; }): string; - export function readFileSync(filename: string, options?: { flag?: string; }): Buffer; - export function writeFile(filename: string, data: any, callback?: (err: NodeJS.ErrnoException) => void): void; - export function writeFile(filename: string, data: any, options: { encoding?: string; mode?: number; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; - export function writeFile(filename: string, data: any, options: { encoding?: string; mode?: string; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; - export function writeFileSync(filename: string, data: any, options?: { encoding?: string; mode?: number; flag?: string; }): void; - export function writeFileSync(filename: string, data: any, options?: { encoding?: string; mode?: string; flag?: string; }): void; - export function appendFile(filename: string, data: any, options: { encoding?: string; mode?: number; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; - export function appendFile(filename: string, data: any, options: { encoding?: string; mode?: string; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; - export function appendFile(filename: string, data: any, callback?: (err: NodeJS.ErrnoException) => void): void; - export function appendFileSync(filename: string, data: any, options?: { encoding?: string; mode?: number; flag?: string; }): void; - export function appendFileSync(filename: string, data: any, options?: { encoding?: string; mode?: string; flag?: string; }): void; - export function watchFile(filename: string, listener: (curr: Stats, prev: Stats) => void): void; - export function watchFile(filename: string, options: { persistent?: boolean; interval?: number; }, listener: (curr: Stats, prev: Stats) => void): void; - export function unwatchFile(filename: string, listener?: (curr: Stats, prev: Stats) => void): void; - export function watch(filename: string, listener?: (event: string, filename: string) => any): FSWatcher; - export function watch(filename: string, options: { persistent?: boolean; }, listener?: (event: string, filename: string) => any): FSWatcher; - export function exists(path: string, callback?: (exists: boolean) => void): void; - export function existsSync(path: string): boolean; - export function createReadStream(path: string, options?: { - flags?: string; - encoding?: string; - fd?: string; - mode?: number; - bufferSize?: number; - }): ReadStream; - export function createReadStream(path: string, options?: { - flags?: string; - encoding?: string; - fd?: string; - mode?: string; - bufferSize?: number; - }): ReadStream; - export function createWriteStream(path: string, options?: { - flags?: string; - encoding?: string; - string?: string; - }): WriteStream; -} - -declare module "path" { - export function normalize(p: string): string; - export function join(...paths: any[]): string; - export function resolve(...pathSegments: any[]): string; - export function relative(from: string, to: string): string; - export function dirname(p: string): string; - export function basename(p: string, ext?: string): string; - export function extname(p: string): string; - export var sep: string; -} - -declare module "string_decoder" { - export interface NodeStringDecoder { - write(buffer: Buffer): string; - detectIncompleteChar(buffer: Buffer): number; - } - export var StringDecoder: { - new (encoding: string): NodeStringDecoder; - }; -} - -declare module "tls" { - import crypto = require("crypto"); - import net = require("net"); - import stream = require("stream"); - - var CLIENT_RENEG_LIMIT: number; - var CLIENT_RENEG_WINDOW: number; - - export interface TlsOptions { - pfx?: any; //string or buffer - key?: any; //string or buffer - passphrase?: string; - cert?: any; - ca?: any; //string or buffer - crl?: any; //string or string array - ciphers?: string; - honorCipherOrder?: any; - requestCert?: boolean; - rejectUnauthorized?: boolean; - NPNProtocols?: any; //array or Buffer; - SNICallback?: (servername: string) => any; - } - - export interface ConnectionOptions { - host?: string; - port?: number; - socket?: net.Socket; - pfx?: any; //string | Buffer - key?: any; //string | Buffer - passphrase?: string; - cert?: any; //string | Buffer - ca?: any; //Array of string | Buffer - rejectUnauthorized?: boolean; - NPNProtocols?: any; //Array of string | Buffer - servername?: string; - } - - export interface Server extends net.Server { - // Extended base methods - listen(port: number, host?: string, backlog?: number, listeningListener?: Function): Server; - listen(path: string, listeningListener?: Function): Server; - listen(handle: any, listeningListener?: Function): Server; - - listen(port: number, host?: string, callback?: Function): Server; - close(): Server; - address(): { port: number; family: string; address: string; }; - addContext(hostName: string, credentials: { - key: string; - cert: string; - ca: string; - }): void; - maxConnections: number; - connections: number; - } - - export interface ClearTextStream extends stream.Duplex { - authorized: boolean; - authorizationError: Error; - getPeerCertificate(): any; - getCipher: { - name: string; - version: string; - }; - address: { - port: number; - family: string; - address: string; - }; - remoteAddress: string; - remotePort: number; - } - - export interface SecurePair { - encrypted: any; - cleartext: any; - } - - export function createServer(options: TlsOptions, secureConnectionListener?: (cleartextStream: ClearTextStream) =>void ): Server; - export function connect(options: TlsOptions, secureConnectionListener?: () =>void ): ClearTextStream; - export function connect(port: number, host?: string, options?: ConnectionOptions, secureConnectListener?: () =>void ): ClearTextStream; - export function connect(port: number, options?: ConnectionOptions, secureConnectListener?: () =>void ): ClearTextStream; - export function createSecurePair(credentials?: crypto.Credentials, isServer?: boolean, requestCert?: boolean, rejectUnauthorized?: boolean): SecurePair; -} - -declare module "crypto" { - export interface CredentialDetails { - pfx: string; - key: string; - passphrase: string; - cert: string; - ca: any; //string | string array - crl: any; //string | string array - ciphers: string; - } - export interface Credentials { context?: any; } - export function createCredentials(details: CredentialDetails): Credentials; - export function createHash(algorithm: string): Hash; - export function createHmac(algorithm: string, key: string): Hmac; - interface Hash { - update(data: any, input_encoding?: string): Hash; - digest(encoding?: string): string; - } - interface Hmac { - update(data: any, input_encoding?: string): Hmac; - digest(encoding?: string): string; - } - export function createCipher(algorithm: string, password: any): Cipher; - export function createCipheriv(algorithm: string, key: any, iv: any): Cipher; - interface Cipher { - update(data: any, input_encoding?: string, output_encoding?: string): string; - final(output_encoding?: string): string; - setAutoPadding(auto_padding: boolean): void; - createDecipher(algorithm: string, password: any): Decipher; - createDecipheriv(algorithm: string, key: any, iv: any): Decipher; - } - interface Decipher { - update(data: any, input_encoding?: string, output_encoding?: string): void; - final(output_encoding?: string): string; - setAutoPadding(auto_padding: boolean): void; - } - export function createSign(algorithm: string): Signer; - interface Signer { - update(data: any): void; - sign(private_key: string, output_format: string): string; - } - export function createVerify(algorithm: string): Verify; - interface Verify { - update(data: any): void; - verify(object: string, signature: string, signature_format?: string): boolean; - } - export function createDiffieHellman(prime_length: number): DiffieHellman; - export function createDiffieHellman(prime: number, encoding?: string): DiffieHellman; - interface DiffieHellman { - generateKeys(encoding?: string): string; - computeSecret(other_public_key: string, input_encoding?: string, output_encoding?: string): string; - getPrime(encoding?: string): string; - getGenerator(encoding: string): string; - getPublicKey(encoding?: string): string; - getPrivateKey(encoding?: string): string; - setPublicKey(public_key: string, encoding?: string): void; - setPrivateKey(public_key: string, encoding?: string): void; - } - export function getDiffieHellman(group_name: string): DiffieHellman; - export function pbkdf2(password: string, salt: string, iterations: number, keylen: number, callback: (err: Error, derivedKey: string) => any): void; - export function pbkdf2Sync(password: string, salt: string, iterations: number, keylen: number) : Buffer; - export function randomBytes(size: number): Buffer; - export function randomBytes(size: number, callback: (err: Error, buf: Buffer) =>void ): void; - export function pseudoRandomBytes(size: number): Buffer; - export function pseudoRandomBytes(size: number, callback: (err: Error, buf: Buffer) =>void ): void; -} - -declare module "stream" { - import events = require("events"); - - export interface ReadableOptions { - highWaterMark?: number; - encoding?: string; - objectMode?: boolean; - } - - export class Readable extends events.EventEmitter implements NodeJS.ReadableStream { - readable: boolean; - constructor(opts?: ReadableOptions); - _read(size: number): void; - read(size?: number): any; - setEncoding(encoding: string): void; - pause(): void; - resume(): void; - pipe(destination: T, options?: { end?: boolean; }): T; - unpipe(destination?: T): void; - unshift(chunk: string): void; - unshift(chunk: Buffer): void; - wrap(oldStream: NodeJS.ReadableStream): NodeJS.ReadableStream; - push(chunk: any, encoding?: string): boolean; - } - - export interface WritableOptions { - highWaterMark?: number; - decodeStrings?: boolean; - } - - export class Writable extends events.EventEmitter implements NodeJS.WritableStream { - writable: boolean; - constructor(opts?: WritableOptions); - _write(data: Buffer, encoding: string, callback: Function): void; - _write(data: string, encoding: string, callback: Function): void; - write(buffer: Buffer, cb?: Function): boolean; - write(str: string, cb?: Function): boolean; - write(str: string, encoding?: string, cb?: Function): boolean; - end(): void; - end(buffer: Buffer, cb?: Function): void; - end(str: string, cb?: Function): void; - end(str: string, encoding?: string, cb?: Function): void; - } - - export interface DuplexOptions extends ReadableOptions, WritableOptions { - allowHalfOpen?: boolean; - } - - // Note: Duplex extends both Readable and Writable. - export class Duplex extends Readable implements NodeJS.ReadWriteStream { - writable: boolean; - constructor(opts?: DuplexOptions); - _write(data: Buffer, encoding: string, callback: Function): void; - _write(data: string, encoding: string, callback: Function): void; - write(buffer: Buffer, cb?: Function): boolean; - write(str: string, cb?: Function): boolean; - write(str: string, encoding?: string, cb?: Function): boolean; - end(): void; - end(buffer: Buffer, cb?: Function): void; - end(str: string, cb?: Function): void; - end(str: string, encoding?: string, cb?: Function): void; - } - - export interface TransformOptions extends ReadableOptions, WritableOptions {} - - // Note: Transform lacks the _read and _write methods of Readable/Writable. - export class Transform extends events.EventEmitter implements NodeJS.ReadWriteStream { - readable: boolean; - writable: boolean; - constructor(opts?: TransformOptions); - _transform(chunk: Buffer, encoding: string, callback: Function): void; - _transform(chunk: string, encoding: string, callback: Function): void; - _flush(callback: Function): void; - read(size?: number): any; - setEncoding(encoding: string): void; - pause(): void; - resume(): void; - pipe(destination: T, options?: { end?: boolean; }): T; - unpipe(destination?: T): void; - unshift(chunk: string): void; - unshift(chunk: Buffer): void; - wrap(oldStream: NodeJS.ReadableStream): NodeJS.ReadableStream; - push(chunk: any, encoding?: string): boolean; - write(buffer: Buffer, cb?: Function): boolean; - write(str: string, cb?: Function): boolean; - write(str: string, encoding?: string, cb?: Function): boolean; - end(): void; - end(buffer: Buffer, cb?: Function): void; - end(str: string, cb?: Function): void; - end(str: string, encoding?: string, cb?: Function): void; - } - - export class PassThrough extends Transform {} -} - -declare module "util" { - export interface InspectOptions { - showHidden?: boolean; - depth?: number; - colors?: boolean; - customInspect?: boolean; - } - - export function format(format: any, ...param: any[]): string; - export function debug(string: string): void; - export function error(...param: any[]): void; - export function puts(...param: any[]): void; - export function print(...param: any[]): void; - export function log(string: string): void; - export function inspect(object: any, showHidden?: boolean, depth?: number, color?: boolean): string; - export function inspect(object: any, options: InspectOptions): string; - export function isArray(object: any): boolean; - export function isRegExp(object: any): boolean; - export function isDate(object: any): boolean; - export function isError(object: any): boolean; - export function inherits(constructor: any, superConstructor: any): void; -} - -declare module "assert" { - function internal (value: any, message?: string): void; - module internal { - export class AssertionError implements Error { - name: string; - message: string; - actual: any; - expected: any; - operator: string; - generatedMessage: boolean; - - constructor(options?: {message?: string; actual?: any; expected?: any; - operator?: string; stackStartFunction?: Function}); - } - - export function fail(actual?: any, expected?: any, message?: string, operator?: string): void; - export function ok(value: any, message?: string): void; - export function equal(actual: any, expected: any, message?: string): void; - export function notEqual(actual: any, expected: any, message?: string): void; - export function deepEqual(actual: any, expected: any, message?: string): void; - export function notDeepEqual(actual: any, expected: any, message?: string): void; - export function strictEqual(actual: any, expected: any, message?: string): void; - export function notStrictEqual(actual: any, expected: any, message?: string): void; - export var throws: { - (block: Function, message?: string): void; - (block: Function, error: Function, message?: string): void; - (block: Function, error: RegExp, message?: string): void; - (block: Function, error: (err: any) => boolean, message?: string): void; - }; - - export var doesNotThrow: { - (block: Function, message?: string): void; - (block: Function, error: Function, message?: string): void; - (block: Function, error: RegExp, message?: string): void; - (block: Function, error: (err: any) => boolean, message?: string): void; - }; - - export function ifError(value: any): void; - } - - export = internal; -} - -declare module "tty" { - import net = require("net"); - - export function isatty(fd: number): boolean; - export interface ReadStream extends net.Socket { - isRaw: boolean; - setRawMode(mode: boolean): void; - } - export interface WriteStream extends net.Socket { - columns: number; - rows: number; - } -} - -declare module "domain" { - import events = require("events"); - - export class Domain extends events.EventEmitter { - run(fn: Function): void; - add(emitter: events.EventEmitter): void; - remove(emitter: events.EventEmitter): void; - bind(cb: (err: Error, data: any) => any): any; - intercept(cb: (data: any) => any): any; - dispose(): void; - - addListener(event: string, listener: Function): Domain; - on(event: string, listener: Function): Domain; - once(event: string, listener: Function): Domain; - removeListener(event: string, listener: Function): Domain; - removeAllListeners(event?: string): Domain; - } - - export function create(): Domain; -} \ No newline at end of file diff --git a/src/harness/harness.ts b/src/harness/harness.ts index 985d00bcf63..6afb0cfccdb 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -18,12 +18,13 @@ /// /// /// -/// -/// -/// /// /// /// +/// +/// +/// + // Block scoped definitions work poorly for global variables, temporarily enable var /* tslint:disable:no-var-keyword */ @@ -32,7 +33,13 @@ var _chai: typeof chai = require("chai"); var assert: typeof _chai.assert = _chai.assert; declare var __dirname: string; // Node-specific -var global = Function("return this").call(undefined); +var global: NodeJS.Global = Function("return this").call(undefined); +declare namespace NodeJS { + export interface Global { + WScript: typeof WScript; + ActiveXObject: typeof ActiveXObject; + } +} /* tslint:enable:no-var-keyword */ namespace Utils { @@ -57,7 +64,7 @@ namespace Utils { export let currentExecutionEnvironment = getExecutionEnvironment(); - const Buffer: BufferConstructor = currentExecutionEnvironment !== ExecutionEnvironment.Browser + const Buffer: typeof global.Buffer = currentExecutionEnvironment !== ExecutionEnvironment.Browser ? require("buffer").Buffer : undefined; diff --git a/src/harness/tsconfig.json b/src/harness/tsconfig.json new file mode 100644 index 00000000000..ee6a4ebe866 --- /dev/null +++ b/src/harness/tsconfig.json @@ -0,0 +1,93 @@ +{ + "compilerOptions": { + "noImplicitAny": true, + "pretty": true, + "removeComments": false, + "preserveConstEnums": true, + "outFile": "../../built/local/run.js", + "sourceMap": true, + "declaration": false, + "stripInternal": true, + "types": [ + "node", "mocha", "chai" + ] + }, + "files": [ + "../compiler/core.ts", + "../compiler/sys.ts", + "../compiler/types.ts", + "../compiler/scanner.ts", + "../compiler/parser.ts", + "../compiler/utilities.ts", + "../compiler/binder.ts", + "../compiler/checker.ts", + "../compiler/sourcemap.ts", + "../compiler/declarationEmitter.ts", + "../compiler/emitter.ts", + "../compiler/program.ts", + "../compiler/commandLineParser.ts", + "../compiler/diagnosticInformationMap.generated.ts", + "../services/breakpoints.ts", + "../services/navigateTo.ts", + "../services/navigationBar.ts", + "../services/outliningElementsCollector.ts", + "../services/patternMatcher.ts", + "../services/services.ts", + "../services/shims.ts", + "../services/signatureHelp.ts", + "../services/utilities.ts", + "../services/jsTyping.ts", + "../services/formatting/formatting.ts", + "../services/formatting/formattingContext.ts", + "../services/formatting/formattingRequestKind.ts", + "../services/formatting/formattingScanner.ts", + "../services/formatting/references.ts", + "../services/formatting/rule.ts", + "../services/formatting/ruleAction.ts", + "../services/formatting/ruleDescriptor.ts", + "../services/formatting/ruleFlag.ts", + "../services/formatting/ruleOperation.ts", + "../services/formatting/ruleOperationContext.ts", + "../services/formatting/rules.ts", + "../services/formatting/rulesMap.ts", + "../services/formatting/rulesProvider.ts", + "../services/formatting/smartIndenter.ts", + "../services/formatting/tokenRange.ts", + "harness.ts", + "sourceMapRecorder.ts", + "harnessLanguageService.ts", + "fourslash.ts", + "runnerbase.ts", + "compilerRunner.ts", + "typeWriter.ts", + "fourslashRunner.ts", + "projectsRunner.ts", + "loggedIO.ts", + "rwcRunner.ts", + "test262Runner.ts", + "runner.ts", + "../server/protocol.d.ts", + "../server/session.ts", + "../server/client.ts", + "../server/editorServices.ts", + "../../tests/cases/unittests/incrementalParser.ts", + "../../tests/cases/unittests/jsDocParsing.ts", + "../../tests/cases/unittests/services/colorization.ts", + "../../tests/cases/unittests/services/documentRegistry.ts", + "../../tests/cases/unittests/services/preProcessFile.ts", + "../../tests/cases/unittests/services/patternMatcher.ts", + "../../tests/cases/unittests/session.ts", + "../../tests/cases/unittests/versionCache.ts", + "../../tests/cases/unittests/convertToBase64.ts", + "../../tests/cases/unittests/transpile.ts", + "../../tests/cases/unittests/reuseProgramStructure.ts", + "../../tests/cases/unittests/cachingInServerLSHost.ts", + "../../tests/cases/unittests/moduleResolution.ts", + "../../tests/cases/unittests/tsconfigParsing.ts", + "../../tests/cases/unittests/commandLineParsing.ts", + "../../tests/cases/unittests/convertCompilerOptionsFromJson.ts", + "../../tests/cases/unittests/convertTypingOptionsFromJson.ts", + "../../tests/cases/unittests/tsserverProjectSystem.ts", + "../../tests/cases/unittests/matchFiles.ts" + ] +} diff --git a/src/server/node.d.ts b/src/server/node.d.ts deleted file mode 100644 index 0bde0bb6602..00000000000 --- a/src/server/node.d.ts +++ /dev/null @@ -1,682 +0,0 @@ -// Type definitions for Node.js v0.10.1 -// Project: http://nodejs.org/ -// Definitions by: Microsoft TypeScript , DefinitelyTyped -// Definitions: https://github.com/borisyankov/DefinitelyTyped - -/************************************************ -* * -* Node.js v0.10.1 API * -* * -************************************************/ - -/************************************************ -* * -* GLOBAL * -* * -************************************************/ -declare var process: NodeJS.Process; -declare var global: any; - -declare var __filename: string; -declare var __dirname: string; - -declare function setTimeout(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer; -declare function clearTimeout(timeoutId: NodeJS.Timer): void; -declare function setInterval(callback: (...args: any[]) => void, ms: number, ...args: any[]): NodeJS.Timer; -declare function clearInterval(intervalId: NodeJS.Timer): void; -declare function setImmediate(callback: (...args: any[]) => void, ...args: any[]): any; -declare function clearImmediate(immediateId: any): void; - -declare var require: { - (id: string): any; - resolve(id: string): string; - cache: any; - extensions: any; - main: any; -}; - -declare var module: { - exports: any; - require(id: string): any; - id: string; - filename: string; - loaded: boolean; - parent: any; - children: any[]; -}; - -// Same as module.exports -declare var exports: any; -declare var SlowBuffer: { - new (str: string, encoding?: string): Buffer; - new (size: number): Buffer; - new (size: Uint8Array): Buffer; - new (array: any[]): Buffer; - prototype: Buffer; - isBuffer(obj: any): boolean; - byteLength(string: string, encoding?: string): number; - concat(list: Buffer[], totalLength?: number): Buffer; -}; - - -// Buffer class -interface Buffer extends NodeBuffer { } -interface BufferConstructor { - new (str: string, encoding?: string): Buffer; - new (size: number): Buffer; - new (size: Uint8Array): Buffer; - new (array: any[]): Buffer; - prototype: Buffer; - isBuffer(obj: any): boolean; - byteLength(string: string, encoding?: string): number; - concat(list: Buffer[], totalLength?: number): Buffer; -} -declare var Buffer: BufferConstructor; - -/************************************************ -* * -* GLOBAL INTERFACES * -* * -************************************************/ -declare namespace NodeJS { - export interface ErrnoException extends Error { - errno?: any; - code?: string; - path?: string; - syscall?: string; - } - - export interface EventEmitter { - addListener(event: string, listener: Function): EventEmitter; - on(event: string, listener: Function): EventEmitter; - once(event: string, listener: Function): EventEmitter; - removeListener(event: string, listener: Function): EventEmitter; - removeAllListeners(event?: string): EventEmitter; - setMaxListeners(n: number): void; - listeners(event: string): Function[]; - emit(event: string, ...args: any[]): boolean; - } - - export interface ReadableStream extends EventEmitter { - readable: boolean; - read(size?: number): any; - setEncoding(encoding: string): void; - pause(): void; - resume(): void; - pipe(destination: T, options?: { end?: boolean; }): T; - unpipe(destination?: T): void; - unshift(chunk: string): void; - unshift(chunk: Buffer): void; - wrap(oldStream: ReadableStream): ReadableStream; - } - - export interface WritableStream extends EventEmitter { - writable: boolean; - write(buffer: Buffer, cb?: Function): boolean; - write(str: string, cb?: Function): boolean; - write(str: string, encoding?: string, cb?: Function): boolean; - end(): void; - end(buffer: Buffer, cb?: Function): void; - end(str: string, cb?: Function): void; - end(str: string, encoding?: string, cb?: Function): void; - } - - export interface ReadWriteStream extends ReadableStream, WritableStream { } - - interface WindowSize { - columns: number; - rows: number; - } - - export interface Process extends EventEmitter { - stdout: WritableStream & WindowSize; - stderr: WritableStream & WindowSize; - stdin: ReadableStream; - argv: string[]; - execPath: string; - abort(): void; - chdir(directory: string): void; - cwd(): string; - env: any; - exit(code?: number): void; - getgid(): number; - setgid(id: number): void; - setgid(id: string): void; - getuid(): number; - setuid(id: number): void; - setuid(id: string): void; - version: string; - versions: { - http_parser: string; - node: string; - v8: string; - ares: string; - uv: string; - zlib: string; - openssl: string; - }; - config: { - target_defaults: { - cflags: any[]; - default_configuration: string; - defines: string[]; - include_dirs: string[]; - libraries: string[]; - }; - variables: { - clang: number; - host_arch: string; - node_install_npm: boolean; - node_install_waf: boolean; - node_prefix: string; - node_shared_openssl: boolean; - node_shared_v8: boolean; - node_shared_zlib: boolean; - node_use_dtrace: boolean; - node_use_etw: boolean; - node_use_openssl: boolean; - target_arch: string; - v8_no_strict_aliasing: number; - v8_use_snapshot: boolean; - visibility: string; - }; - }; - kill(pid: number, signal?: string): void; - pid: number; - title: string; - arch: string; - platform: string; - memoryUsage(): { rss: number; heapTotal: number; heapUsed: number; }; - nextTick(callback: Function): void; - umask(mask?: number): number; - uptime(): number; - hrtime(time?: number[]): number[]; - - // Worker - send? (message: any, sendHandle?: any): void; - } - - export interface Timer { - ref(): void; - unref(): void; - } -} - - -/** - * @deprecated - */ -interface NodeBuffer { - [index: number]: number; - write(string: string, offset?: number, length?: number, encoding?: string): number; - toString(encoding?: string, start?: number, end?: number): string; - toJSON(): any; - length: number; - copy(targetBuffer: Buffer, targetStart?: number, sourceStart?: number, sourceEnd?: number): number; - slice(start?: number, end?: number): Buffer; - readUInt8(offset: number, noAsset?: boolean): number; - readUInt16LE(offset: number, noAssert?: boolean): number; - readUInt16BE(offset: number, noAssert?: boolean): number; - readUInt32LE(offset: number, noAssert?: boolean): number; - readUInt32BE(offset: number, noAssert?: boolean): number; - readInt8(offset: number, noAssert?: boolean): number; - readInt16LE(offset: number, noAssert?: boolean): number; - readInt16BE(offset: number, noAssert?: boolean): number; - readInt32LE(offset: number, noAssert?: boolean): number; - readInt32BE(offset: number, noAssert?: boolean): number; - readFloatLE(offset: number, noAssert?: boolean): number; - readFloatBE(offset: number, noAssert?: boolean): number; - readDoubleLE(offset: number, noAssert?: boolean): number; - readDoubleBE(offset: number, noAssert?: boolean): number; - writeUInt8(value: number, offset: number, noAssert?: boolean): void; - writeUInt16LE(value: number, offset: number, noAssert?: boolean): void; - writeUInt16BE(value: number, offset: number, noAssert?: boolean): void; - writeUInt32LE(value: number, offset: number, noAssert?: boolean): void; - writeUInt32BE(value: number, offset: number, noAssert?: boolean): void; - writeInt8(value: number, offset: number, noAssert?: boolean): void; - writeInt16LE(value: number, offset: number, noAssert?: boolean): void; - writeInt16BE(value: number, offset: number, noAssert?: boolean): void; - writeInt32LE(value: number, offset: number, noAssert?: boolean): void; - writeInt32BE(value: number, offset: number, noAssert?: boolean): void; - writeFloatLE(value: number, offset: number, noAssert?: boolean): void; - writeFloatBE(value: number, offset: number, noAssert?: boolean): void; - writeDoubleLE(value: number, offset: number, noAssert?: boolean): void; - writeDoubleBE(value: number, offset: number, noAssert?: boolean): void; - fill(value: any, offset?: number, end?: number): void; -} - -declare namespace NodeJS { - export interface Path { - normalize(p: string): string; - join(...paths: any[]): string; - resolve(...pathSegments: any[]): string; - relative(from: string, to: string): string; - dirname(p: string): string; - basename(p: string, ext?: string): string; - extname(p: string): string; - sep: string; - } -} - -declare namespace NodeJS { - export interface ReadLineInstance extends EventEmitter { - setPrompt(prompt: string, length: number): void; - prompt(preserveCursor?: boolean): void; - question(query: string, callback: Function): void; - pause(): void; - resume(): void; - close(): void; - write(data: any, key?: any): void; - } - export interface ReadLineOptions { - input: NodeJS.ReadableStream; - output: NodeJS.WritableStream; - completer?: Function; - terminal?: boolean; - } - - export interface ReadLine { - createInterface(options: ReadLineOptions): ReadLineInstance; - } -} - -declare namespace NodeJS { - namespace events { - export class EventEmitter implements NodeJS.EventEmitter { - static listenerCount(emitter: EventEmitter, event: string): number; - - addListener(event: string, listener: Function): EventEmitter; - on(event: string, listener: Function): EventEmitter; - once(event: string, listener: Function): EventEmitter; - removeListener(event: string, listener: Function): EventEmitter; - removeAllListeners(event?: string): EventEmitter; - setMaxListeners(n: number): void; - listeners(event: string): Function[]; - emit(event: string, ...args: any[]): boolean; - } - } -} - -declare namespace NodeJS { - namespace stream { - - export interface Stream extends events.EventEmitter { - pipe(destination: T, options?: { end?: boolean; }): T; - } - - export interface ReadableOptions { - highWaterMark?: number; - encoding?: string; - objectMode?: boolean; - } - - export class Readable extends events.EventEmitter implements NodeJS.ReadableStream { - readable: boolean; - constructor(opts?: ReadableOptions); - _read(size: number): void; - read(size?: number): any; - setEncoding(encoding: string): void; - pause(): void; - resume(): void; - pipe(destination: T, options?: { end?: boolean; }): T; - unpipe(destination?: T): void; - unshift(chunk: string): void; - unshift(chunk: Buffer): void; - wrap(oldStream: NodeJS.ReadableStream): NodeJS.ReadableStream; - push(chunk: any, encoding?: string): boolean; - } - - export interface WritableOptions { - highWaterMark?: number; - decodeStrings?: boolean; - } - - export class Writable extends events.EventEmitter implements NodeJS.WritableStream { - writable: boolean; - constructor(opts?: WritableOptions); - _write(data: Buffer, encoding: string, callback: Function): void; - _write(data: string, encoding: string, callback: Function): void; - write(buffer: Buffer, cb?: Function): boolean; - write(str: string, cb?: Function): boolean; - write(str: string, encoding?: string, cb?: Function): boolean; - end(): void; - end(buffer: Buffer, cb?: Function): void; - end(str: string, cb?: Function): void; - end(str: string, encoding?: string, cb?: Function): void; - } - - export interface DuplexOptions extends ReadableOptions, WritableOptions { - allowHalfOpen?: boolean; - } - - // Note: Duplex extends both Readable and Writable. - export class Duplex extends Readable implements NodeJS.ReadWriteStream { - writable: boolean; - constructor(opts?: DuplexOptions); - _write(data: Buffer, encoding: string, callback: Function): void; - _write(data: string, encoding: string, callback: Function): void; - write(buffer: Buffer, cb?: Function): boolean; - write(str: string, cb?: Function): boolean; - write(str: string, encoding?: string, cb?: Function): boolean; - end(): void; - end(buffer: Buffer, cb?: Function): void; - end(str: string, cb?: Function): void; - end(str: string, encoding?: string, cb?: Function): void; - } - - export interface TransformOptions extends ReadableOptions, WritableOptions { } - - // Note: Transform lacks the _read and _write methods of Readable/Writable. - export class Transform extends events.EventEmitter implements NodeJS.ReadWriteStream { - readable: boolean; - writable: boolean; - constructor(opts?: TransformOptions); - _transform(chunk: Buffer, encoding: string, callback: Function): void; - _transform(chunk: string, encoding: string, callback: Function): void; - _flush(callback: Function): void; - read(size?: number): any; - setEncoding(encoding: string): void; - pause(): void; - resume(): void; - pipe(destination: T, options?: { end?: boolean; }): T; - unpipe(destination?: T): void; - unshift(chunk: string): void; - unshift(chunk: Buffer): void; - wrap(oldStream: NodeJS.ReadableStream): NodeJS.ReadableStream; - push(chunk: any, encoding?: string): boolean; - write(buffer: Buffer, cb?: Function): boolean; - write(str: string, cb?: Function): boolean; - write(str: string, encoding?: string, cb?: Function): boolean; - end(): void; - end(buffer: Buffer, cb?: Function): void; - end(str: string, cb?: Function): void; - end(str: string, encoding?: string, cb?: Function): void; - } - - export class PassThrough extends Transform { } - } -} - -declare namespace NodeJS { - namespace fs { - interface Stats { - isFile(): boolean; - isDirectory(): boolean; - isBlockDevice(): boolean; - isCharacterDevice(): boolean; - isSymbolicLink(): boolean; - isFIFO(): boolean; - isSocket(): boolean; - dev: number; - ino: number; - mode: number; - nlink: number; - uid: number; - gid: number; - rdev: number; - size: number; - blksize: number; - blocks: number; - atime: Date; - mtime: Date; - ctime: Date; - } - interface FSWatcher extends events.EventEmitter { - close(): void; - } - - export interface ReadStream extends stream.Readable { } - export interface WriteStream extends stream.Writable { } - - export function rename(oldPath: string, newPath: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function renameSync(oldPath: string, newPath: string): void; - export function truncate(path: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function truncate(path: string, len: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function truncateSync(path: string, len?: number): void; - export function ftruncate(fd: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function ftruncate(fd: number, len: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function ftruncateSync(fd: number, len?: number): void; - export function chown(path: string, uid: number, gid: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function chownSync(path: string, uid: number, gid: number): void; - export function fchown(fd: number, uid: number, gid: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function fchownSync(fd: number, uid: number, gid: number): void; - export function lchown(path: string, uid: number, gid: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function lchownSync(path: string, uid: number, gid: number): void; - export function chmod(path: string, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function chmod(path: string, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function chmodSync(path: string, mode: number): void; - export function chmodSync(path: string, mode: string): void; - export function fchmod(fd: number, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function fchmod(fd: number, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function fchmodSync(fd: number, mode: number): void; - export function fchmodSync(fd: number, mode: string): void; - export function lchmod(path: string, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function lchmod(path: string, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function lchmodSync(path: string, mode: number): void; - export function lchmodSync(path: string, mode: string): void; - export function stat(path: string, callback?: (err: NodeJS.ErrnoException, stats: Stats) => any): void; - export function lstat(path: string, callback?: (err: NodeJS.ErrnoException, stats: Stats) => any): void; - export function fstat(fd: number, callback?: (err: NodeJS.ErrnoException, stats: Stats) => any): void; - export function statSync(path: string): Stats; - export function lstatSync(path: string): Stats; - export function fstatSync(fd: number): Stats; - export function link(srcpath: string, dstpath: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function linkSync(srcpath: string, dstpath: string): void; - export function symlink(srcpath: string, dstpath: string, type?: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function symlinkSync(srcpath: string, dstpath: string, type?: string): void; - export function readlink(path: string, callback?: (err: NodeJS.ErrnoException, linkString: string) => any): void; - export function readlinkSync(path: string): string; - export function realpath(path: string, callback?: (err: NodeJS.ErrnoException, resolvedPath: string) => any): void; - export function realpath(path: string, cache: { [path: string]: string }, callback: (err: NodeJS.ErrnoException, resolvedPath: string) => any): void; - export function realpathSync(path: string, cache?: { [path: string]: string }): string; - export function unlink(path: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function unlinkSync(path: string): void; - export function rmdir(path: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function rmdirSync(path: string): void; - export function mkdir(path: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function mkdir(path: string, mode: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function mkdir(path: string, mode: string, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function mkdirSync(path: string, mode?: number): void; - export function mkdirSync(path: string, mode?: string): void; - export function readdir(path: string, callback?: (err: NodeJS.ErrnoException, files: string[]) => void): void; - export function readdirSync(path: string): string[]; - export function close(fd: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function closeSync(fd: number): void; - export function open(path: string, flags: string, callback?: (err: NodeJS.ErrnoException, fd: number) => any): void; - export function open(path: string, flags: string, mode: number, callback?: (err: NodeJS.ErrnoException, fd: number) => any): void; - export function open(path: string, flags: string, mode: string, callback?: (err: NodeJS.ErrnoException, fd: number) => any): void; - export function openSync(path: string, flags: string, mode?: number): number; - export function openSync(path: string, flags: string, mode?: string): number; - export function utimes(path: string, atime: number, mtime: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function utimes(path: string, atime: Date, mtime: Date, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function utimesSync(path: string, atime: number, mtime: number): void; - export function utimesSync(path: string, atime: Date, mtime: Date): void; - export function futimes(fd: number, atime: number, mtime: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function futimes(fd: number, atime: Date, mtime: Date, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function futimesSync(fd: number, atime: number, mtime: number): void; - export function futimesSync(fd: number, atime: Date, mtime: Date): void; - export function fsync(fd: number, callback?: (err?: NodeJS.ErrnoException) => void): void; - export function fsyncSync(fd: number): void; - export function write(fd: number, buffer: Buffer, offset: number, length: number, position: number, callback?: (err: NodeJS.ErrnoException, written: number, buffer: Buffer) => void): void; - export function writeSync(fd: number, buffer: Buffer, offset: number, length: number, position: number): number; - export function read(fd: number, buffer: Buffer, offset: number, length: number, position: number, callback?: (err: NodeJS.ErrnoException, bytesRead: number, buffer: Buffer) => void): void; - export function readSync(fd: number, buffer: Buffer, offset: number, length: number, position: number): number; - export function readFile(filename: string, encoding: string, callback: (err: NodeJS.ErrnoException, data: string) => void): void; - export function readFile(filename: string, options: { encoding: string; flag?: string; }, callback: (err: NodeJS.ErrnoException, data: string) => void): void; - export function readFile(filename: string, options: { flag?: string; }, callback: (err: NodeJS.ErrnoException, data: Buffer) => void): void; - export function readFile(filename: string, callback: (err: NodeJS.ErrnoException, data: Buffer) => void): void; - export function readFileSync(filename: string, encoding: string): string; - export function readFileSync(filename: string, options: { encoding: string; flag?: string; }): string; - export function readFileSync(filename: string, options?: { flag?: string; }): Buffer; - export function writeFile(filename: string, data: any, callback?: (err: NodeJS.ErrnoException) => void): void; - export function writeFile(filename: string, data: any, options: { encoding?: string; mode?: number; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; - export function writeFile(filename: string, data: any, options: { encoding?: string; mode?: string; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; - export function writeFileSync(filename: string, data: any, options?: { encoding?: string; mode?: number; flag?: string; }): void; - export function writeFileSync(filename: string, data: any, options?: { encoding?: string; mode?: string; flag?: string; }): void; - export function appendFile(filename: string, data: any, options: { encoding?: string; mode?: number; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; - export function appendFile(filename: string, data: any, options: { encoding?: string; mode?: string; flag?: string; }, callback?: (err: NodeJS.ErrnoException) => void): void; - export function appendFile(filename: string, data: any, callback?: (err: NodeJS.ErrnoException) => void): void; - export function appendFileSync(filename: string, data: any, options?: { encoding?: string; mode?: number; flag?: string; }): void; - export function appendFileSync(filename: string, data: any, options?: { encoding?: string; mode?: string; flag?: string; }): void; - export function watchFile(filename: string, listener: (curr: Stats, prev: Stats) => void): void; - export function watchFile(filename: string, options: { persistent?: boolean; interval?: number; }, listener: (curr: Stats, prev: Stats) => void): void; - export function unwatchFile(filename: string, listener?: (curr: Stats, prev: Stats) => void): void; - export function watch(filename: string, listener?: (event: string, filename: string) => any): FSWatcher; - export function watch(filename: string, options: { persistent?: boolean; }, listener?: (event: string, filename: string) => any): FSWatcher; - export function exists(path: string, callback?: (exists: boolean) => void): void; - export function existsSync(path: string): boolean; - export function createReadStream(path: string, options?: { - flags?: string; - encoding?: string; - fd?: string; - mode?: number; - bufferSize?: number; - }): ReadStream; - export function createReadStream(path: string, options?: { - flags?: string; - encoding?: string; - fd?: string; - mode?: string; - bufferSize?: number; - }): ReadStream; - export function createWriteStream(path: string, options?: { - flags?: string; - encoding?: string; - string?: string; - }): WriteStream; - } -} - -declare namespace NodeJS { - namespace path { - export function normalize(p: string): string; - export function join(...paths: any[]): string; - export function resolve(...pathSegments: any[]): string; - export function relative(from: string, to: string): string; - export function dirname(p: string): string; - export function basename(p: string, ext?: string): string; - export function extname(p: string): string; - export var sep: string; - } -} - -declare namespace NodeJS { - namespace _debugger { - export interface Packet { - raw: string; - headers: string[]; - body: Message; - } - - export interface Message { - seq: number; - type: string; - } - - export interface RequestInfo { - command: string; - arguments: any; - } - - export interface Request extends Message, RequestInfo { - } - - export interface Event extends Message { - event: string; - body?: any; - } - - export interface Response extends Message { - request_seq: number; - success: boolean; - /** Contains error message if success === false. */ - message?: string; - /** Contains message body if success === true. */ - body?: any; - } - - export interface BreakpointMessageBody { - type: string; - target: number; - line: number; - } - - export class Protocol { - res: Packet; - state: string; - execute(data: string): void; - serialize(rq: Request): string; - onResponse: (pkt: Packet) => void; - } - - export var NO_FRAME: number; - export var port: number; - - export interface ScriptDesc { - name: string; - id: number; - isNative?: boolean; - handle?: number; - type: string; - lineOffset?: number; - columnOffset?: number; - lineCount?: number; - } - - export interface Breakpoint { - id: number; - scriptId: number; - script: ScriptDesc; - line: number; - condition?: string; - scriptReq?: string; - } - - export interface RequestHandler { - (err: boolean, body: Message, res: Packet): void; - request_seq?: number; - } - - export interface ResponseBodyHandler { - (err: boolean, body?: any): void; - request_seq?: number; - } - - export interface ExceptionInfo { - text: string; - } - - export interface BreakResponse { - script?: ScriptDesc; - exception?: ExceptionInfo; - sourceLine: number; - sourceLineText: string; - sourceColumn: number; - } - - export function SourceInfo(body: BreakResponse): string; - - export class Client extends events.EventEmitter { - protocol: Protocol; - scripts: ScriptDesc[]; - handles: ScriptDesc[]; - breakpoints: Breakpoint[]; - currentSourceLine: number; - currentSourceColumn: number; - currentSourceLineText: string; - currentFrame: number; - currentScript: string; - - connect(port: number, host: string): void; - req(req: any, cb: RequestHandler): void; - reqFrameEval(code: string, frame: number, cb: RequestHandler): void; - mirrorObject(obj: any, depth: number, cb: ResponseBodyHandler): void; - setBreakpoint(rq: BreakpointMessageBody, cb: RequestHandler): void; - clearBreakpoint(rq: Request, cb: RequestHandler): void; - listbreakpoints(cb: RequestHandler): void; - reqSource(from: number, to: number, cb: RequestHandler): void; - reqScripts(cb: any): void; - reqContinue(cb: RequestHandler): void; - } - } -} \ No newline at end of file diff --git a/src/server/server.ts b/src/server/server.ts index 767793024c2..17ecfdaa1c9 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -1,11 +1,59 @@ -/// +/// /// // used in fs.writeSync /* tslint:disable:no-null-keyword */ namespace ts.server { - const readline: NodeJS.ReadLine = require("readline"); - const fs: typeof NodeJS.fs = require("fs"); + interface ReadLineOptions { + input: NodeJS.ReadableStream; + output?: NodeJS.WritableStream; + terminal?: boolean; + historySize?: number; + } + + interface Key { + sequence?: string; + name?: string; + ctrl?: boolean; + meta?: boolean; + shift?: boolean; + } + + interface Stats { + isFile(): boolean; + isDirectory(): boolean; + isBlockDevice(): boolean; + isCharacterDevice(): boolean; + isSymbolicLink(): boolean; + isFIFO(): boolean; + isSocket(): boolean; + dev: number; + ino: number; + mode: number; + nlink: number; + uid: number; + gid: number; + rdev: number; + size: number; + blksize: number; + blocks: number; + atime: Date; + mtime: Date; + ctime: Date; + birthtime: Date; + } + + const readline: { + createInterface(options: ReadLineOptions): NodeJS.EventEmitter; + } = require("readline"); + const fs: { + openSync(path: string, options: string): number; + close(fd: number): void; + writeSync(fd: number, buffer: Buffer, offset: number, length: number, position?: number): number; + writeSync(fd: number, data: any, position?: number, enconding?: string): number; + statSync(path: string): Stats; + stat(path: string, callback?: (err: NodeJS.ErrnoException, stats: Stats) => any): void; + } = require("fs"); const rl = readline.createInterface({ input: process.stdin, diff --git a/src/server/tsconfig.json b/src/server/tsconfig.json index df7dcdfe8ad..e14478c40f4 100644 --- a/src/server/tsconfig.json +++ b/src/server/tsconfig.json @@ -7,12 +7,14 @@ "pretty": true, "out": "../../built/local/tsserver.js", "sourceMap": true, - "stripInternal": true + "stripInternal": true, + "types": [ + "node" + ] }, "files": [ "../services/shims.ts", "../services/utilities.ts", - "node.d.ts", "editorServices.ts", "protocol.d.ts", "session.ts", diff --git a/src/server/tsconfig.library.json b/src/server/tsconfig.library.json new file mode 100644 index 00000000000..746283720bf --- /dev/null +++ b/src/server/tsconfig.library.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "noImplicitAny": true, + "removeComments": true, + "preserveConstEnums": true, + "out": "../../built/local/tsserverlibrary.js", + "sourceMap": true, + "stripInternal": true, + "declaration": true, + "types": [] + }, + "files": [ + "editorServices.ts", + "protocol.d.ts", + "session.ts" + ] +} diff --git a/tests/cases/unittests/incrementalParser.ts b/tests/cases/unittests/incrementalParser.ts index 741c9e54cad..106368effdd 100644 --- a/tests/cases/unittests/incrementalParser.ts +++ b/tests/cases/unittests/incrementalParser.ts @@ -1,4 +1,4 @@ -/// +/// /// namespace ts { diff --git a/tests/cases/unittests/jsDocParsing.ts b/tests/cases/unittests/jsDocParsing.ts index e6cf4ffff4f..37d34f85b8f 100644 --- a/tests/cases/unittests/jsDocParsing.ts +++ b/tests/cases/unittests/jsDocParsing.ts @@ -1,5 +1,3 @@ -/// -/// /// /// diff --git a/tests/cases/unittests/matchFiles.ts b/tests/cases/unittests/matchFiles.ts index d68fb9b2a7f..a5eeae49a9e 100644 --- a/tests/cases/unittests/matchFiles.ts +++ b/tests/cases/unittests/matchFiles.ts @@ -1,4 +1,3 @@ -/// /// /// diff --git a/tests/cases/unittests/moduleResolution.ts b/tests/cases/unittests/moduleResolution.ts index 70cb4715c48..d93731fd7c6 100644 --- a/tests/cases/unittests/moduleResolution.ts +++ b/tests/cases/unittests/moduleResolution.ts @@ -1,12 +1,5 @@ -/// /// -declare namespace chai.assert { - /* tslint:disable no-unused-variable */ - function deepEqual(actual: any, expected: any): void; - /* tslint:enable no-unused-variable */ -} - namespace ts { function diagnosticToString(diagnostic: Diagnostic) { let output = ""; diff --git a/tests/cases/unittests/reuseProgramStructure.ts b/tests/cases/unittests/reuseProgramStructure.ts index b8a36baf824..bdc4765be7d 100644 --- a/tests/cases/unittests/reuseProgramStructure.ts +++ b/tests/cases/unittests/reuseProgramStructure.ts @@ -1,4 +1,3 @@ -/// /// /// diff --git a/tests/cases/unittests/services/colorization.ts b/tests/cases/unittests/services/colorization.ts index ab927ebe23a..be3096592a9 100644 --- a/tests/cases/unittests/services/colorization.ts +++ b/tests/cases/unittests/services/colorization.ts @@ -1,5 +1,4 @@ -/// -/// +/// interface ClassificationEntry { value: any; diff --git a/tests/cases/unittests/services/patternMatcher.ts b/tests/cases/unittests/services/patternMatcher.ts index 5fbe0ea1588..f1ed400f228 100644 --- a/tests/cases/unittests/services/patternMatcher.ts +++ b/tests/cases/unittests/services/patternMatcher.ts @@ -1,4 +1,3 @@ -/// /// describe("PatternMatcher", function () { diff --git a/tests/cases/unittests/services/preProcessFile.ts b/tests/cases/unittests/services/preProcessFile.ts index 22a911b1601..a37c9ca706d 100644 --- a/tests/cases/unittests/services/preProcessFile.ts +++ b/tests/cases/unittests/services/preProcessFile.ts @@ -1,11 +1,4 @@ -/// -/// - -declare namespace chai.assert { - /* tslint:disable no-unused-variable */ - function deepEqual(actual: any, expected: any): void; - /* tslint:enable no-unused-variable */ -} +/// describe("PreProcessFile:", function () { function test(sourceText: string, readImportFile: boolean, detectJavaScriptImports: boolean, expectedPreProcess: ts.PreProcessedFileInfo): void { From cfe3aadeb34e535564796f719d8841ab82886538 Mon Sep 17 00:00:00 2001 From: Wesley Wigham Date: Mon, 11 Jul 2016 17:42:52 -0700 Subject: [PATCH 22/24] Move unittests into harness --- Gulpfile.ts | 3 +- Jakefile.js | 2 +- src/harness/tsconfig.json | 38 +++++++++---------- .../unittests/cachingInServerLSHost.ts | 2 +- .../harness}/unittests/commandLineParsing.ts | 4 +- .../convertCompilerOptionsFromJson.ts | 4 +- .../harness}/unittests/convertToBase64.ts | 2 +- .../unittests/convertTypingOptionsFromJson.ts | 4 +- .../harness}/unittests/incrementalParser.ts | 4 +- .../harness}/unittests/jsDocParsing.ts | 4 +- .../harness}/unittests/matchFiles.ts | 4 +- .../harness}/unittests/moduleResolution.ts | 2 +- .../unittests/reuseProgramStructure.ts | 4 +- .../unittests/services/colorization.ts | 2 +- .../unittests/services/documentRegistry.ts | 2 +- .../formatting/documentFormattingTests.json | 0 .../formatting/formatDiffTemplate.html | 0 .../formatting/getFormattingEditsForRange.ts | 0 .../formatting/getSmartIndentAtLineNumber.ts | 0 .../importedJavaScriptFormatting.ts | 0 .../formatting/ruleFormattingTests.json | 0 .../formatting/testCode/formatting/classes.ts | 0 .../testCode/formatting/classesBaseline.ts | 0 .../testCode/formatting/colonAndQMark.ts | 0 .../formatting/colonAndQMarkBaseline.ts | 0 .../formatting/documentReadyFunction.ts | 0 .../documentReadyFunctionBaseLine.ts | 0 .../testCode/formatting/emptyBlock.ts | 0 .../testCode/formatting/emptyBlockBaseline.ts | 0 .../formatting/emptyInterfaceLiteral.ts | 0 .../emptyInterfaceLiteralBaseLine.ts | 0 .../testCode/formatting/fatArrowFunctions.ts | 0 .../formatting/fatArrowFunctionsBaseline.ts | 0 .../formatting/formatDebuggerStatement.ts | 0 .../formatDebuggerStatementBaseline.ts | 0 .../formatvariableDeclarationList.ts | 0 .../formatvariableDeclarationListBaseline.ts | 0 .../testCode/formatting/implicitModule.ts | 0 .../formatting/implicitModuleBaseline.ts | 0 .../testCode/formatting/importDeclaration.ts | 0 .../formatting/importDeclarationBaseline.ts | 0 .../formatting/testCode/formatting/main.ts | 0 .../testCode/formatting/mainBaseline.ts | 0 .../testCode/formatting/moduleIndentation.ts | 0 .../formatting/moduleIndentationBaseline.ts | 0 .../formatting/testCode/formatting/modules.ts | 0 .../testCode/formatting/modulesBaseline.ts | 0 .../testCode/formatting/objectLiteral.ts | 0 .../formatting/objectLiteralBaseline.ts | 0 .../testCode/formatting/onClosingBracket.ts | 0 .../formatting/onClosingBracketBaseLine.ts | 0 .../testCode/formatting/onSemiColon.ts | 0 .../formatting/onSemiColonBaseline.ts | 0 .../formatting/spaceAfterConstructor.ts | 0 .../spaceAfterConstructorBaseline.ts | 0 .../testCode/formatting/tabAfterCloseCurly.ts | 0 .../formatting/tabAfterCloseCurlyBaseline.ts | 0 .../formatting/typescriptConstructs.ts | 0 .../typescriptConstructsBaseline.ts | 0 .../formatting/testCode/formatting/various.ts | 0 .../testCode/formatting/variousBaseline.ts | 0 .../testCode/formatting/withStatement.ts | 0 .../formatting/withStatementBaseline.ts | 0 .../testCode/testCode/formatting/classes.ts | 0 .../testCode/formatting/classesBaseline.ts | 0 .../testCode/formatting/colonAndQMark.ts | 0 .../formatting/colonAndQMarkBaseline.ts | 0 .../formatting/documentReadyFunction.ts | 0 .../documentReadyFunctionBaseLine.ts | 0 .../testCode/formatting/emptyBlock.ts | 0 .../testCode/formatting/emptyBlockBaseline.ts | 0 .../formatting/emptyInterfaceLiteral.ts | 0 .../emptyInterfaceLiteralBaseLine.ts | 0 .../testCode/formatting/fatArrowFunctions.ts | 0 .../formatting/fatArrowFunctionsBaseline.ts | 0 .../formatting/formatDebuggerStatement.ts | 0 .../formatDebuggerStatementBaseline.ts | 0 .../formatvariableDeclarationList.ts | 0 .../formatvariableDeclarationListBaseline.ts | 0 .../testCode/formatting/implicitModule.ts | 0 .../formatting/implicitModuleBaseline.ts | 0 .../testCode/formatting/importDeclaration.ts | 0 .../formatting/importDeclarationBaseline.ts | 0 .../testCode/testCode/formatting/main.ts | 0 .../testCode/formatting/mainBaseline.ts | 0 .../testCode/formatting/moduleIndentation.ts | 0 .../formatting/moduleIndentationBaseline.ts | 0 .../testCode/testCode/formatting/modules.ts | 0 .../testCode/formatting/modulesBaseline.ts | 0 .../testCode/formatting/objectLiteral.ts | 0 .../formatting/objectLiteralBaseline.ts | 0 .../testCode/formatting/onClosingBracket.ts | 0 .../formatting/onClosingBracketBaseLine.ts | 0 .../testCode/formatting/onSemiColon.ts | 0 .../formatting/onSemiColonBaseline.ts | 0 .../formatting/spaceAfterConstructor.ts | 0 .../spaceAfterConstructorBaseline.ts | 0 .../testCode/formatting/tabAfterCloseCurly.ts | 0 .../formatting/tabAfterCloseCurlyBaseline.ts | 0 .../formatting/typescriptConstructs.ts | 0 .../typescriptConstructsBaseline.ts | 0 .../testCode/testCode/formatting/various.ts | 0 .../testCode/formatting/variousBaseline.ts | 0 .../testCode/formatting/withStatement.ts | 0 .../formatting/withStatementBaseline.ts | 0 .../unittests/services/patternMatcher.ts | 2 +- .../unittests/services/preProcessFile.ts | 2 +- .../harness}/unittests/session.ts | 2 +- .../harness}/unittests/transpile.ts | 2 +- .../harness}/unittests/tsconfigParsing.ts | 4 +- .../unittests/tsserverProjectSystem.ts | 2 +- .../harness}/unittests/versionCache.ts | 4 +- 112 files changed, 49 insertions(+), 50 deletions(-) rename {tests/cases => src/harness}/unittests/cachingInServerLSHost.ts (97%) rename {tests/cases => src/harness}/unittests/commandLineParsing.ts (97%) rename {tests/cases => src/harness}/unittests/convertCompilerOptionsFromJson.ts (97%) rename {tests/cases => src/harness}/unittests/convertToBase64.ts (93%) rename {tests/cases => src/harness}/unittests/convertTypingOptionsFromJson.ts (95%) rename {tests/cases => src/harness}/unittests/incrementalParser.ts (97%) rename {tests/cases => src/harness}/unittests/jsDocParsing.ts (96%) rename {tests/cases => src/harness}/unittests/matchFiles.ts (97%) rename {tests/cases => src/harness}/unittests/moduleResolution.ts (98%) rename {tests/cases => src/harness}/unittests/reuseProgramStructure.ts (97%) rename {tests/cases => src/harness}/unittests/services/colorization.ts (97%) rename {tests/cases => src/harness}/unittests/services/documentRegistry.ts (96%) rename {tests/cases => src/harness}/unittests/services/formatting/documentFormattingTests.json (100%) rename {tests/cases => src/harness}/unittests/services/formatting/formatDiffTemplate.html (100%) rename {tests/cases => src/harness}/unittests/services/formatting/getFormattingEditsForRange.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/getSmartIndentAtLineNumber.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/importedJavaScriptFormatting.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/ruleFormattingTests.json (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/classes.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/classesBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/colonAndQMark.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/colonAndQMarkBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/documentReadyFunction.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/documentReadyFunctionBaseLine.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/emptyBlock.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/emptyBlockBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/emptyInterfaceLiteral.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/emptyInterfaceLiteralBaseLine.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/fatArrowFunctions.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/fatArrowFunctionsBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/formatDebuggerStatement.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/formatDebuggerStatementBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/formatvariableDeclarationList.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/formatvariableDeclarationListBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/implicitModule.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/implicitModuleBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/importDeclaration.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/importDeclarationBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/main.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/mainBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/moduleIndentation.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/moduleIndentationBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/modules.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/modulesBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/objectLiteral.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/objectLiteralBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/onClosingBracket.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/onClosingBracketBaseLine.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/onSemiColon.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/onSemiColonBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/spaceAfterConstructor.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/spaceAfterConstructorBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/tabAfterCloseCurly.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/tabAfterCloseCurlyBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/typescriptConstructs.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/typescriptConstructsBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/various.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/variousBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/withStatement.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/formatting/withStatementBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/classes.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/classesBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/colonAndQMark.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/colonAndQMarkBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/documentReadyFunction.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/documentReadyFunctionBaseLine.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/emptyBlock.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/emptyBlockBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/emptyInterfaceLiteral.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/emptyInterfaceLiteralBaseLine.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/fatArrowFunctions.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/fatArrowFunctionsBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/formatDebuggerStatement.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/formatDebuggerStatementBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/formatvariableDeclarationList.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/formatvariableDeclarationListBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/implicitModule.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/implicitModuleBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/importDeclaration.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/importDeclarationBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/main.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/mainBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/moduleIndentation.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/moduleIndentationBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/modules.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/modulesBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/objectLiteral.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/objectLiteralBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/onClosingBracket.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/onClosingBracketBaseLine.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/onSemiColon.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/onSemiColonBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/spaceAfterConstructor.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/spaceAfterConstructorBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/tabAfterCloseCurly.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/tabAfterCloseCurlyBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/typescriptConstructs.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/typescriptConstructsBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/various.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/variousBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/withStatement.ts (100%) rename {tests/cases => src/harness}/unittests/services/formatting/testCode/testCode/formatting/withStatementBaseline.ts (100%) rename {tests/cases => src/harness}/unittests/services/patternMatcher.ts (96%) rename {tests/cases => src/harness}/unittests/services/preProcessFile.ts (97%) rename {tests/cases => src/harness}/unittests/session.ts (96%) rename {tests/cases => src/harness}/unittests/transpile.ts (97%) rename {tests/cases => src/harness}/unittests/tsconfigParsing.ts (98%) rename {tests/cases => src/harness}/unittests/tsserverProjectSystem.ts (97%) rename {tests/cases => src/harness}/unittests/versionCache.ts (96%) diff --git a/Gulpfile.ts b/Gulpfile.ts index 4ad06faf6cb..0305f754111 100644 --- a/Gulpfile.ts +++ b/Gulpfile.ts @@ -944,8 +944,7 @@ const lintTargets = [ "Gulpfile.ts", "src/compiler/**/*.ts", "src/harness/**/*.ts", - "tests/cases/unittests/**/*.ts", - "!tests/cases/unittests/services/formatting/**/*.ts", + "!src/harness/unittests/services/formatting/**/*.ts", "src/server/**/*.ts", "scripts/tslint/**/*.ts", "src/services/**/*.ts", diff --git a/Jakefile.js b/Jakefile.js index 3eb3520fafb..eee9fe1370e 100644 --- a/Jakefile.js +++ b/Jakefile.js @@ -14,7 +14,7 @@ var serverDirectory = "src/server/"; var harnessDirectory = "src/harness/"; var libraryDirectory = "src/lib/"; var scriptsDirectory = "scripts/"; -var unittestsDirectory = "tests/cases/unittests/"; +var unittestsDirectory = "src/harness/unittests/"; var docDirectory = "doc/"; var builtDirectory = "built/"; diff --git a/src/harness/tsconfig.json b/src/harness/tsconfig.json index ee6a4ebe866..5853bee3274 100644 --- a/src/harness/tsconfig.json +++ b/src/harness/tsconfig.json @@ -70,24 +70,24 @@ "../server/session.ts", "../server/client.ts", "../server/editorServices.ts", - "../../tests/cases/unittests/incrementalParser.ts", - "../../tests/cases/unittests/jsDocParsing.ts", - "../../tests/cases/unittests/services/colorization.ts", - "../../tests/cases/unittests/services/documentRegistry.ts", - "../../tests/cases/unittests/services/preProcessFile.ts", - "../../tests/cases/unittests/services/patternMatcher.ts", - "../../tests/cases/unittests/session.ts", - "../../tests/cases/unittests/versionCache.ts", - "../../tests/cases/unittests/convertToBase64.ts", - "../../tests/cases/unittests/transpile.ts", - "../../tests/cases/unittests/reuseProgramStructure.ts", - "../../tests/cases/unittests/cachingInServerLSHost.ts", - "../../tests/cases/unittests/moduleResolution.ts", - "../../tests/cases/unittests/tsconfigParsing.ts", - "../../tests/cases/unittests/commandLineParsing.ts", - "../../tests/cases/unittests/convertCompilerOptionsFromJson.ts", - "../../tests/cases/unittests/convertTypingOptionsFromJson.ts", - "../../tests/cases/unittests/tsserverProjectSystem.ts", - "../../tests/cases/unittests/matchFiles.ts" + "./unittests/incrementalParser.ts", + "./unittests/jsDocParsing.ts", + "./unittests/services/colorization.ts", + "./unittests/services/documentRegistry.ts", + "./unittests/services/preProcessFile.ts", + "./unittests/services/patternMatcher.ts", + "./unittests/session.ts", + "./unittests/versionCache.ts", + "./unittests/convertToBase64.ts", + "./unittests/transpile.ts", + "./unittests/reuseProgramStructure.ts", + "./unittests/cachingInServerLSHost.ts", + "./unittests/moduleResolution.ts", + "./unittests/tsconfigParsing.ts", + "./unittests/commandLineParsing.ts", + "./unittests/convertCompilerOptionsFromJson.ts", + "./unittests/convertTypingOptionsFromJson.ts", + "./unittests/tsserverProjectSystem.ts", + "./unittests/matchFiles.ts" ] } diff --git a/tests/cases/unittests/cachingInServerLSHost.ts b/src/harness/unittests/cachingInServerLSHost.ts similarity index 97% rename from tests/cases/unittests/cachingInServerLSHost.ts rename to src/harness/unittests/cachingInServerLSHost.ts index 9cd5e071b73..e0ce09391fb 100644 --- a/tests/cases/unittests/cachingInServerLSHost.ts +++ b/src/harness/unittests/cachingInServerLSHost.ts @@ -1,4 +1,4 @@ -/// +/// namespace ts { interface File { diff --git a/tests/cases/unittests/commandLineParsing.ts b/src/harness/unittests/commandLineParsing.ts similarity index 97% rename from tests/cases/unittests/commandLineParsing.ts rename to src/harness/unittests/commandLineParsing.ts index 095f912ac1c..afd0ff6f0ea 100644 --- a/tests/cases/unittests/commandLineParsing.ts +++ b/src/harness/unittests/commandLineParsing.ts @@ -1,5 +1,5 @@ -/// -/// +/// +/// namespace ts { describe("parseCommandLine", () => { diff --git a/tests/cases/unittests/convertCompilerOptionsFromJson.ts b/src/harness/unittests/convertCompilerOptionsFromJson.ts similarity index 97% rename from tests/cases/unittests/convertCompilerOptionsFromJson.ts rename to src/harness/unittests/convertCompilerOptionsFromJson.ts index b2d6c7d8fb6..d308bb2a6e6 100644 --- a/tests/cases/unittests/convertCompilerOptionsFromJson.ts +++ b/src/harness/unittests/convertCompilerOptionsFromJson.ts @@ -1,5 +1,5 @@ -/// -/// +/// +/// namespace ts { describe("convertCompilerOptionsFromJson", () => { diff --git a/tests/cases/unittests/convertToBase64.ts b/src/harness/unittests/convertToBase64.ts similarity index 93% rename from tests/cases/unittests/convertToBase64.ts rename to src/harness/unittests/convertToBase64.ts index 40fd98dd332..09e38bdf674 100644 --- a/tests/cases/unittests/convertToBase64.ts +++ b/src/harness/unittests/convertToBase64.ts @@ -1,4 +1,4 @@ -/// +/// namespace ts { describe("convertToBase64", () => { diff --git a/tests/cases/unittests/convertTypingOptionsFromJson.ts b/src/harness/unittests/convertTypingOptionsFromJson.ts similarity index 95% rename from tests/cases/unittests/convertTypingOptionsFromJson.ts rename to src/harness/unittests/convertTypingOptionsFromJson.ts index 6462794b127..439409b24b7 100644 --- a/tests/cases/unittests/convertTypingOptionsFromJson.ts +++ b/src/harness/unittests/convertTypingOptionsFromJson.ts @@ -1,5 +1,5 @@ -/// -/// +/// +/// namespace ts { describe("convertTypingOptionsFromJson", () => { diff --git a/tests/cases/unittests/incrementalParser.ts b/src/harness/unittests/incrementalParser.ts similarity index 97% rename from tests/cases/unittests/incrementalParser.ts rename to src/harness/unittests/incrementalParser.ts index 106368effdd..0082207e699 100644 --- a/tests/cases/unittests/incrementalParser.ts +++ b/src/harness/unittests/incrementalParser.ts @@ -1,5 +1,5 @@ -/// -/// +/// +/// namespace ts { ts.disableIncrementalParsing = false; diff --git a/tests/cases/unittests/jsDocParsing.ts b/src/harness/unittests/jsDocParsing.ts similarity index 96% rename from tests/cases/unittests/jsDocParsing.ts rename to src/harness/unittests/jsDocParsing.ts index 37d34f85b8f..d1ca42f3861 100644 --- a/tests/cases/unittests/jsDocParsing.ts +++ b/src/harness/unittests/jsDocParsing.ts @@ -1,5 +1,5 @@ -/// -/// +/// +/// namespace ts { describe("JSDocParsing", () => { diff --git a/tests/cases/unittests/matchFiles.ts b/src/harness/unittests/matchFiles.ts similarity index 97% rename from tests/cases/unittests/matchFiles.ts rename to src/harness/unittests/matchFiles.ts index a5eeae49a9e..ae856f40c17 100644 --- a/tests/cases/unittests/matchFiles.ts +++ b/src/harness/unittests/matchFiles.ts @@ -1,5 +1,5 @@ -/// -/// +/// +/// namespace ts { const caseInsensitiveBasePath = "c:/dev/"; diff --git a/tests/cases/unittests/moduleResolution.ts b/src/harness/unittests/moduleResolution.ts similarity index 98% rename from tests/cases/unittests/moduleResolution.ts rename to src/harness/unittests/moduleResolution.ts index d93731fd7c6..b3f2102d903 100644 --- a/tests/cases/unittests/moduleResolution.ts +++ b/src/harness/unittests/moduleResolution.ts @@ -1,4 +1,4 @@ -/// +/// namespace ts { function diagnosticToString(diagnostic: Diagnostic) { diff --git a/tests/cases/unittests/reuseProgramStructure.ts b/src/harness/unittests/reuseProgramStructure.ts similarity index 97% rename from tests/cases/unittests/reuseProgramStructure.ts rename to src/harness/unittests/reuseProgramStructure.ts index bdc4765be7d..8b2b15c15b3 100644 --- a/tests/cases/unittests/reuseProgramStructure.ts +++ b/src/harness/unittests/reuseProgramStructure.ts @@ -1,5 +1,5 @@ -/// -/// +/// +/// namespace ts { diff --git a/tests/cases/unittests/services/colorization.ts b/src/harness/unittests/services/colorization.ts similarity index 97% rename from tests/cases/unittests/services/colorization.ts rename to src/harness/unittests/services/colorization.ts index be3096592a9..0fe63f4ff07 100644 --- a/tests/cases/unittests/services/colorization.ts +++ b/src/harness/unittests/services/colorization.ts @@ -1,4 +1,4 @@ -/// +/// interface ClassificationEntry { value: any; diff --git a/tests/cases/unittests/services/documentRegistry.ts b/src/harness/unittests/services/documentRegistry.ts similarity index 96% rename from tests/cases/unittests/services/documentRegistry.ts rename to src/harness/unittests/services/documentRegistry.ts index 942408c535f..09e95db6c76 100644 --- a/tests/cases/unittests/services/documentRegistry.ts +++ b/src/harness/unittests/services/documentRegistry.ts @@ -1,4 +1,4 @@ -/// +/// describe("DocumentRegistry", () => { it("documents are shared between projects", () => { diff --git a/tests/cases/unittests/services/formatting/documentFormattingTests.json b/src/harness/unittests/services/formatting/documentFormattingTests.json similarity index 100% rename from tests/cases/unittests/services/formatting/documentFormattingTests.json rename to src/harness/unittests/services/formatting/documentFormattingTests.json diff --git a/tests/cases/unittests/services/formatting/formatDiffTemplate.html b/src/harness/unittests/services/formatting/formatDiffTemplate.html similarity index 100% rename from tests/cases/unittests/services/formatting/formatDiffTemplate.html rename to src/harness/unittests/services/formatting/formatDiffTemplate.html diff --git a/tests/cases/unittests/services/formatting/getFormattingEditsForRange.ts b/src/harness/unittests/services/formatting/getFormattingEditsForRange.ts similarity index 100% rename from tests/cases/unittests/services/formatting/getFormattingEditsForRange.ts rename to src/harness/unittests/services/formatting/getFormattingEditsForRange.ts diff --git a/tests/cases/unittests/services/formatting/getSmartIndentAtLineNumber.ts b/src/harness/unittests/services/formatting/getSmartIndentAtLineNumber.ts similarity index 100% rename from tests/cases/unittests/services/formatting/getSmartIndentAtLineNumber.ts rename to src/harness/unittests/services/formatting/getSmartIndentAtLineNumber.ts diff --git a/tests/cases/unittests/services/formatting/importedJavaScriptFormatting.ts b/src/harness/unittests/services/formatting/importedJavaScriptFormatting.ts similarity index 100% rename from tests/cases/unittests/services/formatting/importedJavaScriptFormatting.ts rename to src/harness/unittests/services/formatting/importedJavaScriptFormatting.ts diff --git a/tests/cases/unittests/services/formatting/ruleFormattingTests.json b/src/harness/unittests/services/formatting/ruleFormattingTests.json similarity index 100% rename from tests/cases/unittests/services/formatting/ruleFormattingTests.json rename to src/harness/unittests/services/formatting/ruleFormattingTests.json diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/classes.ts b/src/harness/unittests/services/formatting/testCode/formatting/classes.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/classes.ts rename to src/harness/unittests/services/formatting/testCode/formatting/classes.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/classesBaseline.ts b/src/harness/unittests/services/formatting/testCode/formatting/classesBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/classesBaseline.ts rename to src/harness/unittests/services/formatting/testCode/formatting/classesBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/colonAndQMark.ts b/src/harness/unittests/services/formatting/testCode/formatting/colonAndQMark.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/colonAndQMark.ts rename to src/harness/unittests/services/formatting/testCode/formatting/colonAndQMark.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/colonAndQMarkBaseline.ts b/src/harness/unittests/services/formatting/testCode/formatting/colonAndQMarkBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/colonAndQMarkBaseline.ts rename to src/harness/unittests/services/formatting/testCode/formatting/colonAndQMarkBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/documentReadyFunction.ts b/src/harness/unittests/services/formatting/testCode/formatting/documentReadyFunction.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/documentReadyFunction.ts rename to src/harness/unittests/services/formatting/testCode/formatting/documentReadyFunction.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/documentReadyFunctionBaseLine.ts b/src/harness/unittests/services/formatting/testCode/formatting/documentReadyFunctionBaseLine.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/documentReadyFunctionBaseLine.ts rename to src/harness/unittests/services/formatting/testCode/formatting/documentReadyFunctionBaseLine.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/emptyBlock.ts b/src/harness/unittests/services/formatting/testCode/formatting/emptyBlock.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/emptyBlock.ts rename to src/harness/unittests/services/formatting/testCode/formatting/emptyBlock.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/emptyBlockBaseline.ts b/src/harness/unittests/services/formatting/testCode/formatting/emptyBlockBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/emptyBlockBaseline.ts rename to src/harness/unittests/services/formatting/testCode/formatting/emptyBlockBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/emptyInterfaceLiteral.ts b/src/harness/unittests/services/formatting/testCode/formatting/emptyInterfaceLiteral.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/emptyInterfaceLiteral.ts rename to src/harness/unittests/services/formatting/testCode/formatting/emptyInterfaceLiteral.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/emptyInterfaceLiteralBaseLine.ts b/src/harness/unittests/services/formatting/testCode/formatting/emptyInterfaceLiteralBaseLine.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/emptyInterfaceLiteralBaseLine.ts rename to src/harness/unittests/services/formatting/testCode/formatting/emptyInterfaceLiteralBaseLine.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/fatArrowFunctions.ts b/src/harness/unittests/services/formatting/testCode/formatting/fatArrowFunctions.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/fatArrowFunctions.ts rename to src/harness/unittests/services/formatting/testCode/formatting/fatArrowFunctions.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/fatArrowFunctionsBaseline.ts b/src/harness/unittests/services/formatting/testCode/formatting/fatArrowFunctionsBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/fatArrowFunctionsBaseline.ts rename to src/harness/unittests/services/formatting/testCode/formatting/fatArrowFunctionsBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/formatDebuggerStatement.ts b/src/harness/unittests/services/formatting/testCode/formatting/formatDebuggerStatement.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/formatDebuggerStatement.ts rename to src/harness/unittests/services/formatting/testCode/formatting/formatDebuggerStatement.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/formatDebuggerStatementBaseline.ts b/src/harness/unittests/services/formatting/testCode/formatting/formatDebuggerStatementBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/formatDebuggerStatementBaseline.ts rename to src/harness/unittests/services/formatting/testCode/formatting/formatDebuggerStatementBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/formatvariableDeclarationList.ts b/src/harness/unittests/services/formatting/testCode/formatting/formatvariableDeclarationList.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/formatvariableDeclarationList.ts rename to src/harness/unittests/services/formatting/testCode/formatting/formatvariableDeclarationList.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/formatvariableDeclarationListBaseline.ts b/src/harness/unittests/services/formatting/testCode/formatting/formatvariableDeclarationListBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/formatvariableDeclarationListBaseline.ts rename to src/harness/unittests/services/formatting/testCode/formatting/formatvariableDeclarationListBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/implicitModule.ts b/src/harness/unittests/services/formatting/testCode/formatting/implicitModule.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/implicitModule.ts rename to src/harness/unittests/services/formatting/testCode/formatting/implicitModule.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/implicitModuleBaseline.ts b/src/harness/unittests/services/formatting/testCode/formatting/implicitModuleBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/implicitModuleBaseline.ts rename to src/harness/unittests/services/formatting/testCode/formatting/implicitModuleBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/importDeclaration.ts b/src/harness/unittests/services/formatting/testCode/formatting/importDeclaration.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/importDeclaration.ts rename to src/harness/unittests/services/formatting/testCode/formatting/importDeclaration.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/importDeclarationBaseline.ts b/src/harness/unittests/services/formatting/testCode/formatting/importDeclarationBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/importDeclarationBaseline.ts rename to src/harness/unittests/services/formatting/testCode/formatting/importDeclarationBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/main.ts b/src/harness/unittests/services/formatting/testCode/formatting/main.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/main.ts rename to src/harness/unittests/services/formatting/testCode/formatting/main.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/mainBaseline.ts b/src/harness/unittests/services/formatting/testCode/formatting/mainBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/mainBaseline.ts rename to src/harness/unittests/services/formatting/testCode/formatting/mainBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/moduleIndentation.ts b/src/harness/unittests/services/formatting/testCode/formatting/moduleIndentation.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/moduleIndentation.ts rename to src/harness/unittests/services/formatting/testCode/formatting/moduleIndentation.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/moduleIndentationBaseline.ts b/src/harness/unittests/services/formatting/testCode/formatting/moduleIndentationBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/moduleIndentationBaseline.ts rename to src/harness/unittests/services/formatting/testCode/formatting/moduleIndentationBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/modules.ts b/src/harness/unittests/services/formatting/testCode/formatting/modules.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/modules.ts rename to src/harness/unittests/services/formatting/testCode/formatting/modules.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/modulesBaseline.ts b/src/harness/unittests/services/formatting/testCode/formatting/modulesBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/modulesBaseline.ts rename to src/harness/unittests/services/formatting/testCode/formatting/modulesBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/objectLiteral.ts b/src/harness/unittests/services/formatting/testCode/formatting/objectLiteral.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/objectLiteral.ts rename to src/harness/unittests/services/formatting/testCode/formatting/objectLiteral.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/objectLiteralBaseline.ts b/src/harness/unittests/services/formatting/testCode/formatting/objectLiteralBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/objectLiteralBaseline.ts rename to src/harness/unittests/services/formatting/testCode/formatting/objectLiteralBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/onClosingBracket.ts b/src/harness/unittests/services/formatting/testCode/formatting/onClosingBracket.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/onClosingBracket.ts rename to src/harness/unittests/services/formatting/testCode/formatting/onClosingBracket.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/onClosingBracketBaseLine.ts b/src/harness/unittests/services/formatting/testCode/formatting/onClosingBracketBaseLine.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/onClosingBracketBaseLine.ts rename to src/harness/unittests/services/formatting/testCode/formatting/onClosingBracketBaseLine.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/onSemiColon.ts b/src/harness/unittests/services/formatting/testCode/formatting/onSemiColon.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/onSemiColon.ts rename to src/harness/unittests/services/formatting/testCode/formatting/onSemiColon.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/onSemiColonBaseline.ts b/src/harness/unittests/services/formatting/testCode/formatting/onSemiColonBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/onSemiColonBaseline.ts rename to src/harness/unittests/services/formatting/testCode/formatting/onSemiColonBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/spaceAfterConstructor.ts b/src/harness/unittests/services/formatting/testCode/formatting/spaceAfterConstructor.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/spaceAfterConstructor.ts rename to src/harness/unittests/services/formatting/testCode/formatting/spaceAfterConstructor.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/spaceAfterConstructorBaseline.ts b/src/harness/unittests/services/formatting/testCode/formatting/spaceAfterConstructorBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/spaceAfterConstructorBaseline.ts rename to src/harness/unittests/services/formatting/testCode/formatting/spaceAfterConstructorBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/tabAfterCloseCurly.ts b/src/harness/unittests/services/formatting/testCode/formatting/tabAfterCloseCurly.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/tabAfterCloseCurly.ts rename to src/harness/unittests/services/formatting/testCode/formatting/tabAfterCloseCurly.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/tabAfterCloseCurlyBaseline.ts b/src/harness/unittests/services/formatting/testCode/formatting/tabAfterCloseCurlyBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/tabAfterCloseCurlyBaseline.ts rename to src/harness/unittests/services/formatting/testCode/formatting/tabAfterCloseCurlyBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/typescriptConstructs.ts b/src/harness/unittests/services/formatting/testCode/formatting/typescriptConstructs.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/typescriptConstructs.ts rename to src/harness/unittests/services/formatting/testCode/formatting/typescriptConstructs.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/typescriptConstructsBaseline.ts b/src/harness/unittests/services/formatting/testCode/formatting/typescriptConstructsBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/typescriptConstructsBaseline.ts rename to src/harness/unittests/services/formatting/testCode/formatting/typescriptConstructsBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/various.ts b/src/harness/unittests/services/formatting/testCode/formatting/various.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/various.ts rename to src/harness/unittests/services/formatting/testCode/formatting/various.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/variousBaseline.ts b/src/harness/unittests/services/formatting/testCode/formatting/variousBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/variousBaseline.ts rename to src/harness/unittests/services/formatting/testCode/formatting/variousBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/withStatement.ts b/src/harness/unittests/services/formatting/testCode/formatting/withStatement.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/withStatement.ts rename to src/harness/unittests/services/formatting/testCode/formatting/withStatement.ts diff --git a/tests/cases/unittests/services/formatting/testCode/formatting/withStatementBaseline.ts b/src/harness/unittests/services/formatting/testCode/formatting/withStatementBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/formatting/withStatementBaseline.ts rename to src/harness/unittests/services/formatting/testCode/formatting/withStatementBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/classes.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/classes.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/classes.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/classes.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/classesBaseline.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/classesBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/classesBaseline.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/classesBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/colonAndQMark.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/colonAndQMark.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/colonAndQMark.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/colonAndQMark.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/colonAndQMarkBaseline.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/colonAndQMarkBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/colonAndQMarkBaseline.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/colonAndQMarkBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/documentReadyFunction.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/documentReadyFunction.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/documentReadyFunction.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/documentReadyFunction.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/documentReadyFunctionBaseLine.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/documentReadyFunctionBaseLine.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/documentReadyFunctionBaseLine.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/documentReadyFunctionBaseLine.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/emptyBlock.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/emptyBlock.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/emptyBlock.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/emptyBlock.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/emptyBlockBaseline.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/emptyBlockBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/emptyBlockBaseline.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/emptyBlockBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/emptyInterfaceLiteral.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/emptyInterfaceLiteral.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/emptyInterfaceLiteral.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/emptyInterfaceLiteral.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/emptyInterfaceLiteralBaseLine.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/emptyInterfaceLiteralBaseLine.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/emptyInterfaceLiteralBaseLine.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/emptyInterfaceLiteralBaseLine.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/fatArrowFunctions.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/fatArrowFunctions.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/fatArrowFunctions.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/fatArrowFunctions.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/fatArrowFunctionsBaseline.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/fatArrowFunctionsBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/fatArrowFunctionsBaseline.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/fatArrowFunctionsBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/formatDebuggerStatement.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/formatDebuggerStatement.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/formatDebuggerStatement.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/formatDebuggerStatement.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/formatDebuggerStatementBaseline.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/formatDebuggerStatementBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/formatDebuggerStatementBaseline.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/formatDebuggerStatementBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/formatvariableDeclarationList.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/formatvariableDeclarationList.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/formatvariableDeclarationList.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/formatvariableDeclarationList.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/formatvariableDeclarationListBaseline.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/formatvariableDeclarationListBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/formatvariableDeclarationListBaseline.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/formatvariableDeclarationListBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/implicitModule.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/implicitModule.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/implicitModule.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/implicitModule.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/implicitModuleBaseline.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/implicitModuleBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/implicitModuleBaseline.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/implicitModuleBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/importDeclaration.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/importDeclaration.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/importDeclaration.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/importDeclaration.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/importDeclarationBaseline.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/importDeclarationBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/importDeclarationBaseline.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/importDeclarationBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/main.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/main.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/main.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/main.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/mainBaseline.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/mainBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/mainBaseline.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/mainBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/moduleIndentation.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/moduleIndentation.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/moduleIndentation.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/moduleIndentation.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/moduleIndentationBaseline.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/moduleIndentationBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/moduleIndentationBaseline.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/moduleIndentationBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/modules.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/modules.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/modules.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/modules.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/modulesBaseline.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/modulesBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/modulesBaseline.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/modulesBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/objectLiteral.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/objectLiteral.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/objectLiteral.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/objectLiteral.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/objectLiteralBaseline.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/objectLiteralBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/objectLiteralBaseline.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/objectLiteralBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/onClosingBracket.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/onClosingBracket.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/onClosingBracket.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/onClosingBracket.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/onClosingBracketBaseLine.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/onClosingBracketBaseLine.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/onClosingBracketBaseLine.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/onClosingBracketBaseLine.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/onSemiColon.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/onSemiColon.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/onSemiColon.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/onSemiColon.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/onSemiColonBaseline.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/onSemiColonBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/onSemiColonBaseline.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/onSemiColonBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/spaceAfterConstructor.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/spaceAfterConstructor.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/spaceAfterConstructor.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/spaceAfterConstructor.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/spaceAfterConstructorBaseline.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/spaceAfterConstructorBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/spaceAfterConstructorBaseline.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/spaceAfterConstructorBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/tabAfterCloseCurly.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/tabAfterCloseCurly.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/tabAfterCloseCurly.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/tabAfterCloseCurly.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/tabAfterCloseCurlyBaseline.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/tabAfterCloseCurlyBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/tabAfterCloseCurlyBaseline.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/tabAfterCloseCurlyBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/typescriptConstructs.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/typescriptConstructs.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/typescriptConstructs.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/typescriptConstructs.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/typescriptConstructsBaseline.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/typescriptConstructsBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/typescriptConstructsBaseline.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/typescriptConstructsBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/various.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/various.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/various.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/various.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/variousBaseline.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/variousBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/variousBaseline.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/variousBaseline.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/withStatement.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/withStatement.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/withStatement.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/withStatement.ts diff --git a/tests/cases/unittests/services/formatting/testCode/testCode/formatting/withStatementBaseline.ts b/src/harness/unittests/services/formatting/testCode/testCode/formatting/withStatementBaseline.ts similarity index 100% rename from tests/cases/unittests/services/formatting/testCode/testCode/formatting/withStatementBaseline.ts rename to src/harness/unittests/services/formatting/testCode/testCode/formatting/withStatementBaseline.ts diff --git a/tests/cases/unittests/services/patternMatcher.ts b/src/harness/unittests/services/patternMatcher.ts similarity index 96% rename from tests/cases/unittests/services/patternMatcher.ts rename to src/harness/unittests/services/patternMatcher.ts index f1ed400f228..8a70b38ab5e 100644 --- a/tests/cases/unittests/services/patternMatcher.ts +++ b/src/harness/unittests/services/patternMatcher.ts @@ -1,4 +1,4 @@ -/// +/// describe("PatternMatcher", function () { describe("BreakIntoCharacterSpans", function () { diff --git a/tests/cases/unittests/services/preProcessFile.ts b/src/harness/unittests/services/preProcessFile.ts similarity index 97% rename from tests/cases/unittests/services/preProcessFile.ts rename to src/harness/unittests/services/preProcessFile.ts index a37c9ca706d..403cccc8cf3 100644 --- a/tests/cases/unittests/services/preProcessFile.ts +++ b/src/harness/unittests/services/preProcessFile.ts @@ -1,4 +1,4 @@ -/// +/// describe("PreProcessFile:", function () { function test(sourceText: string, readImportFile: boolean, detectJavaScriptImports: boolean, expectedPreProcess: ts.PreProcessedFileInfo): void { diff --git a/tests/cases/unittests/session.ts b/src/harness/unittests/session.ts similarity index 96% rename from tests/cases/unittests/session.ts rename to src/harness/unittests/session.ts index b9073365d91..c5285544329 100644 --- a/tests/cases/unittests/session.ts +++ b/src/harness/unittests/session.ts @@ -1,4 +1,4 @@ -/// +/// const expect: typeof _chai.expect = _chai.expect; diff --git a/tests/cases/unittests/transpile.ts b/src/harness/unittests/transpile.ts similarity index 97% rename from tests/cases/unittests/transpile.ts rename to src/harness/unittests/transpile.ts index 1766e3280d4..547d10b9fbc 100644 --- a/tests/cases/unittests/transpile.ts +++ b/src/harness/unittests/transpile.ts @@ -1,4 +1,4 @@ -/// +/// namespace ts { describe("Transpile", () => { diff --git a/tests/cases/unittests/tsconfigParsing.ts b/src/harness/unittests/tsconfigParsing.ts similarity index 98% rename from tests/cases/unittests/tsconfigParsing.ts rename to src/harness/unittests/tsconfigParsing.ts index 17ccf6bff89..736d567a33a 100644 --- a/tests/cases/unittests/tsconfigParsing.ts +++ b/src/harness/unittests/tsconfigParsing.ts @@ -1,5 +1,5 @@ -/// -/// +/// +/// namespace ts { describe("parseConfigFileTextToJson", () => { diff --git a/tests/cases/unittests/tsserverProjectSystem.ts b/src/harness/unittests/tsserverProjectSystem.ts similarity index 97% rename from tests/cases/unittests/tsserverProjectSystem.ts rename to src/harness/unittests/tsserverProjectSystem.ts index 308aa82f85f..7a375c50b8a 100644 --- a/tests/cases/unittests/tsserverProjectSystem.ts +++ b/src/harness/unittests/tsserverProjectSystem.ts @@ -1,4 +1,4 @@ -/// +/// namespace ts { function notImplemented(): any { diff --git a/tests/cases/unittests/versionCache.ts b/src/harness/unittests/versionCache.ts similarity index 96% rename from tests/cases/unittests/versionCache.ts rename to src/harness/unittests/versionCache.ts index 63a2924dbc3..7fb01ee770a 100644 --- a/tests/cases/unittests/versionCache.ts +++ b/src/harness/unittests/versionCache.ts @@ -1,5 +1,5 @@ -/// -/// +/// +/// namespace ts { function editFlat(position: number, deletedLength: number, newText: string, source: string) { From 48ab0ce07fa72bb5bd66a571026f8af1839027c3 Mon Sep 17 00:00:00 2001 From: Yui Date: Mon, 11 Jul 2016 20:53:12 -0700 Subject: [PATCH 23/24] Change version to 2.1.0 (#9615) --- package.json | 2 +- src/compiler/program.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 72a220f53b1..3bbb96ee468 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "typescript", "author": "Microsoft Corp.", "homepage": "http://typescriptlang.org/", - "version": "2.0.0", + "version": "2.1.0", "license": "Apache-2.0", "description": "TypeScript is a language for application scale JavaScript development", "keywords": [ diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 10ce47fbb9d..320b628c31a 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -9,7 +9,7 @@ namespace ts { /* @internal */ export let ioWriteTime = 0; /** The version of the TypeScript compiler release */ - export const version = "2.0.0"; + export const version = "2.1.0"; const emptyArray: any[] = []; From 5d37c29dbb30514b5a51a7637d0af74315ee44a7 Mon Sep 17 00:00:00 2001 From: Andy Hanson Date: Fri, 8 Jul 2016 12:39:36 -0700 Subject: [PATCH 24/24] Handle JSX bodies in formatter --- src/services/formatting/formattingScanner.ts | 13 ++++++++++++- tests/cases/fourslash/formatTsx.ts | 18 ++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 tests/cases/fourslash/formatTsx.ts diff --git a/src/services/formatting/formattingScanner.ts b/src/services/formatting/formattingScanner.ts index 401794a077b..7822e4a72fc 100644 --- a/src/services/formatting/formattingScanner.ts +++ b/src/services/formatting/formattingScanner.ts @@ -26,7 +26,8 @@ namespace ts.formatting { RescanGreaterThanToken, RescanSlashToken, RescanTemplateToken, - RescanJsxIdentifier + RescanJsxIdentifier, + RescanJsxText, } export function getFormattingScanner(sourceFile: SourceFile, startPos: number, endPos: number): FormattingScanner { @@ -140,6 +141,10 @@ namespace ts.formatting { return false; } + function shouldRescanJsxText(node: Node): boolean { + return node && node.kind === SyntaxKind.JsxText; + } + function shouldRescanSlashToken(container: Node): boolean { return container.kind === SyntaxKind.RegularExpressionLiteral; } @@ -176,6 +181,8 @@ namespace ts.formatting { ? ScanAction.RescanTemplateToken : shouldRescanJsxIdentifier(n) ? ScanAction.RescanJsxIdentifier + : shouldRescanJsxText(n) + ? ScanAction.RescanJsxText : ScanAction.Scan; if (lastTokenInfo && expectedScanAction === lastScanAction) { @@ -215,6 +222,10 @@ namespace ts.formatting { currentToken = scanner.scanJsxIdentifier(); lastScanAction = ScanAction.RescanJsxIdentifier; } + else if (expectedScanAction === ScanAction.RescanJsxText) { + currentToken = scanner.reScanJsxToken(); + lastScanAction = ScanAction.RescanJsxText; + } else { lastScanAction = ScanAction.Scan; } diff --git a/tests/cases/fourslash/formatTsx.ts b/tests/cases/fourslash/formatTsx.ts new file mode 100644 index 00000000000..1472351fe40 --- /dev/null +++ b/tests/cases/fourslash/formatTsx.ts @@ -0,0 +1,18 @@ +/// + +// @Filename: foo.tsx +////

'

{function(){return 1;}]}

+ +format.document(); +verify.currentFileContentIs("

'

{function() { return 1; }]}

"); + +/* +< 0 +p 1 +> 2 +' 3 +< 4 +/ 5 +p 6 +> 7 +*/