Skip to content

Commit

Permalink
Merge pull request #16633 from Microsoft/release-2.4_fixIncrementalPa…
Browse files Browse the repository at this point in the history
…rsing

[Release 2.4] Port fix incremental parsing PR
  • Loading branch information
yuit committed Jun 20, 2017
2 parents 2721fd4 + 4875a27 commit 44f2336
Show file tree
Hide file tree
Showing 11 changed files with 108 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/compiler/parser.ts
Expand Up @@ -3700,7 +3700,7 @@ namespace ts {
// 3)we have a MemberExpression which either completes the LeftHandSideExpression,
// or starts the beginning of the first four CallExpression productions.
let expression: MemberExpression;
if (token() === SyntaxKind.ImportKeyword) {
if (token() === SyntaxKind.ImportKeyword && lookAhead(nextTokenIsOpenParenOrLessThan)) {
// We don't want to eagerly consume all import keyword as import call expression so we look a head to find "("
// For example:
// var foo3 = require("subfolder
Expand Down
4 changes: 4 additions & 0 deletions src/compiler/program.ts
Expand Up @@ -802,6 +802,10 @@ namespace ts {
// moduleAugmentations has changed
oldProgram.structureIsReused = StructureIsReused.SafeModules;
}
if ((oldSourceFile.flags & NodeFlags.PossiblyContainsDynamicImport) !== (newSourceFile.flags & NodeFlags.PossiblyContainsDynamicImport)) {
// dynamicImport has changed
oldProgram.structureIsReused = StructureIsReused.SafeModules;
}

if (!arrayIsEqualTo(oldSourceFile.typeReferenceDirectives, newSourceFile.typeReferenceDirectives, fileReferenceIsEqualTo)) {
// 'types' references has changed
Expand Down
@@ -0,0 +1,11 @@
tests/cases/conformance/dynamicImport/1.ts(2,1): error TS1109: Expression expected.


==== tests/cases/conformance/dynamicImport/0.ts (0 errors) ====
export function foo() { return "foo"; }

==== tests/cases/conformance/dynamicImport/1.ts (1 errors) ====
import
import { foo } from './0';
~~~~~~
!!! error TS1109: Expression expected.
13 changes: 13 additions & 0 deletions tests/baselines/reference/importCallExpressionIncorrect1.js
@@ -0,0 +1,13 @@
//// [tests/cases/conformance/dynamicImport/importCallExpressionIncorrect1.ts] ////

//// [0.ts]
export function foo() { return "foo"; }

//// [1.ts]
import
import { foo } from './0';

//// [0.js]
export function foo() { return "foo"; }
//// [1.js]
import ;
@@ -0,0 +1,10 @@
tests/cases/conformance/dynamicImport/1.ts(1,9): error TS1109: Expression expected.


==== tests/cases/conformance/dynamicImport/0.ts (0 errors) ====
export function foo() { return "foo"; }

==== tests/cases/conformance/dynamicImport/1.ts (1 errors) ====
var x = import { foo } from './0';
~~~~~~
!!! error TS1109: Expression expected.
12 changes: 12 additions & 0 deletions tests/baselines/reference/importCallExpressionIncorrect2.js
@@ -0,0 +1,12 @@
//// [tests/cases/conformance/dynamicImport/importCallExpressionIncorrect2.ts] ////

//// [0.ts]
export function foo() { return "foo"; }

//// [1.ts]
var x = import { foo } from './0';

//// [0.js]
export function foo() { return "foo"; }
//// [1.js]
var x = ;
@@ -0,0 +1,8 @@
// @module: esnext
// @target: esnext
// @filename: 0.ts
export function foo() { return "foo"; }

// @filename: 1.ts
import
import { foo } from './0';
@@ -0,0 +1,7 @@
// @module: esnext
// @target: esnext
// @filename: 0.ts
export function foo() { return "foo"; }

// @filename: 1.ts
var x = import { foo } from './0';
13 changes: 13 additions & 0 deletions tests/cases/fourslash/incrementalParsingDynamicImport2.ts
@@ -0,0 +1,13 @@
/// <reference path="fourslash.ts"/>

// @lib: es2015

// @Filename: ./foo.ts
//// export function bar() { return 1; }

// @Filename: ./0.ts
//// /*1*/ import { bar } from "./foo"
verify.numberOfErrorsInCurrentFile(0);
goTo.marker("1");
edit.insert("var x = ");
verify.numberOfErrorsInCurrentFile(1);
14 changes: 14 additions & 0 deletions tests/cases/fourslash/incrementalParsingDynamicImport3.ts
@@ -0,0 +1,14 @@
/// <reference path="fourslash.ts"/>

// @lib: es2015

// @Filename: ./foo.ts
//// export function bar() { return 1; }

// @Filename: ./0.ts
//// var x = import/*1*/

verify.numberOfErrorsInCurrentFile(0);
goTo.marker("1");
edit.insert("(");
verify.numberOfErrorsInCurrentFile(2);
15 changes: 15 additions & 0 deletions tests/cases/fourslash/incrementalParsingDynamicImport4.ts
@@ -0,0 +1,15 @@
/// <reference path="fourslash.ts"/>

// @lib: es2015

// @Filename: ./foo.ts
//// export function bar() { return 1; }

// @Filename: ./0.ts
//// /*1*/
//// import { bar } from "./foo"

verify.numberOfErrorsInCurrentFile(0);
goTo.marker("1");
edit.insert("import");
verify.numberOfErrorsInCurrentFile(1);

0 comments on commit 44f2336

Please sign in to comment.