@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.
- 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 +35 -9
- package/dist/src/amd.js +81 -0
- package/dist/src/analysis.js +274 -496
- 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/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 +2 -2
- 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 +1370 -0
- package/dist/src/contract/report.generated.js +866 -0
- package/dist/src/dependencies.js +165 -122
- 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/exemptions/argument-places.js +131 -0
- package/dist/src/exemptions/calls.js +338 -0
- package/dist/src/exemptions/classes.js +13 -0
- package/dist/src/{decorator.js → exemptions/decorator.js} +19 -30
- package/dist/src/exemptions/detectors.js +48 -0
- package/dist/src/{enum-group.js → exemptions/enum-group.js} +9 -16
- package/dist/src/{erased-stores.js → exemptions/erased-stores.js} +7 -11
- package/dist/src/{framework-lifecycle.js → exemptions/framework-lifecycle.js} +76 -54
- package/dist/src/exemptions/generated-file.js +241 -0
- package/dist/src/{injection-container.js → exemptions/injection-container.js} +20 -26
- package/dist/src/exemptions/installed-globals.js +173 -0
- package/dist/src/{interface-satisfaction.js → exemptions/interface-satisfaction.js} +52 -121
- package/dist/src/exemptions/lifecycle.js +150 -0
- package/dist/src/{reflective-lookup.js → exemptions/reflective-lookup.js} +3 -3
- package/dist/src/exemptions/serialization-contract.js +1276 -0
- package/dist/src/exemptions/sites.js +182 -0
- package/dist/src/{template-field.js → exemptions/template-field.js} +13 -23
- package/dist/src/{value-reach.js → exemptions/value-reach.js} +14 -7
- 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/fs/document.js +52 -0
- package/dist/src/fs/manifest.js +67 -0
- package/dist/src/fs/tree.js +88 -0
- 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/values.js +124 -0
- package/dist/src/index.js +2 -2
- package/dist/src/indexed-access.js +523 -478
- 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 +95 -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/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/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 +30 -6
- 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 +40 -11
- package/src/amd.ts +130 -0
- package/src/analysis.ts +426 -733
- package/src/augmentations.ts +93 -4
- package/src/automatic-types.ts +12 -30
- package/src/bindings.ts +460 -0
- 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 +2 -2
- 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 +1453 -0
- package/src/contract/report.generated.ts +1241 -0
- package/src/dependencies.ts +223 -128
- 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/exemptions/argument-places.ts +198 -0
- package/src/exemptions/calls.ts +483 -0
- package/src/exemptions/classes.ts +49 -0
- package/src/exemptions/decorator.ts +56 -0
- package/src/exemptions/detectors.ts +75 -0
- package/src/{enum-group.ts → exemptions/enum-group.ts} +10 -19
- package/src/{erased-stores.ts → exemptions/erased-stores.ts} +7 -14
- package/src/{framework-lifecycle.ts → exemptions/framework-lifecycle.ts} +85 -66
- package/src/exemptions/generated-file.ts +318 -0
- package/src/{injection-container.ts → exemptions/injection-container.ts} +29 -34
- package/src/exemptions/installed-globals.ts +255 -0
- package/src/{interface-satisfaction.ts → exemptions/interface-satisfaction.ts} +69 -160
- package/src/exemptions/lifecycle.ts +286 -0
- package/src/{reflective-lookup.ts → exemptions/reflective-lookup.ts} +5 -5
- package/src/exemptions/serialization-contract.ts +1729 -0
- package/src/exemptions/sites.ts +293 -0
- package/src/{template-field.ts → exemptions/template-field.ts} +22 -32
- package/src/{value-reach.ts → exemptions/value-reach.ts} +16 -8
- 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/fs/document.ts +70 -0
- package/src/fs/manifest.ts +96 -0
- package/src/fs/tree.ts +110 -0
- 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/values.ts +170 -0
- package/src/index.ts +2 -2
- package/src/indexed-access.ts +570 -527
- 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 +201 -10
- 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} +26 -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/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/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 +36 -6
- 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/calls.js +0 -155
- 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/exempt-classes.js +0 -75
- package/dist/src/exempt.js +0 -209
- package/dist/src/generated-file.js +0 -95
- 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/serialization-contract.js +0 -611
- 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/value-flow.js +0 -74
- package/dist/src/version.js +0 -7
- package/dist/src/workflow-steps.js +0 -185
- package/src/base-url.ts +0 -24
- package/src/calls.ts +0 -225
- package/src/decorator.ts +0 -78
- package/src/discover.ts +0 -653
- package/src/entry-points.ts +0 -687
- package/src/exempt-classes.ts +0 -123
- package/src/exempt.ts +0 -323
- package/src/generated-file.ts +0 -111
- 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/serialization-contract.ts +0 -849
- package/src/setup-failure.ts +0 -39
- package/src/sweep.ts +0 -347
- package/src/test-joins.ts +0 -120
- package/src/value-flow.ts +0 -104
- package/src/version.ts +0 -7
- package/src/workflow-steps.ts +0 -216
package/src/contextual-uses.ts
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The uses contextual types make of the target's members, which no name node resolves to.
|
|
3
3
|
* An object-literal property writes the member of its name on each constituent of the
|
|
4
|
-
* literal's contextual type that declares one
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* the
|
|
4
|
+
* literal's contextual type that declares one, and so does a property of a literal whose
|
|
5
|
+
* type is inferred, where a value of that type reaches such a position. A value reaching a
|
|
6
|
+
* position typed by another object type reads each of its members that type declares,
|
|
7
|
+
* through array elements and the parameters and results of functions and constructors
|
|
8
|
+
* too; a class instance there is the interface-satisfaction class's evidence instead.
|
|
8
9
|
*/
|
|
9
10
|
|
|
10
11
|
import {
|
|
@@ -55,16 +56,12 @@ interface ContextualUse {
|
|
|
55
56
|
readonly ids: readonly string[];
|
|
56
57
|
}
|
|
57
58
|
|
|
58
|
-
/** What the contextual types of one project's literals and values use
|
|
59
|
+
/** What the contextual types of one project's literals and values use. */
|
|
59
60
|
interface ContextualUses {
|
|
60
61
|
/** Each literal property that writes a member, by the property's node. */
|
|
61
62
|
readonly writes: readonly ContextualUse[];
|
|
62
63
|
/** Each value whose members a position typed by another object type reads. */
|
|
63
64
|
readonly reads: readonly ContextualUse[];
|
|
64
|
-
/** The batched lookups: contextual types and value types, one per capped run. */
|
|
65
|
-
readonly batches: number;
|
|
66
|
-
/** The per-type lookups: each distinct type's constituents, properties and declaring symbol. */
|
|
67
|
-
readonly lookups: number;
|
|
68
65
|
}
|
|
69
66
|
|
|
70
67
|
/**
|
|
@@ -109,10 +106,12 @@ interface Checked {
|
|
|
109
106
|
readonly source: Type;
|
|
110
107
|
readonly targets: readonly Type[];
|
|
111
108
|
/**
|
|
112
|
-
*
|
|
113
|
-
*
|
|
109
|
+
* What the source is: a type whose members the target declares, which the position
|
|
110
|
+
* reads; one declared outside the target, so code the analysis does not hold reads the
|
|
111
|
+
* members of the target's types it declares; or an object literal's own type, whose
|
|
112
|
+
* properties write the position's members of their names.
|
|
114
113
|
*/
|
|
115
|
-
readonly
|
|
114
|
+
readonly sourceKind: "members" | "outside" | "literal";
|
|
116
115
|
}
|
|
117
116
|
|
|
118
117
|
/** One member of an object type, by the inventory's declarations and the checker's declaration handles. */
|
|
@@ -166,9 +165,6 @@ export function contextualUses<Brand>(
|
|
|
166
165
|
.filter((symbol) => symbol.visibility === "private-name")
|
|
167
166
|
.map((symbol) => symbol.id),
|
|
168
167
|
);
|
|
169
|
-
let batches = 0;
|
|
170
|
-
let lookups = 0;
|
|
171
|
-
const batchesOf = (count: number): number => Math.ceil(count / cap);
|
|
172
168
|
|
|
173
169
|
const parts = new Map<number, readonly Type[]>();
|
|
174
170
|
/** The object types one type is: itself, or its constituents at any depth. */
|
|
@@ -179,7 +175,6 @@ export function contextualUses<Brand>(
|
|
|
179
175
|
}
|
|
180
176
|
let found: readonly Type[] = [];
|
|
181
177
|
if (type.isUnionType() || type.isIntersectionType()) {
|
|
182
|
-
lookups += 1;
|
|
183
178
|
const constituents = queries.constituents(type);
|
|
184
179
|
found = isAnswered(constituents) ? constituents.flatMap(partsOf) : [];
|
|
185
180
|
} else if (type.isObjectType()) {
|
|
@@ -198,7 +193,6 @@ export function contextualUses<Brand>(
|
|
|
198
193
|
}
|
|
199
194
|
const table = new Map<string, Member>();
|
|
200
195
|
const read = properties.of(type);
|
|
201
|
-
lookups += read.asked ? 1 : 0;
|
|
202
196
|
for (const property of isAnswered(read.properties) ? read.properties : []) {
|
|
203
197
|
table.set(property.name, {
|
|
204
198
|
ids: chains
|
|
@@ -219,7 +213,6 @@ export function contextualUses<Brand>(
|
|
|
219
213
|
};
|
|
220
214
|
|
|
221
215
|
const writes: ContextualUse[] = [];
|
|
222
|
-
batches += batchesOf(literals.length);
|
|
223
216
|
const contexts = queries.contextualTypes(
|
|
224
217
|
literals.map((one) => one.literal),
|
|
225
218
|
cap,
|
|
@@ -235,7 +228,6 @@ export function contextualUses<Brand>(
|
|
|
235
228
|
return name !== undefined && name.text === undefined ? [name.node] : [];
|
|
236
229
|
}),
|
|
237
230
|
);
|
|
238
|
-
batches += batchesOf(computed.length);
|
|
239
231
|
const keys = new Map<Node, string>();
|
|
240
232
|
(computed.length === 0
|
|
241
233
|
? []
|
|
@@ -269,7 +261,6 @@ export function contextualUses<Brand>(
|
|
|
269
261
|
});
|
|
270
262
|
|
|
271
263
|
const carried = flows.filter((flow) => !isObjectLiteralExpression(flow.value));
|
|
272
|
-
batches += batchesOf(carried.length);
|
|
273
264
|
const types = queries.typesAt(
|
|
274
265
|
carried.map((flow) => flow.value),
|
|
275
266
|
cap,
|
|
@@ -287,17 +278,46 @@ export function contextualUses<Brand>(
|
|
|
287
278
|
return members.length > 0 && members.every((member) => !member.own);
|
|
288
279
|
};
|
|
289
280
|
|
|
281
|
+
const literalTypes = new Map<number, boolean>();
|
|
282
|
+
/**
|
|
283
|
+
* Whether an object type is an object literal's own, inferred where no contextual type
|
|
284
|
+
* names it: every member a property an object literal of the target writes.
|
|
285
|
+
*/
|
|
286
|
+
const literalTyped = (part: Type): boolean => {
|
|
287
|
+
let known = literalTypes.get(part.id);
|
|
288
|
+
if (known === undefined) {
|
|
289
|
+
const members = [...membersOf(part).values()];
|
|
290
|
+
known =
|
|
291
|
+
members.length > 0 &&
|
|
292
|
+
members.every(
|
|
293
|
+
(member) =>
|
|
294
|
+
member.ids.length === 0 &&
|
|
295
|
+
member.declarations.length > 0 &&
|
|
296
|
+
member.declarations.every((handle) => literalProperty(handle) !== undefined),
|
|
297
|
+
);
|
|
298
|
+
literalTypes.set(part.id, known);
|
|
299
|
+
}
|
|
300
|
+
return known;
|
|
301
|
+
};
|
|
302
|
+
/** The name node of the object literal property one declaration handle names, if it is one. */
|
|
303
|
+
const literalProperty = (handle: NodeHandle): Node | undefined => {
|
|
304
|
+
const node = project.declarationAt(handle)?.node;
|
|
305
|
+
return node !== undefined &&
|
|
306
|
+
(isPropertyAssignment(node) || isShorthandPropertyAssignment(node)) &&
|
|
307
|
+
isObjectLiteralExpression(node.parent)
|
|
308
|
+
? node.name
|
|
309
|
+
: undefined;
|
|
310
|
+
};
|
|
311
|
+
|
|
290
312
|
const elements = new Map<number, Type | undefined>();
|
|
291
313
|
/** The element type of an array type, read once per type. */
|
|
292
314
|
const elementOf = (type: Type): Type | undefined => {
|
|
293
315
|
if (elements.has(type.id)) {
|
|
294
316
|
return elements.get(type.id);
|
|
295
317
|
}
|
|
296
|
-
lookups += 1;
|
|
297
318
|
const isArray = queries.isArray(type);
|
|
298
319
|
let element: Type | undefined;
|
|
299
320
|
if (isAnswered(isArray) && isArray) {
|
|
300
|
-
lookups += 1;
|
|
301
321
|
const held = queries.typeArguments(type);
|
|
302
322
|
element = isAnswered(held) ? held[0] : undefined;
|
|
303
323
|
}
|
|
@@ -312,7 +332,6 @@ export function contextualUses<Brand>(
|
|
|
312
332
|
if (known !== undefined) {
|
|
313
333
|
return known;
|
|
314
334
|
}
|
|
315
|
-
lookups += type.isTypeReference() ? 1 : 0;
|
|
316
335
|
const held = queries.typeArguments(type);
|
|
317
336
|
const found = isAnswered(held) ? held : [];
|
|
318
337
|
argumentsOf.set(type.id, found);
|
|
@@ -329,11 +348,9 @@ export function contextualUses<Brand>(
|
|
|
329
348
|
if (known !== undefined) {
|
|
330
349
|
return known;
|
|
331
350
|
}
|
|
332
|
-
lookups += 1;
|
|
333
351
|
let kind = SignatureKind.Call;
|
|
334
352
|
let signatures = queries.signaturesOf(type, kind);
|
|
335
353
|
if (isAnswered(signatures) && signatures.length === 0) {
|
|
336
|
-
lookups += 1;
|
|
337
354
|
kind = SignatureKind.Construct;
|
|
338
355
|
signatures = queries.signaturesOf(type, kind);
|
|
339
356
|
}
|
|
@@ -342,7 +359,6 @@ export function contextualUses<Brand>(
|
|
|
342
359
|
queries.parameterType(signature, index),
|
|
343
360
|
);
|
|
344
361
|
const result = queries.returnTypeOf(signature);
|
|
345
|
-
lookups += parameters.length + 1;
|
|
346
362
|
return {
|
|
347
363
|
kind,
|
|
348
364
|
parameters: parameters.map((one) => (isAnswered(one) ? one : undefined)),
|
|
@@ -379,9 +395,11 @@ export function contextualUses<Brand>(
|
|
|
379
395
|
const sources = partsOf(source).filter((one) => !targets.some((part) => part.id === one.id));
|
|
380
396
|
for (const one of sources) {
|
|
381
397
|
if (carries(one)) {
|
|
382
|
-
into.push({ source: one, targets,
|
|
398
|
+
into.push({ source: one, targets, sourceKind: "members" });
|
|
383
399
|
} else if (outside(one)) {
|
|
384
|
-
into.push({ source: one, targets,
|
|
400
|
+
into.push({ source: one, targets, sourceKind: "outside" });
|
|
401
|
+
} else if (literalTyped(one)) {
|
|
402
|
+
into.push({ source: one, targets, sourceKind: "literal" });
|
|
385
403
|
}
|
|
386
404
|
const element = elementOf(one);
|
|
387
405
|
const called = element === undefined ? callsOf(one) : [];
|
|
@@ -423,7 +441,7 @@ export function contextualUses<Brand>(
|
|
|
423
441
|
}
|
|
424
442
|
seen.add(type.id);
|
|
425
443
|
return partsOf(type).some((part) => {
|
|
426
|
-
if (carries(part) || outside(part)) {
|
|
444
|
+
if (carries(part) || outside(part) || literalTyped(part)) {
|
|
427
445
|
return true;
|
|
428
446
|
}
|
|
429
447
|
const element = elementOf(part);
|
|
@@ -438,12 +456,13 @@ export function contextualUses<Brand>(
|
|
|
438
456
|
const type = types[index];
|
|
439
457
|
return type === undefined || !isAnswered(type) || !mayCarry(type) ? [] : [{ flow, type }];
|
|
440
458
|
});
|
|
441
|
-
batches += batchesOf(sourced.length);
|
|
442
459
|
const positions = queries.contextualTypes(
|
|
443
460
|
sourced.map((one) => one.flow.value),
|
|
444
461
|
cap,
|
|
445
462
|
);
|
|
446
463
|
const reads: ContextualUse[] = [];
|
|
464
|
+
// A literal property writes a position's members once, however many values carry it there.
|
|
465
|
+
const carriedWrites = new Set<string>();
|
|
447
466
|
sourced.forEach(({ flow, type }, index) => {
|
|
448
467
|
const position = positions[index];
|
|
449
468
|
if (position === undefined || !isAnswered(position)) {
|
|
@@ -452,10 +471,24 @@ export function contextualUses<Brand>(
|
|
|
452
471
|
const checked: Checked[] = [];
|
|
453
472
|
compared(type, position, checked, new Set());
|
|
454
473
|
const ids = new Set<string>();
|
|
455
|
-
for (const { source, targets,
|
|
474
|
+
for (const { source, targets, sourceKind } of checked) {
|
|
456
475
|
const tables = targets.map(membersOf);
|
|
457
476
|
const sourceMembers = membersOf(source);
|
|
458
|
-
if (
|
|
477
|
+
if (sourceKind === "literal") {
|
|
478
|
+
for (const [name, member] of sourceMembers) {
|
|
479
|
+
const written = [...new Set(tables.flatMap((table) => table.get(name)?.ids ?? []))];
|
|
480
|
+
for (const at of written.length === 0 ? [] : member.declarations) {
|
|
481
|
+
const node = literalProperty(at);
|
|
482
|
+
const key = `${at.path}#${String(at.index)}>${written.join(",")}`;
|
|
483
|
+
if (node !== undefined && !carriedWrites.has(key)) {
|
|
484
|
+
carriedWrites.add(key);
|
|
485
|
+
writes.push({ at: node, from: flow.from, ids: written });
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
}
|
|
489
|
+
continue;
|
|
490
|
+
}
|
|
491
|
+
if (sourceKind === "outside") {
|
|
459
492
|
for (const table of tables) {
|
|
460
493
|
for (const [name, member] of table) {
|
|
461
494
|
if (sourceMembers.has(name)) {
|
|
@@ -504,7 +537,6 @@ export function contextualUses<Brand>(
|
|
|
504
537
|
isSpreadAssignment(property) ? [{ value: property.expression, from }] : [],
|
|
505
538
|
),
|
|
506
539
|
);
|
|
507
|
-
batches += batchesOf(spreads.length);
|
|
508
540
|
const spreadTypes = queries.typesAt(
|
|
509
541
|
spreads.map((one) => one.value),
|
|
510
542
|
cap,
|
|
@@ -531,5 +563,5 @@ export function contextualUses<Brand>(
|
|
|
531
563
|
reads.push({ at: value, from, ids });
|
|
532
564
|
}
|
|
533
565
|
});
|
|
534
|
-
return { writes, reads
|
|
566
|
+
return { writes, reads };
|
|
535
567
|
}
|