From f8dd19ed1ca73fc64ff1e4039fd18584de827435 Mon Sep 17 00:00:00 2001 From: Cyrus Najmabadi Date: Fri, 12 Dec 2014 12:01:27 -0800 Subject: [PATCH] Resurrect the post edit invariants checking for fourslash. --- src/harness/fourslash.ts | 60 +++++++++++++++++------------------- src/harness/harness.ts | 14 +++++++++ src/harness/test262Runner.ts | 15 +-------- 3 files changed, 44 insertions(+), 45 deletions(-) diff --git a/src/harness/fourslash.ts b/src/harness/fourslash.ts index e253f7b575b..12a538126f1 100644 --- a/src/harness/fourslash.ts +++ b/src/harness/fourslash.ts @@ -1415,44 +1415,42 @@ module FourSlash { } private checkPostEditInvariants() { - return; + if (this.editValidation === IncrementalEditValidation.None) { + return; + } - /// TODO: reimplement this section - //if (this.editValidation === IncrementalEditValidation.None) { - // return; - //} + // Get syntactic errors (to force a refresh) + var incrSyntaxErrs = JSON.stringify(Utils.convertDiagnostics(this.languageService.getSyntacticDiagnostics(this.activeFile.fileName))); - //// Get syntactic errors (to force a refresh) - //var incrSyntaxErrs = JSON.stringify(this.languageService.getSyntacticDiagnostics(this.activeFile.fileName)); + // Check syntactic structure + var snapshot = this.languageServiceShimHost.getScriptSnapshot(this.activeFile.fileName); + var content = snapshot.getText(0, snapshot.getLength()); + var refSyntaxTree = ts.createLanguageServiceSourceFile( + this.activeFile.fileName, createScriptSnapShot(content), ts.ScriptTarget.Latest, /*version:*/ "0", /*isOpen:*/ false, /*setNodeParents:*/ false); + var fullSyntaxErrs = JSON.stringify(Utils.convertDiagnostics(refSyntaxTree.getSyntacticDiagnostics())); - //// Check syntactic structure - //var snapshot = this.languageServiceShimHost.getScriptSnapshot(this.activeFile.fileName); - //var content = snapshot.getText(0, snapshot.getLength()); - //var refSyntaxTree = TypeScript.Parser.parse(this.activeFile.fileName, TypeScript.SimpleText.fromString(content), ts.ScriptTarget.ES5, TypeScript.isDTSFile(this.activeFile.fileName)); - //var fullSyntaxErrs = JSON.stringify(refSyntaxTree.diagnostics()); + if (incrSyntaxErrs !== fullSyntaxErrs) { + this.raiseError('Mismatched incremental/full syntactic errors for file ' + this.activeFile.fileName + '.\n=== Incremental errors ===\n' + incrSyntaxErrs + '\n=== Full Errors ===\n' + fullSyntaxErrs); + } - //if (incrSyntaxErrs !== fullSyntaxErrs) { - // this.raiseError('Mismatched incremental/full syntactic errors for file ' + this.activeFile.fileName + '.\n=== Incremental errors ===\n' + incrSyntaxErrs + '\n=== Full Errors ===\n' + fullSyntaxErrs); - //} + //if (this.editValidation !== IncrementalEditValidation.SyntacticOnly) { + // var compiler = new TypeScript.TypeScriptCompiler(); + // for (var i = 0; i < this.testData.files.length; i++) { + // snapshot = this.languageServiceShimHost.getScriptSnapshot(this.testData.files[i].fileName); + // compiler.addFile(this.testData.files[i].fileName, TypeScript.ScriptSnapshot.fromString(snapshot.getText(0, snapshot.getLength())), ts.ByteOrderMark.None, 0, true); + // } - // if (this.editValidation !== IncrementalEditValidation.SyntacticOnly) { - // var compiler = new TypeScript.TypeScriptCompiler(); - // for (var i = 0; i < this.testData.files.length; i++) { - // snapshot = this.languageServiceShimHost.getScriptSnapshot(this.testData.files[i].fileName); - // compiler.addFile(this.testData.files[i].fileName, TypeScript.ScriptSnapshot.fromString(snapshot.getText(0, snapshot.getLength())), ts.ByteOrderMark.None, 0, true); - // } + // compiler.addFile('lib.d.ts', TypeScript.ScriptSnapshot.fromString(Harness.Compiler.libTextMinimal), ts.ByteOrderMark.None, 0, true); - // compiler.addFile('lib.d.ts', TypeScript.ScriptSnapshot.fromString(Harness.Compiler.libTextMinimal), ts.ByteOrderMark.None, 0, true); + // for (var i = 0; i < this.testData.files.length; i++) { + // var refSemanticErrs = JSON.stringify(compiler.getSemanticDiagnostics(this.testData.files[i].fileName)); + // var incrSemanticErrs = JSON.stringify(this.languageService.getSemanticDiagnostics(this.testData.files[i].fileName)); - // for (var i = 0; i < this.testData.files.length; i++) { - // var refSemanticErrs = JSON.stringify(compiler.getSemanticDiagnostics(this.testData.files[i].fileName)); - // var incrSemanticErrs = JSON.stringify(this.languageService.getSemanticDiagnostics(this.testData.files[i].fileName)); - - // if (incrSemanticErrs !== refSemanticErrs) { - // this.raiseError('Mismatched incremental/full semantic errors for file ' + this.testData.files[i].fileName + '\n=== Incremental errors ===\n' + incrSemanticErrs + '\n=== Full Errors ===\n' + refSemanticErrs); - // } - // } - // } + // if (incrSemanticErrs !== refSemanticErrs) { + // this.raiseError('Mismatched incremental/full semantic errors for file ' + this.testData.files[i].fileName + '\n=== Incremental errors ===\n' + incrSemanticErrs + '\n=== Full Errors ===\n' + refSemanticErrs); + // } + // } + //} } private fixCaretPosition() { diff --git a/src/harness/harness.ts b/src/harness/harness.ts index 5a4837949a5..095b0702b12 100644 --- a/src/harness/harness.ts +++ b/src/harness/harness.ts @@ -175,6 +175,20 @@ module Utils { function isNodeOrArray(a: any): boolean { return a !== undefined && typeof a.pos === "number"; } + + export function convertDiagnostics(diagnostics: ts.Diagnostic[]) { + return diagnostics.map(convertDiagnostic); + } + + function convertDiagnostic(diagnostic: ts.Diagnostic) { + return { + start: diagnostic.start, + length: diagnostic.length, + messageText: diagnostic.messageText, + category: (ts).DiagnosticCategory[diagnostic.category], + code: diagnostic.code + }; + } } module Harness.Path { diff --git a/src/harness/test262Runner.ts b/src/harness/test262Runner.ts index 8c39880a81c..f6ba448015b 100644 --- a/src/harness/test262Runner.ts +++ b/src/harness/test262Runner.ts @@ -52,19 +52,6 @@ class Test262BaselineRunner extends RunnerBase { function getNodeFlagName(f: number) { return getFlagName((ts).NodeFlags, f); } function getParserContextFlagName(f: number) { return getFlagName((ts).ParserContextFlags, f); } - function convertDiagnostics(diagnostics: ts.Diagnostic[]) { - return diagnostics.map(convertDiagnostic); - } - - function convertDiagnostic(diagnostic: ts.Diagnostic): any { - return { - start: diagnostic.start, - length: diagnostic.length, - messageText: diagnostic.messageText, - category: (ts).DiagnosticCategory[diagnostic.category], - code: diagnostic.code - }; - } function serializeNode(n: ts.Node): any { var o: any = { kind: getKindName(n.kind) }; @@ -97,7 +84,7 @@ class Test262BaselineRunner extends RunnerBase { case "referenceDiagnostics": case "parseDiagnostics": case "grammarDiagnostics": - o[propertyName] = convertDiagnostics((n)[propertyName]); + o[propertyName] = Utils.convertDiagnostics((n)[propertyName]); break; case "nextContainer":