From d045db124d52326151477039f61d6f26e451e7f9 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 26 Jan 2023 12:32:36 -0800 Subject: [PATCH 1/5] Add test --- .../unittests/tscWatch/programUpdates.ts | 39 ++++ ...en-'--allowArbitraryExtensions'-changes.js | 181 ++++++++++++++++++ 2 files changed, 220 insertions(+) create mode 100644 tests/baselines/reference/tscWatch/programUpdates/Updates-diagnostics-when-'--allowArbitraryExtensions'-changes.js diff --git a/src/testRunner/unittests/tscWatch/programUpdates.ts b/src/testRunner/unittests/tscWatch/programUpdates.ts index cac54dbb52831..a767ceec53cd7 100644 --- a/src/testRunner/unittests/tscWatch/programUpdates.ts +++ b/src/testRunner/unittests/tscWatch/programUpdates.ts @@ -273,6 +273,45 @@ 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 } + }) + }; + return createWatchedSystem([libFile, aTs, bCssTs, tsconfig]); + }, + edits: [ + { + caption: "Disable allowArbitraryExtensions", + edit: sys => sys.modifyFile("/tsconfig.json", JSON.stringify({ + compilerOptions: { allowArbitraryExtensions: false } + })), + timeouts: sys => sys.checkTimeoutQueueLengthAndRun(1) + }, + { + caption: "Enable allowArbitraryExtensions", + edit: sys => sys.modifyFile("/tsconfig.json", JSON.stringify({ + compilerOptions: { allowArbitraryExtensions: true } + })), + 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..1a9609fd816cb --- /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}} + + +/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","/b.d.css.ts","/a/lib/lib.d.ts"] +Program options: {"allowArbitraryExtensions":true,"watch":true,"project":"/tsconfig.json","configFilePath":"/tsconfig.json"} +Program structureReused: Not +Program files:: +/b.d.css.ts +/a.ts +/a/lib/lib.d.ts + +Semantic diagnostics in builder refreshed for:: +/b.d.css.ts +/a.ts +/a/lib/lib.d.ts + +Shape signatures in builder refreshed for:: +/b.d.css.ts (used version) +/a.ts (used version) +/a/lib/lib.d.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}} + + +Output:: +>> Screen clear +[12:00:21 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:22 AM] Found 1 error. Watching for file changes. + + + +Program root files: ["/a.ts","/b.d.css.ts","/a/lib/lib.d.ts"] +Program options: {"allowArbitraryExtensions":false,"watch":true,"project":"/tsconfig.json","configFilePath":"/tsconfig.json"} +Program structureReused: Not +Program files:: +/a.ts +/b.d.css.ts +/a/lib/lib.d.ts + +Semantic diagnostics in builder refreshed for:: + +No shapes updated in the builder:: + +PolledWatches:: + +FsWatches:: +/tsconfig.json: + {} +/a.ts: + {} +/b.d.css.ts: + {} +/a/lib/lib.d.ts: + {} + +FsWatchesRecursive:: +/: + {} + +exitCode:: ExitStatus.undefined + + +Change:: Enable allowArbitraryExtensions + +Input:: +//// [/tsconfig.json] +{"compilerOptions":{"allowArbitraryExtensions":true}} + + +Output:: +>> Screen clear +[12:00:25 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:26 AM] Found 1 error. Watching for file changes. + + + +Program root files: ["/a.ts","/b.d.css.ts","/a/lib/lib.d.ts"] +Program options: {"allowArbitraryExtensions":true,"watch":true,"project":"/tsconfig.json","configFilePath":"/tsconfig.json"} +Program structureReused: Not +Program files:: +/b.d.css.ts +/a.ts +/a/lib/lib.d.ts + +Semantic diagnostics in builder refreshed for:: + +No shapes updated in the builder:: + +PolledWatches:: + +FsWatches:: +/tsconfig.json: + {} +/a.ts: + {} +/b.d.css.ts: + {} +/a/lib/lib.d.ts: + {} + +FsWatchesRecursive:: +/: + {} + +exitCode:: ExitStatus.undefined + From 225d158080680e5a3c0c1de814441cf9ff4a7245 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 26 Jan 2023 11:41:49 -0800 Subject: [PATCH 2/5] Mark allowArbitraryExtensions as affectsSemanticDiagnostics instead of affectsModuleResolution --- src/compiler/commandLineParser.ts | 2 +- ...cs-when-'--allowArbitraryExtensions'-changes.js | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index 94d01e48cf75b..7af5c29d34963 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -1221,7 +1221,7 @@ const commandOptionsWithoutBuild: CommandLineOption[] = [ { name: "allowArbitraryExtensions", type: "boolean", - affectsModuleResolution: true, + affectsSemanticDiagnostics: true, category: Diagnostics.Modules, description: Diagnostics.Enable_importing_files_with_any_extension_provided_a_declaration_file_is_present, defaultValueDescription: false, 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 index 1a9609fd816cb..d68035966ea9a 100644 --- a/tests/baselines/reference/tscWatch/programUpdates/Updates-diagnostics-when-'--allowArbitraryExtensions'-changes.js +++ b/tests/baselines/reference/tscWatch/programUpdates/Updates-diagnostics-when-'--allowArbitraryExtensions'-changes.js @@ -89,7 +89,7 @@ Output:: >> Screen clear [12:00:21 AM] File change detected. Starting incremental compilation... -a.ts:1:16 - error TS2306: File '/b.d.css.ts' is not a module. +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'    ~~~~~~~~~ @@ -100,13 +100,16 @@ Output:: Program root files: ["/a.ts","/b.d.css.ts","/a/lib/lib.d.ts"] Program options: {"allowArbitraryExtensions":false,"watch":true,"project":"/tsconfig.json","configFilePath":"/tsconfig.json"} -Program structureReused: Not +Program structureReused: Completely Program files:: -/a.ts /b.d.css.ts +/a.ts /a/lib/lib.d.ts Semantic diagnostics in builder refreshed for:: +/b.d.css.ts +/a.ts +/a/lib/lib.d.ts No shapes updated in the builder:: @@ -151,13 +154,16 @@ Output:: Program root files: ["/a.ts","/b.d.css.ts","/a/lib/lib.d.ts"] Program options: {"allowArbitraryExtensions":true,"watch":true,"project":"/tsconfig.json","configFilePath":"/tsconfig.json"} -Program structureReused: Not +Program structureReused: Completely Program files:: /b.d.css.ts /a.ts /a/lib/lib.d.ts Semantic diagnostics in builder refreshed for:: +/b.d.css.ts +/a.ts +/a/lib/lib.d.ts No shapes updated in the builder:: From f3100d8f90a39fa8792116ea2a658be476933324 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 26 Jan 2023 12:47:24 -0800 Subject: [PATCH 3/5] Maybe affectsProgramStructure --- src/compiler/commandLineParser.ts | 2 +- ...cs-when-'--allowArbitraryExtensions'-changes.js | 14 ++++---------- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/src/compiler/commandLineParser.ts b/src/compiler/commandLineParser.ts index 7af5c29d34963..629063de29808 100644 --- a/src/compiler/commandLineParser.ts +++ b/src/compiler/commandLineParser.ts @@ -1221,7 +1221,7 @@ const commandOptionsWithoutBuild: CommandLineOption[] = [ { name: "allowArbitraryExtensions", type: "boolean", - affectsSemanticDiagnostics: 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/tests/baselines/reference/tscWatch/programUpdates/Updates-diagnostics-when-'--allowArbitraryExtensions'-changes.js b/tests/baselines/reference/tscWatch/programUpdates/Updates-diagnostics-when-'--allowArbitraryExtensions'-changes.js index d68035966ea9a..3d992cf8ddcf8 100644 --- a/tests/baselines/reference/tscWatch/programUpdates/Updates-diagnostics-when-'--allowArbitraryExtensions'-changes.js +++ b/tests/baselines/reference/tscWatch/programUpdates/Updates-diagnostics-when-'--allowArbitraryExtensions'-changes.js @@ -89,7 +89,7 @@ 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. +a.ts:1:16 - error TS2306: File '/b.d.css.ts' is not a module. 1 import {} from './b.css'    ~~~~~~~~~ @@ -100,16 +100,13 @@ Output:: Program root files: ["/a.ts","/b.d.css.ts","/a/lib/lib.d.ts"] Program options: {"allowArbitraryExtensions":false,"watch":true,"project":"/tsconfig.json","configFilePath":"/tsconfig.json"} -Program structureReused: Completely +Program structureReused: SafeModules Program files:: -/b.d.css.ts /a.ts +/b.d.css.ts /a/lib/lib.d.ts Semantic diagnostics in builder refreshed for:: -/b.d.css.ts -/a.ts -/a/lib/lib.d.ts No shapes updated in the builder:: @@ -154,16 +151,13 @@ Output:: Program root files: ["/a.ts","/b.d.css.ts","/a/lib/lib.d.ts"] Program options: {"allowArbitraryExtensions":true,"watch":true,"project":"/tsconfig.json","configFilePath":"/tsconfig.json"} -Program structureReused: Completely +Program structureReused: SafeModules Program files:: /b.d.css.ts /a.ts /a/lib/lib.d.ts Semantic diagnostics in builder refreshed for:: -/b.d.css.ts -/a.ts -/a/lib/lib.d.ts No shapes updated in the builder:: From 7e7bc1bb15d95d8556824e2ec06186b2d0f404ca Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 26 Jan 2023 12:50:51 -0800 Subject: [PATCH 4/5] Explicit files list --- .../unittests/tscWatch/programUpdates.ts | 3 ++- ...cs-when-'--allowArbitraryExtensions'-changes.js | 14 ++++++-------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/src/testRunner/unittests/tscWatch/programUpdates.ts b/src/testRunner/unittests/tscWatch/programUpdates.ts index a767ceec53cd7..7f0689da2396b 100644 --- a/src/testRunner/unittests/tscWatch/programUpdates.ts +++ b/src/testRunner/unittests/tscWatch/programUpdates.ts @@ -289,7 +289,8 @@ describe("unittests:: tsc-watch:: program updates", () => { const tsconfig: File = { path: "/tsconfig.json", content: JSON.stringify({ - compilerOptions: { allowArbitraryExtensions: true } + compilerOptions: { allowArbitraryExtensions: true }, + files: [aTs.path], }) }; return createWatchedSystem([libFile, aTs, bCssTs, tsconfig]); 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 index 3d992cf8ddcf8..30468631ef59d 100644 --- a/tests/baselines/reference/tscWatch/programUpdates/Updates-diagnostics-when-'--allowArbitraryExtensions'-changes.js +++ b/tests/baselines/reference/tscWatch/programUpdates/Updates-diagnostics-when-'--allowArbitraryExtensions'-changes.js @@ -19,7 +19,7 @@ import {} from './b.css' declare const style: string; //// [/tsconfig.json] -{"compilerOptions":{"allowArbitraryExtensions":true}} +{"compilerOptions":{"allowArbitraryExtensions":true},"files":["/a.ts"]} /a/lib/tsc.js -w -p /tsconfig.json @@ -36,23 +36,23 @@ Output:: -Program root files: ["/a.ts","/b.d.css.ts","/a/lib/lib.d.ts"] +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 -/a/lib/lib.d.ts Semantic diagnostics in builder refreshed for:: +/a/lib/lib.d.ts /b.d.css.ts /a.ts -/a/lib/lib.d.ts Shape signatures in builder refreshed for:: +/a/lib/lib.d.ts (used version) /b.d.css.ts (used version) /a.ts (used version) -/a/lib/lib.d.ts (used version) PolledWatches:: @@ -67,8 +67,6 @@ FsWatches:: {} FsWatchesRecursive:: -/: - {} exitCode:: ExitStatus.undefined @@ -100,7 +98,7 @@ Output:: Program root files: ["/a.ts","/b.d.css.ts","/a/lib/lib.d.ts"] Program options: {"allowArbitraryExtensions":false,"watch":true,"project":"/tsconfig.json","configFilePath":"/tsconfig.json"} -Program structureReused: SafeModules +Program structureReused: Not Program files:: /a.ts /b.d.css.ts From 8c3e3da1bbaa4fdb14b5c8cf8b56645431e73544 Mon Sep 17 00:00:00 2001 From: Jake Bailey <5341706+jakebailey@users.noreply.github.com> Date: Thu, 26 Jan 2023 12:55:39 -0800 Subject: [PATCH 5/5] Fix test --- .../unittests/tscWatch/programUpdates.ts | 8 ++-- ...en-'--allowArbitraryExtensions'-changes.js | 46 ++++++++++--------- 2 files changed, 29 insertions(+), 25 deletions(-) diff --git a/src/testRunner/unittests/tscWatch/programUpdates.ts b/src/testRunner/unittests/tscWatch/programUpdates.ts index 7f0689da2396b..14076a2817d1c 100644 --- a/src/testRunner/unittests/tscWatch/programUpdates.ts +++ b/src/testRunner/unittests/tscWatch/programUpdates.ts @@ -290,7 +290,7 @@ describe("unittests:: tsc-watch:: program updates", () => { path: "/tsconfig.json", content: JSON.stringify({ compilerOptions: { allowArbitraryExtensions: true }, - files: [aTs.path], + files: ["/a.ts"], }) }; return createWatchedSystem([libFile, aTs, bCssTs, tsconfig]); @@ -299,14 +299,16 @@ describe("unittests:: tsc-watch:: program updates", () => { { caption: "Disable allowArbitraryExtensions", edit: sys => sys.modifyFile("/tsconfig.json", JSON.stringify({ - compilerOptions: { allowArbitraryExtensions: false } + 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 } + compilerOptions: { allowArbitraryExtensions: true }, + files: ["/a.ts"], })), timeouts: sys => sys.checkTimeoutQueueLengthAndRun(1), } 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 index 30468631ef59d..1c83b9527c94d 100644 --- a/tests/baselines/reference/tscWatch/programUpdates/Updates-diagnostics-when-'--allowArbitraryExtensions'-changes.js +++ b/tests/baselines/reference/tscWatch/programUpdates/Updates-diagnostics-when-'--allowArbitraryExtensions'-changes.js @@ -80,33 +80,34 @@ Change:: Disable allowArbitraryExtensions Input:: //// [/tsconfig.json] -{"compilerOptions":{"allowArbitraryExtensions":false}} +{"compilerOptions":{"allowArbitraryExtensions":false},"files":["/a.ts"]} Output:: >> Screen clear [12:00:21 AM] File change detected. Starting incremental compilation... -a.ts:1:16 - error TS2306: File '/b.d.css.ts' is not a module. +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:22 AM] Found 1 error. Watching for file changes. +[12:00:25 AM] Found 1 error. Watching for file changes. -Program root files: ["/a.ts","/b.d.css.ts","/a/lib/lib.d.ts"] +Program root files: ["/a.ts"] Program options: {"allowArbitraryExtensions":false,"watch":true,"project":"/tsconfig.json","configFilePath":"/tsconfig.json"} -Program structureReused: Not +Program structureReused: SafeModules Program files:: -/a.ts -/b.d.css.ts /a/lib/lib.d.ts +/a.ts Semantic diagnostics in builder refreshed for:: +/a.ts -No shapes updated in the builder:: +Shape signatures in builder refreshed for:: +/a.ts (computed .d.ts) PolledWatches:: @@ -115,49 +116,51 @@ FsWatches:: {} /a.ts: {} -/b.d.css.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}} +{"compilerOptions":{"allowArbitraryExtensions":true},"files":["/a.ts"]} Output:: >> Screen clear -[12:00:25 AM] File change detected. Starting incremental compilation... +[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:26 AM] Found 1 error. Watching for file changes. +[12:00:32 AM] Found 1 error. Watching for file changes. -Program root files: ["/a.ts","/b.d.css.ts","/a/lib/lib.d.ts"] +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 -/a/lib/lib.d.ts Semantic diagnostics in builder refreshed for:: +/a/lib/lib.d.ts +/b.d.css.ts +/a.ts -No shapes updated in the builder:: +Shape signatures in builder refreshed for:: +/b.d.css.ts (used version) +/a.ts (computed .d.ts) PolledWatches:: @@ -166,14 +169,13 @@ FsWatches:: {} /a.ts: {} -/b.d.css.ts: - {} /a/lib/lib.d.ts: {} +/b.d.css.ts: + {} FsWatchesRecursive:: -/: - {} exitCode:: ExitStatus.undefined +//// [/a.js] file written with same contents