From 3df65a7a856ecfadf3940290e849bc4dc97db04b Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Wed, 1 May 2019 10:07:00 -0700 Subject: [PATCH 1/2] Add test when module resolution includes .ts file from node_modules --- ...positeWithNodeModulesSourceFile.errors.txt | 18 +++++++++++++++++ .../compositeWithNodeModulesSourceFile.js | 20 +++++++++++++++++++ ...compositeWithNodeModulesSourceFile.symbols | 14 +++++++++++++ .../compositeWithNodeModulesSourceFile.types | 15 ++++++++++++++ .../compositeWithNodeModulesSourceFile.ts | 13 ++++++++++++ 5 files changed, 80 insertions(+) create mode 100644 tests/baselines/reference/compositeWithNodeModulesSourceFile.errors.txt create mode 100644 tests/baselines/reference/compositeWithNodeModulesSourceFile.js create mode 100644 tests/baselines/reference/compositeWithNodeModulesSourceFile.symbols create mode 100644 tests/baselines/reference/compositeWithNodeModulesSourceFile.types create mode 100644 tests/cases/compiler/compositeWithNodeModulesSourceFile.ts diff --git a/tests/baselines/reference/compositeWithNodeModulesSourceFile.errors.txt b/tests/baselines/reference/compositeWithNodeModulesSourceFile.errors.txt new file mode 100644 index 0000000000000..be5aebfd5bcd1 --- /dev/null +++ b/tests/baselines/reference/compositeWithNodeModulesSourceFile.errors.txt @@ -0,0 +1,18 @@ +error TS6307: File '/foo/node_modules/myModule/index.ts' is not in project file list. Projects must list all files or use an 'include' pattern. + + +!!! error TS6307: File '/foo/node_modules/myModule/index.ts' is not in project file list. Projects must list all files or use an 'include' pattern. +==== /foo/tsconfig.json (0 errors) ==== + { + "compilerOptions": { "composite": true }, + "exclude": [ "node_modules" ] + } + +==== /foo/test.ts (0 errors) ==== + import myModule = require("myModule"); + new myModule.c(); + + +==== /foo/node_modules/myModule/index.ts (0 errors) ==== + export class c { } + \ No newline at end of file diff --git a/tests/baselines/reference/compositeWithNodeModulesSourceFile.js b/tests/baselines/reference/compositeWithNodeModulesSourceFile.js new file mode 100644 index 0000000000000..9a2caf39c61a3 --- /dev/null +++ b/tests/baselines/reference/compositeWithNodeModulesSourceFile.js @@ -0,0 +1,20 @@ +//// [tests/cases/compiler/compositeWithNodeModulesSourceFile.ts] //// + +//// [index.ts] +export class c { } + +//// [test.ts] +import myModule = require("myModule"); +new myModule.c(); + + + +//// [test.js] +"use strict"; +exports.__esModule = true; +var myModule = require("myModule"); +new myModule.c(); + + +//// [test.d.ts] +export {}; diff --git a/tests/baselines/reference/compositeWithNodeModulesSourceFile.symbols b/tests/baselines/reference/compositeWithNodeModulesSourceFile.symbols new file mode 100644 index 0000000000000..9daaf1ad5ffd7 --- /dev/null +++ b/tests/baselines/reference/compositeWithNodeModulesSourceFile.symbols @@ -0,0 +1,14 @@ +=== /foo/test.ts === +import myModule = require("myModule"); +>myModule : Symbol(myModule, Decl(test.ts, 0, 0)) + +new myModule.c(); +>myModule.c : Symbol(myModule.c, Decl(index.ts, 0, 0)) +>myModule : Symbol(myModule, Decl(test.ts, 0, 0)) +>c : Symbol(myModule.c, Decl(index.ts, 0, 0)) + + +=== /foo/node_modules/myModule/index.ts === +export class c { } +>c : Symbol(c, Decl(index.ts, 0, 0)) + diff --git a/tests/baselines/reference/compositeWithNodeModulesSourceFile.types b/tests/baselines/reference/compositeWithNodeModulesSourceFile.types new file mode 100644 index 0000000000000..d34838ae88a09 --- /dev/null +++ b/tests/baselines/reference/compositeWithNodeModulesSourceFile.types @@ -0,0 +1,15 @@ +=== /foo/test.ts === +import myModule = require("myModule"); +>myModule : typeof myModule + +new myModule.c(); +>new myModule.c() : myModule.c +>myModule.c : typeof myModule.c +>myModule : typeof myModule +>c : typeof myModule.c + + +=== /foo/node_modules/myModule/index.ts === +export class c { } +>c : c + diff --git a/tests/cases/compiler/compositeWithNodeModulesSourceFile.ts b/tests/cases/compiler/compositeWithNodeModulesSourceFile.ts new file mode 100644 index 0000000000000..b2d0020156751 --- /dev/null +++ b/tests/cases/compiler/compositeWithNodeModulesSourceFile.ts @@ -0,0 +1,13 @@ +// @filename: /foo/tsconfig.json +{ + "compilerOptions": { "composite": true }, + "exclude": [ "node_modules" ] +} + +// @filename: /foo/node_modules/myModule/index.ts +export class c { } + +// @filename: /foo/test.ts +import myModule = require("myModule"); +new myModule.c(); + From a58fdf2b35f33fd7bfb29b65eafd43e920d1ab8c Mon Sep 17 00:00:00 2001 From: Sheetal Nandi Date: Wed, 1 May 2019 10:14:11 -0700 Subject: [PATCH 2/2] Include only files that can be emitted into the source file directory check for composite projects Fixes #31181 --- src/compiler/program.ts | 6 ++---- ...mpositeWithNodeModulesSourceFile.errors.txt | 18 ------------------ 2 files changed, 2 insertions(+), 22 deletions(-) delete mode 100644 tests/baselines/reference/compositeWithNodeModulesSourceFile.errors.txt diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 7e01e56f0693d..6f7ffc2c3a972 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -2768,10 +2768,8 @@ namespace ts { if (options.composite) { const rootPaths = rootNames.map(toPath); for (const file of files) { - // Ignore declaration files - if (file.isDeclarationFile) continue; - // Ignore json file thats from project reference - if (isJsonSourceFile(file) && getResolvedProjectReferenceToRedirect(file.fileName)) continue; + // Ignore file that is not emitted + if (!sourceFileMayBeEmitted(file, options, isSourceFileFromExternalLibrary, getResolvedProjectReferenceToRedirect)) continue; if (rootPaths.indexOf(file.path) === -1) { programDiagnostics.add(createCompilerDiagnostic(Diagnostics.File_0_is_not_in_project_file_list_Projects_must_list_all_files_or_use_an_include_pattern, file.fileName)); } diff --git a/tests/baselines/reference/compositeWithNodeModulesSourceFile.errors.txt b/tests/baselines/reference/compositeWithNodeModulesSourceFile.errors.txt deleted file mode 100644 index be5aebfd5bcd1..0000000000000 --- a/tests/baselines/reference/compositeWithNodeModulesSourceFile.errors.txt +++ /dev/null @@ -1,18 +0,0 @@ -error TS6307: File '/foo/node_modules/myModule/index.ts' is not in project file list. Projects must list all files or use an 'include' pattern. - - -!!! error TS6307: File '/foo/node_modules/myModule/index.ts' is not in project file list. Projects must list all files or use an 'include' pattern. -==== /foo/tsconfig.json (0 errors) ==== - { - "compilerOptions": { "composite": true }, - "exclude": [ "node_modules" ] - } - -==== /foo/test.ts (0 errors) ==== - import myModule = require("myModule"); - new myModule.c(); - - -==== /foo/node_modules/myModule/index.ts (0 errors) ==== - export class c { } - \ No newline at end of file