diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 8cf16a806ec..4c2bba00d33 100644 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -3195,9 +3195,10 @@ namespace ts { } } - // there has to be common source directory if user specified --outdir || --sourceRoot + // there has to be common source directory if user specified --outdir || --rootDir || --sourceRoot // if user specified --mapRoot, there needs to be common source directory if there would be multiple files being emitted if (options.outDir || // there is --outDir specified + options.rootDir || // there is --rootDir specified options.sourceRoot || // there is --sourceRoot specified options.mapRoot) { // there is --mapRoot specified diff --git a/src/testRunner/unittests/services/transpile.ts b/src/testRunner/unittests/services/transpile.ts index 765b4f345e6..48cb8582033 100644 --- a/src/testRunner/unittests/services/transpile.ts +++ b/src/testRunner/unittests/services/transpile.ts @@ -372,7 +372,7 @@ var x = 0;`, { }); transpilesCorrectly("Supports setting 'rootDir'", "x;", { - options: { compilerOptions: { rootDir: "./rootDir" }, fileName: "input.js", reportDiagnostics: true } + options: { compilerOptions: { rootDir: "./rootDir" }, fileName: "./rootDir/input.js", reportDiagnostics: true } }); transpilesCorrectly("Supports setting 'rootDirs'", "x;", { diff --git a/tests/baselines/reference/project/rootDirectoryWithoutOutDir/amd/rootDirectoryWithoutOutDir.errors.txt b/tests/baselines/reference/project/rootDirectoryWithoutOutDir/amd/rootDirectoryWithoutOutDir.errors.txt new file mode 100644 index 00000000000..4e3492c206f --- /dev/null +++ b/tests/baselines/reference/project/rootDirectoryWithoutOutDir/amd/rootDirectoryWithoutOutDir.errors.txt @@ -0,0 +1,18 @@ +error TS6059: File 'FolderA/FolderB/fileB.ts' is not under 'rootDir' 'FolderA/FolderB/FolderC'. 'rootDir' is expected to contain all source files. + The file is in the program because: + Root file specified for compilation + + +!!! error TS6059: File 'FolderA/FolderB/fileB.ts' is not under 'rootDir' 'FolderA/FolderB/FolderC'. 'rootDir' is expected to contain all source files. +!!! error TS6059: The file is in the program because: +!!! error TS6059: Root file specified for compilation +==== FolderA/FolderB/FolderC/fileC.ts (0 errors) ==== + class C { + } + +==== FolderA/FolderB/fileB.ts (0 errors) ==== + /// + class B { + public c: C; + } + \ No newline at end of file diff --git a/tests/baselines/reference/project/rootDirectoryWithoutOutDir/amd/rootDirectoryWithoutOutDir.json b/tests/baselines/reference/project/rootDirectoryWithoutOutDir/amd/rootDirectoryWithoutOutDir.json new file mode 100644 index 00000000000..ce32cd431b2 --- /dev/null +++ b/tests/baselines/reference/project/rootDirectoryWithoutOutDir/amd/rootDirectoryWithoutOutDir.json @@ -0,0 +1,17 @@ +{ + "scenario": "rootDirectory: Files outside the rootDirectory without outDir", + "projectRoot": "tests/cases/projects/rootDirectory", + "inputFiles": [ + "FolderA/FolderB/fileB.ts" + ], + "rootDir": "FolderA/FolderB/FolderC", + "resolvedInputFiles": [ + "lib.es5.d.ts", + "FolderA/FolderB/FolderC/fileC.ts", + "FolderA/FolderB/fileB.ts" + ], + "emittedFiles": [ + "FolderA/FolderB/FolderC/fileC.js", + "FolderA/FolderB/fileB.js" + ] +} \ No newline at end of file diff --git a/tests/baselines/reference/project/rootDirectoryWithoutOutDir/node/rootDirectoryWithoutOutDir.errors.txt b/tests/baselines/reference/project/rootDirectoryWithoutOutDir/node/rootDirectoryWithoutOutDir.errors.txt new file mode 100644 index 00000000000..4e3492c206f --- /dev/null +++ b/tests/baselines/reference/project/rootDirectoryWithoutOutDir/node/rootDirectoryWithoutOutDir.errors.txt @@ -0,0 +1,18 @@ +error TS6059: File 'FolderA/FolderB/fileB.ts' is not under 'rootDir' 'FolderA/FolderB/FolderC'. 'rootDir' is expected to contain all source files. + The file is in the program because: + Root file specified for compilation + + +!!! error TS6059: File 'FolderA/FolderB/fileB.ts' is not under 'rootDir' 'FolderA/FolderB/FolderC'. 'rootDir' is expected to contain all source files. +!!! error TS6059: The file is in the program because: +!!! error TS6059: Root file specified for compilation +==== FolderA/FolderB/FolderC/fileC.ts (0 errors) ==== + class C { + } + +==== FolderA/FolderB/fileB.ts (0 errors) ==== + /// + class B { + public c: C; + } + \ No newline at end of file diff --git a/tests/baselines/reference/project/rootDirectoryWithoutOutDir/node/rootDirectoryWithoutOutDir.json b/tests/baselines/reference/project/rootDirectoryWithoutOutDir/node/rootDirectoryWithoutOutDir.json new file mode 100644 index 00000000000..ce32cd431b2 --- /dev/null +++ b/tests/baselines/reference/project/rootDirectoryWithoutOutDir/node/rootDirectoryWithoutOutDir.json @@ -0,0 +1,17 @@ +{ + "scenario": "rootDirectory: Files outside the rootDirectory without outDir", + "projectRoot": "tests/cases/projects/rootDirectory", + "inputFiles": [ + "FolderA/FolderB/fileB.ts" + ], + "rootDir": "FolderA/FolderB/FolderC", + "resolvedInputFiles": [ + "lib.es5.d.ts", + "FolderA/FolderB/FolderC/fileC.ts", + "FolderA/FolderB/fileB.ts" + ], + "emittedFiles": [ + "FolderA/FolderB/FolderC/fileC.js", + "FolderA/FolderB/fileB.js" + ] +} \ No newline at end of file diff --git a/tests/cases/project/rootDirectoryWithoutOutDir.json b/tests/cases/project/rootDirectoryWithoutOutDir.json new file mode 100644 index 00000000000..d58790973cf --- /dev/null +++ b/tests/cases/project/rootDirectoryWithoutOutDir.json @@ -0,0 +1,8 @@ +{ + "scenario": "rootDirectory: Files outside the rootDirectory without outDir", + "projectRoot": "tests/cases/projects/rootDirectory", + "inputFiles": [ + "FolderA/FolderB/fileB.ts" + ], + "rootDir": "FolderA/FolderB/FolderC" +} \ No newline at end of file