diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index 94d01e48cf75b..629063de29808 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -1221,7 +1221,7 @@ const commandOptionsWithoutBuild: CommandLineOption[] = [ { name: "allowArbitraryExtensions", type: "boolean", - affectsModuleResolution: true, + affectsProgramStructure: true, category: Diagnostics.Modules, description: Diagnostics.Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present, defaultValueDescription: false, diff --git a/src/testRunner/unittests/tscWatch/programUpdates.ts b/src/testRunner/unittests/tscWatch/programUpdates.ts index cac54dbb52831..14076a2817d1c 100644 --- a/src/testRunner/unittests/tscWatch/programUpdates.ts +++ b/src/testRunner/unittests/tscWatch/programUpdates.ts @@ -273,6 +273,48 @@ describe("unittests:: tsc-watch:: program updates", () => { ] }); + verifyTscWatch({ + scenario, + subScenario: "Updates diagnostics when '--allowArbitraryExtensions' changes", + commandLineArgs: ["-w", "-p", "/tsconfig.json"], + sys: () => { + const aTs: File = { + path: "/a.ts", + content: "import {} from './b.css'" + }; + const bCssTs: File = { + path: "/b.d.css.ts", + content: "declare const style: string;" + }; + const tsconfig: File = { + path: "/tsconfig.json", + content: JSON.stringify({ + compilerOptions: { allowArbitraryExtensions: true }, + files: ["/a.ts"], + }) + }; + return createWatchedSystem([libFile, aTs, bCssTs, tsconfig]); + }, + edits: [ + { + caption: "Disable allowArbitraryExtensions", + edit: sys => sys.modifyFile("/tsconfig.json", JSON.stringify({ + compilerOptions: { allowArbitraryExtensions: false }, + files: ["/a.ts"], + })), + timeouts: sys => sys.checkTimeoutQueueLengthAndRun(1) + }, + { + caption: "Enable allowArbitraryExtensions", + edit: sys => sys.modifyFile("/tsconfig.json", JSON.stringify({ + compilerOptions: { allowArbitraryExtensions: true }, + files: ["/a.ts"], + })), + timeouts: sys => sys.checkTimeoutQueueLengthAndRun(1), + } + ] + }); + verifyTscWatch({ scenario, subScenario: "updates diagnostics and emit for decorators", diff --git a/tests/baselines/reference/tscWatch/programUpdates/Updates-diagnostics-when-'--allowArbitraryExtensions'-changes.js b/tests/baselines/reference/tscWatch/programUpdates/Updates-diagnostics-when-'--allowArbitraryExtensions'-changes.js new file mode 100644 index 0000000000000..1c83b9527c94d --- /dev/null +++ b/tests/baselines/reference/tscWatch/programUpdates/Updates-diagnostics-when-'--allowArbitraryExtensions'-changes.js @@ -0,0 +1,181 @@ +Input:: +//// [/a/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; } + +//// [/a.ts] +import {} from './b.css' + +//// [/b.d.css.ts] +declare const style: string; + +//// [/tsconfig.json] +{"compilerOptions":{"allowArbitraryExtensions":true},"files":["/a.ts"]} + + +/a/lib/tsc.js -w -p /tsconfig.json +Output:: +>> Screen clear +[12:00:15 AM] Starting compilation in watch mode... + +a.ts:1:16 - error TS2306: File '/b.d.css.ts' is not a module. + +1 import {} from './b.css' +   ~~~~~~~~~ + +[12:00:18 AM] Found 1 error. Watching for file changes. + + + +Program root files: ["/a.ts"] +Program options: {"allowArbitraryExtensions":true,"watch":true,"project":"/tsconfig.json","configFilePath":"/tsconfig.json"} +Program structureReused: Not +Program files:: +/a/lib/lib.d.ts +/b.d.css.ts +/a.ts + +Semantic diagnostics in builder refreshed for:: +/a/lib/lib.d.ts +/b.d.css.ts +/a.ts + +Shape signatures in builder refreshed for:: +/a/lib/lib.d.ts (used version) +/b.d.css.ts (used version) +/a.ts (used version) + +PolledWatches:: + +FsWatches:: +/tsconfig.json: + {} +/a.ts: + {} +/b.d.css.ts: + {} +/a/lib/lib.d.ts: + {} + +FsWatchesRecursive:: + +exitCode:: ExitStatus.undefined + +//// [/a.js] +"use strict"; +Object.defineProperty(exports, "__esModule", { value: true }); + + + +Change:: Disable allowArbitraryExtensions + +Input:: +//// [/tsconfig.json] +{"compilerOptions":{"allowArbitraryExtensions":false},"files":["/a.ts"]} + + +Output:: +>> Screen clear +[12:00:21 AM] File change detected. Starting incremental compilation... + +a.ts:1:16 - error TS6263: Module './b.css' was resolved to '/b.d.css.ts', but '--allowArbitraryExtensions' is not set. + +1 import {} from './b.css' +   ~~~~~~~~~ + +[12:00:25 AM] Found 1 error. Watching for file changes. + + + +Program root files: ["/a.ts"] +Program options: {"allowArbitraryExtensions":false,"watch":true,"project":"/tsconfig.json","configFilePath":"/tsconfig.json"} +Program structureReused: SafeModules +Program files:: +/a/lib/lib.d.ts +/a.ts + +Semantic diagnostics in builder refreshed for:: +/a.ts + +Shape signatures in builder refreshed for:: +/a.ts (computed .d.ts) + +PolledWatches:: + +FsWatches:: +/tsconfig.json: + {} +/a.ts: + {} +/a/lib/lib.d.ts: + {} + +FsWatchesRecursive:: + +exitCode:: ExitStatus.undefined + +//// [/a.js] file written with same contents + +Change:: Enable allowArbitraryExtensions + +Input:: +//// [/tsconfig.json] +{"compilerOptions":{"allowArbitraryExtensions":true},"files":["/a.ts"]} + + +Output:: +>> Screen clear +[12:00:28 AM] File change detected. Starting incremental compilation... + +a.ts:1:16 - error TS2306: File '/b.d.css.ts' is not a module. + +1 import {} from './b.css' +   ~~~~~~~~~ + +[12:00:32 AM] Found 1 error. Watching for file changes. + + + +Program root files: ["/a.ts"] +Program options: {"allowArbitraryExtensions":true,"watch":true,"project":"/tsconfig.json","configFilePath":"/tsconfig.json"} +Program structureReused: SafeModules +Program files:: +/a/lib/lib.d.ts +/b.d.css.ts +/a.ts + +Semantic diagnostics in builder refreshed for:: +/a/lib/lib.d.ts +/b.d.css.ts +/a.ts + +Shape signatures in builder refreshed for:: +/b.d.css.ts (used version) +/a.ts (computed .d.ts) + +PolledWatches:: + +FsWatches:: +/tsconfig.json: + {} +/a.ts: + {} +/a/lib/lib.d.ts: + {} +/b.d.css.ts: + {} + +FsWatchesRecursive:: + +exitCode:: ExitStatus.undefined + +//// [/a.js] file written with same contents