diff --git a/.gitignore b/.gitignore index ef631d99d78..af48864ed87 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,4 @@ tests/*.d.ts *.config scripts/debug.bat scripts/run.bat +coverage/ \ No newline at end of file diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 13781b271c9..a9533171238 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -58,7 +58,6 @@ module ts { var stringLiteralTypes: Map = {}; - var fullTypeCheck = false; var emitExtends = false; var mergedSymbols: Symbol[] = []; @@ -4356,7 +4355,7 @@ module ts { } } } - if (fullTypeCheck && !(links.flags & NodeCheckFlags.TypeChecked)) { + if (!(links.flags & NodeCheckFlags.TypeChecked)) { checkSignatureDeclaration(node); if (node.type) { checkIfNonVoidFunctionHasReturnExpressionsOrSingleThrowStatment(node, getTypeFromTypeNode(node.type)); @@ -6254,7 +6253,6 @@ module ts { function checkSourceFile(node: SourceFile) { var links = getNodeLinks(node); if (!(links.flags & NodeCheckFlags.TypeChecked)) { - fullTypeCheck = true; emitExtends = false; potentialThisCollisions.length = 0; forEach(node.statements, checkSourceElement); @@ -6271,7 +6269,6 @@ module ts { } if (emitExtends) links.flags |= NodeCheckFlags.EmitExtends; links.flags |= NodeCheckFlags.TypeChecked; - fullTypeCheck = false; } } diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index 924e8da3812..fd91c7c70ec 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -1903,7 +1903,7 @@ module FourSlash { files[Harness.Compiler.defaultLibFileName] = Harness.Compiler.defaultLibSourceFile; var host = Harness.Compiler.createCompilerHost(files, (fn, contents) => result = contents); - var program = ts.createProgram([fileName, fourslashFilename], {}, host); + var program = ts.createProgram([fourslashFilename, fileName], { out: "fourslashTestOutput.js" }, host); var checker = ts.createTypeChecker(program); checker.checkProgram(); diff --git a/src/services/compiler/precompile.ts b/src/services/compiler/precompile.ts index b806645c7af..3ff23d85bea 100644 --- a/src/services/compiler/precompile.ts +++ b/src/services/compiler/precompile.ts @@ -49,7 +49,7 @@ module TypeScript { return isNoDefaultLibRegex.exec(comment); } - export var tripleSlashReferenceRegExp = /^(\/\/\/\s*/; + export var tripleSlashReferenceRegExp = /^(\/\/\/\s*/; function getFileReferenceFromReferencePath(fileName: string, text: ISimpleText, position: number, comment: string, diagnostics: Diagnostic[]): IFileReference { // First, just see if they've written: /// = maxDepth) { + if (depth > maxDepth) { return; } switch (n.kind) { + case SyntaxKind.Block: + case SyntaxKind.FunctionBlock: + case SyntaxKind.ModuleBlock: + case SyntaxKind.TryBlock: + case SyntaxKind.TryBlock: + case SyntaxKind.CatchBlock: + case SyntaxKind.FinallyBlock: + var openBrace = forEach(n.getChildren(), c => c.kind === SyntaxKind.OpenBraceToken && c); + var closeBrace = forEach(n.getChildren(), c => c.kind === SyntaxKind.CloseBraceToken && c); + addOutlineRange(n.parent, openBrace, closeBrace); + break; case SyntaxKind.ClassDeclaration: case SyntaxKind.InterfaceDeclaration: - case SyntaxKind.ModuleDeclaration: case SyntaxKind.EnumDeclaration: case SyntaxKind.ObjectLiteral: var openBrace = forEach(n.getChildren(), c => c.kind === SyntaxKind.OpenBraceToken && c); var closeBrace = forEach(n.getChildren(), c => c.kind === SyntaxKind.CloseBraceToken && c); addOutlineRange(n, openBrace, closeBrace); break; - case SyntaxKind.Constructor: - case SyntaxKind.FunctionDeclaration: - case SyntaxKind.Method: - case SyntaxKind.GetAccessor: - case SyntaxKind.SetAccessor: - var body = (n).body; - if (body) { - var openBrace = forEach(body.getChildren(), c => c.kind === SyntaxKind.OpenBraceToken && c); - var closeBrace = forEach(body.getChildren(), c => c.kind === SyntaxKind.CloseBraceToken && c); - addOutlineRange(n, openBrace, closeBrace); - } - break; } depth++; forEachChild(n, walk); diff --git a/src/services/services.ts b/src/services/services.ts index a0033fdd56b..9ff6266d54e 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -420,10 +420,10 @@ module ts { ? TypeScript.Parser.parse(this.filename, text, this.languageVersion, TypeScript.isDTSFile(this.filename)) : TypeScript.IncrementalParser.parse(oldSyntaxTree, textChangeRange, text); - return SourceFileObject.createSourceFileObject(this.languageVersion, this.filename, scriptSnapshot, version, isOpen, newSyntaxTree); + return SourceFileObject.createSourceFileObject(this.filename, scriptSnapshot, this.languageVersion, version, isOpen, newSyntaxTree); } - public static createSourceFileObject(languageVersion: ScriptTarget, filename: string, scriptSnapshot: TypeScript.IScriptSnapshot, version: string, isOpen: boolean, syntaxTree: TypeScript.SyntaxTree) { + public static createSourceFileObject(filename: string, scriptSnapshot: TypeScript.IScriptSnapshot, languageVersion: ScriptTarget, version: string, isOpen: boolean, syntaxTree?: TypeScript.SyntaxTree) { var newSourceFile = createSourceFile(filename, scriptSnapshot.getText(0, scriptSnapshot.getLength()), languageVersion, version, isOpen); newSourceFile.scriptSnapshot = scriptSnapshot; newSourceFile.syntaxTree = syntaxTree; @@ -1068,7 +1068,7 @@ module ts { var nextSyntaxTree = TypeScript.IncrementalParser.parse( previousSyntaxTree, editRange, TypeScript.SimpleText.fromScriptSnapshot(scriptSnapshot)); - this.ensureInvariants(filename, editRange, nextSyntaxTree, this.getCurrentScriptSnapshot(filename), scriptSnapshot); + this.ensureInvariants(filename, editRange, nextSyntaxTree, previousScriptSnapshot, scriptSnapshot); return nextSyntaxTree; } @@ -1137,7 +1137,7 @@ module ts { } function createSourceFileFromScriptSnapshot(filename: string, scriptSnapshot: TypeScript.IScriptSnapshot, settings: CompilerOptions, version: string, isOpen: boolean) { - return createSourceFile(filename, scriptSnapshot.getText(0, scriptSnapshot.getLength()), settings.target, version, isOpen); + return SourceFileObject.createSourceFileObject(filename, scriptSnapshot, settings.target, version, isOpen); } export function createDocumentRegistry(): DocumentRegistry { diff --git a/src/services/shims.ts b/src/services/shims.ts index 4965ba5f705..d473a6979ee 100644 --- a/src/services/shims.ts +++ b/src/services/shims.ts @@ -729,7 +729,7 @@ module ts { var items = this.languageService.getOutliningRegions(fileName); // return just the part of data that language service v2 can understand // language service v2 will use the entire OutliningSpan - var spans = forEach(items, i => i.textSpan); + var spans = map(items, i => i.textSpan); return spans; }); } diff --git a/tests/baselines/reference/project/referencePathStatic/amd/referencePathStatic.json b/tests/baselines/reference/project/referencePathStatic/amd/referencePathStatic.json new file mode 100644 index 00000000000..3bdf1f68e6d --- /dev/null +++ b/tests/baselines/reference/project/referencePathStatic/amd/referencePathStatic.json @@ -0,0 +1,16 @@ +{ + "scenario": "Reference-path-static", + "projectRoot": "tests/cases/projects/reference-path-static", + "inputFiles": [ + "test.ts" + ], + "resolvedInputFiles": [ + "test.ts", + "lib.ts", + "lib.d.ts" + ], + "emittedFiles": [ + "lib.js", + "test.js" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/referencePathStatic/node/referencePathStatic.json b/tests/baselines/reference/project/referencePathStatic/node/referencePathStatic.json new file mode 100644 index 00000000000..3bdf1f68e6d --- /dev/null +++ b/tests/baselines/reference/project/referencePathStatic/node/referencePathStatic.json @@ -0,0 +1,16 @@ +{ + "scenario": "Reference-path-static", + "projectRoot": "tests/cases/projects/reference-path-static", + "inputFiles": [ + "test.ts" + ], + "resolvedInputFiles": [ + "test.ts", + "lib.ts", + "lib.d.ts" + ], + "emittedFiles": [ + "lib.js", + "test.js" + ] +} \ No newline at end of file diff --git a/tests/cases/fourslash/getOutliningSpans.ts b/tests/cases/fourslash/getOutliningSpans.ts index 57eba365e33..d672ba20ac4 100644 --- a/tests/cases/fourslash/getOutliningSpans.ts +++ b/tests/cases/fourslash/getOutliningSpans.ts @@ -63,10 +63,10 @@ ////}|] /* even more */ //// ////// object literals -////var x = [|{ +////var x =[|{ //// a:1, //// b:2, -//// get foo() [|{ +//// get foo()[| { //// return 1; //// }|] ////}|] diff --git a/tests/cases/fourslash/outliningForNonCompleteInterfaceDeclaration.ts b/tests/cases/fourslash/outliningForNonCompleteInterfaceDeclaration.ts index 67868c6fb5b..09fd3e8d59d 100644 --- a/tests/cases/fourslash/outliningForNonCompleteInterfaceDeclaration.ts +++ b/tests/cases/fourslash/outliningForNonCompleteInterfaceDeclaration.ts @@ -3,4 +3,4 @@ ////interface I[||] // should not crash -verify.outliningSpansInCurrentFile(test.ranges()); \ No newline at end of file +verify.outliningSpansInCurrentFile([]); \ No newline at end of file diff --git a/tests/cases/fourslash/selfReferencedExternalModule2.ts b/tests/cases/fourslash_old/selfReferencedExternalModule2.ts similarity index 100% rename from tests/cases/fourslash/selfReferencedExternalModule2.ts rename to tests/cases/fourslash_old/selfReferencedExternalModule2.ts diff --git a/tests/cases/project/referencePathStatic.json b/tests/cases/project/referencePathStatic.json new file mode 100644 index 00000000000..b0a7786b835 --- /dev/null +++ b/tests/cases/project/referencePathStatic.json @@ -0,0 +1,7 @@ +{ + "scenario": "Reference-path-static", + "projectRoot": "tests/cases/projects/reference-path-static", + "inputFiles": [ + "test.ts" + ] +} diff --git a/tests/cases/projects/reference-path-static/lib.ts b/tests/cases/projects/reference-path-static/lib.ts new file mode 100644 index 00000000000..8d0f3d9c69d --- /dev/null +++ b/tests/cases/projects/reference-path-static/lib.ts @@ -0,0 +1,3 @@ +module Lib { + export class LibType {} +} diff --git a/tests/cases/projects/reference-path-static/test.ts b/tests/cases/projects/reference-path-static/test.ts new file mode 100644 index 00000000000..ee338c684f0 --- /dev/null +++ b/tests/cases/projects/reference-path-static/test.ts @@ -0,0 +1,3 @@ +/// + +var libType: Lib.LibType; \ No newline at end of file