@cplieger/deadset-ts 8.0.0-dev.2 → 8.0.0-dev.20
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.
- package/README.md +3 -1
- package/THIRD_PARTY_NOTICES.md +27 -0
- package/dist/bin/mapper-connection.js +2 -1
- package/dist/bin/node-host.js +24 -5
- package/dist/src/alias-chain.js +2 -7
- package/dist/src/amd.js +81 -0
- package/dist/src/analysis.js +269 -432
- package/dist/src/augmentations.js +64 -3
- package/dist/src/automatic-types.js +10 -29
- package/dist/src/bindings.js +382 -0
- package/dist/src/calls.js +279 -43
- package/dist/src/commands/held.js +499 -0
- package/dist/src/commands/read.js +161 -0
- package/dist/src/commands/shell.js +169 -0
- package/dist/src/commands/tools.js +1847 -0
- package/dist/src/component-files.js +3 -2
- package/dist/src/component-layer.js +4 -2
- package/dist/src/config.js +6 -82
- package/dist/src/conformance-record.js +1 -1
- package/dist/src/consumers.js +10 -38
- package/dist/src/contextual-uses.js +57 -26
- package/dist/src/contract/config.generated.js +561 -0
- package/dist/src/contract/contract.generated.js +1369 -0
- package/dist/src/contract/report.generated.js +866 -0
- package/dist/src/dependencies.js +164 -121
- package/dist/src/destructuring.js +1 -19
- package/dist/src/edges.js +38 -122
- package/dist/src/element-access.js +181 -168
- package/dist/src/entries/build-scripts.js +222 -0
- package/dist/src/{configuration-files.js → entries/configuration-files.js} +52 -256
- package/dist/src/{convention-rows.js → entries/convention-rows.js} +170 -30
- package/dist/src/entries/conventions.js +740 -0
- package/dist/src/{html-entries.js → entries/html-entries.js} +12 -42
- package/dist/src/{mdx-entries.js → entries/mdx-entries.js} +5 -28
- package/dist/src/entries/run-directories.js +77 -0
- package/dist/src/entries/sources.js +144 -0
- package/dist/src/entries/static-module.js +670 -0
- package/dist/src/entries/test-runners.js +650 -0
- package/dist/src/entries/workflow-steps.js +345 -0
- package/dist/src/enum-group.js +3 -10
- package/dist/src/erased-stores.js +4 -6
- package/dist/src/exempt-classes.js +1 -63
- package/dist/src/exempt.js +21 -66
- package/dist/src/exposure.js +400 -0
- package/dist/src/extensions.js +37 -0
- package/dist/src/facts.js +38 -0
- package/dist/src/failure.js +36 -0
- package/dist/src/file-facts.js +3 -26
- package/dist/src/findings/completion.js +109 -56
- package/dist/src/findings/dependencies-and-module-machinery.js +4 -5
- package/dist/src/findings/emitters.js +27 -41
- package/dist/src/{implementations.js → findings/implementations.js} +3 -3
- package/dist/src/{in-operands.js → findings/in-operands.js} +3 -2
- package/dist/src/findings/interfaces.js +4 -5
- package/dist/src/findings/intra-function.js +16 -13
- package/dist/src/findings/non-code-artifacts.js +17 -12
- package/dist/src/findings/reads-and-writes.js +86 -27
- package/dist/src/findings/self-check.js +44 -30
- package/dist/src/findings/unused-declarations.js +29 -45
- package/dist/src/findings/visibility-narrowing.js +23 -31
- package/dist/src/findings-pass.js +13 -21
- package/dist/src/framework-lifecycle.js +46 -19
- package/dist/src/fs/document.js +52 -0
- package/dist/src/fs/manifest.js +67 -0
- package/dist/src/fs/tree.js +88 -0
- package/dist/src/generated-file.js +174 -28
- package/dist/src/git-ignore.js +39 -26
- package/dist/src/import-bindings.js +73 -28
- package/dist/src/index/sites.js +557 -0
- package/dist/src/index.js +2 -2
- package/dist/src/indexed-access.js +523 -478
- package/dist/src/injection-container.js +2 -2
- package/dist/src/interface-satisfaction.js +1 -1
- package/dist/src/intra-function-parts.js +63 -43
- package/dist/src/inventory/commonjs.js +507 -0
- package/dist/src/inventory/enumerate.js +167 -0
- package/dist/src/inventory/syntax.js +236 -0
- package/dist/src/inventory.js +323 -724
- package/dist/src/javascript-file.js +48 -0
- package/dist/src/json-document.js +198 -67
- package/dist/src/keyof-comparisons.js +126 -107
- package/dist/src/kinds.js +3 -366
- package/dist/src/{components.js → liveness/components.js} +2 -3
- package/dist/src/{graph.js → liveness/graph.js} +52 -28
- package/dist/src/liveness/matrix.js +99 -0
- package/dist/src/liveness/sweep.js +558 -0
- package/dist/src/load/classify.js +289 -0
- package/dist/src/load/diagnostics.js +87 -0
- package/dist/src/load/discover.js +285 -0
- package/dist/src/{emit-map.js → load/emit-map.js} +1 -1
- package/dist/src/load/expected-module.js +136 -0
- package/dist/src/load/load.js +27 -0
- package/dist/src/load/module-lookup.js +37 -0
- package/dist/src/load/package-scope.js +56 -0
- package/dist/src/load/plan.js +313 -0
- package/dist/src/load/specifiers.js +113 -0
- package/dist/src/load/synthesize.js +152 -0
- package/dist/src/load/test-globals.js +207 -0
- package/dist/src/load/test-joins.js +82 -0
- package/dist/src/{workspace-manifests.js → load/workspace-manifests.js} +4 -4
- package/dist/src/{workspace-programs.js → load/workspace-programs.js} +89 -66
- package/dist/src/{workspace-resolution.js → load/workspace-resolution.js} +24 -66
- package/dist/src/{workspace-run.js → load/workspace-run.js} +7 -7
- package/dist/src/{workspace.js → load/workspace.js} +62 -124
- package/dist/src/module-declarations.js +70 -85
- package/dist/src/overrides.js +134 -112
- package/dist/src/partial.js +2 -1
- package/dist/src/paths.js +82 -16
- package/dist/src/platform-calls.js +78 -0
- package/dist/src/platform-symbols.js +134 -0
- package/dist/src/position.js +43 -1
- package/dist/src/print.js +11 -79
- package/dist/src/product.js +13 -0
- package/dist/src/query.js +47 -0
- package/dist/src/ref.js +12 -20
- package/dist/src/references/read-rule.js +1 -0
- package/dist/src/references/read-rules.js +48 -0
- package/dist/src/references/sink.js +237 -0
- package/dist/src/references/sources.js +450 -0
- package/dist/src/references.js +117 -1074
- package/dist/src/report-schema.js +51 -0
- package/dist/src/report.js +57 -41
- package/dist/src/reporters/annotations.js +15 -8
- package/dist/src/reporters/sarif.js +16 -10
- package/dist/src/reporters/template.js +4 -19
- package/dist/src/resolve.js +246 -730
- package/dist/src/{configured-declarations.js → roots/configured-declarations.js} +22 -24
- package/dist/src/{entry-point-gaps.js → roots/entry-point-gaps.js} +6 -15
- package/dist/src/roots/manifest.js +216 -0
- package/dist/src/roots/published-reach.js +412 -0
- package/dist/src/roots/root-set.js +487 -0
- package/dist/src/roots/unseen-loads.js +236 -0
- package/dist/src/run.js +66 -77
- package/dist/src/schema.js +320 -343
- package/dist/src/scope.js +38 -115
- package/dist/src/serialization-contract.js +601 -22
- package/dist/src/session.js +37 -29
- package/dist/src/source-files.js +6 -10
- package/dist/src/stores.js +4 -2
- package/dist/src/suppress-file.js +25 -28
- package/dist/src/suppress-inline.js +36 -83
- package/dist/src/suppress.js +50 -71
- package/dist/src/symbol-keys.js +92 -88
- package/dist/src/template-field.js +9 -19
- package/dist/src/tests/file-class.js +76 -0
- package/dist/src/{outside-tests.js → tests/outside.js} +7 -7
- package/dist/src/{test-support.js → tests/support.js} +5 -12
- package/dist/src/text/compare.js +26 -0
- package/dist/src/text/glob.js +194 -0
- package/dist/src/text/named-files.js +298 -0
- package/dist/src/text/yaml.js +684 -0
- package/dist/src/type-errors.js +11 -232
- package/dist/src/type-parameter-reads.js +178 -139
- package/dist/src/unimplemented-callees.js +262 -242
- package/dist/src/unwrap.js +23 -0
- package/dist/src/usage.js +10 -0
- package/dist/src/vendor/unbash/ansi-c.js +132 -0
- package/dist/src/vendor/unbash/arithmetic-parts.js +37 -0
- package/dist/src/vendor/unbash/arithmetic.js +591 -0
- package/dist/src/vendor/unbash/assignment.js +131 -0
- package/dist/src/vendor/unbash/chars.js +48 -0
- package/dist/src/vendor/unbash/command.js +41 -0
- package/dist/src/vendor/unbash/expansion.js +80 -0
- package/dist/src/vendor/unbash/glob.js +268 -0
- package/dist/src/vendor/unbash/heredoc.js +27 -0
- package/dist/src/vendor/unbash/internal-types.js +1 -0
- package/dist/src/vendor/unbash/lexer.js +4274 -0
- package/dist/src/vendor/unbash/limits.js +3 -0
- package/dist/src/vendor/unbash/parser.js +1366 -0
- package/dist/src/vendor/unbash/parts.js +57 -0
- package/dist/src/vendor/unbash/substitution-context.js +8 -0
- package/dist/src/vendor/unbash/traversal.js +212 -0
- package/dist/src/vendor/unbash/types.js +1 -0
- package/dist/src/vendor/unbash/word-value.js +61 -0
- package/dist/src/vendor/unbash/word.js +40 -0
- package/dist/src/verbs/analyze.js +194 -127
- package/dist/src/verbs/describe.js +13 -18
- package/dist/src/verbs/explain.js +85 -139
- package/dist/src/verbs/print-config.js +2 -1
- package/dist/src/verbs/print-projects.js +6 -4
- package/dist/src/verbs/print-retained.js +7 -5
- package/dist/src/verbs/print-roots.js +4 -2
- package/dist/src/verbs/verb.js +1 -5
- package/dist/src/verbs/version.js +14 -3
- package/jsr.json +2 -1
- package/package.json +14 -8
- package/src/alias-chain.ts +2 -9
- package/src/amd.ts +130 -0
- package/src/analysis.ts +424 -650
- package/src/augmentations.ts +93 -4
- package/src/automatic-types.ts +12 -30
- package/src/bindings.ts +460 -0
- package/src/calls.ts +338 -46
- package/src/commands/held.ts +632 -0
- package/src/commands/read.ts +242 -0
- package/src/commands/shell.ts +228 -0
- package/src/commands/tools.ts +2382 -0
- package/src/component-files.ts +4 -2
- package/src/component-layer.ts +4 -2
- package/src/config.ts +31 -302
- package/src/conformance-record.ts +1 -1
- package/src/consumers.ts +16 -66
- package/src/contextual-uses.ts +66 -34
- package/src/contract/config.generated.ts +821 -0
- package/src/contract/contract.generated.ts +1452 -0
- package/src/contract/report.generated.ts +1241 -0
- package/src/dependencies.ts +222 -127
- package/src/destructuring.ts +1 -31
- package/src/edges.ts +41 -140
- package/src/element-access.ts +190 -187
- package/src/entries/build-scripts.ts +292 -0
- package/src/{configuration-files.ts → entries/configuration-files.ts} +68 -278
- package/src/{convention-rows.ts → entries/convention-rows.ts} +227 -31
- package/src/{conventions.ts → entries/conventions.ts} +367 -583
- package/src/{html-entries.ts → entries/html-entries.ts} +22 -48
- package/src/{mdx-entries.ts → entries/mdx-entries.ts} +7 -30
- package/src/entries/run-directories.ts +108 -0
- package/src/entries/sources.ts +266 -0
- package/src/entries/static-module.ts +858 -0
- package/src/entries/test-runners.ts +835 -0
- package/src/entries/workflow-steps.ts +432 -0
- package/src/enum-group.ts +2 -11
- package/src/erased-stores.ts +3 -7
- package/src/exempt-classes.ts +1 -75
- package/src/exempt.ts +70 -98
- package/src/exposure.ts +492 -0
- package/src/extensions.ts +45 -0
- package/src/facts.ts +46 -0
- package/src/failure.ts +63 -0
- package/src/file-facts.ts +15 -25
- package/src/finding.ts +10 -10
- package/src/findings/boundary.ts +11 -0
- package/src/findings/completion.ts +133 -64
- package/src/findings/dependencies-and-module-machinery.ts +4 -7
- package/src/findings/emitter.ts +9 -10
- package/src/findings/emitters.ts +38 -52
- package/src/{implementations.ts → findings/implementations.ts} +4 -4
- package/src/{in-operands.ts → findings/in-operands.ts} +4 -3
- package/src/findings/interfaces.ts +7 -9
- package/src/findings/intra-function.ts +16 -14
- package/src/findings/non-code-artifacts.ts +24 -15
- package/src/findings/reads-and-writes.ts +118 -41
- package/src/findings/self-check.ts +51 -38
- package/src/findings/unused-declarations.ts +31 -49
- package/src/findings/visibility-narrowing.ts +36 -40
- package/src/findings-pass.ts +15 -31
- package/src/framework-lifecycle.ts +47 -19
- package/src/fs/document.ts +70 -0
- package/src/fs/manifest.ts +96 -0
- package/src/fs/tree.ts +110 -0
- package/src/generated-file.ts +242 -35
- package/src/git-ignore.ts +50 -26
- package/src/host.ts +12 -5
- package/src/import-bindings.ts +98 -29
- package/src/index/sites.ts +781 -0
- package/src/index.ts +2 -2
- package/src/indexed-access.ts +570 -527
- package/src/injection-container.ts +2 -2
- package/src/interface-satisfaction.ts +2 -2
- package/src/intra-function-parts.ts +73 -44
- package/src/inventory/commonjs.ts +696 -0
- package/src/inventory/enumerate.ts +203 -0
- package/src/inventory/syntax.ts +311 -0
- package/src/inventory.ts +442 -895
- package/src/javascript-file.ts +54 -0
- package/src/json-document.ts +241 -76
- package/src/keyof-comparisons.ts +133 -122
- package/src/kinds.ts +5 -413
- package/src/{components.ts → liveness/components.ts} +4 -6
- package/src/{graph.ts → liveness/graph.ts} +100 -35
- package/src/liveness/matrix.ts +162 -0
- package/src/liveness/sweep.ts +855 -0
- package/src/load/classify.ts +433 -0
- package/src/load/diagnostics.ts +154 -0
- package/src/load/discover.ts +471 -0
- package/src/{emit-map.ts → load/emit-map.ts} +1 -1
- package/src/load/expected-module.ts +194 -0
- package/src/load/load.ts +73 -0
- package/src/load/module-lookup.ts +50 -0
- package/src/load/package-scope.ts +74 -0
- package/src/load/plan.ts +513 -0
- package/src/load/specifiers.ts +171 -0
- package/src/load/synthesize.ts +230 -0
- package/src/load/test-globals.ts +251 -0
- package/src/load/test-joins.ts +98 -0
- package/src/{workspace-manifests.ts → load/workspace-manifests.ts} +5 -5
- package/src/{workspace-programs.ts → load/workspace-programs.ts} +128 -85
- package/src/{workspace-resolution.ts → load/workspace-resolution.ts} +41 -77
- package/src/{workspace-run.ts → load/workspace-run.ts} +18 -16
- package/src/{workspace.ts → load/workspace.ts} +90 -134
- package/src/module-declarations.ts +74 -98
- package/src/overrides.ts +162 -134
- package/src/partial.ts +3 -2
- package/src/paths.ts +92 -16
- package/src/platform-calls.ts +119 -0
- package/src/platform-symbols.ts +189 -0
- package/src/position.ts +44 -1
- package/src/print.ts +12 -92
- package/src/product.ts +18 -0
- package/src/query.ts +92 -0
- package/src/ref.ts +12 -20
- package/src/references/read-rule.ts +60 -0
- package/src/references/read-rules.ts +55 -0
- package/src/references/sink.ts +314 -0
- package/src/references/sources.ts +632 -0
- package/src/references.ts +187 -1450
- package/src/report-schema.ts +68 -0
- package/src/report.ts +103 -226
- package/src/reporters/annotations.ts +22 -11
- package/src/reporters/json.ts +1 -1
- package/src/reporters/reporter.ts +2 -4
- package/src/reporters/reporters.ts +1 -1
- package/src/reporters/sarif.ts +29 -16
- package/src/reporters/template.ts +4 -20
- package/src/reporters/text.ts +3 -3
- package/src/resolve.ts +284 -1115
- package/src/{configured-declarations.ts → roots/configured-declarations.ts} +27 -29
- package/src/{entry-point-gaps.ts → roots/entry-point-gaps.ts} +7 -16
- package/src/roots/manifest.ts +303 -0
- package/src/roots/published-reach.ts +486 -0
- package/src/{roots.ts → roots/root-set.ts} +286 -469
- package/src/roots/unseen-loads.ts +345 -0
- package/src/run.ts +75 -91
- package/src/schema.ts +391 -388
- package/src/scope.ts +46 -138
- package/src/serialization-contract.ts +769 -23
- package/src/session.ts +87 -55
- package/src/source-files.ts +6 -11
- package/src/stores.ts +15 -3
- package/src/suppress-file.ts +24 -33
- package/src/suppress-inline.ts +55 -91
- package/src/suppress.ts +78 -79
- package/src/symbol-keys.ts +104 -107
- package/src/template-field.ts +15 -25
- package/src/tests/file-class.ts +135 -0
- package/src/{outside-tests.ts → tests/outside.ts} +16 -10
- package/src/{test-support.ts → tests/support.ts} +15 -21
- package/src/text/compare.ts +27 -0
- package/src/text/glob.ts +210 -0
- package/src/text/named-files.ts +388 -0
- package/src/text/yaml.ts +747 -0
- package/src/type-errors.ts +18 -288
- package/src/type-parameter-reads.ts +187 -158
- package/src/unimplemented-callees.ts +297 -280
- package/src/unwrap.ts +34 -0
- package/src/usage.ts +10 -0
- package/src/vendor/unbash/LICENSE +15 -0
- package/src/vendor/unbash/VENDORED.md +16 -0
- package/src/vendor/unbash/ansi-c.ts +132 -0
- package/src/vendor/unbash/arithmetic-parts.ts +53 -0
- package/src/vendor/unbash/arithmetic.ts +641 -0
- package/src/vendor/unbash/assignment.ts +163 -0
- package/src/vendor/unbash/chars.ts +48 -0
- package/src/vendor/unbash/command.ts +47 -0
- package/src/vendor/unbash/expansion.ts +144 -0
- package/src/vendor/unbash/glob.ts +284 -0
- package/src/vendor/unbash/heredoc.ts +34 -0
- package/src/vendor/unbash/internal-types.ts +94 -0
- package/src/vendor/unbash/lexer.ts +4352 -0
- package/src/vendor/unbash/limits.ts +3 -0
- package/src/vendor/unbash/parser.ts +1612 -0
- package/src/vendor/unbash/parts.ts +96 -0
- package/src/vendor/unbash/substitution-context.ts +20 -0
- package/src/vendor/unbash/traversal.ts +182 -0
- package/src/vendor/unbash/types.ts +660 -0
- package/src/vendor/unbash/word-value.ts +64 -0
- package/src/vendor/unbash/word.ts +50 -0
- package/src/verbs/analyze.ts +255 -164
- package/src/verbs/describe.ts +19 -17
- package/src/verbs/explain.ts +93 -169
- package/src/verbs/print-config.ts +2 -1
- package/src/verbs/print-projects.ts +6 -4
- package/src/verbs/print-retained.ts +7 -5
- package/src/verbs/print-roots.ts +4 -2
- package/src/verbs/verb.ts +2 -8
- package/src/verbs/version.ts +15 -3
- package/dist/src/base-url.js +0 -18
- package/dist/src/conventions.js +0 -937
- package/dist/src/discover.js +0 -468
- package/dist/src/entry-points.js +0 -529
- package/dist/src/glob.js +0 -65
- package/dist/src/manifest.js +0 -165
- package/dist/src/matrix.js +0 -246
- package/dist/src/pnpm-workspace.js +0 -120
- package/dist/src/roots.js +0 -672
- package/dist/src/setup-failure.js +0 -23
- package/dist/src/sweep.js +0 -224
- package/dist/src/test-joins.js +0 -101
- package/dist/src/version.js +0 -7
- package/dist/src/workflow-steps.js +0 -185
- package/src/base-url.ts +0 -24
- package/src/discover.ts +0 -653
- package/src/entry-points.ts +0 -687
- package/src/glob.ts +0 -67
- package/src/manifest.ts +0 -234
- package/src/matrix.ts +0 -423
- package/src/pnpm-workspace.ts +0 -135
- package/src/setup-failure.ts +0 -39
- package/src/sweep.ts +0 -347
- package/src/test-joins.ts +0 -120
- package/src/version.ts +0 -7
- package/src/workflow-steps.ts +0 -216
package/src/exempt.ts
CHANGED
|
@@ -7,24 +7,53 @@
|
|
|
7
7
|
* hands it the table of the classes it has.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import
|
|
11
|
-
import {
|
|
10
|
+
import { EXEMPTION_CLASSES } from "./contract/contract.generated.ts";
|
|
11
|
+
import type { GeneratedFact } from "./generated-file.ts";
|
|
12
|
+
import type { ResolvedConfig } from "./config.ts";
|
|
12
13
|
import {
|
|
13
|
-
EXEMPTION_CLASSES,
|
|
14
|
-
isExemptionClass,
|
|
15
14
|
TS_EXEMPTION_CLASSES,
|
|
16
15
|
typescriptVisibilityOf,
|
|
17
16
|
type ExemptionClass,
|
|
18
17
|
type TSExemptionClass,
|
|
19
18
|
type TypeScriptVisibility,
|
|
20
19
|
} from "./exempt-classes.ts";
|
|
21
|
-
import type { Inventory, InventorySymbol,
|
|
22
|
-
import type { Matrix } from "./matrix.ts";
|
|
20
|
+
import type { Inventory, InventorySymbol, Visibility } from "./inventory.ts";
|
|
23
21
|
import { byPosition, positionKey, type Position } from "./position.ts";
|
|
24
22
|
import { Unanswerable } from "./query.ts";
|
|
25
23
|
import type { ProjectView } from "./session.ts";
|
|
26
24
|
import type { Templates } from "./template-field.ts";
|
|
27
|
-
import
|
|
25
|
+
import type { Mode } from "./tests/file-class.ts";
|
|
26
|
+
import { bytewise } from "./text/compare.ts";
|
|
27
|
+
|
|
28
|
+
/** One declaration an exemption class holds back, and the evidence it was found by. */
|
|
29
|
+
export interface Exemption {
|
|
30
|
+
/** The identifier of the declaration held back. */
|
|
31
|
+
readonly id: string;
|
|
32
|
+
readonly class: TSExemptionClass;
|
|
33
|
+
/** One clause naming the relation, then the thing it relates to: `passed to JSON.stringify`. */
|
|
34
|
+
readonly detail: string;
|
|
35
|
+
/** Where the evidence is written. */
|
|
36
|
+
readonly site: Position;
|
|
37
|
+
/**
|
|
38
|
+
* The component file, below the target root, whose markup holds the evidence. The
|
|
39
|
+
* record holds only while that file is live.
|
|
40
|
+
*/
|
|
41
|
+
readonly whileLive?: string;
|
|
42
|
+
/**
|
|
43
|
+
* The interface methods the retained member implements, and whether its body is empty.
|
|
44
|
+
* The record holds only while one of them is called through its interface.
|
|
45
|
+
*/
|
|
46
|
+
readonly implementing?: Implementing;
|
|
47
|
+
/** Whether the record holds only where a write the mode counts stores into the declaration. */
|
|
48
|
+
readonly whileWritten?: true;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** The interface methods one retained class member implements, and whether its body is empty. */
|
|
52
|
+
interface Implementing {
|
|
53
|
+
/** The declarations of the interface's methods the member answers, by identifier. */
|
|
54
|
+
readonly methods: readonly string[];
|
|
55
|
+
readonly empty: boolean;
|
|
56
|
+
}
|
|
28
57
|
|
|
29
58
|
/** One declaration a detector holds back, and where and why. */
|
|
30
59
|
export interface Evidence {
|
|
@@ -37,6 +66,8 @@ export interface Evidence {
|
|
|
37
66
|
readonly whileLive?: string;
|
|
38
67
|
/** Where the evidence is an implementation of interface methods, which and how. */
|
|
39
68
|
readonly implementing?: Implementing;
|
|
69
|
+
/** Whether the evidence holds only where a write the mode counts stores into the declaration. */
|
|
70
|
+
readonly whileWritten?: true;
|
|
40
71
|
}
|
|
41
72
|
|
|
42
73
|
/** What a detector reads of one project, while the project's view is open. */
|
|
@@ -47,11 +78,11 @@ export interface DetectorInput<Brand> {
|
|
|
47
78
|
/** The configured templates, read once for the run. */
|
|
48
79
|
readonly templates: Templates;
|
|
49
80
|
/** The `ts` section, whose declarations the configured classes read. */
|
|
50
|
-
readonly ts:
|
|
81
|
+
readonly ts: ResolvedConfig["ts"];
|
|
51
82
|
/** The absolute path of each declared consumer, whose modules are part of the analysis. */
|
|
52
83
|
readonly consumers: readonly string[];
|
|
53
|
-
/** The project's generated files, by path below the target root, each with
|
|
54
|
-
readonly generated?: ReadonlyMap<string,
|
|
84
|
+
/** The project's generated files, by path below the target root, each with what decided it. */
|
|
85
|
+
readonly generated?: ReadonlyMap<string, GeneratedFact>;
|
|
55
86
|
}
|
|
56
87
|
|
|
57
88
|
/**
|
|
@@ -71,24 +102,11 @@ interface Holding {
|
|
|
71
102
|
}
|
|
72
103
|
|
|
73
104
|
/**
|
|
74
|
-
* The classes `exemptions.disabled` switches off. A
|
|
75
|
-
*
|
|
76
|
-
* switches nothing off here, so one configuration serves every analyzer.
|
|
105
|
+
* The classes `exemptions.disabled` switches off. A class that runs on another language
|
|
106
|
+
* only switches nothing off here, so one configuration serves every analyzer.
|
|
77
107
|
*/
|
|
78
|
-
export function disabledClasses(config:
|
|
79
|
-
|
|
80
|
-
for (const name of config.exemptionsDisabled) {
|
|
81
|
-
if (!isExemptionClass(name)) {
|
|
82
|
-
const known = EXEMPTION_CLASSES.map((row) => row.class).join(", ");
|
|
83
|
-
throw new ConfigError(
|
|
84
|
-
"malformed",
|
|
85
|
-
"exemptions.disabled",
|
|
86
|
-
`exemptions.disabled: ${JSON.stringify(name)} is not an exemption class: the classes are ${known}`,
|
|
87
|
-
);
|
|
88
|
-
}
|
|
89
|
-
disabled.add(name);
|
|
90
|
-
}
|
|
91
|
-
return disabled;
|
|
108
|
+
export function disabledClasses(config: ResolvedConfig): ReadonlySet<ExemptionClass> {
|
|
109
|
+
return new Set(config.exemptions.disabled);
|
|
92
110
|
}
|
|
93
111
|
|
|
94
112
|
/**
|
|
@@ -105,20 +123,12 @@ function retainable(allowed: TypeScriptVisibility, visibility: Visibility | unde
|
|
|
105
123
|
return true;
|
|
106
124
|
}
|
|
107
125
|
|
|
108
|
-
/**
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
["enum-group", new Set<SymbolKind>(["enum-member"])],
|
|
115
|
-
["injection-container", new Set<SymbolKind>(["method", "class-member"])],
|
|
116
|
-
["framework-lifecycle", new Set<SymbolKind>(["method", "class-member"])],
|
|
117
|
-
[
|
|
118
|
-
"serialization-contract",
|
|
119
|
-
new Set<SymbolKind>(["method", "class-member", "interface-method", "type-member"]),
|
|
120
|
-
],
|
|
121
|
-
]);
|
|
126
|
+
/** The kinds of declaration each class can hold back, which a detector that stops holds back whole. */
|
|
127
|
+
const RETAINABLE: ReadonlyMap<string, ReadonlySet<string>> = new Map(
|
|
128
|
+
EXEMPTION_CLASSES.flatMap((row) =>
|
|
129
|
+
"ts" in row.retainsKinds ? [[row.class, new Set<string>(row.retainsKinds.ts)] as const] : [],
|
|
130
|
+
),
|
|
131
|
+
);
|
|
122
132
|
|
|
123
133
|
/** The detail of a record a detector that could not finish holds. */
|
|
124
134
|
const UNANSWERED_DETAIL = "kept live by a question the checker did not answer";
|
|
@@ -147,7 +157,7 @@ function detected<Brand>(
|
|
|
147
157
|
}
|
|
148
158
|
const kinds = RETAINABLE.get(exemptionClass);
|
|
149
159
|
return input.held.symbols
|
|
150
|
-
.filter((symbol) =>
|
|
160
|
+
.filter((symbol) => kinds?.has(symbol.kind) === true)
|
|
151
161
|
.map((symbol) => ({ id: symbol.id, detail: UNANSWERED_DETAIL, site: symbol.position }));
|
|
152
162
|
}
|
|
153
163
|
}
|
|
@@ -193,12 +203,26 @@ export function evidenceRecords<Brand>(
|
|
|
193
203
|
site: evidence.site,
|
|
194
204
|
...(evidence.whileLive === undefined ? {} : { whileLive: evidence.whileLive }),
|
|
195
205
|
...(evidence.implementing === undefined ? {} : { implementing: evidence.implementing }),
|
|
206
|
+
...(evidence.whileWritten === undefined ? {} : { whileWritten: evidence.whileWritten }),
|
|
196
207
|
});
|
|
197
208
|
}
|
|
198
209
|
}
|
|
199
210
|
return found;
|
|
200
211
|
}
|
|
201
212
|
|
|
213
|
+
/**
|
|
214
|
+
* The records that hold given the declarations a write the mode counts stores into: one
|
|
215
|
+
* that holds only while written holds where its declaration is among them.
|
|
216
|
+
*/
|
|
217
|
+
export function writtenRecords(
|
|
218
|
+
records: readonly Exemption[],
|
|
219
|
+
written: ReadonlySet<string>,
|
|
220
|
+
): readonly Exemption[] {
|
|
221
|
+
return records.flatMap(({ whileWritten, ...record }) =>
|
|
222
|
+
whileWritten === undefined || written.has(record.id) ? [record] : [],
|
|
223
|
+
);
|
|
224
|
+
}
|
|
225
|
+
|
|
202
226
|
/** The records that hold under one mode, beside the evidence a production mode found in a test file. */
|
|
203
227
|
export function heldRecords(records: readonly Exemption[], holding: Holding): Detected {
|
|
204
228
|
const found: Exemption[] = [];
|
|
@@ -213,14 +237,6 @@ export function heldRecords(records: readonly Exemption[], holding: Holding): De
|
|
|
213
237
|
return { records: exemptionsOf(found), inTestFiles };
|
|
214
238
|
}
|
|
215
239
|
|
|
216
|
-
/** Two strings ordered bytewise. */
|
|
217
|
-
function compare(a: string, b: string): number {
|
|
218
|
-
if (a === b) {
|
|
219
|
-
return 0;
|
|
220
|
-
}
|
|
221
|
-
return a < b ? -1 : 1;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
240
|
/**
|
|
225
241
|
* Records as a run holds them: ordered by site, then class, then declaration, and one
|
|
226
242
|
* per declaration, class, detail and file it holds while live, the one at the first
|
|
@@ -228,7 +244,7 @@ function compare(a: string, b: string): number {
|
|
|
228
244
|
*/
|
|
229
245
|
export function exemptionsOf(found: readonly Exemption[]): readonly Exemption[] {
|
|
230
246
|
const ordered = [...found].sort(
|
|
231
|
-
(a, b) => byPosition(a.site, b.site) ||
|
|
247
|
+
(a, b) => byPosition(a.site, b.site) || bytewise(a.class, b.class) || bytewise(a.id, b.id),
|
|
232
248
|
);
|
|
233
249
|
const seen = new Set<string>();
|
|
234
250
|
return ordered.filter((record) => {
|
|
@@ -241,21 +257,6 @@ export function exemptionsOf(found: readonly Exemption[]): readonly Exemption[]
|
|
|
241
257
|
});
|
|
242
258
|
}
|
|
243
259
|
|
|
244
|
-
/**
|
|
245
|
-
* The records that hold while the component files at `live` are live: every record that
|
|
246
|
-
* holds whatever is live, and each one a live file's markup holds, as a record of the run.
|
|
247
|
-
*/
|
|
248
|
-
export function holdingWhile(
|
|
249
|
-
records: readonly Exemption[],
|
|
250
|
-
live: ReadonlySet<string>,
|
|
251
|
-
): readonly Exemption[] {
|
|
252
|
-
return exemptionsOf(
|
|
253
|
-
records.flatMap(({ whileLive, ...record }) =>
|
|
254
|
-
whileLive === undefined || live.has(whileLive) ? [record] : [],
|
|
255
|
-
),
|
|
256
|
-
);
|
|
257
|
-
}
|
|
258
|
-
|
|
259
260
|
/** The records per declaration, each declaration's in the order given. */
|
|
260
261
|
function byDeclaration(records: readonly Exemption[]): ReadonlyMap<string, readonly Exemption[]> {
|
|
261
262
|
const grouped = new Map<string, Exemption[]>();
|
|
@@ -271,37 +272,8 @@ function byDeclaration(records: readonly Exemption[]): ReadonlyMap<string, reado
|
|
|
271
272
|
}
|
|
272
273
|
|
|
273
274
|
/**
|
|
274
|
-
*
|
|
275
|
-
*
|
|
276
|
-
* configuration answers, or one in `writeOnly`, which the run would report as written
|
|
277
|
-
* and never read without the record's read. A declaration a relation or a mark holds
|
|
278
|
-
* live in every configuration is held back by no record. The order is the
|
|
279
|
-
* declarations' site order, and for one declaration the input's.
|
|
280
|
-
*/
|
|
281
|
-
export function retainedIn(
|
|
282
|
-
matrix: Matrix,
|
|
283
|
-
input: SweepInput,
|
|
284
|
-
writeOnly: ReadonlySet<string> = new Set(),
|
|
285
|
-
): readonly Exemption[] {
|
|
286
|
-
const exempt = input.exempt ?? [];
|
|
287
|
-
if (exempt.length === 0) {
|
|
288
|
-
return [];
|
|
289
|
-
}
|
|
290
|
-
const bare: SweepInput = { marked: input.marked, mode: input.mode };
|
|
291
|
-
const dead = new Set(
|
|
292
|
-
matrix.graphs.flatMap((graph) =>
|
|
293
|
-
sweep(graph, bare).candidates.map((candidate) => candidate.id),
|
|
294
|
-
),
|
|
295
|
-
);
|
|
296
|
-
const held = byDeclaration(
|
|
297
|
-
exempt.filter((record) => dead.has(record.id) || writeOnly.has(record.id)),
|
|
298
|
-
);
|
|
299
|
-
return matrix.union.symbols.flatMap((symbol) => held.get(symbol.id) ?? []);
|
|
300
|
-
}
|
|
301
|
-
|
|
302
|
-
/**
|
|
303
|
-
* One line per held-back declaration, in site order: its reference, then each record's
|
|
304
|
-
* class, site and detail, all separated by tabs.
|
|
275
|
+
* One line per held-back declaration, in site order: its reference and position, then
|
|
276
|
+
* each record's class, site and detail, all separated by tabs.
|
|
305
277
|
*/
|
|
306
278
|
export function retainedLines(
|
|
307
279
|
symbols: readonly InventorySymbol[],
|
|
@@ -318,6 +290,6 @@ export function retainedLines(
|
|
|
318
290
|
positionKey(record.site),
|
|
319
291
|
record.detail,
|
|
320
292
|
]);
|
|
321
|
-
return [[symbol.ref, ...fields].join("\t")];
|
|
293
|
+
return [[symbol.ref, positionKey(symbol.position), ...fields].join("\t")];
|
|
322
294
|
});
|
|
323
295
|
}
|