@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/reporters/sarif.ts
CHANGED
|
@@ -1,12 +1,19 @@
|
|
|
1
|
-
import type { Confidence, Severity } from "../config.ts";
|
|
2
1
|
import { jsonChunks } from "../json-chunks.ts";
|
|
3
|
-
import {
|
|
2
|
+
import type { KindRow, Confidence, Severity } from "../contract/contract.generated.ts";
|
|
3
|
+
import { KINDS } from "../kinds.ts";
|
|
4
4
|
import { declarationKey } from "../ref.ts";
|
|
5
|
-
import type {
|
|
5
|
+
import type {
|
|
6
|
+
ComponentsEntry,
|
|
7
|
+
Finding,
|
|
8
|
+
Report,
|
|
9
|
+
StaleSuppressionsEntry,
|
|
10
|
+
} from "../contract/report.generated.ts";
|
|
6
11
|
import { lineHashes, symbolFingerprint } from "./fingerprint.ts";
|
|
7
12
|
import { RenderError, type RenderOptions } from "./reporter.ts";
|
|
8
13
|
import { utf8Bytes } from "./sha256.ts";
|
|
9
14
|
import { withheldLine } from "./text.ts";
|
|
15
|
+
import { bytewise } from "../text/compare.ts";
|
|
16
|
+
import { message } from "../product.ts";
|
|
10
17
|
|
|
11
18
|
const SCHEMA =
|
|
12
19
|
"https://docs.oasis-open.org/sarif/sarif/v2.1.0/errata01/os/schemas/sarif-schema-2.1.0.json";
|
|
@@ -128,9 +135,7 @@ function lineHashCache(read: (path: string) => string): (at: Located) => string
|
|
|
128
135
|
try {
|
|
129
136
|
text = read(at.path);
|
|
130
137
|
} catch (error: unknown) {
|
|
131
|
-
throw new RenderError(
|
|
132
|
-
`read ${at.path} for its line fingerprint: ${error instanceof Error ? error.message : String(error)}`,
|
|
133
|
-
);
|
|
138
|
+
throw new RenderError(`read ${at.path} for its line fingerprint: ${message(error)}`);
|
|
134
139
|
}
|
|
135
140
|
hashes = lineHashes(text);
|
|
136
141
|
held.set(at.path, hashes);
|
|
@@ -151,8 +156,11 @@ interface Related {
|
|
|
151
156
|
readonly endLine: number;
|
|
152
157
|
}
|
|
153
158
|
|
|
159
|
+
/** The members the report lists for one component, none where it lists none. */
|
|
160
|
+
type MembersOf = (id: string) => ComponentsEntry["members"];
|
|
161
|
+
|
|
154
162
|
/** Every position a finding names beyond its own, in the mapping's order, the first hundred. */
|
|
155
|
-
function relatedOf(found:
|
|
163
|
+
function relatedOf(found: Finding, members: MembersOf): readonly Related[] {
|
|
156
164
|
const related: Related[] = [];
|
|
157
165
|
for (const one of found.details.implementations ?? []) {
|
|
158
166
|
related.push({ label: "implementation", at: one.position, endLine: one.position.end_line });
|
|
@@ -164,7 +172,7 @@ function relatedOf(found: WireFinding): readonly Related[] {
|
|
|
164
172
|
const at = found.details.name_literal;
|
|
165
173
|
related.push({ label: "name", at, endLine: at.end_line });
|
|
166
174
|
}
|
|
167
|
-
for (const one of found.component.
|
|
175
|
+
for (const one of members(found.component.id)) {
|
|
168
176
|
if (
|
|
169
177
|
declarationKey(one.ref, one.position.path) !==
|
|
170
178
|
declarationKey(found.symbol.ref, found.position.path)
|
|
@@ -188,7 +196,9 @@ function messageWithLinks(message: string, related: readonly Related[]): string
|
|
|
188
196
|
}
|
|
189
197
|
|
|
190
198
|
/** Every member of the finding the mapping places nowhere else, under its schema name. */
|
|
191
|
-
|
|
199
|
+
/** A result's member bag, its component holding the members the report lists for it once. */
|
|
200
|
+
function propertiesOf(found: Finding, members: MembersOf): Record<string, unknown> {
|
|
201
|
+
const listed = members(found.component.id);
|
|
192
202
|
return {
|
|
193
203
|
language: found.language,
|
|
194
204
|
symbol: found.symbol,
|
|
@@ -199,7 +209,7 @@ function propertiesOf(found: WireFinding): Record<string, unknown> {
|
|
|
199
209
|
: { liveness_relation: found.liveness_relation }),
|
|
200
210
|
test_only: found.test_only,
|
|
201
211
|
generated: found.generated,
|
|
202
|
-
component: found.component,
|
|
212
|
+
component: listed.length === 0 ? found.component : { ...found.component, members: listed },
|
|
203
213
|
retained_by: found.retained_by,
|
|
204
214
|
configurations: found.configurations,
|
|
205
215
|
consumers_loaded: found.consumers_loaded,
|
|
@@ -217,11 +227,12 @@ function ruleIndex(index: ReadonlyMap<string, number>, code: string): number {
|
|
|
217
227
|
}
|
|
218
228
|
|
|
219
229
|
function findingResult(
|
|
220
|
-
found:
|
|
230
|
+
found: Finding,
|
|
221
231
|
index: ReadonlyMap<string, number>,
|
|
222
232
|
hashOf: (at: Located) => string,
|
|
233
|
+
members: MembersOf,
|
|
223
234
|
): Record<string, unknown> {
|
|
224
|
-
const related = relatedOf(found);
|
|
235
|
+
const related = relatedOf(found, members);
|
|
225
236
|
return {
|
|
226
237
|
ruleId: found.code,
|
|
227
238
|
ruleIndex: ruleIndex(index, found.code),
|
|
@@ -241,13 +252,13 @@ function findingResult(
|
|
|
241
252
|
primaryLocationLineHash: hashOf(found.position),
|
|
242
253
|
"deadsetSymbolRef/v1": symbolFingerprint(found.code, found.symbol.ref),
|
|
243
254
|
},
|
|
244
|
-
properties: propertiesOf(found),
|
|
255
|
+
properties: propertiesOf(found, members),
|
|
245
256
|
};
|
|
246
257
|
}
|
|
247
258
|
|
|
248
259
|
/** A stale suppression at the failing level, at its own site; it is no finding, so it carries no member bag. */
|
|
249
260
|
function staleResult(
|
|
250
|
-
stale:
|
|
261
|
+
stale: StaleSuppressionsEntry,
|
|
251
262
|
index: ReadonlyMap<string, number>,
|
|
252
263
|
hashOf: (at: Located) => string,
|
|
253
264
|
): Record<string, unknown> {
|
|
@@ -275,11 +286,13 @@ export function sarif(report: Report, options: RenderOptions): Iterable<string>
|
|
|
275
286
|
const ruleList = rules(kinds);
|
|
276
287
|
const index = new Map(kinds.map((kind, at) => [kind.code, at]));
|
|
277
288
|
const hashOf = lineHashCache(options.readSource);
|
|
289
|
+
const listed = new Map((report.components ?? []).map((one) => [one.id, one.members]));
|
|
290
|
+
const members: MembersOf = (id) => listed.get(id) ?? [];
|
|
278
291
|
const results = [
|
|
279
|
-
...report.findings.map((found) => findingResult(found, index, hashOf)),
|
|
292
|
+
...report.findings.map((found) => findingResult(found, index, hashOf, members)),
|
|
280
293
|
...report.stale_suppressions.map((stale) => staleResult(stale, index, hashOf)),
|
|
281
294
|
];
|
|
282
|
-
const languages = [...report.analyzer.languages].sort().join("+");
|
|
295
|
+
const languages = [...report.analyzer.languages].sort(bytewise).join("+");
|
|
283
296
|
const withheld = withheldLine(report.totals);
|
|
284
297
|
const log = {
|
|
285
298
|
$schema: SCHEMA,
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import { CHUNK_LENGTH } from "../json-chunks.ts";
|
|
11
11
|
import { RenderError } from "./reporter.ts";
|
|
12
12
|
import { utf8Bytes } from "./sha256.ts";
|
|
13
|
+
import { bytewise } from "../text/compare.ts";
|
|
13
14
|
|
|
14
15
|
/** A template that does not parse, which refuses the invocation before any analysis. */
|
|
15
16
|
export class TemplateError extends Error {
|
|
@@ -618,7 +619,7 @@ function formatted(value: Value, nested: boolean): string {
|
|
|
618
619
|
}
|
|
619
620
|
const object: ValueObject = value;
|
|
620
621
|
const entries = Object.keys(object)
|
|
621
|
-
.sort()
|
|
622
|
+
.sort(bytewise)
|
|
622
623
|
.map((key) => `${key}:${formatted(object[key] ?? null, true)}`);
|
|
623
624
|
return `map[${entries.join(" ")}]`;
|
|
624
625
|
}
|
|
@@ -647,28 +648,11 @@ function compareBasic(name: string, a: Value, b: Value): number {
|
|
|
647
648
|
return Number.NaN;
|
|
648
649
|
}
|
|
649
650
|
if (kind === "string") {
|
|
650
|
-
return
|
|
651
|
+
return bytewise(a as string, b as string);
|
|
651
652
|
}
|
|
652
653
|
return (a as number) < (b as number) ? -1 : 1;
|
|
653
654
|
}
|
|
654
655
|
|
|
655
|
-
/**
|
|
656
|
-
* Two strings ordered by the bytes of their UTF-8 encodings, which is the order of their
|
|
657
|
-
* code points: the order of their UTF-16 code units differs above U+FFFF.
|
|
658
|
-
*/
|
|
659
|
-
function byCodePoints(a: string, b: string): number {
|
|
660
|
-
let at = 0;
|
|
661
|
-
while (at < a.length && at < b.length) {
|
|
662
|
-
const x = a.codePointAt(at) ?? 0;
|
|
663
|
-
const y = b.codePointAt(at) ?? 0;
|
|
664
|
-
if (x !== y) {
|
|
665
|
-
return x < y ? -1 : 1;
|
|
666
|
-
}
|
|
667
|
-
at += x > 0xffff ? 2 : 1;
|
|
668
|
-
}
|
|
669
|
-
return a.length - b.length;
|
|
670
|
-
}
|
|
671
|
-
|
|
672
656
|
/** The escapes `%q` writes for the control characters that have one of their own. */
|
|
673
657
|
const QUOTED_ESCAPES: Readonly<Record<string, string>> = {
|
|
674
658
|
'"': '\\"',
|
|
@@ -1022,7 +1006,7 @@ class Execution {
|
|
|
1022
1006
|
entries = value.map((one, i) => [i, one]);
|
|
1023
1007
|
} else if (isObject(value)) {
|
|
1024
1008
|
entries = Object.keys(value)
|
|
1025
|
-
.sort()
|
|
1009
|
+
.sort(bytewise)
|
|
1026
1010
|
.map((key) => [key, value[key] ?? null]);
|
|
1027
1011
|
} else {
|
|
1028
1012
|
throw new RenderError(`range cannot iterate over a ${kindOf(value)}`);
|
package/src/reporters/text.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { coalesced } from "../json-chunks.ts";
|
|
2
|
-
import type { Report,
|
|
2
|
+
import type { Report, Totals } from "../contract/report.generated.ts";
|
|
3
3
|
|
|
4
4
|
/** The kind token and the confidence a stale suppression is rendered with, both fixed. */
|
|
5
5
|
const STALE_KIND = "suppression";
|
|
@@ -11,7 +11,7 @@ function counted(n: number, one: string, many: string): string {
|
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
/** The report's totals in one line, in the order the report declares them. */
|
|
14
|
-
function summary(totals:
|
|
14
|
+
function summary(totals: Totals): string {
|
|
15
15
|
const { allow, warn, deny } = totals.by_severity;
|
|
16
16
|
return [
|
|
17
17
|
`summary: ${counted(totals.findings, "finding", "findings")} (${String(allow)} allow, ${String(warn)} warn, ${String(deny)} deny)`,
|
|
@@ -31,7 +31,7 @@ const WITHHELD_ORDER = ["probable", "possible"] as const;
|
|
|
31
31
|
* The line naming what the minimum confidence withheld and the setting that shows it all,
|
|
32
32
|
* or undefined where it withheld nothing.
|
|
33
33
|
*/
|
|
34
|
-
export function withheldLine(totals:
|
|
34
|
+
export function withheldLine(totals: Totals): string | undefined {
|
|
35
35
|
const named = WITHHELD_ORDER.filter((confidence) => totals.withheld[confidence] > 0);
|
|
36
36
|
const lowest = named.at(-1);
|
|
37
37
|
if (lowest === undefined) {
|