@cplieger/deadset-ts 8.0.0-dev.2 → 8.0.0-dev.21

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (431) hide show
  1. package/README.md +3 -1
  2. package/THIRD_PARTY_NOTICES.md +27 -0
  3. package/dist/bin/mapper-connection.js +2 -1
  4. package/dist/bin/node-host.js +24 -5
  5. package/dist/src/alias-chain.js +35 -9
  6. package/dist/src/amd.js +81 -0
  7. package/dist/src/analysis.js +274 -496
  8. package/dist/src/augmentations.js +64 -3
  9. package/dist/src/automatic-types.js +10 -29
  10. package/dist/src/bindings.js +382 -0
  11. package/dist/src/commands/held.js +499 -0
  12. package/dist/src/commands/read.js +161 -0
  13. package/dist/src/commands/shell.js +169 -0
  14. package/dist/src/commands/tools.js +1847 -0
  15. package/dist/src/component-files.js +3 -2
  16. package/dist/src/component-layer.js +4 -2
  17. package/dist/src/config.js +6 -82
  18. package/dist/src/conformance-record.js +2 -2
  19. package/dist/src/consumers.js +10 -38
  20. package/dist/src/contextual-uses.js +57 -26
  21. package/dist/src/contract/config.generated.js +561 -0
  22. package/dist/src/contract/contract.generated.js +1370 -0
  23. package/dist/src/contract/report.generated.js +866 -0
  24. package/dist/src/dependencies.js +165 -122
  25. package/dist/src/destructuring.js +1 -19
  26. package/dist/src/edges.js +38 -122
  27. package/dist/src/element-access.js +181 -168
  28. package/dist/src/entries/build-scripts.js +222 -0
  29. package/dist/src/{configuration-files.js → entries/configuration-files.js} +52 -256
  30. package/dist/src/{convention-rows.js → entries/convention-rows.js} +170 -30
  31. package/dist/src/entries/conventions.js +740 -0
  32. package/dist/src/{html-entries.js → entries/html-entries.js} +12 -42
  33. package/dist/src/{mdx-entries.js → entries/mdx-entries.js} +5 -28
  34. package/dist/src/entries/run-directories.js +77 -0
  35. package/dist/src/entries/sources.js +144 -0
  36. package/dist/src/entries/static-module.js +670 -0
  37. package/dist/src/entries/test-runners.js +650 -0
  38. package/dist/src/entries/workflow-steps.js +345 -0
  39. package/dist/src/exemptions/argument-places.js +131 -0
  40. package/dist/src/exemptions/calls.js +338 -0
  41. package/dist/src/exemptions/classes.js +13 -0
  42. package/dist/src/{decorator.js → exemptions/decorator.js} +19 -30
  43. package/dist/src/exemptions/detectors.js +48 -0
  44. package/dist/src/{enum-group.js → exemptions/enum-group.js} +9 -16
  45. package/dist/src/{erased-stores.js → exemptions/erased-stores.js} +7 -11
  46. package/dist/src/{framework-lifecycle.js → exemptions/framework-lifecycle.js} +76 -54
  47. package/dist/src/exemptions/generated-file.js +241 -0
  48. package/dist/src/{injection-container.js → exemptions/injection-container.js} +20 -26
  49. package/dist/src/exemptions/installed-globals.js +173 -0
  50. package/dist/src/{interface-satisfaction.js → exemptions/interface-satisfaction.js} +52 -121
  51. package/dist/src/exemptions/lifecycle.js +150 -0
  52. package/dist/src/{reflective-lookup.js → exemptions/reflective-lookup.js} +3 -3
  53. package/dist/src/exemptions/serialization-contract.js +1276 -0
  54. package/dist/src/exemptions/sites.js +182 -0
  55. package/dist/src/{template-field.js → exemptions/template-field.js} +13 -23
  56. package/dist/src/{value-reach.js → exemptions/value-reach.js} +14 -7
  57. package/dist/src/exposure.js +400 -0
  58. package/dist/src/extensions.js +37 -0
  59. package/dist/src/facts.js +38 -0
  60. package/dist/src/failure.js +36 -0
  61. package/dist/src/file-facts.js +3 -26
  62. package/dist/src/findings/completion.js +109 -56
  63. package/dist/src/findings/dependencies-and-module-machinery.js +4 -5
  64. package/dist/src/findings/emitters.js +27 -41
  65. package/dist/src/{implementations.js → findings/implementations.js} +3 -3
  66. package/dist/src/{in-operands.js → findings/in-operands.js} +3 -2
  67. package/dist/src/findings/interfaces.js +4 -5
  68. package/dist/src/findings/intra-function.js +16 -13
  69. package/dist/src/findings/non-code-artifacts.js +17 -12
  70. package/dist/src/findings/reads-and-writes.js +86 -27
  71. package/dist/src/findings/self-check.js +44 -30
  72. package/dist/src/findings/unused-declarations.js +29 -45
  73. package/dist/src/findings/visibility-narrowing.js +23 -31
  74. package/dist/src/findings-pass.js +13 -21
  75. package/dist/src/fs/document.js +52 -0
  76. package/dist/src/fs/manifest.js +67 -0
  77. package/dist/src/fs/tree.js +88 -0
  78. package/dist/src/git-ignore.js +39 -26
  79. package/dist/src/import-bindings.js +73 -28
  80. package/dist/src/index/sites.js +557 -0
  81. package/dist/src/index/values.js +124 -0
  82. package/dist/src/index.js +2 -2
  83. package/dist/src/indexed-access.js +523 -478
  84. package/dist/src/intra-function-parts.js +63 -43
  85. package/dist/src/inventory/commonjs.js +507 -0
  86. package/dist/src/inventory/enumerate.js +167 -0
  87. package/dist/src/inventory/syntax.js +236 -0
  88. package/dist/src/inventory.js +323 -724
  89. package/dist/src/javascript-file.js +48 -0
  90. package/dist/src/json-document.js +198 -67
  91. package/dist/src/keyof-comparisons.js +126 -107
  92. package/dist/src/kinds.js +3 -366
  93. package/dist/src/{components.js → liveness/components.js} +2 -3
  94. package/dist/src/{graph.js → liveness/graph.js} +52 -28
  95. package/dist/src/liveness/matrix.js +99 -0
  96. package/dist/src/liveness/sweep.js +558 -0
  97. package/dist/src/load/classify.js +289 -0
  98. package/dist/src/load/diagnostics.js +87 -0
  99. package/dist/src/load/discover.js +285 -0
  100. package/dist/src/{emit-map.js → load/emit-map.js} +1 -1
  101. package/dist/src/load/expected-module.js +136 -0
  102. package/dist/src/load/load.js +27 -0
  103. package/dist/src/load/module-lookup.js +37 -0
  104. package/dist/src/load/package-scope.js +56 -0
  105. package/dist/src/load/plan.js +313 -0
  106. package/dist/src/load/specifiers.js +113 -0
  107. package/dist/src/load/synthesize.js +152 -0
  108. package/dist/src/load/test-globals.js +207 -0
  109. package/dist/src/load/test-joins.js +82 -0
  110. package/dist/src/{workspace-manifests.js → load/workspace-manifests.js} +4 -4
  111. package/dist/src/{workspace-programs.js → load/workspace-programs.js} +89 -66
  112. package/dist/src/{workspace-resolution.js → load/workspace-resolution.js} +24 -66
  113. package/dist/src/{workspace-run.js → load/workspace-run.js} +7 -7
  114. package/dist/src/{workspace.js → load/workspace.js} +62 -124
  115. package/dist/src/module-declarations.js +70 -85
  116. package/dist/src/overrides.js +134 -112
  117. package/dist/src/partial.js +2 -1
  118. package/dist/src/paths.js +82 -16
  119. package/dist/src/platform-calls.js +78 -0
  120. package/dist/src/platform-symbols.js +134 -0
  121. package/dist/src/position.js +43 -1
  122. package/dist/src/print.js +11 -79
  123. package/dist/src/product.js +13 -0
  124. package/dist/src/query.js +95 -0
  125. package/dist/src/ref.js +12 -20
  126. package/dist/src/references/read-rule.js +1 -0
  127. package/dist/src/references/read-rules.js +48 -0
  128. package/dist/src/references/sink.js +237 -0
  129. package/dist/src/references/sources.js +450 -0
  130. package/dist/src/references.js +117 -1074
  131. package/dist/src/report-schema.js +51 -0
  132. package/dist/src/report.js +57 -41
  133. package/dist/src/reporters/annotations.js +15 -8
  134. package/dist/src/reporters/sarif.js +16 -10
  135. package/dist/src/reporters/template.js +4 -19
  136. package/dist/src/resolve.js +246 -730
  137. package/dist/src/{configured-declarations.js → roots/configured-declarations.js} +22 -24
  138. package/dist/src/{entry-point-gaps.js → roots/entry-point-gaps.js} +6 -15
  139. package/dist/src/roots/manifest.js +216 -0
  140. package/dist/src/roots/published-reach.js +412 -0
  141. package/dist/src/roots/root-set.js +487 -0
  142. package/dist/src/roots/unseen-loads.js +236 -0
  143. package/dist/src/run.js +66 -77
  144. package/dist/src/schema.js +320 -343
  145. package/dist/src/scope.js +38 -115
  146. package/dist/src/session.js +37 -29
  147. package/dist/src/source-files.js +6 -10
  148. package/dist/src/stores.js +4 -2
  149. package/dist/src/suppress-file.js +25 -28
  150. package/dist/src/suppress-inline.js +36 -83
  151. package/dist/src/suppress.js +50 -71
  152. package/dist/src/symbol-keys.js +92 -88
  153. package/dist/src/tests/file-class.js +76 -0
  154. package/dist/src/{outside-tests.js → tests/outside.js} +7 -7
  155. package/dist/src/{test-support.js → tests/support.js} +5 -12
  156. package/dist/src/text/compare.js +26 -0
  157. package/dist/src/text/glob.js +194 -0
  158. package/dist/src/text/named-files.js +298 -0
  159. package/dist/src/text/yaml.js +684 -0
  160. package/dist/src/type-errors.js +11 -232
  161. package/dist/src/type-parameter-reads.js +178 -139
  162. package/dist/src/unimplemented-callees.js +262 -242
  163. package/dist/src/unwrap.js +23 -0
  164. package/dist/src/usage.js +10 -0
  165. package/dist/src/vendor/unbash/ansi-c.js +132 -0
  166. package/dist/src/vendor/unbash/arithmetic-parts.js +37 -0
  167. package/dist/src/vendor/unbash/arithmetic.js +591 -0
  168. package/dist/src/vendor/unbash/assignment.js +131 -0
  169. package/dist/src/vendor/unbash/chars.js +48 -0
  170. package/dist/src/vendor/unbash/command.js +41 -0
  171. package/dist/src/vendor/unbash/expansion.js +80 -0
  172. package/dist/src/vendor/unbash/glob.js +268 -0
  173. package/dist/src/vendor/unbash/heredoc.js +27 -0
  174. package/dist/src/vendor/unbash/internal-types.js +1 -0
  175. package/dist/src/vendor/unbash/lexer.js +4274 -0
  176. package/dist/src/vendor/unbash/limits.js +3 -0
  177. package/dist/src/vendor/unbash/parser.js +1366 -0
  178. package/dist/src/vendor/unbash/parts.js +57 -0
  179. package/dist/src/vendor/unbash/substitution-context.js +8 -0
  180. package/dist/src/vendor/unbash/traversal.js +212 -0
  181. package/dist/src/vendor/unbash/types.js +1 -0
  182. package/dist/src/vendor/unbash/word-value.js +61 -0
  183. package/dist/src/vendor/unbash/word.js +40 -0
  184. package/dist/src/verbs/analyze.js +194 -127
  185. package/dist/src/verbs/describe.js +13 -18
  186. package/dist/src/verbs/explain.js +85 -139
  187. package/dist/src/verbs/print-config.js +2 -1
  188. package/dist/src/verbs/print-projects.js +6 -4
  189. package/dist/src/verbs/print-retained.js +30 -6
  190. package/dist/src/verbs/print-roots.js +4 -2
  191. package/dist/src/verbs/verb.js +1 -5
  192. package/dist/src/verbs/version.js +14 -3
  193. package/jsr.json +2 -1
  194. package/package.json +14 -8
  195. package/src/alias-chain.ts +40 -11
  196. package/src/amd.ts +130 -0
  197. package/src/analysis.ts +426 -733
  198. package/src/augmentations.ts +93 -4
  199. package/src/automatic-types.ts +12 -30
  200. package/src/bindings.ts +460 -0
  201. package/src/commands/held.ts +632 -0
  202. package/src/commands/read.ts +242 -0
  203. package/src/commands/shell.ts +228 -0
  204. package/src/commands/tools.ts +2382 -0
  205. package/src/component-files.ts +4 -2
  206. package/src/component-layer.ts +4 -2
  207. package/src/config.ts +31 -302
  208. package/src/conformance-record.ts +2 -2
  209. package/src/consumers.ts +16 -66
  210. package/src/contextual-uses.ts +66 -34
  211. package/src/contract/config.generated.ts +821 -0
  212. package/src/contract/contract.generated.ts +1453 -0
  213. package/src/contract/report.generated.ts +1241 -0
  214. package/src/dependencies.ts +223 -128
  215. package/src/destructuring.ts +1 -31
  216. package/src/edges.ts +41 -140
  217. package/src/element-access.ts +190 -187
  218. package/src/entries/build-scripts.ts +292 -0
  219. package/src/{configuration-files.ts → entries/configuration-files.ts} +68 -278
  220. package/src/{convention-rows.ts → entries/convention-rows.ts} +227 -31
  221. package/src/{conventions.ts → entries/conventions.ts} +367 -583
  222. package/src/{html-entries.ts → entries/html-entries.ts} +22 -48
  223. package/src/{mdx-entries.ts → entries/mdx-entries.ts} +7 -30
  224. package/src/entries/run-directories.ts +108 -0
  225. package/src/entries/sources.ts +266 -0
  226. package/src/entries/static-module.ts +858 -0
  227. package/src/entries/test-runners.ts +835 -0
  228. package/src/entries/workflow-steps.ts +432 -0
  229. package/src/exemptions/argument-places.ts +198 -0
  230. package/src/exemptions/calls.ts +483 -0
  231. package/src/exemptions/classes.ts +49 -0
  232. package/src/exemptions/decorator.ts +56 -0
  233. package/src/exemptions/detectors.ts +75 -0
  234. package/src/{enum-group.ts → exemptions/enum-group.ts} +10 -19
  235. package/src/{erased-stores.ts → exemptions/erased-stores.ts} +7 -14
  236. package/src/{framework-lifecycle.ts → exemptions/framework-lifecycle.ts} +85 -66
  237. package/src/exemptions/generated-file.ts +318 -0
  238. package/src/{injection-container.ts → exemptions/injection-container.ts} +29 -34
  239. package/src/exemptions/installed-globals.ts +255 -0
  240. package/src/{interface-satisfaction.ts → exemptions/interface-satisfaction.ts} +69 -160
  241. package/src/exemptions/lifecycle.ts +286 -0
  242. package/src/{reflective-lookup.ts → exemptions/reflective-lookup.ts} +5 -5
  243. package/src/exemptions/serialization-contract.ts +1729 -0
  244. package/src/exemptions/sites.ts +293 -0
  245. package/src/{template-field.ts → exemptions/template-field.ts} +22 -32
  246. package/src/{value-reach.ts → exemptions/value-reach.ts} +16 -8
  247. package/src/exposure.ts +492 -0
  248. package/src/extensions.ts +45 -0
  249. package/src/facts.ts +46 -0
  250. package/src/failure.ts +63 -0
  251. package/src/file-facts.ts +15 -25
  252. package/src/finding.ts +10 -10
  253. package/src/findings/boundary.ts +11 -0
  254. package/src/findings/completion.ts +133 -64
  255. package/src/findings/dependencies-and-module-machinery.ts +4 -7
  256. package/src/findings/emitter.ts +9 -10
  257. package/src/findings/emitters.ts +38 -52
  258. package/src/{implementations.ts → findings/implementations.ts} +4 -4
  259. package/src/{in-operands.ts → findings/in-operands.ts} +4 -3
  260. package/src/findings/interfaces.ts +7 -9
  261. package/src/findings/intra-function.ts +16 -14
  262. package/src/findings/non-code-artifacts.ts +24 -15
  263. package/src/findings/reads-and-writes.ts +118 -41
  264. package/src/findings/self-check.ts +51 -38
  265. package/src/findings/unused-declarations.ts +31 -49
  266. package/src/findings/visibility-narrowing.ts +36 -40
  267. package/src/findings-pass.ts +15 -31
  268. package/src/fs/document.ts +70 -0
  269. package/src/fs/manifest.ts +96 -0
  270. package/src/fs/tree.ts +110 -0
  271. package/src/git-ignore.ts +50 -26
  272. package/src/host.ts +12 -5
  273. package/src/import-bindings.ts +98 -29
  274. package/src/index/sites.ts +781 -0
  275. package/src/index/values.ts +170 -0
  276. package/src/index.ts +2 -2
  277. package/src/indexed-access.ts +570 -527
  278. package/src/intra-function-parts.ts +73 -44
  279. package/src/inventory/commonjs.ts +696 -0
  280. package/src/inventory/enumerate.ts +203 -0
  281. package/src/inventory/syntax.ts +311 -0
  282. package/src/inventory.ts +442 -895
  283. package/src/javascript-file.ts +54 -0
  284. package/src/json-document.ts +241 -76
  285. package/src/keyof-comparisons.ts +133 -122
  286. package/src/kinds.ts +5 -413
  287. package/src/{components.ts → liveness/components.ts} +4 -6
  288. package/src/{graph.ts → liveness/graph.ts} +100 -35
  289. package/src/liveness/matrix.ts +162 -0
  290. package/src/liveness/sweep.ts +855 -0
  291. package/src/load/classify.ts +433 -0
  292. package/src/load/diagnostics.ts +154 -0
  293. package/src/load/discover.ts +471 -0
  294. package/src/{emit-map.ts → load/emit-map.ts} +1 -1
  295. package/src/load/expected-module.ts +194 -0
  296. package/src/load/load.ts +73 -0
  297. package/src/load/module-lookup.ts +50 -0
  298. package/src/load/package-scope.ts +74 -0
  299. package/src/load/plan.ts +513 -0
  300. package/src/load/specifiers.ts +171 -0
  301. package/src/load/synthesize.ts +230 -0
  302. package/src/load/test-globals.ts +251 -0
  303. package/src/load/test-joins.ts +98 -0
  304. package/src/{workspace-manifests.ts → load/workspace-manifests.ts} +5 -5
  305. package/src/{workspace-programs.ts → load/workspace-programs.ts} +128 -85
  306. package/src/{workspace-resolution.ts → load/workspace-resolution.ts} +41 -77
  307. package/src/{workspace-run.ts → load/workspace-run.ts} +18 -16
  308. package/src/{workspace.ts → load/workspace.ts} +90 -134
  309. package/src/module-declarations.ts +74 -98
  310. package/src/overrides.ts +162 -134
  311. package/src/partial.ts +3 -2
  312. package/src/paths.ts +92 -16
  313. package/src/platform-calls.ts +119 -0
  314. package/src/platform-symbols.ts +189 -0
  315. package/src/position.ts +44 -1
  316. package/src/print.ts +12 -92
  317. package/src/product.ts +18 -0
  318. package/src/query.ts +201 -10
  319. package/src/ref.ts +12 -20
  320. package/src/references/read-rule.ts +60 -0
  321. package/src/references/read-rules.ts +55 -0
  322. package/src/references/sink.ts +314 -0
  323. package/src/references/sources.ts +632 -0
  324. package/src/references.ts +187 -1450
  325. package/src/report-schema.ts +68 -0
  326. package/src/report.ts +103 -226
  327. package/src/reporters/annotations.ts +22 -11
  328. package/src/reporters/json.ts +1 -1
  329. package/src/reporters/reporter.ts +2 -4
  330. package/src/reporters/reporters.ts +1 -1
  331. package/src/reporters/sarif.ts +29 -16
  332. package/src/reporters/template.ts +4 -20
  333. package/src/reporters/text.ts +3 -3
  334. package/src/resolve.ts +284 -1115
  335. package/src/{configured-declarations.ts → roots/configured-declarations.ts} +26 -29
  336. package/src/{entry-point-gaps.ts → roots/entry-point-gaps.ts} +7 -16
  337. package/src/roots/manifest.ts +303 -0
  338. package/src/roots/published-reach.ts +486 -0
  339. package/src/{roots.ts → roots/root-set.ts} +286 -469
  340. package/src/roots/unseen-loads.ts +345 -0
  341. package/src/run.ts +75 -91
  342. package/src/schema.ts +391 -388
  343. package/src/scope.ts +46 -138
  344. package/src/session.ts +87 -55
  345. package/src/source-files.ts +6 -11
  346. package/src/stores.ts +15 -3
  347. package/src/suppress-file.ts +24 -33
  348. package/src/suppress-inline.ts +55 -91
  349. package/src/suppress.ts +78 -79
  350. package/src/symbol-keys.ts +104 -107
  351. package/src/tests/file-class.ts +135 -0
  352. package/src/{outside-tests.ts → tests/outside.ts} +16 -10
  353. package/src/{test-support.ts → tests/support.ts} +15 -21
  354. package/src/text/compare.ts +27 -0
  355. package/src/text/glob.ts +210 -0
  356. package/src/text/named-files.ts +388 -0
  357. package/src/text/yaml.ts +747 -0
  358. package/src/type-errors.ts +18 -288
  359. package/src/type-parameter-reads.ts +187 -158
  360. package/src/unimplemented-callees.ts +297 -280
  361. package/src/unwrap.ts +34 -0
  362. package/src/usage.ts +10 -0
  363. package/src/vendor/unbash/LICENSE +15 -0
  364. package/src/vendor/unbash/VENDORED.md +16 -0
  365. package/src/vendor/unbash/ansi-c.ts +132 -0
  366. package/src/vendor/unbash/arithmetic-parts.ts +53 -0
  367. package/src/vendor/unbash/arithmetic.ts +641 -0
  368. package/src/vendor/unbash/assignment.ts +163 -0
  369. package/src/vendor/unbash/chars.ts +48 -0
  370. package/src/vendor/unbash/command.ts +47 -0
  371. package/src/vendor/unbash/expansion.ts +144 -0
  372. package/src/vendor/unbash/glob.ts +284 -0
  373. package/src/vendor/unbash/heredoc.ts +34 -0
  374. package/src/vendor/unbash/internal-types.ts +94 -0
  375. package/src/vendor/unbash/lexer.ts +4352 -0
  376. package/src/vendor/unbash/limits.ts +3 -0
  377. package/src/vendor/unbash/parser.ts +1612 -0
  378. package/src/vendor/unbash/parts.ts +96 -0
  379. package/src/vendor/unbash/substitution-context.ts +20 -0
  380. package/src/vendor/unbash/traversal.ts +182 -0
  381. package/src/vendor/unbash/types.ts +660 -0
  382. package/src/vendor/unbash/word-value.ts +64 -0
  383. package/src/vendor/unbash/word.ts +50 -0
  384. package/src/verbs/analyze.ts +255 -164
  385. package/src/verbs/describe.ts +19 -17
  386. package/src/verbs/explain.ts +93 -169
  387. package/src/verbs/print-config.ts +2 -1
  388. package/src/verbs/print-projects.ts +6 -4
  389. package/src/verbs/print-retained.ts +36 -6
  390. package/src/verbs/print-roots.ts +4 -2
  391. package/src/verbs/verb.ts +2 -8
  392. package/src/verbs/version.ts +15 -3
  393. package/dist/src/base-url.js +0 -18
  394. package/dist/src/calls.js +0 -155
  395. package/dist/src/conventions.js +0 -937
  396. package/dist/src/discover.js +0 -468
  397. package/dist/src/entry-points.js +0 -529
  398. package/dist/src/exempt-classes.js +0 -75
  399. package/dist/src/exempt.js +0 -209
  400. package/dist/src/generated-file.js +0 -95
  401. package/dist/src/glob.js +0 -65
  402. package/dist/src/manifest.js +0 -165
  403. package/dist/src/matrix.js +0 -246
  404. package/dist/src/pnpm-workspace.js +0 -120
  405. package/dist/src/roots.js +0 -672
  406. package/dist/src/serialization-contract.js +0 -611
  407. package/dist/src/setup-failure.js +0 -23
  408. package/dist/src/sweep.js +0 -224
  409. package/dist/src/test-joins.js +0 -101
  410. package/dist/src/value-flow.js +0 -74
  411. package/dist/src/version.js +0 -7
  412. package/dist/src/workflow-steps.js +0 -185
  413. package/src/base-url.ts +0 -24
  414. package/src/calls.ts +0 -225
  415. package/src/decorator.ts +0 -78
  416. package/src/discover.ts +0 -653
  417. package/src/entry-points.ts +0 -687
  418. package/src/exempt-classes.ts +0 -123
  419. package/src/exempt.ts +0 -323
  420. package/src/generated-file.ts +0 -111
  421. package/src/glob.ts +0 -67
  422. package/src/manifest.ts +0 -234
  423. package/src/matrix.ts +0 -423
  424. package/src/pnpm-workspace.ts +0 -135
  425. package/src/serialization-contract.ts +0 -849
  426. package/src/setup-failure.ts +0 -39
  427. package/src/sweep.ts +0 -347
  428. package/src/test-joins.ts +0 -120
  429. package/src/value-flow.ts +0 -104
  430. package/src/version.ts +0 -7
  431. package/src/workflow-steps.ts +0 -216
@@ -4,6 +4,7 @@
4
4
  * call sites that use or discard it, each statement control flow cannot reach, each
5
5
  * write to a local that no read reaches, and each case an earlier case covers.
6
6
  */
7
+ import { CODE } from "./contract/contract.generated.js";
7
8
  import { isArrowFunction, isAwaitExpression, isBigIntLiteral, isBinaryExpression, isBlock, isBreakStatement, isBindingElement, isCallExpression, isCaseClause, isCatchClause, isClassDeclaration, isClassExpression, isConstructorDeclaration, isContinueStatement, isDecorator, isDefaultClause, isEmptyStatement, isExportAssignment, isExportSpecifier, isExpressionStatement, isFunctionDeclaration, isFunctionExpression, isForInStatement, isForOfStatement, isFunctionLikeDeclaration, isHeritageClause, isIdentifier, isIfStatement, isImportClause, isImportSpecifier, isInterfaceDeclaration, isMethodDeclaration, isModuleDeclaration, isNamespaceImport, isNewExpression, isNoSubstitutionTemplateLiteral, isNumericLiteral, isObjectBindingPattern, isObjectLiteralExpression, isParenthesizedExpression, isPrefixUnaryExpression, isPropertyAssignment, isPropertyAccessExpression, isQualifiedName, isReturnStatement, isShorthandPropertyAssignment, isSourceFile, isStringLiteral, isSwitchStatement, isThrowStatement, isTypeAliasDeclaration, isTypeReferenceNode, isVariableDeclarationList, isVariableStatement, isVoidExpression, NodeFlags, SyntaxKind, } from "@typescript/native/ast";
8
9
  import { SignatureKind } from "@typescript/native/sync";
9
10
  import { exportsLocally, implicitReads, importBindings, } from "./import-bindings.js";
@@ -13,12 +14,7 @@ import { importRef } from "./ref.js";
13
14
  import { isAnswered, UNANSWERED } from "./query.js";
14
15
  import { signatureOf } from "./signatures.js";
15
16
  import { spellsNoBinding } from "./spelled-names.js";
16
- /** The codes of the parts this module reads. */
17
- export const UNUSED_PARAMETER = "DS1801";
18
- export const UNUSED_RESULT = "DS1803";
19
- const UNREACHABLE_STATEMENT = "DS1805";
20
- const DEAD_STORE = "DS1807";
21
- const UNREACHABLE_CASE = "DS1809";
17
+ import { parenthesesRemoved } from "./unwrap.js";
22
18
  /** The result types that carry no value, as the checker spells them. */
23
19
  const NO_VALUE = new Set([
24
20
  "void",
@@ -34,17 +30,13 @@ function spanOf(file, root, node) {
34
30
  const endLine = file.getLineAndCharacterOfPosition(node.end).line + 1;
35
31
  return { ...start, endLine };
36
32
  }
37
- /** The parenthesized expression's content, through every pair of parentheses. */
38
- function unwrapped(node) {
39
- return isParenthesizedExpression(node) ? unwrapped(node.expression) : node;
40
- }
41
33
  /** The node the parentheses around one expression sit in. */
42
34
  function outerParent(node) {
43
35
  return isParenthesizedExpression(node.parent) ? outerParent(node.parent) : node.parent;
44
36
  }
45
37
  /** The name a call is made through: the identifier, or the member a property access names. */
46
38
  function calleeName(call) {
47
- const callee = unwrapped(call.expression);
39
+ const callee = parenthesesRemoved(call.expression);
48
40
  if (isIdentifier(callee)) {
49
41
  return callee;
50
42
  }
@@ -99,7 +91,7 @@ function unreachableExempt(statement) {
99
91
  }
100
92
  /** The value a case expression is a literal of, as a key two equal literals share, or none. */
101
93
  function caseKey(expression) {
102
- const node = unwrapped(expression);
94
+ const node = parenthesesRemoved(expression);
103
95
  if (isStringLiteral(node) || isNoSubstitutionTemplateLiteral(node)) {
104
96
  return `s:${node.text}`;
105
97
  }
@@ -210,7 +202,7 @@ function extendedNames(files) {
210
202
  named = isQualifiedName(type.typeName) ? type.typeName.right : type.typeName;
211
203
  }
212
204
  else {
213
- const expression = unwrapped(type.expression);
205
+ const expression = parenthesesRemoved(type.expression);
214
206
  named = isPropertyAccessExpression(expression) ? expression.name : expression;
215
207
  }
216
208
  if (isIdentifier(named)) {
@@ -254,7 +246,7 @@ function decoratorFixes(constructor) {
254
246
  }
255
247
  /** The name an expression spells a class by: an identifier, or the member a property access names. */
256
248
  function spelledName(expression) {
257
- const node = unwrapped(expression);
249
+ const node = parenthesesRemoved(expression);
258
250
  if (isIdentifier(node)) {
259
251
  return node;
260
252
  }
@@ -447,8 +439,8 @@ export function projectParts(project, held, references, targetRoot) {
447
439
  if ((isImportClause(node) || isNamespaceImport(node)) && node.name !== undefined) {
448
440
  specifiers.add(position(node.name));
449
441
  }
450
- if (isExportAssignment(node) && isIdentifier(unwrapped(node.expression))) {
451
- specifiers.add(position(unwrapped(node.expression)));
442
+ if (isExportAssignment(node) && isIdentifier(parenthesesRemoved(node.expression))) {
443
+ specifiers.add(position(parenthesesRemoved(node.expression)));
452
444
  }
453
445
  if (isSwitchStatement(node)) {
454
446
  const holder = holderOf(node);
@@ -572,7 +564,7 @@ export function projectParts(project, held, references, targetRoot) {
572
564
  }
573
565
  walk.catches.forEach(({ name, holder }, at) => {
574
566
  parts.push({
575
- code: DEAD_STORE,
567
+ code: CODE.deadStore,
576
568
  declaration: holder,
577
569
  kind: "store",
578
570
  name: name.text,
@@ -584,7 +576,7 @@ export function projectParts(project, held, references, targetRoot) {
584
576
  for (const { names, uses, holder } of loopVariables) {
585
577
  for (const name of names) {
586
578
  parts.push({
587
- code: DEAD_STORE,
579
+ code: CODE.deadStore,
588
580
  declaration: holder,
589
581
  kind: "store",
590
582
  name: name.text,
@@ -602,7 +594,7 @@ export function projectParts(project, held, references, targetRoot) {
602
594
  });
603
595
  for (const { statement, holder } of walk.unreachable) {
604
596
  parts.push({
605
- code: UNREACHABLE_STATEMENT,
597
+ code: CODE.unreachableStatement,
606
598
  declaration: holder,
607
599
  kind: "statement",
608
600
  name: "statement",
@@ -613,7 +605,7 @@ export function projectParts(project, held, references, targetRoot) {
613
605
  }
614
606
  for (const { clause, text, holder } of walk.cases) {
615
607
  parts.push({
616
- code: UNREACHABLE_CASE,
608
+ code: CODE.unreachableCase,
617
609
  declaration: holder,
618
610
  kind: "case",
619
611
  name: text,
@@ -772,10 +764,9 @@ function calleeSteers(project, signature, at) {
772
764
  }
773
765
  /**
774
766
  * The parts with each name of `contextual` judged where the compiler gives its function a
775
- * contextual type: the code handing the argument may act on what an object pattern reads,
776
- * so each such name is read, and an annotated parameter is marked with whether the call's
777
- * inference may read its annotation. A question the checker leaves unanswered keeps the
778
- * name read.
767
+ * contextual type: a name an object pattern binds is marked as one, and an annotated
768
+ * parameter with whether the call's inference may read its annotation. A question the
769
+ * checker leaves unanswered keeps the name read.
779
770
  */
780
771
  function withContextualRead(project, parts, contextual) {
781
772
  if (contextual.length === 0) {
@@ -791,15 +782,17 @@ function withContextualRead(project, parts, contextual) {
791
782
  continue;
792
783
  }
793
784
  const place = one.part.parameter;
794
- judged.set(one.part, one.pattern || answer === UNANSWERED || place === undefined
785
+ judged.set(one.part, answer === UNANSWERED || place === undefined
795
786
  ? { ...one.part, used: true }
796
- : {
797
- ...one.part,
798
- parameter: {
799
- ...place,
800
- annotated: calleeSteers(project, one.signature, one.at) ? "steers" : "free",
801
- },
802
- });
787
+ : one.pattern
788
+ ? { ...one.part, parameter: { ...place, contextualPattern: true } }
789
+ : {
790
+ ...one.part,
791
+ parameter: {
792
+ ...place,
793
+ annotated: calleeSteers(project, one.signature, one.at) ? "steers" : "free",
794
+ },
795
+ });
803
796
  }
804
797
  return parts.map((part) => judged.get(part) ?? part);
805
798
  }
@@ -825,7 +818,7 @@ function parameterParts(file, root, declaration, signature, reader, ids, place)
825
818
  return;
826
819
  }
827
820
  const part = {
828
- code: UNUSED_PARAMETER,
821
+ code: CODE.unusedParameter,
829
822
  declaration,
830
823
  kind: "parameter",
831
824
  name: name.text,
@@ -884,15 +877,28 @@ function functionOf(block) {
884
877
  }
885
878
  }
886
879
  /**
887
- * The locals one block declares with `let`, `const` or `var`, each with the names of the
888
- * block that spell it. A `var` of a nested block is one where no nested function of its
889
- * function names it, since the function scope holds it past the block's end.
880
+ * The locals one block declares with `let`, `const`, `var` or a function declaration
881
+ * inside a function, each with the names of the block that spell it. A `var` of a nested
882
+ * block is one where no nested function of its function names it, since the function scope
883
+ * holds it past the block's end.
890
884
  */
891
885
  function localsOf(block) {
892
886
  const declared = [];
893
887
  const scope = functionOf(block);
894
888
  const outlives = scope?.body !== block;
895
889
  block.statements.forEach((statement, at) => {
890
+ if (isFunctionDeclaration(statement)) {
891
+ if (scope !== undefined && statement.name !== undefined && statement.body !== undefined) {
892
+ declared.push({
893
+ name: statement.name,
894
+ statement: at,
895
+ initialized: true,
896
+ outlives: false,
897
+ hoisted: true,
898
+ });
899
+ }
900
+ return;
901
+ }
896
902
  if (!isVariableStatement(statement)) {
897
903
  return;
898
904
  }
@@ -902,6 +908,11 @@ function localsOf(block) {
902
908
  return;
903
909
  }
904
910
  for (const declaration of list.declarations) {
911
+ // A write to a local typed `never` is the compiler's exhaustiveness check, which
912
+ // fails to compile once a case goes unhandled.
913
+ if (declaration.type?.kind === SyntaxKind.NeverKeyword) {
914
+ continue;
915
+ }
905
916
  for (const name of boundNames(declaration.name)) {
906
917
  if (!blockScoped &&
907
918
  outlives &&
@@ -913,6 +924,7 @@ function localsOf(block) {
913
924
  statement: at,
914
925
  initialized: declaration.initializer !== undefined,
915
926
  outlives: !blockScoped && outlives,
927
+ hoisted: false,
916
928
  });
917
929
  }
918
930
  }
@@ -931,7 +943,7 @@ function isPlainWrite(use) {
931
943
  const parent = outerParent(use);
932
944
  return (isBinaryExpression(parent) &&
933
945
  parent.operatorToken.kind === SyntaxKind.EqualsToken &&
934
- unwrapped(parent.left) === use);
946
+ parenthesesRemoved(parent.left) === use);
935
947
  }
936
948
  /**
937
949
  * The writes to the locals of one block that no read reaches. A write is a declaration's
@@ -944,7 +956,7 @@ function isPlainWrite(use) {
944
956
  function deadStores(file, root, block, holder, locals, ids) {
945
957
  const found = [];
946
958
  const deadAt = (local, target) => ({
947
- code: DEAD_STORE,
959
+ code: CODE.deadStore,
948
960
  declaration: holder,
949
961
  kind: "store",
950
962
  name: local.name.text,
@@ -953,12 +965,20 @@ function deadStores(file, root, block, holder, locals, ids) {
953
965
  used: false,
954
966
  });
955
967
  for (const local of locals) {
956
- const uses = local.uses.filter((use) => readsBinding(use, local.name, ids));
968
+ const own = local.hoisted ? block.statements[local.statement] : undefined;
969
+ // A function's reads of itself keep it no more than its absence would.
970
+ const uses = local.uses.filter((use) => readsBinding(use, local.name, ids) && (own === undefined || !within(use, own)));
957
971
  if (!local.outlives && uses.every(isPlainWrite)) {
958
- const targets = [...(local.initialized ? [local.name] : []), ...uses];
972
+ // A declaration with no initializer writes `undefined`, the one store left to name.
973
+ const writes = [...(local.initialized ? [local.name] : []), ...uses];
974
+ const targets = writes.length === 0 ? [local.name] : writes;
959
975
  found.push(...targets.map((target) => deadAt(local, target)));
960
976
  continue;
961
977
  }
978
+ // A read anywhere in the block reads a function declaration, which is written first.
979
+ if (local.hoisted) {
980
+ continue;
981
+ }
962
982
  if (uses.some((use) => inNestedFunction(use, block))) {
963
983
  continue;
964
984
  }
@@ -969,12 +989,12 @@ function deadStores(file, root, block, holder, locals, ids) {
969
989
  if (!isExpressionStatement(statement)) {
970
990
  return undefined;
971
991
  }
972
- const expression = unwrapped(statement.expression);
992
+ const expression = parenthesesRemoved(statement.expression);
973
993
  if (!isBinaryExpression(expression) ||
974
994
  expression.operatorToken.kind !== SyntaxKind.EqualsToken) {
975
995
  return undefined;
976
996
  }
977
- const target = unwrapped(expression.left);
997
+ const target = parenthesesRemoved(expression.left);
978
998
  return isIdentifier(target) && uses.includes(target)
979
999
  ? { target, value: expression.right }
980
1000
  : undefined;
@@ -1052,7 +1072,7 @@ function resultParts(project, root, sites, references, calls) {
1052
1072
  const valued = project.queries.nonNullable(result);
1053
1073
  const members = isAnswered(valued) ? project.queries.propertiesOf(valued) : UNANSWERED;
1054
1074
  found.push({
1055
- code: UNUSED_RESULT,
1075
+ code: CODE.unusedResult,
1056
1076
  declaration: id,
1057
1077
  kind: "result",
1058
1078
  name: "result",