diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index 4fe4202c8bd..a4d57bbd3ed 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -218,7 +218,7 @@ namespace ts { description: Diagnostics.Specify_the_root_directory_of_input_files_Use_to_control_the_output_directory_structure_with_outDir, }, { - name: "project", + name: "referenceTarget", type: "boolean", category: Diagnostics.Basic_Options, description: Diagnostics.Enable_project_compilation, diff --git a/src/compiler/core.ts b/src/compiler/core.ts index 15b4b69269a..8560ccde32c 100644 --- a/src/compiler/core.ts +++ b/src/compiler/core.ts @@ -2020,7 +2020,7 @@ namespace ts { } export function getEmitDeclarations(compilerOptions: CompilerOptions) { - if (compilerOptions.project) { + if (compilerOptions.referenceTarget) { return true; } return compilerOptions.declaration; diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 329e3fb80ac..6719f41c90e 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -3433,7 +3433,7 @@ "category": "Error", "code": 6305 }, - "Referenced project '{0}' must have setting \"project\": true.": { + "Referenced project '{0}' must have setting \"referenceTarget\": true.": { "category": "Error", "code": 6306 }, diff --git a/src/compiler/program.ts b/src/compiler/program.ts index 43e8faec331..464e5073bc3 100755 --- a/src/compiler/program.ts +++ b/src/compiler/program.ts @@ -613,7 +613,7 @@ namespace ts { Debug.assert(!!missingFilePaths); // List of collected files is complete; validate exhautiveness if this is a project with a file list - if (options.project && rootNames.length < files.length) { + if (options.referenceTarget && rootNames.length < files.length) { const normalizedRootNames = rootNames.map(r => normalizePath(r)); const sourceFiles = files.filter(f => !f.isDeclarationFile).map(f => normalizePath(f.path)); for (const file of sourceFiles) { @@ -685,7 +685,7 @@ namespace ts { function getCommonSourceDirectory() { if (commonSourceDirectory === undefined) { const emittedFiles = filter(files, file => sourceFileMayBeEmitted(file, options, isSourceFileFromExternalLibrary)); - if (options.project) { + if (options.referenceTarget) { // Project compilations never infer their root from the input source paths commonSourceDirectory = getNormalizedAbsolutePath(options.rootDir || ".", currentDirectory); } @@ -2112,8 +2112,8 @@ namespace ts { Debug.fail("Options cannot be undefined"); return; } - if (!opts.project) { - createDiagnosticForOptionName(Diagnostics.Referenced_project_0_must_have_setting_project_Colon_true, fileName); + if (!opts.referenceTarget) { + createDiagnosticForOptionName(Diagnostics.Referenced_project_0_must_have_setting_referenceTarget_Colon_true, fileName); } illegalRefs.set(normalizedPath, true); cycleName.push(normalizedPath); @@ -2155,7 +2155,7 @@ namespace ts { createDiagnosticForOptionName(Diagnostics.Option_paths_cannot_be_used_without_specifying_baseUrl_option, "paths"); } - if (options.project) { + if (options.referenceTarget) { if (options.declaration === false) { createDiagnosticForOptionName(Diagnostics.Projects_may_not_disable_declaration_emit, "declaration"); } diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 6ee6975c6cf..98d0dbc7cec 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -3894,6 +3894,7 @@ namespace ts { reactNamespace?: string; jsxFactory?: string; references?: ProjectReference[]; + referenceTarget?: boolean; removeComments?: boolean; rootDir?: string; rootDirs?: string[]; diff --git a/src/harness/unittests/projectReferences.ts b/src/harness/unittests/projectReferences.ts index 456b5254482..882e8ba6e2e 100644 --- a/src/harness/unittests/projectReferences.ts +++ b/src/harness/unittests/projectReferences.ts @@ -52,8 +52,8 @@ namespace ts { const configFileName = combineAllPaths("/", key, sp.configFileName || "tsconfig.json"); const options = { compilerOptions: { - references: sp.references.map(r => ({ path: r })), - project: true, + references: (sp.references || []).map(r => ({ path: r })), + referenceTarget: true, outDir: "bin", ...sp.options }, @@ -140,7 +140,27 @@ namespace ts { assertHasError("Reports an error about the wrong decl setting", errs, Diagnostics.Projects_may_not_disable_declaration_emit); }); }); - // * TODO Projects must list all files or none + + it("errors when the referenced project doesn't have referenceTarget:true", () => { + const spec: TestSpecification = { + "/primary": { + files: { "/primary/a.ts": emptyModule }, + references: [], + options: { + referenceTarget: false + } + }, + "/reference": { + files: { "/secondary/b.ts": moduleImporting("../primary/a") }, + references: ["../primary"] + } + }; + testProjectReferences(spec, "/reference/tsconfig.json", program => { + const errs = program.getOptionsDiagnostics(); + assertHasError("Reports an error about 'referenceTarget' not being set", errs, Diagnostics.Referenced_project_0_must_have_setting_referenceTarget_Colon_true); + }); + }); + it("errors when the file list is not exhaustive", () => { const spec: TestSpecification = { "/primary": { @@ -148,7 +168,6 @@ namespace ts { "/primary/a.ts": "import * as b from './b'", "/primary/b.ts": "export {}" }, - references: [], config: { files: ["a.ts"] } diff --git a/tests/baselines/reference/api/tsserverlibrary.d.ts b/tests/baselines/reference/api/tsserverlibrary.d.ts index 453ab4ccdbe..b59ca1704e9 100644 --- a/tests/baselines/reference/api/tsserverlibrary.d.ts +++ b/tests/baselines/reference/api/tsserverlibrary.d.ts @@ -2285,6 +2285,7 @@ declare namespace ts { reactNamespace?: string; jsxFactory?: string; references?: ProjectReference[]; + referenceTarget?: boolean; removeComments?: boolean; rootDir?: string; rootDirs?: string[]; diff --git a/tests/baselines/reference/api/typescript.d.ts b/tests/baselines/reference/api/typescript.d.ts index 9645aa0360e..541cabef5f8 100644 --- a/tests/baselines/reference/api/typescript.d.ts +++ b/tests/baselines/reference/api/typescript.d.ts @@ -2285,6 +2285,7 @@ declare namespace ts { reactNamespace?: string; jsxFactory?: string; references?: ProjectReference[]; + referenceTarget?: boolean; removeComments?: boolean; rootDir?: string; rootDirs?: string[]; diff --git a/tests/baselines/reference/tsConfig/Default initialized TSConfig/tsconfig.json b/tests/baselines/reference/tsConfig/Default initialized TSConfig/tsconfig.json index 4b23b1513e8..6c7eaab303f 100644 --- a/tests/baselines/reference/tsConfig/Default initialized TSConfig/tsconfig.json +++ b/tests/baselines/reference/tsConfig/Default initialized TSConfig/tsconfig.json @@ -12,6 +12,7 @@ // "outFile": "./", /* Concatenate and emit output to single file. */ // "outDir": "./", /* Redirect output structure to the directory. */ // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "referenceTarget": true, /* Enable project compilation */ // "removeComments": true, /* Do not emit comments to output. */ // "noEmit": true, /* Do not emit outputs. */ // "importHelpers": true, /* Import emit helpers from 'tslib'. */ diff --git a/tests/baselines/reference/tsConfig/Initialized TSConfig with boolean value compiler options/tsconfig.json b/tests/baselines/reference/tsConfig/Initialized TSConfig with boolean value compiler options/tsconfig.json index 76e9c525703..9e1cdfdf471 100644 --- a/tests/baselines/reference/tsConfig/Initialized TSConfig with boolean value compiler options/tsconfig.json +++ b/tests/baselines/reference/tsConfig/Initialized TSConfig with boolean value compiler options/tsconfig.json @@ -12,6 +12,7 @@ // "outFile": "./", /* Concatenate and emit output to single file. */ // "outDir": "./", /* Redirect output structure to the directory. */ // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "referenceTarget": true, /* Enable project compilation */ // "removeComments": true, /* Do not emit comments to output. */ // "noEmit": true, /* Do not emit outputs. */ // "importHelpers": true, /* Import emit helpers from 'tslib'. */ diff --git a/tests/baselines/reference/tsConfig/Initialized TSConfig with enum value compiler options/tsconfig.json b/tests/baselines/reference/tsConfig/Initialized TSConfig with enum value compiler options/tsconfig.json index 1a61fa0ffb9..ecef3060b04 100644 --- a/tests/baselines/reference/tsConfig/Initialized TSConfig with enum value compiler options/tsconfig.json +++ b/tests/baselines/reference/tsConfig/Initialized TSConfig with enum value compiler options/tsconfig.json @@ -12,6 +12,7 @@ // "outFile": "./", /* Concatenate and emit output to single file. */ // "outDir": "./", /* Redirect output structure to the directory. */ // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "referenceTarget": true, /* Enable project compilation */ // "removeComments": true, /* Do not emit comments to output. */ // "noEmit": true, /* Do not emit outputs. */ // "importHelpers": true, /* Import emit helpers from 'tslib'. */ diff --git a/tests/baselines/reference/tsConfig/Initialized TSConfig with files options/tsconfig.json b/tests/baselines/reference/tsConfig/Initialized TSConfig with files options/tsconfig.json index ffc1f1570f9..1279c18a27c 100644 --- a/tests/baselines/reference/tsConfig/Initialized TSConfig with files options/tsconfig.json +++ b/tests/baselines/reference/tsConfig/Initialized TSConfig with files options/tsconfig.json @@ -12,6 +12,7 @@ // "outFile": "./", /* Concatenate and emit output to single file. */ // "outDir": "./", /* Redirect output structure to the directory. */ // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "referenceTarget": true, /* Enable project compilation */ // "removeComments": true, /* Do not emit comments to output. */ // "noEmit": true, /* Do not emit outputs. */ // "importHelpers": true, /* Import emit helpers from 'tslib'. */ diff --git a/tests/baselines/reference/tsConfig/Initialized TSConfig with incorrect compiler option value/tsconfig.json b/tests/baselines/reference/tsConfig/Initialized TSConfig with incorrect compiler option value/tsconfig.json index ce258d3ead4..9d0b48c4b2d 100644 --- a/tests/baselines/reference/tsConfig/Initialized TSConfig with incorrect compiler option value/tsconfig.json +++ b/tests/baselines/reference/tsConfig/Initialized TSConfig with incorrect compiler option value/tsconfig.json @@ -12,6 +12,7 @@ // "outFile": "./", /* Concatenate and emit output to single file. */ // "outDir": "./", /* Redirect output structure to the directory. */ // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "referenceTarget": true, /* Enable project compilation */ // "removeComments": true, /* Do not emit comments to output. */ // "noEmit": true, /* Do not emit outputs. */ // "importHelpers": true, /* Import emit helpers from 'tslib'. */ diff --git a/tests/baselines/reference/tsConfig/Initialized TSConfig with incorrect compiler option/tsconfig.json b/tests/baselines/reference/tsConfig/Initialized TSConfig with incorrect compiler option/tsconfig.json index 4b23b1513e8..6c7eaab303f 100644 --- a/tests/baselines/reference/tsConfig/Initialized TSConfig with incorrect compiler option/tsconfig.json +++ b/tests/baselines/reference/tsConfig/Initialized TSConfig with incorrect compiler option/tsconfig.json @@ -12,6 +12,7 @@ // "outFile": "./", /* Concatenate and emit output to single file. */ // "outDir": "./", /* Redirect output structure to the directory. */ // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "referenceTarget": true, /* Enable project compilation */ // "removeComments": true, /* Do not emit comments to output. */ // "noEmit": true, /* Do not emit outputs. */ // "importHelpers": true, /* Import emit helpers from 'tslib'. */ diff --git a/tests/baselines/reference/tsConfig/Initialized TSConfig with list compiler options with enum value/tsconfig.json b/tests/baselines/reference/tsConfig/Initialized TSConfig with list compiler options with enum value/tsconfig.json index 63c4f7d8b06..17fb8252f62 100644 --- a/tests/baselines/reference/tsConfig/Initialized TSConfig with list compiler options with enum value/tsconfig.json +++ b/tests/baselines/reference/tsConfig/Initialized TSConfig with list compiler options with enum value/tsconfig.json @@ -12,6 +12,7 @@ // "outFile": "./", /* Concatenate and emit output to single file. */ // "outDir": "./", /* Redirect output structure to the directory. */ // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "referenceTarget": true, /* Enable project compilation */ // "removeComments": true, /* Do not emit comments to output. */ // "noEmit": true, /* Do not emit outputs. */ // "importHelpers": true, /* Import emit helpers from 'tslib'. */ diff --git a/tests/baselines/reference/tsConfig/Initialized TSConfig with list compiler options/tsconfig.json b/tests/baselines/reference/tsConfig/Initialized TSConfig with list compiler options/tsconfig.json index d8c7a500138..5089266b180 100644 --- a/tests/baselines/reference/tsConfig/Initialized TSConfig with list compiler options/tsconfig.json +++ b/tests/baselines/reference/tsConfig/Initialized TSConfig with list compiler options/tsconfig.json @@ -12,6 +12,7 @@ // "outFile": "./", /* Concatenate and emit output to single file. */ // "outDir": "./", /* Redirect output structure to the directory. */ // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "referenceTarget": true, /* Enable project compilation */ // "removeComments": true, /* Do not emit comments to output. */ // "noEmit": true, /* Do not emit outputs. */ // "importHelpers": true, /* Import emit helpers from 'tslib'. */