diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index 1ef420daf8537..e83480e049c40 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -672,6 +672,15 @@ const commandOptionsWithoutBuild: CommandLineOption[] = [ description: Diagnostics.Print_names_of_files_that_are_part_of_the_compilation_and_then_stop_processing, defaultValueDescription: false, }, + { + name: "ignoreConfig", + type: "boolean", + showInSimplifiedHelpView: true, + category: Diagnostics.Command_line_Options, + isCommandLineOnly: true, + description: Diagnostics.Ignore_the_tsconfig_found_and_build_with_commandline_options_and_files, + defaultValueDescription: false, + }, // Basic targetOptionDeclaration, diff --git a/src/compiler/diagnosticMessages.json b/src/compiler/diagnosticMessages.json index 3d31d02ea8dbc..1b7afea123690 100644 --- a/src/compiler/diagnosticMessages.json +++ b/src/compiler/diagnosticMessages.json @@ -1849,6 +1849,10 @@ "category": "Error", "code": 1546 }, + "Ignore the tsconfig found and build with commandline options and files.": { + "category": "Message", + "code": 1547 + }, "The types of '{0}' are incompatible between these types.": { "category": "Error", @@ -4725,6 +4729,10 @@ "category": "Message", "code": 5111 }, + "tsconfig.json is present but will not be loaded if files are specified on commandline. Use '--ignoreConfig' to skip this error.": { + "category": "Error", + "code": 5112 + }, "Generates a sourcemap for each corresponding '.d.ts' file.": { "category": "Message", diff --git a/src/compiler/executeCommandLine.ts b/src/compiler/executeCommandLine.ts index edeb0eb277c57..6b6fb23683ca2 100644 --- a/src/compiler/executeCommandLine.ts +++ b/src/compiler/executeCommandLine.ts @@ -614,20 +614,27 @@ function executeCommandLineWorker( } } } - else if (commandLine.fileNames.length === 0) { + else if (!commandLine.options.ignoreConfig || commandLine.fileNames.length === 0) { const searchPath = normalizePath(sys.getCurrentDirectory()); configFileName = findConfigFile(searchPath, fileName => sys.fileExists(fileName)); - } - - if (commandLine.fileNames.length === 0 && !configFileName) { - if (commandLine.options.showConfig) { - reportDiagnostic(createCompilerDiagnostic(Diagnostics.Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0, normalizePath(sys.getCurrentDirectory()))); + // if (!commandLine.options.ignoreConfig) { + if (commandLine.fileNames.length !== 0) { + if (configFileName) { + // Error to not specify config file + reportDiagnostic(createCompilerDiagnostic(Diagnostics.tsconfig_json_is_present_but_will_not_be_loaded_if_files_are_specified_on_commandline_Use_ignoreConfig_to_skip_this_error)); + return sys.exit(ExitStatus.DiagnosticsPresent_OutputsSkipped); + } } - else { - printVersion(sys); - printHelp(sys, commandLine); + else if (!configFileName) { + if (commandLine.options.showConfig) { + reportDiagnostic(createCompilerDiagnostic(Diagnostics.Cannot_find_a_tsconfig_json_file_at_the_current_directory_Colon_0, normalizePath(sys.getCurrentDirectory()))); + } + else { + printVersion(sys); + printHelp(sys, commandLine); + } + return sys.exit(ExitStatus.DiagnosticsPresent_OutputsSkipped); } - return sys.exit(ExitStatus.DiagnosticsPresent_OutputsSkipped); } const currentDirectory = sys.getCurrentDirectory(); diff --git a/src/compiler/types.ts b/src/compiler/types.ts index 4835b4bdf2efa..8e6848ac70e00 100644 --- a/src/compiler/types.ts +++ b/src/compiler/types.ts @@ -7550,6 +7550,7 @@ export interface CompilerOptions { /** @internal */ watch?: boolean; esModuleInterop?: boolean; /** @internal */ showConfig?: boolean; + /** @internal */ ignoreConfig?: boolean; useDefineForClassFields?: boolean; /** @internal */ tscBuild?: boolean; diff --git a/src/testRunner/tests.ts b/src/testRunner/tests.ts index 5529cc87b35ca..6d164855b4f22 100644 --- a/src/testRunner/tests.ts +++ b/src/testRunner/tests.ts @@ -119,6 +119,7 @@ export * from "./unittests/tsc/composite.js"; export * from "./unittests/tsc/declarationEmit.js"; export * from "./unittests/tsc/extends.js"; export * from "./unittests/tsc/forceConsistentCasingInFileNames.js"; +export * from "./unittests/tsc/ignoreConfig.js"; export * from "./unittests/tsc/incremental.js"; export * from "./unittests/tsc/libraryResolution.js"; export * from "./unittests/tsc/listFilesOnly.js"; diff --git a/src/testRunner/unittests/tsc/ignoreConfig.ts b/src/testRunner/unittests/tsc/ignoreConfig.ts new file mode 100644 index 0000000000000..722717150d6c0 --- /dev/null +++ b/src/testRunner/unittests/tsc/ignoreConfig.ts @@ -0,0 +1,58 @@ +import * as ts from "../../_namespaces/ts.js"; +import { jsonToReadableText } from "../helpers.js"; +import { verifyTsc } from "../helpers/tsc.js"; +import { TestServerHost } from "../helpers/virtualFileSystemWithWatch.js"; + +describe("unittests:: tsc:: ignoreConfig::", () => { + function sysWithoutConfig() { + return TestServerHost.createWatchedSystem({ + "/home/src/workspaces/project/src/a.ts": "export const a = 10;", + "/home/src/workspaces/project/src/b.ts": "export const b = 10;", + "/home/src/workspaces/project/c.ts": "export const c = 10;", + }); + } + function sysWithConfig() { + const sys = sysWithoutConfig(); + sys.writeFile( + "/home/src/workspaces/project/tsconfig.json", + jsonToReadableText({ + include: ["src"], + }), + ); + return sys; + } + function runScenario(subScenario: string, commandLineArgs: readonly string[]) { + verifyTsc({ + scenario: "ignoreConfig", + subScenario, + sys: sysWithConfig, + commandLineArgs, + }); + + verifyTsc({ + scenario: "ignoreConfig", + subScenario: subScenario + " with --ignoreConfig", + sys: sysWithConfig, + commandLineArgs: commandLineArgs.concat("--ignoreConfig"), + }); + + verifyTsc({ + scenario: "ignoreConfig", + subScenario: subScenario + " when config file absent", + sys: sysWithoutConfig, + commandLineArgs, + }); + + verifyTsc({ + scenario: "ignoreConfig", + subScenario: subScenario + " when config file absent with --ignoreConfig", + sys: sysWithoutConfig, + commandLineArgs: commandLineArgs.concat("--ignoreConfig"), + }); + } + + runScenario("without any options", ts.emptyArray); + runScenario("specifying files", ["src/a.ts"]); + runScenario("specifying project", ["-p", "."]); + runScenario("mixing project and files", ["-p", ".", "src/a.ts", "c.ts"]); +}); diff --git a/src/testRunner/unittests/tscWatch/resolutionCache.ts b/src/testRunner/unittests/tscWatch/resolutionCache.ts index 267ef8cb5c4ed..fcf41017d3752 100644 --- a/src/testRunner/unittests/tscWatch/resolutionCache.ts +++ b/src/testRunner/unittests/tscWatch/resolutionCache.ts @@ -424,7 +424,7 @@ declare module "fs" { ], }); } - verifyIgnore("watch without configFile", ["--w", `/user/username/projects/myproject/test.ts`]); + verifyIgnore("watch without configFile", ["--w", "--ignoreConfig", `/user/username/projects/myproject/test.ts`]); verifyIgnore("watch with configFile", ["--w", "-p", `/user/username/projects/myproject/tsconfig.json`]); }); diff --git a/tests/baselines/reference/config/showConfig/Shows tsconfig for single option/ignoreConfig/tsconfig.json b/tests/baselines/reference/config/showConfig/Shows tsconfig for single option/ignoreConfig/tsconfig.json new file mode 100644 index 0000000000000..c9a9576660d4b --- /dev/null +++ b/tests/baselines/reference/config/showConfig/Shows tsconfig for single option/ignoreConfig/tsconfig.json @@ -0,0 +1,5 @@ +{ + "compilerOptions": { + "ignoreConfig": true + } +} diff --git a/tests/baselines/reference/tsc/commandLine/does-not-add-color-when-NO_COLOR-is-set.js b/tests/baselines/reference/tsc/commandLine/does-not-add-color-when-NO_COLOR-is-set.js index 028ef5dee4ddb..dd329d8755806 100644 --- a/tests/baselines/reference/tsc/commandLine/does-not-add-color-when-NO_COLOR-is-set.js +++ b/tests/baselines/reference/tsc/commandLine/does-not-add-color-when-NO_COLOR-is-set.js @@ -67,6 +67,9 @@ Compile the project given the path to its configuration file, or to a folder wit --showConfig Print the final configuration instead of building. +--ignoreConfig +Ignore the tsconfig found and build with commandline options and files. + --build, -b Build one or more projects and their dependencies, if out of date diff --git a/tests/baselines/reference/tsc/commandLine/help-all.js b/tests/baselines/reference/tsc/commandLine/help-all.js index 4e00cdde8aadc..b778947c6b02b 100644 --- a/tests/baselines/reference/tsc/commandLine/help-all.js +++ b/tests/baselines/reference/tsc/commandLine/help-all.js @@ -35,6 +35,9 @@ Print this message. --help, -? +--ignoreConfig +Ignore the tsconfig found and build with commandline options and files. + --init Initializes a TypeScript project and creates a tsconfig.json file. diff --git a/tests/baselines/reference/tsc/commandLine/help.js b/tests/baselines/reference/tsc/commandLine/help.js index b122563b58e01..5bf6050486c33 100644 --- a/tests/baselines/reference/tsc/commandLine/help.js +++ b/tests/baselines/reference/tsc/commandLine/help.js @@ -66,6 +66,9 @@ Compile the project given the path to its configuration file, or to a folder wit --showConfig Print the final configuration instead of building. +--ignoreConfig +Ignore the tsconfig found and build with commandline options and files. + --build, -b Build one or more projects and their dependencies, if out of date diff --git a/tests/baselines/reference/tsc/commandLine/show-help-with-ExitStatus.DiagnosticsPresent_OutputsSkipped-when-host-can't-provide-terminal-width.js b/tests/baselines/reference/tsc/commandLine/show-help-with-ExitStatus.DiagnosticsPresent_OutputsSkipped-when-host-can't-provide-terminal-width.js index 81a46a4850846..bb9af0568ca56 100644 --- a/tests/baselines/reference/tsc/commandLine/show-help-with-ExitStatus.DiagnosticsPresent_OutputsSkipped-when-host-can't-provide-terminal-width.js +++ b/tests/baselines/reference/tsc/commandLine/show-help-with-ExitStatus.DiagnosticsPresent_OutputsSkipped-when-host-can't-provide-terminal-width.js @@ -67,6 +67,9 @@ Compile the project given the path to its configuration file, or to a folder wit --showConfig Print the final configuration instead of building. +--ignoreConfig +Ignore the tsconfig found and build with commandline options and files. + --build, -b Build one or more projects and their dependencies, if out of date diff --git a/tests/baselines/reference/tsc/commandLine/show-help-with-ExitStatus.DiagnosticsPresent_OutputsSkipped.js b/tests/baselines/reference/tsc/commandLine/show-help-with-ExitStatus.DiagnosticsPresent_OutputsSkipped.js index 81a46a4850846..bb9af0568ca56 100644 --- a/tests/baselines/reference/tsc/commandLine/show-help-with-ExitStatus.DiagnosticsPresent_OutputsSkipped.js +++ b/tests/baselines/reference/tsc/commandLine/show-help-with-ExitStatus.DiagnosticsPresent_OutputsSkipped.js @@ -67,6 +67,9 @@ Compile the project given the path to its configuration file, or to a folder wit --showConfig Print the final configuration instead of building. +--ignoreConfig +Ignore the tsconfig found and build with commandline options and files. + --build, -b Build one or more projects and their dependencies, if out of date diff --git a/tests/baselines/reference/tsc/ignoreConfig/mixing-project-and-files-when-config-file-absent-with---ignoreConfig.js b/tests/baselines/reference/tsc/ignoreConfig/mixing-project-and-files-when-config-file-absent-with---ignoreConfig.js new file mode 100644 index 0000000000000..c3afdbb68ff6b --- /dev/null +++ b/tests/baselines/reference/tsc/ignoreConfig/mixing-project-and-files-when-config-file-absent-with---ignoreConfig.js @@ -0,0 +1,33 @@ +currentDirectory:: /home/src/workspaces/project useCaseSensitiveFileNames:: false +Input:: +//// [/home/src/workspaces/project/src/a.ts] +export const a = 10; + +//// [/home/src/workspaces/project/src/b.ts] +export const b = 10; + +//// [/home/src/workspaces/project/c.ts] +export const c = 10; + +//// [/home/src/tslibs/TS/Lib/lib.d.ts] +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray {} +declare const console: { log(msg: any): void; }; + + +/home/src/tslibs/TS/Lib/tsc.js -p . src/a.ts c.ts --ignoreConfig +Output:: +error TS5042: Option 'project' cannot be mixed with source files on a command line. + + + +exitCode:: ExitStatus.DiagnosticsPresent_OutputsSkipped diff --git a/tests/baselines/reference/tsc/ignoreConfig/mixing-project-and-files-when-config-file-absent.js b/tests/baselines/reference/tsc/ignoreConfig/mixing-project-and-files-when-config-file-absent.js new file mode 100644 index 0000000000000..18356d0a1ac9e --- /dev/null +++ b/tests/baselines/reference/tsc/ignoreConfig/mixing-project-and-files-when-config-file-absent.js @@ -0,0 +1,33 @@ +currentDirectory:: /home/src/workspaces/project useCaseSensitiveFileNames:: false +Input:: +//// [/home/src/workspaces/project/src/a.ts] +export const a = 10; + +//// [/home/src/workspaces/project/src/b.ts] +export const b = 10; + +//// [/home/src/workspaces/project/c.ts] +export const c = 10; + +//// [/home/src/tslibs/TS/Lib/lib.d.ts] +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray {} +declare const console: { log(msg: any): void; }; + + +/home/src/tslibs/TS/Lib/tsc.js -p . src/a.ts c.ts +Output:: +error TS5042: Option 'project' cannot be mixed with source files on a command line. + + + +exitCode:: ExitStatus.DiagnosticsPresent_OutputsSkipped diff --git a/tests/baselines/reference/tsc/ignoreConfig/mixing-project-and-files-with---ignoreConfig.js b/tests/baselines/reference/tsc/ignoreConfig/mixing-project-and-files-with---ignoreConfig.js new file mode 100644 index 0000000000000..fade1ebb4ba57 --- /dev/null +++ b/tests/baselines/reference/tsc/ignoreConfig/mixing-project-and-files-with---ignoreConfig.js @@ -0,0 +1,40 @@ +currentDirectory:: /home/src/workspaces/project useCaseSensitiveFileNames:: false +Input:: +//// [/home/src/workspaces/project/src/a.ts] +export const a = 10; + +//// [/home/src/workspaces/project/src/b.ts] +export const b = 10; + +//// [/home/src/workspaces/project/c.ts] +export const c = 10; + +//// [/home/src/tslibs/TS/Lib/lib.d.ts] +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray {} +declare const console: { log(msg: any): void; }; + +//// [/home/src/workspaces/project/tsconfig.json] +{ + "include": [ + "src" + ] +} + + +/home/src/tslibs/TS/Lib/tsc.js -p . src/a.ts c.ts --ignoreConfig +Output:: +error TS5042: Option 'project' cannot be mixed with source files on a command line. + + + +exitCode:: ExitStatus.DiagnosticsPresent_OutputsSkipped diff --git a/tests/baselines/reference/tsc/ignoreConfig/mixing-project-and-files.js b/tests/baselines/reference/tsc/ignoreConfig/mixing-project-and-files.js new file mode 100644 index 0000000000000..2991c1d479382 --- /dev/null +++ b/tests/baselines/reference/tsc/ignoreConfig/mixing-project-and-files.js @@ -0,0 +1,40 @@ +currentDirectory:: /home/src/workspaces/project useCaseSensitiveFileNames:: false +Input:: +//// [/home/src/workspaces/project/src/a.ts] +export const a = 10; + +//// [/home/src/workspaces/project/src/b.ts] +export const b = 10; + +//// [/home/src/workspaces/project/c.ts] +export const c = 10; + +//// [/home/src/tslibs/TS/Lib/lib.d.ts] +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray {} +declare const console: { log(msg: any): void; }; + +//// [/home/src/workspaces/project/tsconfig.json] +{ + "include": [ + "src" + ] +} + + +/home/src/tslibs/TS/Lib/tsc.js -p . src/a.ts c.ts +Output:: +error TS5042: Option 'project' cannot be mixed with source files on a command line. + + + +exitCode:: ExitStatus.DiagnosticsPresent_OutputsSkipped diff --git a/tests/baselines/reference/tsc/ignoreConfig/specifying-files-when-config-file-absent-with---ignoreConfig.js b/tests/baselines/reference/tsc/ignoreConfig/specifying-files-when-config-file-absent-with---ignoreConfig.js new file mode 100644 index 0000000000000..a2d3630d02462 --- /dev/null +++ b/tests/baselines/reference/tsc/ignoreConfig/specifying-files-when-config-file-absent-with---ignoreConfig.js @@ -0,0 +1,39 @@ +currentDirectory:: /home/src/workspaces/project useCaseSensitiveFileNames:: false +Input:: +//// [/home/src/workspaces/project/src/a.ts] +export const a = 10; + +//// [/home/src/workspaces/project/src/b.ts] +export const b = 10; + +//// [/home/src/workspaces/project/c.ts] +export const c = 10; + +//// [/home/src/tslibs/TS/Lib/lib.d.ts] +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray {} +declare const console: { log(msg: any): void; }; + + +/home/src/tslibs/TS/Lib/tsc.js src/a.ts --ignoreConfig +Output:: + + +//// [/home/src/workspaces/project/src/a.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.a = void 0; +exports.a = 10; + + + +exitCode:: ExitStatus.Success diff --git a/tests/baselines/reference/tsc/ignoreConfig/specifying-files-when-config-file-absent.js b/tests/baselines/reference/tsc/ignoreConfig/specifying-files-when-config-file-absent.js new file mode 100644 index 0000000000000..72ee85b0a2744 --- /dev/null +++ b/tests/baselines/reference/tsc/ignoreConfig/specifying-files-when-config-file-absent.js @@ -0,0 +1,39 @@ +currentDirectory:: /home/src/workspaces/project useCaseSensitiveFileNames:: false +Input:: +//// [/home/src/workspaces/project/src/a.ts] +export const a = 10; + +//// [/home/src/workspaces/project/src/b.ts] +export const b = 10; + +//// [/home/src/workspaces/project/c.ts] +export const c = 10; + +//// [/home/src/tslibs/TS/Lib/lib.d.ts] +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray {} +declare const console: { log(msg: any): void; }; + + +/home/src/tslibs/TS/Lib/tsc.js src/a.ts +Output:: + + +//// [/home/src/workspaces/project/src/a.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.a = void 0; +exports.a = 10; + + + +exitCode:: ExitStatus.Success diff --git a/tests/baselines/reference/tsc/ignoreConfig/specifying-files-with---ignoreConfig.js b/tests/baselines/reference/tsc/ignoreConfig/specifying-files-with---ignoreConfig.js new file mode 100644 index 0000000000000..e4196077b3396 --- /dev/null +++ b/tests/baselines/reference/tsc/ignoreConfig/specifying-files-with---ignoreConfig.js @@ -0,0 +1,46 @@ +currentDirectory:: /home/src/workspaces/project useCaseSensitiveFileNames:: false +Input:: +//// [/home/src/workspaces/project/src/a.ts] +export const a = 10; + +//// [/home/src/workspaces/project/src/b.ts] +export const b = 10; + +//// [/home/src/workspaces/project/c.ts] +export const c = 10; + +//// [/home/src/tslibs/TS/Lib/lib.d.ts] +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray {} +declare const console: { log(msg: any): void; }; + +//// [/home/src/workspaces/project/tsconfig.json] +{ + "include": [ + "src" + ] +} + + +/home/src/tslibs/TS/Lib/tsc.js src/a.ts --ignoreConfig +Output:: + + +//// [/home/src/workspaces/project/src/a.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.a = void 0; +exports.a = 10; + + + +exitCode:: ExitStatus.Success diff --git a/tests/baselines/reference/tsc/ignoreConfig/specifying-files.js b/tests/baselines/reference/tsc/ignoreConfig/specifying-files.js new file mode 100644 index 0000000000000..10aada22589dd --- /dev/null +++ b/tests/baselines/reference/tsc/ignoreConfig/specifying-files.js @@ -0,0 +1,40 @@ +currentDirectory:: /home/src/workspaces/project useCaseSensitiveFileNames:: false +Input:: +//// [/home/src/workspaces/project/src/a.ts] +export const a = 10; + +//// [/home/src/workspaces/project/src/b.ts] +export const b = 10; + +//// [/home/src/workspaces/project/c.ts] +export const c = 10; + +//// [/home/src/tslibs/TS/Lib/lib.d.ts] +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray {} +declare const console: { log(msg: any): void; }; + +//// [/home/src/workspaces/project/tsconfig.json] +{ + "include": [ + "src" + ] +} + + +/home/src/tslibs/TS/Lib/tsc.js src/a.ts +Output:: +error TS5112: tsconfig.json is present but will not be loaded if files are specified on commandline. Use '--ignoreConfig' to skip this error. + + + +exitCode:: ExitStatus.DiagnosticsPresent_OutputsSkipped diff --git a/tests/baselines/reference/tsc/ignoreConfig/specifying-project-when-config-file-absent-with---ignoreConfig.js b/tests/baselines/reference/tsc/ignoreConfig/specifying-project-when-config-file-absent-with---ignoreConfig.js new file mode 100644 index 0000000000000..576b0eb4c2d36 --- /dev/null +++ b/tests/baselines/reference/tsc/ignoreConfig/specifying-project-when-config-file-absent-with---ignoreConfig.js @@ -0,0 +1,33 @@ +currentDirectory:: /home/src/workspaces/project useCaseSensitiveFileNames:: false +Input:: +//// [/home/src/workspaces/project/src/a.ts] +export const a = 10; + +//// [/home/src/workspaces/project/src/b.ts] +export const b = 10; + +//// [/home/src/workspaces/project/c.ts] +export const c = 10; + +//// [/home/src/tslibs/TS/Lib/lib.d.ts] +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray {} +declare const console: { log(msg: any): void; }; + + +/home/src/tslibs/TS/Lib/tsc.js -p . --ignoreConfig +Output:: +error TS5057: Cannot find a tsconfig.json file at the specified directory: '.'. + + + +exitCode:: ExitStatus.DiagnosticsPresent_OutputsSkipped diff --git a/tests/baselines/reference/tsc/ignoreConfig/specifying-project-when-config-file-absent.js b/tests/baselines/reference/tsc/ignoreConfig/specifying-project-when-config-file-absent.js new file mode 100644 index 0000000000000..efedeaf7cdc80 --- /dev/null +++ b/tests/baselines/reference/tsc/ignoreConfig/specifying-project-when-config-file-absent.js @@ -0,0 +1,33 @@ +currentDirectory:: /home/src/workspaces/project useCaseSensitiveFileNames:: false +Input:: +//// [/home/src/workspaces/project/src/a.ts] +export const a = 10; + +//// [/home/src/workspaces/project/src/b.ts] +export const b = 10; + +//// [/home/src/workspaces/project/c.ts] +export const c = 10; + +//// [/home/src/tslibs/TS/Lib/lib.d.ts] +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray {} +declare const console: { log(msg: any): void; }; + + +/home/src/tslibs/TS/Lib/tsc.js -p . +Output:: +error TS5057: Cannot find a tsconfig.json file at the specified directory: '.'. + + + +exitCode:: ExitStatus.DiagnosticsPresent_OutputsSkipped diff --git a/tests/baselines/reference/tsc/ignoreConfig/specifying-project-with---ignoreConfig.js b/tests/baselines/reference/tsc/ignoreConfig/specifying-project-with---ignoreConfig.js new file mode 100644 index 0000000000000..20402ba5337e3 --- /dev/null +++ b/tests/baselines/reference/tsc/ignoreConfig/specifying-project-with---ignoreConfig.js @@ -0,0 +1,53 @@ +currentDirectory:: /home/src/workspaces/project useCaseSensitiveFileNames:: false +Input:: +//// [/home/src/workspaces/project/src/a.ts] +export const a = 10; + +//// [/home/src/workspaces/project/src/b.ts] +export const b = 10; + +//// [/home/src/workspaces/project/c.ts] +export const c = 10; + +//// [/home/src/tslibs/TS/Lib/lib.d.ts] +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray {} +declare const console: { log(msg: any): void; }; + +//// [/home/src/workspaces/project/tsconfig.json] +{ + "include": [ + "src" + ] +} + + +/home/src/tslibs/TS/Lib/tsc.js -p . --ignoreConfig +Output:: + + +//// [/home/src/workspaces/project/src/a.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.a = void 0; +exports.a = 10; + + +//// [/home/src/workspaces/project/src/b.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.b = void 0; +exports.b = 10; + + + +exitCode:: ExitStatus.Success diff --git a/tests/baselines/reference/tsc/ignoreConfig/specifying-project.js b/tests/baselines/reference/tsc/ignoreConfig/specifying-project.js new file mode 100644 index 0000000000000..2f596a54fcbe4 --- /dev/null +++ b/tests/baselines/reference/tsc/ignoreConfig/specifying-project.js @@ -0,0 +1,53 @@ +currentDirectory:: /home/src/workspaces/project useCaseSensitiveFileNames:: false +Input:: +//// [/home/src/workspaces/project/src/a.ts] +export const a = 10; + +//// [/home/src/workspaces/project/src/b.ts] +export const b = 10; + +//// [/home/src/workspaces/project/c.ts] +export const c = 10; + +//// [/home/src/tslibs/TS/Lib/lib.d.ts] +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray {} +declare const console: { log(msg: any): void; }; + +//// [/home/src/workspaces/project/tsconfig.json] +{ + "include": [ + "src" + ] +} + + +/home/src/tslibs/TS/Lib/tsc.js -p . +Output:: + + +//// [/home/src/workspaces/project/src/a.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.a = void 0; +exports.a = 10; + + +//// [/home/src/workspaces/project/src/b.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.b = void 0; +exports.b = 10; + + + +exitCode:: ExitStatus.Success diff --git a/tests/baselines/reference/tsc/ignoreConfig/without-any-options-when-config-file-absent-with---ignoreConfig.js b/tests/baselines/reference/tsc/ignoreConfig/without-any-options-when-config-file-absent-with---ignoreConfig.js new file mode 100644 index 0000000000000..afb8c21415154 --- /dev/null +++ b/tests/baselines/reference/tsc/ignoreConfig/without-any-options-when-config-file-absent-with---ignoreConfig.js @@ -0,0 +1,176 @@ +currentDirectory:: /home/src/workspaces/project useCaseSensitiveFileNames:: false +Input:: +//// [/home/src/workspaces/project/src/a.ts] +export const a = 10; + +//// [/home/src/workspaces/project/src/b.ts] +export const b = 10; + +//// [/home/src/workspaces/project/c.ts] +export const c = 10; + +//// [/home/src/tslibs/TS/Lib/lib.d.ts] +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray {} +declare const console: { log(msg: any): void; }; + + +/home/src/tslibs/TS/Lib/tsc.js --ignoreConfig +Output:: +Version FakeTSVersion +tsc: The TypeScript Compiler - Version FakeTSVersion + +COMMON COMMANDS + + tsc + Compiles the current project (tsconfig.json in the working directory.) + + tsc app.ts util.ts + Ignoring tsconfig.json, compiles the specified files with default compiler options. + + tsc -b + Build a composite project in the working directory. + + tsc --init + Creates a tsconfig.json with the recommended settings in the working directory. + + tsc -p ./path/to/tsconfig.json + Compiles the TypeScript project located at the specified path. + + tsc --help --all + An expanded version of this information, showing all possible compiler options + + tsc --noEmit + tsc --target esnext + Compiles the current project, with additional settings. + +COMMAND LINE FLAGS + +--help, -h +Print this message. + +--watch, -w +Watch input files. + +--all +Show all compiler options. + +--version, -v +Print the compiler's version. + +--init +Initializes a TypeScript project and creates a tsconfig.json file. + +--project, -p +Compile the project given the path to its configuration file, or to a folder with a 'tsconfig.json'. + +--showConfig +Print the final configuration instead of building. + +--ignoreConfig +Ignore the tsconfig found and build with commandline options and files. + +--build, -b +Build one or more projects and their dependencies, if out of date + +COMMON COMPILER OPTIONS + +--pretty +Enable color and formatting in TypeScript's output to make compiler errors easier to read. +type: boolean +default: true + +--declaration, -d +Generate .d.ts files from TypeScript and JavaScript files in your project. +type: boolean +default: `false`, unless `composite` is set + +--declarationMap +Create sourcemaps for d.ts files. +type: boolean +default: false + +--emitDeclarationOnly +Only output d.ts files and not JavaScript files. +type: boolean +default: false + +--sourceMap +Create source map files for emitted JavaScript files. +type: boolean +default: false + +--noEmit +Disable emitting files from a compilation. +type: boolean +default: false + +--target, -t +Set the JavaScript language version for emitted JavaScript and include compatible library declarations. +one of: es5, es6/es2015, es2016, es2017, es2018, es2019, es2020, es2021, es2022, es2023, es2024, esnext +default: es5 + +--module, -m +Specify what module code is generated. +one of: none, commonjs, amd, umd, system, es6/es2015, es2020, es2022, esnext, node16, node18, node20, nodenext, preserve +default: undefined + +--lib +Specify a set of bundled library declaration files that describe the target runtime environment. +one or more: es5, es6/es2015, es7/es2016, es2017, es2018, es2019, es2020, es2021, es2022, es2023, es2024, esnext, dom, dom.iterable, dom.asynciterable, webworker, webworker.importscripts, webworker.iterable, webworker.asynciterable, scripthost, es2015.core, es2015.collection, es2015.generator, es2015.iterable, es2015.promise, es2015.proxy, es2015.reflect, es2015.symbol, es2015.symbol.wellknown, es2016.array.include, es2016.intl, es2017.arraybuffer, es2017.date, es2017.object, es2017.sharedmemory, es2017.string, es2017.intl, es2017.typedarrays, es2018.asyncgenerator, es2018.asynciterable/esnext.asynciterable, es2018.intl, es2018.promise, es2018.regexp, es2019.array, es2019.object, es2019.string, es2019.symbol/esnext.symbol, es2019.intl, es2020.bigint/esnext.bigint, es2020.date, es2020.promise, es2020.sharedmemory, es2020.string, es2020.symbol.wellknown, es2020.intl, es2020.number, es2021.promise, es2021.string, es2021.weakref/esnext.weakref, es2021.intl, es2022.array, es2022.error, es2022.intl, es2022.object, es2022.string, es2022.regexp, es2023.array, es2023.collection, es2023.intl, es2024.arraybuffer, es2024.collection, es2024.object/esnext.object, es2024.promise, es2024.regexp/esnext.regexp, es2024.sharedmemory, es2024.string/esnext.string, esnext.array, esnext.collection, esnext.intl, esnext.disposable, esnext.promise, esnext.decorators, esnext.iterator, esnext.float16, esnext.error, esnext.sharedmemory, decorators, decorators.legacy +default: undefined + +--allowJs +Allow JavaScript files to be a part of your program. Use the 'checkJs' option to get errors from these files. +type: boolean +default: false + +--checkJs +Enable error reporting in type-checked JavaScript files. +type: boolean +default: false + +--jsx +Specify what JSX code is generated. +one of: preserve, react, react-native, react-jsx, react-jsxdev +default: undefined + +--outFile +Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. + +--outDir +Specify an output folder for all emitted files. + +--removeComments +Disable emitting comments. +type: boolean +default: false + +--strict +Enable all strict type-checking options. +type: boolean +default: false + +--types +Specify type package names to be included without being referenced in a source file. + +--esModuleInterop +Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. +type: boolean +default: false + +You can learn about all of the compiler options at https://aka.ms/tsc + + + + +exitCode:: ExitStatus.DiagnosticsPresent_OutputsSkipped diff --git a/tests/baselines/reference/tsc/ignoreConfig/without-any-options-when-config-file-absent.js b/tests/baselines/reference/tsc/ignoreConfig/without-any-options-when-config-file-absent.js new file mode 100644 index 0000000000000..8233528cdd959 --- /dev/null +++ b/tests/baselines/reference/tsc/ignoreConfig/without-any-options-when-config-file-absent.js @@ -0,0 +1,176 @@ +currentDirectory:: /home/src/workspaces/project useCaseSensitiveFileNames:: false +Input:: +//// [/home/src/workspaces/project/src/a.ts] +export const a = 10; + +//// [/home/src/workspaces/project/src/b.ts] +export const b = 10; + +//// [/home/src/workspaces/project/c.ts] +export const c = 10; + +//// [/home/src/tslibs/TS/Lib/lib.d.ts] +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray {} +declare const console: { log(msg: any): void; }; + + +/home/src/tslibs/TS/Lib/tsc.js +Output:: +Version FakeTSVersion +tsc: The TypeScript Compiler - Version FakeTSVersion + +COMMON COMMANDS + + tsc + Compiles the current project (tsconfig.json in the working directory.) + + tsc app.ts util.ts + Ignoring tsconfig.json, compiles the specified files with default compiler options. + + tsc -b + Build a composite project in the working directory. + + tsc --init + Creates a tsconfig.json with the recommended settings in the working directory. + + tsc -p ./path/to/tsconfig.json + Compiles the TypeScript project located at the specified path. + + tsc --help --all + An expanded version of this information, showing all possible compiler options + + tsc --noEmit + tsc --target esnext + Compiles the current project, with additional settings. + +COMMAND LINE FLAGS + +--help, -h +Print this message. + +--watch, -w +Watch input files. + +--all +Show all compiler options. + +--version, -v +Print the compiler's version. + +--init +Initializes a TypeScript project and creates a tsconfig.json file. + +--project, -p +Compile the project given the path to its configuration file, or to a folder with a 'tsconfig.json'. + +--showConfig +Print the final configuration instead of building. + +--ignoreConfig +Ignore the tsconfig found and build with commandline options and files. + +--build, -b +Build one or more projects and their dependencies, if out of date + +COMMON COMPILER OPTIONS + +--pretty +Enable color and formatting in TypeScript's output to make compiler errors easier to read. +type: boolean +default: true + +--declaration, -d +Generate .d.ts files from TypeScript and JavaScript files in your project. +type: boolean +default: `false`, unless `composite` is set + +--declarationMap +Create sourcemaps for d.ts files. +type: boolean +default: false + +--emitDeclarationOnly +Only output d.ts files and not JavaScript files. +type: boolean +default: false + +--sourceMap +Create source map files for emitted JavaScript files. +type: boolean +default: false + +--noEmit +Disable emitting files from a compilation. +type: boolean +default: false + +--target, -t +Set the JavaScript language version for emitted JavaScript and include compatible library declarations. +one of: es5, es6/es2015, es2016, es2017, es2018, es2019, es2020, es2021, es2022, es2023, es2024, esnext +default: es5 + +--module, -m +Specify what module code is generated. +one of: none, commonjs, amd, umd, system, es6/es2015, es2020, es2022, esnext, node16, node18, node20, nodenext, preserve +default: undefined + +--lib +Specify a set of bundled library declaration files that describe the target runtime environment. +one or more: es5, es6/es2015, es7/es2016, es2017, es2018, es2019, es2020, es2021, es2022, es2023, es2024, esnext, dom, dom.iterable, dom.asynciterable, webworker, webworker.importscripts, webworker.iterable, webworker.asynciterable, scripthost, es2015.core, es2015.collection, es2015.generator, es2015.iterable, es2015.promise, es2015.proxy, es2015.reflect, es2015.symbol, es2015.symbol.wellknown, es2016.array.include, es2016.intl, es2017.arraybuffer, es2017.date, es2017.object, es2017.sharedmemory, es2017.string, es2017.intl, es2017.typedarrays, es2018.asyncgenerator, es2018.asynciterable/esnext.asynciterable, es2018.intl, es2018.promise, es2018.regexp, es2019.array, es2019.object, es2019.string, es2019.symbol/esnext.symbol, es2019.intl, es2020.bigint/esnext.bigint, es2020.date, es2020.promise, es2020.sharedmemory, es2020.string, es2020.symbol.wellknown, es2020.intl, es2020.number, es2021.promise, es2021.string, es2021.weakref/esnext.weakref, es2021.intl, es2022.array, es2022.error, es2022.intl, es2022.object, es2022.string, es2022.regexp, es2023.array, es2023.collection, es2023.intl, es2024.arraybuffer, es2024.collection, es2024.object/esnext.object, es2024.promise, es2024.regexp/esnext.regexp, es2024.sharedmemory, es2024.string/esnext.string, esnext.array, esnext.collection, esnext.intl, esnext.disposable, esnext.promise, esnext.decorators, esnext.iterator, esnext.float16, esnext.error, esnext.sharedmemory, decorators, decorators.legacy +default: undefined + +--allowJs +Allow JavaScript files to be a part of your program. Use the 'checkJs' option to get errors from these files. +type: boolean +default: false + +--checkJs +Enable error reporting in type-checked JavaScript files. +type: boolean +default: false + +--jsx +Specify what JSX code is generated. +one of: preserve, react, react-native, react-jsx, react-jsxdev +default: undefined + +--outFile +Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. + +--outDir +Specify an output folder for all emitted files. + +--removeComments +Disable emitting comments. +type: boolean +default: false + +--strict +Enable all strict type-checking options. +type: boolean +default: false + +--types +Specify type package names to be included without being referenced in a source file. + +--esModuleInterop +Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. +type: boolean +default: false + +You can learn about all of the compiler options at https://aka.ms/tsc + + + + +exitCode:: ExitStatus.DiagnosticsPresent_OutputsSkipped diff --git a/tests/baselines/reference/tsc/ignoreConfig/without-any-options-with---ignoreConfig.js b/tests/baselines/reference/tsc/ignoreConfig/without-any-options-with---ignoreConfig.js new file mode 100644 index 0000000000000..9de2d8f0387c7 --- /dev/null +++ b/tests/baselines/reference/tsc/ignoreConfig/without-any-options-with---ignoreConfig.js @@ -0,0 +1,53 @@ +currentDirectory:: /home/src/workspaces/project useCaseSensitiveFileNames:: false +Input:: +//// [/home/src/workspaces/project/src/a.ts] +export const a = 10; + +//// [/home/src/workspaces/project/src/b.ts] +export const b = 10; + +//// [/home/src/workspaces/project/c.ts] +export const c = 10; + +//// [/home/src/tslibs/TS/Lib/lib.d.ts] +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray {} +declare const console: { log(msg: any): void; }; + +//// [/home/src/workspaces/project/tsconfig.json] +{ + "include": [ + "src" + ] +} + + +/home/src/tslibs/TS/Lib/tsc.js --ignoreConfig +Output:: + + +//// [/home/src/workspaces/project/src/a.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.a = void 0; +exports.a = 10; + + +//// [/home/src/workspaces/project/src/b.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.b = void 0; +exports.b = 10; + + + +exitCode:: ExitStatus.Success diff --git a/tests/baselines/reference/tsc/ignoreConfig/without-any-options.js b/tests/baselines/reference/tsc/ignoreConfig/without-any-options.js new file mode 100644 index 0000000000000..57960b2c91698 --- /dev/null +++ b/tests/baselines/reference/tsc/ignoreConfig/without-any-options.js @@ -0,0 +1,53 @@ +currentDirectory:: /home/src/workspaces/project useCaseSensitiveFileNames:: false +Input:: +//// [/home/src/workspaces/project/src/a.ts] +export const a = 10; + +//// [/home/src/workspaces/project/src/b.ts] +export const b = 10; + +//// [/home/src/workspaces/project/c.ts] +export const c = 10; + +//// [/home/src/tslibs/TS/Lib/lib.d.ts] +interface Boolean {} +interface Function {} +interface CallableFunction {} +interface NewableFunction {} +interface IArguments {} +interface Number { toExponential: any; } +interface Object {} +interface RegExp {} +interface String { charAt: any; } +interface Array { length: number; [n: number]: T; } +interface ReadonlyArray {} +declare const console: { log(msg: any): void; }; + +//// [/home/src/workspaces/project/tsconfig.json] +{ + "include": [ + "src" + ] +} + + +/home/src/tslibs/TS/Lib/tsc.js +Output:: + + +//// [/home/src/workspaces/project/src/a.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.a = void 0; +exports.a = 10; + + +//// [/home/src/workspaces/project/src/b.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); +exports.b = void 0; +exports.b = 10; + + + +exitCode:: ExitStatus.Success diff --git a/tests/baselines/reference/tscWatch/resolutionCache/ignores-changes-in-node_modules-that-start-with-dot/watch-without-configFile.js b/tests/baselines/reference/tscWatch/resolutionCache/ignores-changes-in-node_modules-that-start-with-dot/watch-without-configFile.js index 5a1c6045b181a..e50b2d7601caa 100644 --- a/tests/baselines/reference/tscWatch/resolutionCache/ignores-changes-in-node_modules-that-start-with-dot/watch-without-configFile.js +++ b/tests/baselines/reference/tscWatch/resolutionCache/ignores-changes-in-node_modules-that-start-with-dot/watch-without-configFile.js @@ -24,7 +24,7 @@ interface ReadonlyArray {} declare const console: { log(msg: any): void; }; -/home/src/tslibs/TS/Lib/tsc.js --w /user/username/projects/myproject/test.ts +/home/src/tslibs/TS/Lib/tsc.js --w --ignoreConfig /user/username/projects/myproject/test.ts Output:: >> Screen clear [HH:MM:SS AM] Starting compilation in watch mode... @@ -73,7 +73,8 @@ Program root files: [ "/user/username/projects/myproject/test.ts" ] Program options: { - "watch": true + "watch": true, + "ignoreConfig": true } Program structureReused: Not Program files::