From 0b41303df2172f12950d84f7d1210b02c8198f08 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Tue, 12 Aug 2014 13:33:48 -0700 Subject: [PATCH 1/6] Ensure scriptsnapshot is set when creating a source file --- src/services/services.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/services/services.ts b/src/services/services.ts index 515f18e6601..06bfbd80e05 100644 --- a/src/services/services.ts +++ b/src/services/services.ts @@ -416,10 +416,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: number, isOpen: boolean, syntaxTree: TypeScript.SyntaxTree) { + public static createSourceFileObject(filename: string, scriptSnapshot: TypeScript.IScriptSnapshot, languageVersion: ScriptTarget, version: number, isOpen: boolean, syntaxTree?: TypeScript.SyntaxTree) { var newSourceFile = createSourceFile(filename, scriptSnapshot.getText(0, scriptSnapshot.getLength()), languageVersion, version, isOpen); newSourceFile.scriptSnapshot = scriptSnapshot; newSourceFile.syntaxTree = syntaxTree; @@ -1134,7 +1134,7 @@ module ts { } function createSourceFileFromScriptSnapshot(filename: string, scriptSnapshot: TypeScript.IScriptSnapshot, settings: CompilerOptions, version: number, 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 { From 911cb2b1fb4e3eb14b8b23cc8b7fab4e674af45e Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Tue, 12 Aug 2014 13:34:07 -0700 Subject: [PATCH 2/6] Make sure fourslash tests are running --- src/harness/fourslash.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index 75ed8f1f13d..da649f77dd9 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(); From ccaf904cfa872865b4150663f2eeb7b972719797 Mon Sep 17 00:00:00 2001 From: Vladimir Matveev Date: Tue, 12 Aug 2014 15:47:57 -0700 Subject: [PATCH 3/6] support outlining for arbitrary blocks --- src/services/outliningElementsCollector.ts | 34 ++++++++++------------ src/services/shims.ts | 2 +- tests/cases/fourslash/getOutliningSpans.ts | 4 +-- 3 files changed, 19 insertions(+), 21 deletions(-) diff --git a/src/services/outliningElementsCollector.ts b/src/services/outliningElementsCollector.ts index 8d453679aad..92440bfe760 100644 --- a/src/services/outliningElementsCollector.ts +++ b/src/services/outliningElementsCollector.ts @@ -36,11 +36,11 @@ module ts { export function collectElements(sourceFile: SourceFile): OutliningSpan[] { var elements: OutliningSpan[] = []; - function addOutlineRange(node: Node, startElement: Node, endElement: Node) { - if (node && startElement && endElement) { + function addOutlineRange(hintSpanNode: Node, startElement: Node, endElement: Node) { + if (hintSpanNode && startElement && endElement) { var span: OutliningSpan = { textSpan: TypeScript.TextSpan.fromBounds(startElement.pos, endElement.end), - hintSpan: TypeScript.TextSpan.fromBounds(node.getStart(), node.end), + hintSpan: TypeScript.TextSpan.fromBounds(hintSpanNode.getStart(), hintSpanNode.end), bannerText: "...", autoCollapse: false }; @@ -49,33 +49,31 @@ module ts { } var depth = 0; - var maxDepth = 10; + var maxDepth = 20; function walk(n: Node): void { - if (depth >= 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/shims.ts b/src/services/shims.ts index 26c43295b66..523a0af5c91 100644 --- a/src/services/shims.ts +++ b/src/services/shims.ts @@ -728,7 +728,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/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; //// }|] ////}|] From d353fcdfb303c1ec93001c124d72b1901167a3de Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Tue, 12 Aug 2014 17:33:37 -0700 Subject: [PATCH 4/6] remove fullTypeCheck flag as it may lead to missing errors if we make any requests with fullTypeCheck=false and we cache any result --- src/compiler/checker.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) 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; } } From c16d0df7b2ac87007f789346c32f7e47e4ad1bfe Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Tue, 12 Aug 2014 17:43:02 -0700 Subject: [PATCH 5/6] Disable test as it needs resolution which the test harness does not support yet --- .../{fourslash => fourslash_old}/selfReferencedExternalModule2.ts | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename tests/cases/{fourslash => fourslash_old}/selfReferencedExternalModule2.ts (100%) 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 From a8df9c158606ab322a4af7a06553efb50cb14a35 Mon Sep 17 00:00:00 2001 From: Mohamed Hegazy Date: Tue, 12 Aug 2014 17:43:15 -0700 Subject: [PATCH 6/6] update test --- .../fourslash/outliningForNonCompleteInterfaceDeclaration.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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