@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
@@ -1,39 +0,0 @@
1
- /**
2
- * A setup failure: a file or a component the analysis needs and the project does not
3
- * provide. Each one names what is missing and the fix, on one line of the error stream
4
- * that starts with its class.
5
- */
6
-
7
- /** The classes of setup failure this analyzer meets. */
8
- type SetupClass =
9
- | "missing-module"
10
- | "missing-consumer"
11
- | "workspace-member-without-source"
12
- | "convention-not-literal";
13
-
14
- export interface SetupFailure {
15
- readonly setupClass: SetupClass;
16
- /** What is missing and the fix, on one line. */
17
- readonly detail: string;
18
- }
19
-
20
- /** The failure as the one line of the error stream that names it. */
21
- export function setupLine(failure: SetupFailure): string {
22
- return `setup failure: ${failure.setupClass}: ${failure.detail}`;
23
- }
24
-
25
- /**
26
- * A run that met a setup failure where none may be dropped: in a configuration the
27
- * configuration document or the scope declares, in a declared consumer, or in every
28
- * configuration discovery derived. It ends the run with the failure code and no finding
29
- * list.
30
- */
31
- export class SetupError extends Error {
32
- readonly failures: readonly SetupFailure[];
33
-
34
- constructor(failures: readonly SetupFailure[]) {
35
- super(failures.map(setupLine).join("\n"));
36
- this.name = "SetupError";
37
- this.failures = failures;
38
- }
39
- }
package/src/sweep.ts DELETED
@@ -1,347 +0,0 @@
1
- /**
2
- * Which declarations of one graph are dead, and under which liveness relation.
3
- * Reference counting holds a declaration live when any declaration references it,
4
- * whatever that one's own liveness, or when it is a root of a kind that names a caller;
5
- * reachability holds it live when a path of references reaches it from a root. So a
6
- * declaration only unreachable ones reference is live under the first, dead under the second.
7
- */
8
-
9
- import type { TSExemptionClass } from "./exempt-classes.ts";
10
- import { namesACaller, OUTSIDE, type Edge, type Graph } from "./graph.ts";
11
- import type { InventorySymbol } from "./inventory.ts";
12
- import type { Position } from "./position.ts";
13
-
14
- /** The liveness relation that decided a declaration, as a finding spells it. */
15
- export type Relation = "reference-counting" | "reachability";
16
-
17
- /** One declaration an exemption class holds back, and the evidence it was found by. */
18
- export interface Exemption {
19
- /** The identifier of the declaration held back. */
20
- readonly id: string;
21
- readonly class: TSExemptionClass;
22
- /** One clause naming the relation, then the thing it relates to: `passed to JSON.stringify`. */
23
- readonly detail: string;
24
- /** Where the evidence is written. */
25
- readonly site: Position;
26
- /**
27
- * The component file, below the target root, whose markup holds the evidence. The
28
- * record holds only while that file is live.
29
- */
30
- readonly whileLive?: string;
31
- /**
32
- * The interface methods the retained member implements, and whether its body is empty.
33
- * The record holds only while one of them is called through its interface.
34
- */
35
- readonly implementing?: Implementing;
36
- }
37
-
38
- /** The interface methods one retained class member implements, and whether its body is empty. */
39
- export interface Implementing {
40
- /** The declarations of the interface's methods the member answers, by identifier. */
41
- readonly methods: readonly string[];
42
- readonly empty: boolean;
43
- }
44
-
45
- /**
46
- * The run's reference mode, decided once by the composition and read by every stage
47
- * that counts references.
48
- */
49
- export interface Mode {
50
- /**
51
- * Counts no reference a test file made, under either relation. Every reference a root
52
- * in a test file makes is such a reference, so nothing only a test reaches is live.
53
- */
54
- readonly production: boolean;
55
- }
56
-
57
- /** What one sweep runs over besides the graph. */
58
- export interface SweepInput {
59
- /**
60
- * The declarations a matched suppression names. A mark holds its declaration live
61
- * under both relations and seeds reachability through every reference it makes, so
62
- * nothing only a marked declaration references is dead.
63
- */
64
- readonly marked: readonly string[];
65
- /**
66
- * The exemptions the run computed. An exempt declaration is never a candidate, and it
67
- * seeds reachability as a mark does, so nothing it references is dead; it is live
68
- * under reference counting only where something references it. Absent, the sweep
69
- * holds nothing back.
70
- */
71
- readonly exempt?: readonly Exemption[];
72
- /**
73
- * The declarations a question the checker did not answer could have kept live. Each
74
- * is held as an exempt declaration is. Absent, the sweep holds nothing back for one.
75
- */
76
- readonly unanswered?: readonly string[];
77
- readonly mode: Mode;
78
- }
79
-
80
- /** One dead declaration, the relation that found it, and the counts a kind reads. */
81
- export interface Candidate {
82
- readonly id: string;
83
- /** The references a production file made to the declaration, whatever the mode counts. */
84
- readonly productionRefs: number;
85
- /** The references a test file made to it. */
86
- readonly testRefs: number;
87
- /**
88
- * Reference counting where the mode counts no reference to the declaration, and
89
- * reachability otherwise, so a declaration dead under both carries the stronger claim.
90
- */
91
- readonly relation: Relation;
92
- /**
93
- * Whether the test-of-dead-code rule admitted the declaration: a test declaration whose
94
- * set of referenced production declarations is non-empty and wholly dead.
95
- */
96
- readonly testOfDeadCode: boolean;
97
- }
98
-
99
- /** One graph's answer: what each relation holds live, and what is dead. */
100
- export interface Liveness {
101
- /**
102
- * Per declaration, the relations that hold it live, reference counting first. A
103
- * declaration neither holds live has no entry.
104
- */
105
- readonly liveUnder: ReadonlyMap<string, readonly Relation[]>;
106
- /** The dead declarations, in the order the inventory holds them. */
107
- readonly candidates: readonly Candidate[];
108
- }
109
-
110
- /**
111
- * Answers which declarations of one graph are dead under the input's mode.
112
- *
113
- * The order is the order the answers depend on: the callers and the marks are live
114
- * before either relation runs, the candidate set is every judged declaration at least
115
- * one relation does not hold live and no exemption holds back, and the tests of dead
116
- * code join it.
117
- */
118
- export function sweep(graph: Graph, input: SweepInput): Liveness {
119
- const marked = flagged(graph, input.marked);
120
- const exempt = flagged(graph, [
121
- ...(input.exempt ?? []).map((record) => record.id),
122
- ...(input.unanswered ?? []),
123
- ]);
124
- const held = marked.map((mark, at) => mark || exempt[at] === true);
125
- // Every root, every mark and every exemption seeds reachability. A root of a kind that
126
- // names a caller, and a mark, are live under reference counting as well; a root that
127
- // only supposes a caller is not, and neither is an exemption.
128
- const called = graph.symbols.map(() => false);
129
- for (const root of graph.rooted) {
130
- if (namesACaller(root.kind)) {
131
- called[root.at] = true;
132
- }
133
- }
134
-
135
- const counted = (at: number): number => {
136
- const made = graph.made[at];
137
- if (made === undefined) {
138
- return 0;
139
- }
140
- return input.mode.production ? made.production : made.production + made.test;
141
- };
142
- const reached = reachable(graph, held, input.mode);
143
- const liveUnder = graph.symbols.map((_symbol, at): readonly Relation[] => {
144
- const relations: Relation[] = [];
145
- if (marked[at] === true || called[at] === true || counted(at) > 0) {
146
- relations.push("reference-counting");
147
- }
148
- if (reached[at] === true) {
149
- relations.push("reachability");
150
- }
151
- return relations;
152
- });
153
-
154
- const dead = graph.symbols.map(
155
- (_symbol, at) =>
156
- graph.subject[at] === true && exempt[at] !== true && (liveUnder[at]?.length ?? 0) < 2,
157
- );
158
- const testOfDeadCode = admitTestsOfDeadCode(graph, dead, held);
159
-
160
- const candidates: Candidate[] = [];
161
- const live = new Map<string, readonly Relation[]>();
162
- graph.symbols.forEach((symbol, at) => {
163
- const relations = liveUnder[at] ?? [];
164
- if (relations.length > 0) {
165
- live.set(symbol.id, relations);
166
- }
167
- if (dead[at] !== true) {
168
- return;
169
- }
170
- candidates.push({
171
- id: symbol.id,
172
- productionRefs: graph.made[at]?.production ?? 0,
173
- testRefs: graph.made[at]?.test ?? 0,
174
- relation: counted(at) === 0 ? "reference-counting" : "reachability",
175
- testOfDeadCode: testOfDeadCode[at] === true,
176
- });
177
- });
178
-
179
- return { liveUnder: live, candidates };
180
- }
181
-
182
- /**
183
- * The directory a test runner reads a manual mock from, whose exports it puts in place of
184
- * the module's: https://jestjs.io/docs/manual-mocks
185
- */
186
- const MANUAL_MOCKS = "__mocks__";
187
-
188
- /** Whether a test runner calls or reads one export of a test file: a function, or any export of a manual mock. */
189
- export function runnerCalls(symbol: InventorySymbol): boolean {
190
- return symbol.kind === "function" || symbol.position.path.split("/").includes(MANUAL_MOCKS);
191
- }
192
-
193
- /**
194
- * Per declaration of the graph, whether the run that counts test references reaches it.
195
- * That run's roots are the graph's own and, of each test file, its top level and every
196
- * function it exports, which a test runner may call, and every export of a manual mock,
197
- * which the runner reads; any other export of a test file, and test-support code, which
198
- * runs where a test imports it, are judged as any file's are.
199
- * `held` seeds it as a mark or an exemption seeds a sweep.
200
- */
201
- export function reachedWithTheTests(graph: Graph, held: readonly string[]): readonly boolean[] {
202
- const tests = graph.symbols.flatMap((symbol, at) => {
203
- const exported = symbol.exported && graph.symbols[graph.parent[at] ?? OUTSIDE]?.kind === "file";
204
- const called = exported && runnerCalls(symbol);
205
- return graph.test[at] === true &&
206
- graph.support[at] !== true &&
207
- (symbol.kind === "file" || called)
208
- ? [{ at, kind: "test-runner" as const }]
209
- : [];
210
- });
211
- return reachable({ ...graph, rooted: [...graph.rooted, ...tests] }, flagged(graph, held), {
212
- production: false,
213
- });
214
- }
215
-
216
- /**
217
- * The references a loaded consumer makes that the mode counts. A production mode counts
218
- * none a consumer's test file made, as it counts none of the target's.
219
- */
220
- function callsOf(graph: Graph, mode: Mode): readonly Edge[] {
221
- return graph.consumed.filter((edge) => !mode.production || !edge.test);
222
- }
223
-
224
- /** Per declaration of the graph, whether one of the identifiers names it. */
225
- function flagged(graph: Graph, ids: readonly string[]): boolean[] {
226
- const flags = graph.symbols.map(() => false);
227
- for (const id of ids) {
228
- const at = graph.at(id);
229
- if (at !== OUTSIDE) {
230
- flags[at] = true;
231
- }
232
- }
233
- return flags;
234
- }
235
-
236
- /**
237
- * Per declaration, whether a seed reaches it. The two seeds reach through different
238
- * reference sets: a held declaration, marked or exempt, is live by a mechanism the
239
- * analysis cannot see, so no mode withholds a reference it makes, a test declaration's
240
- * included, while a root reaches through the references the mode counts. The held seed
241
- * runs first, so what it reaches is expanded under the wider rule.
242
- */
243
- function reachable(graph: Graph, held: readonly boolean[], mode: Mode): readonly boolean[] {
244
- const reached = graph.symbols.map(() => false);
245
- const expanded = graph.symbols.map(() => false);
246
- const queue: number[] = [];
247
-
248
- // Reaching a file reaches its top level: the references written outside every
249
- // declaration it holds. A reference that reads a file reads the module's namespace,
250
- // which reaches what the module exports as well. An evaluation runs the top level
251
- // and reads no export, and a root does not expand either: a file a runtime runs
252
- // without reading its exports is a root by itself.
253
- const enter = (at: number, expands: boolean): void => {
254
- if (!reached[at]) {
255
- reached[at] = true;
256
- queue.push(at);
257
- }
258
- if (!expands || expanded[at] === true) {
259
- return;
260
- }
261
- expanded[at] = true;
262
- for (const exported of graph.exportsOf[at] ?? []) {
263
- enter(exported, false);
264
- }
265
- };
266
- const walk = (holding: boolean): void => {
267
- for (let at = queue.pop(); at !== undefined; at = queue.pop()) {
268
- for (const edge of graph.out[at] ?? []) {
269
- if (!holding && mode.production && edge.test) {
270
- continue;
271
- }
272
- enter(edge.to, !edge.evaluation);
273
- }
274
- }
275
- };
276
-
277
- held.forEach((hold, at) => {
278
- if (hold) {
279
- enter(at, false);
280
- }
281
- });
282
- walk(true);
283
- for (const root of graph.rooted) {
284
- enter(root.at, false);
285
- }
286
- // A consumer's reference reaches what it names as one of the target's own does.
287
- for (const edge of callsOf(graph, mode)) {
288
- enter(edge.to, !edge.evaluation);
289
- }
290
- walk(false);
291
- return reached;
292
- }
293
-
294
- /**
295
- * Admits every test declaration whose set of referenced production declarations is
296
- * non-empty and wholly dead, and returns which it admitted. An ambient declaration describes
297
- * code the target does not implement, so it is no production declaration here. The set is
298
- * read from every reference the test makes, which a production sweep does not count. A
299
- * test-support declaration a test referencing a live target also references is a live
300
- * target of every test referencing it. A marked or exempt test is never admitted.
301
- */
302
- function admitTestsOfDeadCode(
303
- graph: Graph,
304
- dead: boolean[],
305
- held: readonly boolean[],
306
- ): readonly boolean[] {
307
- const testCode = (at: number): boolean => graph.test[at] === true || graph.support[at] === true;
308
- const judged = graph.symbols.map((_symbol, at) => {
309
- let targets = 0;
310
- let live = 0;
311
- if (testCode(at) && graph.subject[at] === true && held[at] !== true) {
312
- for (const edge of graph.out[at] ?? []) {
313
- if (
314
- testCode(edge.to) ||
315
- graph.subject[edge.to] !== true ||
316
- graph.ambient[edge.to] === true
317
- ) {
318
- continue;
319
- }
320
- targets += 1;
321
- if (dead[edge.to] !== true) {
322
- live += 1;
323
- }
324
- }
325
- }
326
- return { targets, live };
327
- });
328
- const shared = new Set<number>();
329
- judged.forEach(({ live }, at) => {
330
- if (live > 0) {
331
- for (const edge of graph.out[at] ?? []) {
332
- if (graph.support[edge.to] === true) {
333
- shared.add(edge.to);
334
- }
335
- }
336
- }
337
- });
338
- const admitted = graph.symbols.map(() => false);
339
- judged.forEach(({ targets, live }, at) => {
340
- const sharing = (graph.out[at] ?? []).some((edge) => shared.has(edge.to) && edge.to !== at);
341
- if (targets > 0 && live === 0 && !sharing) {
342
- dead[at] = true;
343
- admitted[at] = true;
344
- }
345
- });
346
- return admitted;
347
- }
package/src/test-joins.ts DELETED
@@ -1,120 +0,0 @@
1
- /**
2
- * The test files a derived matrix holds although no configuration's file list names them.
3
- * The test runner compiles such a file with the options of the nearest compiler
4
- * configuration at or above it, so the file joins that configuration's program as a file
5
- * its list names, unless a `package.json` below that configuration's directory makes the
6
- * file another package's, which its own test runner compiles.
7
- */
8
-
9
- import { sourcePaths } from "./file-facts.ts";
10
- import type { Host } from "./host.ts";
11
- import { dirnamePath, joinPath, relativePath } from "./paths.ts";
12
- import type { Engine } from "./session.ts";
13
- import { writtenPath, type WorkspaceProgram } from "./workspace-programs.ts";
14
-
15
- const PREFERRED = "/tsconfig.json";
16
-
17
- /** The configurations of one directory in the order a file joins them: `tsconfig.json` first. */
18
- function byPreference(a: string, b: string): number {
19
- const first = a.endsWith(PREFERRED) ? 0 : 1;
20
- const second = b.endsWith(PREFERRED) ? 0 : 1;
21
- return first - second || (a < b ? -1 : a > b ? 1 : 0);
22
- }
23
-
24
- /**
25
- * Per configuration of `configFiles`, the absolute paths of the test files that join it:
26
- * each file below `root` a pattern of `patterns` names, that no configuration's file list
27
- * holds, joins the configuration nearest at or above its directory when no `package.json`
28
- * sits between them. A configuration the compiler cannot read lists nothing and is joined
29
- * by nothing.
30
- */
31
- export function joinedTestFiles(
32
- engine: Engine,
33
- host: Host,
34
- root: string,
35
- configFiles: readonly string[],
36
- patterns: readonly RegExp[],
37
- ): ReadonlyMap<string, readonly string[]> {
38
- const listed = new Set<string>();
39
- const byDir = new Map<string, string[]>();
40
- for (const configFile of configFiles) {
41
- let fileNames: readonly string[];
42
- try {
43
- fileNames = engine.parseConfigFile(configFile).fileNames;
44
- } catch {
45
- continue;
46
- }
47
- fileNames.forEach((name) => listed.add(name));
48
- const dir = dirnamePath(configFile);
49
- byDir.set(dir, [...(byDir.get(dir) ?? []), configFile].sort(byPreference));
50
- }
51
- const joins = new Map<string, string[]>();
52
- for (const path of sourcePaths(host, root)) {
53
- const file = joinPath(root, path);
54
- if (listed.has(file) || !patterns.some((pattern) => pattern.test(path))) {
55
- continue;
56
- }
57
- for (let dir = dirnamePath(file); ; dir = dirnamePath(dir)) {
58
- const [nearest] = byDir.get(dir) ?? [];
59
- if (nearest !== undefined) {
60
- joins.set(nearest, [...(joins.get(nearest) ?? []), file]);
61
- break;
62
- }
63
- if (
64
- host.kindOf(joinPath(dir, "package.json")) === "file" ||
65
- dir === root ||
66
- relativePath(root, dir) === undefined
67
- ) {
68
- break;
69
- }
70
- }
71
- }
72
- return joins;
73
- }
74
-
75
- /**
76
- * How the snapshot reads each configuration a test file joins: the program `programs`
77
- * describes with the files added to its root files, or a configuration only the snapshot
78
- * holds that extends the one `programs` writes, or the configuration itself, and lists
79
- * every file the configuration lists and the joined ones.
80
- */
81
- export function withJoinedTests(
82
- engine: Engine,
83
- host: Host,
84
- programs: ReadonlyMap<string, WorkspaceProgram>,
85
- joins: ReadonlyMap<string, readonly string[]>,
86
- ): ReadonlyMap<string, WorkspaceProgram> {
87
- const found = new Map(programs);
88
- for (const [configFile, files] of joins) {
89
- const program = programs.get(configFile);
90
- if (program?.kind === "program") {
91
- found.set(configFile, {
92
- kind: "program",
93
- params: {
94
- ...program.params,
95
- rootFiles: [...(program.params.rootFiles ?? []), ...files],
96
- },
97
- });
98
- continue;
99
- }
100
- let listed: readonly string[];
101
- try {
102
- listed =
103
- program?.kind === "configuration"
104
- ? engine.parseConfigJson(JSON.parse(program.text), program.file).fileNames
105
- : engine.parseConfigFile(configFile).fileNames;
106
- } catch {
107
- continue;
108
- }
109
- const value =
110
- program?.kind === "configuration"
111
- ? { ...(JSON.parse(program.text) as Record<string, unknown>), files: [...listed, ...files] }
112
- : { extends: configFile, files: [...listed, ...files] };
113
- found.set(configFile, {
114
- kind: "configuration",
115
- file: program?.kind === "configuration" ? program.file : writtenPath(host, configFile),
116
- text: `${JSON.stringify({ ...value, include: [] }, null, 2)}\n`,
117
- });
118
- }
119
- return found;
120
- }
package/src/value-flow.ts DELETED
@@ -1,104 +0,0 @@
1
- /**
2
- * The values a program hands to a position the checker types from its context: the
3
- * initializer of a declaration whose type is written, an assignment's right side, an
4
- * argument, a returned value, an arrow function's expression body, an array element, an
5
- * object property, and the operand of `as` or `satisfies`.
6
- */
7
-
8
- import {
9
- isArrayLiteralExpression,
10
- isArrowFunction,
11
- isAsExpression,
12
- isBinaryExpression,
13
- isCallExpression,
14
- isConditionalExpression,
15
- isIdentifier,
16
- isNewExpression,
17
- isParameterDeclaration,
18
- isParenthesizedExpression,
19
- isPropertyAssignment,
20
- isPropertyDeclaration,
21
- isReturnStatement,
22
- isSatisfiesExpression,
23
- isShorthandPropertyAssignment,
24
- isSpreadElement,
25
- isVariableDeclaration,
26
- SyntaxKind,
27
- type Expression,
28
- type Node,
29
- } from "@typescript/native/ast";
30
-
31
- /** The operators of an assignment whose right side is stored into the left side's type. */
32
- const STORES: ReadonlySet<SyntaxKind> = new Set([
33
- SyntaxKind.EqualsToken,
34
- SyntaxKind.QuestionQuestionEqualsToken,
35
- SyntaxKind.BarBarEqualsToken,
36
- SyntaxKind.AmpersandAmpersandEqualsToken,
37
- ]);
38
-
39
- /** Whether a declaration writes its type, so its initializer is read in that type's context. */
40
- function writesType(node: Node): boolean {
41
- return (node as { readonly type?: Node }).type !== undefined;
42
- }
43
-
44
- /**
45
- * The values one written expression hands on: the expression itself, or what it
46
- * evaluates to through parentheses, a conditional and the operators whose result is
47
- * one of their operands.
48
- */
49
- export function valuesOf(expression: Expression): readonly Expression[] {
50
- if (isParenthesizedExpression(expression)) {
51
- return valuesOf(expression.expression);
52
- }
53
- if (isConditionalExpression(expression)) {
54
- return [...valuesOf(expression.whenTrue), ...valuesOf(expression.whenFalse)];
55
- }
56
- if (isBinaryExpression(expression)) {
57
- const operator = expression.operatorToken.kind;
58
- if (operator === SyntaxKind.QuestionQuestionToken || operator === SyntaxKind.BarBarToken) {
59
- return [...valuesOf(expression.left), ...valuesOf(expression.right)];
60
- }
61
- if (operator === SyntaxKind.AmpersandAmpersandToken || operator === SyntaxKind.CommaToken) {
62
- return valuesOf(expression.right);
63
- }
64
- }
65
- return [expression];
66
- }
67
-
68
- /** The expressions one node hands to a position typed by its context. */
69
- export function handedOn(node: Node): readonly Expression[] {
70
- if (
71
- (isVariableDeclaration(node) || isPropertyDeclaration(node) || isParameterDeclaration(node)) &&
72
- node.initializer !== undefined &&
73
- writesType(node)
74
- ) {
75
- return [node.initializer];
76
- }
77
- if (isBinaryExpression(node) && STORES.has(node.operatorToken.kind)) {
78
- return [node.right];
79
- }
80
- if (isCallExpression(node) || isNewExpression(node)) {
81
- return (node.arguments ?? []).filter((argument) => !isSpreadElement(argument));
82
- }
83
- if (isReturnStatement(node)) {
84
- return node.expression === undefined ? [] : [node.expression];
85
- }
86
- if (isArrowFunction(node)) {
87
- return node.body.kind === SyntaxKind.Block ? [] : [node.body];
88
- }
89
- if (isArrayLiteralExpression(node)) {
90
- return node.elements.filter(
91
- (element) => !isSpreadElement(element) && element.kind !== SyntaxKind.OmittedExpression,
92
- );
93
- }
94
- if (isPropertyAssignment(node)) {
95
- return [node.initializer];
96
- }
97
- if (isShorthandPropertyAssignment(node)) {
98
- return isIdentifier(node.name) ? [node.name] : [];
99
- }
100
- if (isAsExpression(node) || isSatisfiesExpression(node)) {
101
- return [node.expression];
102
- }
103
- return [];
104
- }
package/src/version.ts DELETED
@@ -1,7 +0,0 @@
1
- /**
2
- * The Contract version this analyzer implements. It is the resolved value of
3
- * `contract_version` when no configuration source supplies one, and it moves
4
- * independently of the analyzer's own version, which is the one the host answers
5
- * from the package the analyzer was installed from.
6
- */
7
- export const CONTRACT_VERSION = "8.0.0";