Allow JS with isolated modules (#31483)

* Allow JS with isolated modules

Previously legacy JS code was not allowed; it was required to use ES6
module syntax. Unfortunately, the check happens after parsing but before
binding, and the commonjs module indicator isn't set until binding
because it's not syntactically simple like the ES6 module indicator,
which is set during parsing.

So I decided that JS should be allowed during isolatedModules
unconditionally. We're not going to be transforming it anyway.

* Update baselines

* Switch test to outDir instead of noEmit
This commit is contained in:
Nathan Shively-Sanders 2019-05-23 11:09:28 -07:00 committed by GitHub
parent ae7a1b4f56
commit 4d27361680
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 60 additions and 19 deletions

View File

@ -655,7 +655,7 @@
"category": "Error",
"code": 1207
},
"Cannot compile namespaces when the '--isolatedModules' flag is provided.": {
"All files must be modules when the '--isolatedModules' flag is provided.": {
"category": "Error",
"code": 1208
},

View File

@ -2858,10 +2858,10 @@ namespace ts {
createDiagnosticForOptionName(Diagnostics.Option_isolatedModules_can_only_be_used_when_either_option_module_is_provided_or_option_target_is_ES2015_or_higher, "isolatedModules", "target");
}
const firstNonExternalModuleSourceFile = find(files, f => !isExternalModule(f) && !f.isDeclarationFile && f.scriptKind !== ScriptKind.JSON);
const firstNonExternalModuleSourceFile = find(files, f => !isExternalModule(f) && !isSourceFileJS(f) && !f.isDeclarationFile && f.scriptKind !== ScriptKind.JSON);
if (firstNonExternalModuleSourceFile) {
const span = getErrorSpanForNode(firstNonExternalModuleSourceFile, firstNonExternalModuleSourceFile);
programDiagnostics.add(createFileDiagnostic(firstNonExternalModuleSourceFile, span.start, span.length, Diagnostics.Cannot_compile_namespaces_when_the_isolatedModules_flag_is_provided));
programDiagnostics.add(createFileDiagnostic(firstNonExternalModuleSourceFile, span.start, span.length, Diagnostics.All_files_must_be_modules_when_the_isolatedModules_flag_is_provided));
}
}
else if (firstNonAmbientExternalModuleSourceFile && languageVersion < ScriptTarget.ES2015 && options.module === ModuleKind.None) {

View File

@ -0,0 +1,8 @@
//// [index.js]
module.exports = {}
var x = 1
//// [index.js]
module.exports = {};
var x = 1;

View File

@ -0,0 +1,9 @@
=== tests/cases/compiler/index.js ===
module.exports = {}
>module.exports : Symbol("tests/cases/compiler/index", Decl(index.js, 0, 0))
>module : Symbol(module, Decl(index.js, 0, 0))
>exports : Symbol("tests/cases/compiler/index", Decl(index.js, 0, 0))
var x = 1
>x : Symbol(x, Decl(index.js, 1, 3))

View File

@ -0,0 +1,12 @@
=== tests/cases/compiler/index.js ===
module.exports = {}
>module.exports = {} : typeof import("tests/cases/compiler/index")
>module.exports : typeof import("tests/cases/compiler/index")
>module : { "tests/cases/compiler/index": typeof import("tests/cases/compiler/index"); }
>exports : typeof import("tests/cases/compiler/index")
>{} : {}
var x = 1
>x : number
>1 : 1

View File

@ -1,4 +1,4 @@
tests/cases/compiler/script.ts(1,1): error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
tests/cases/compiler/script.ts(1,1): error TS1208: All files must be modules when the '--isolatedModules' flag is provided.
==== tests/cases/compiler/external.ts (0 errors) ====
@ -16,7 +16,7 @@ tests/cases/compiler/script.ts(1,1): error TS1208: Cannot compile namespaces whe
==== tests/cases/compiler/script.ts (1 errors) ====
class A { }
~~~~~
!!! error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
!!! error TS1208: All files must be modules when the '--isolatedModules' flag is provided.
class B extends A { }
declare var dec: any;

View File

@ -1,7 +1,7 @@
tests/cases/compiler/file1.ts(1,1): error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
tests/cases/compiler/file1.ts(1,1): error TS1208: All files must be modules when the '--isolatedModules' flag is provided.
==== tests/cases/compiler/file1.ts (1 errors) ====
var x;
~~~
!!! error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
!!! error TS1208: All files must be modules when the '--isolatedModules' flag is provided.

View File

@ -1,6 +1,6 @@
error TS5053: Option 'out' cannot be specified with option 'isolatedModules'.
tests/cases/compiler/file1.ts(1,1): error TS6131: Cannot compile modules using option 'out' unless the '--module' flag is 'amd' or 'system'.
tests/cases/compiler/file2.ts(1,1): error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
tests/cases/compiler/file2.ts(1,1): error TS1208: All files must be modules when the '--isolatedModules' flag is provided.
!!! error TS5053: Option 'out' cannot be specified with option 'isolatedModules'.
@ -11,4 +11,4 @@ tests/cases/compiler/file2.ts(1,1): error TS1208: Cannot compile namespaces when
==== tests/cases/compiler/file2.ts (1 errors) ====
var y;
~~~
!!! error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
!!! error TS1208: All files must be modules when the '--isolatedModules' flag is provided.

View File

@ -1,9 +1,9 @@
tests/cases/compiler/isolatedModulesPlainFile-AMD.ts(1,1): error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
tests/cases/compiler/isolatedModulesPlainFile-AMD.ts(1,1): error TS1208: All files must be modules when the '--isolatedModules' flag is provided.
==== tests/cases/compiler/isolatedModulesPlainFile-AMD.ts (1 errors) ====
declare function run(a: number): void;
~~~~~~~
!!! error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
!!! error TS1208: All files must be modules when the '--isolatedModules' flag is provided.
run(1);

View File

@ -1,9 +1,9 @@
tests/cases/compiler/isolatedModulesPlainFile-CommonJS.ts(1,1): error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
tests/cases/compiler/isolatedModulesPlainFile-CommonJS.ts(1,1): error TS1208: All files must be modules when the '--isolatedModules' flag is provided.
==== tests/cases/compiler/isolatedModulesPlainFile-CommonJS.ts (1 errors) ====
declare function run(a: number): void;
~~~~~~~
!!! error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
!!! error TS1208: All files must be modules when the '--isolatedModules' flag is provided.
run(1);

View File

@ -1,9 +1,9 @@
tests/cases/compiler/isolatedModulesPlainFile-ES6.ts(1,1): error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
tests/cases/compiler/isolatedModulesPlainFile-ES6.ts(1,1): error TS1208: All files must be modules when the '--isolatedModules' flag is provided.
==== tests/cases/compiler/isolatedModulesPlainFile-ES6.ts (1 errors) ====
declare function run(a: number): void;
~~~~~~~
!!! error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
!!! error TS1208: All files must be modules when the '--isolatedModules' flag is provided.
run(1);

View File

@ -1,9 +1,9 @@
tests/cases/compiler/isolatedModulesPlainFile-System.ts(1,1): error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
tests/cases/compiler/isolatedModulesPlainFile-System.ts(1,1): error TS1208: All files must be modules when the '--isolatedModules' flag is provided.
==== tests/cases/compiler/isolatedModulesPlainFile-System.ts (1 errors) ====
declare function run(a: number): void;
~~~~~~~
!!! error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
!!! error TS1208: All files must be modules when the '--isolatedModules' flag is provided.
run(1);

View File

@ -1,9 +1,9 @@
tests/cases/compiler/isolatedModulesPlainFile-UMD.ts(1,1): error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
tests/cases/compiler/isolatedModulesPlainFile-UMD.ts(1,1): error TS1208: All files must be modules when the '--isolatedModules' flag is provided.
==== tests/cases/compiler/isolatedModulesPlainFile-UMD.ts (1 errors) ====
declare function run(a: number): void;
~~~~~~~
!!! error TS1208: Cannot compile namespaces when the '--isolatedModules' flag is provided.
!!! error TS1208: All files must be modules when the '--isolatedModules' flag is provided.
run(1);

View File

@ -0,0 +1,12 @@
// @Filename: tsconfig.json
{
"compilerOptions": {
"allowJs": true,
"outDir": "foo",
"isolatedModules": true,
}
}
// @Filename: index.js
module.exports = {}
var x = 1