@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/dist/src/session.js
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
import { API, SymbolFlags } from "@typescript/native/sync";
|
|
2
2
|
import { componentLayer, mapperManifest } from "./component-layer.js";
|
|
3
|
-
import { DiscoveryError } from "./discover.js";
|
|
4
3
|
import { joinPath } from "./paths.js";
|
|
5
4
|
import { queriesOf, UnansweredLog, } from "./query.js";
|
|
5
|
+
import { MANIFEST } from "./fs/manifest.js";
|
|
6
|
+
/** The most questions one round trip carries. */
|
|
7
|
+
const BATCH = 2048;
|
|
8
|
+
/** Asks one question of every item, in round trips of at most {@link BATCH}, answers in order. */
|
|
9
|
+
export function batched(engine, items, question) {
|
|
10
|
+
const answers = [];
|
|
11
|
+
for (let at = 0; at < items.length; at += BATCH) {
|
|
12
|
+
answers.push(...engine.batch(items.slice(at, at + BATCH).map(question)));
|
|
13
|
+
}
|
|
14
|
+
return answers;
|
|
15
|
+
}
|
|
6
16
|
/**
|
|
7
17
|
* Opens the compiler client the analysis reads through.
|
|
8
18
|
*
|
|
@@ -16,7 +26,7 @@ export function openEngine(options) {
|
|
|
16
26
|
if (components !== undefined && components.extensions.length > 0) {
|
|
17
27
|
const made = components.host.temporaryDirectory();
|
|
18
28
|
try {
|
|
19
|
-
components.host.writeDocument(joinPath(made.path,
|
|
29
|
+
components.host.writeDocument(joinPath(made.path, MANIFEST), [
|
|
20
30
|
mapperManifest(components.host.componentMapperCommand()),
|
|
21
31
|
]);
|
|
22
32
|
}
|
|
@@ -128,6 +138,9 @@ function viewOf(project, configFile, engine, log) {
|
|
|
128
138
|
ownKeys ??= new Set(ownSourceFiles().map((file) => file.path));
|
|
129
139
|
return ownKeys;
|
|
130
140
|
},
|
|
141
|
+
resolvedFileNames: (specifiers) => batched(engine, specifiers, (node) => project.program.getResolvedModuleFromModuleSpecifier.gen(node, node.getSourceFile().fileName)).map((resolved) => resolved === undefined || resolved.resolvedFileName === ""
|
|
142
|
+
? undefined
|
|
143
|
+
: resolved.resolvedFileName),
|
|
131
144
|
handle: (node) => ({ node }),
|
|
132
145
|
symbolsAt: (handles, cap) => queries.symbolsAt(handles.map(({ node }) => node), cap),
|
|
133
146
|
resolvedSymbolAt: ({ node }) => queries.resolvedSymbol(node),
|
|
@@ -252,14 +265,13 @@ function projectsOf(snapshot, built, written) {
|
|
|
252
265
|
return opened;
|
|
253
266
|
}
|
|
254
267
|
/**
|
|
255
|
-
*
|
|
256
|
-
*
|
|
257
|
-
*
|
|
258
|
-
*
|
|
259
|
-
* `first` runs over every opened project before the first visit and `last` after the last,
|
|
260
|
-
* both while the client answers; the snapshot and the client are then released.
|
|
268
|
+
* Opens every project the compiler configurations name in one never updated snapshot of one
|
|
269
|
+
* client, and hands them to `use` while the client answers; the snapshot and the client are
|
|
270
|
+
* then released. A configuration `options.programs` describes is built as that program, or
|
|
271
|
+
* opened from the configuration it writes. One the snapshot holds nothing for has no view.
|
|
261
272
|
*/
|
|
262
|
-
export function
|
|
273
|
+
export function openSession(engine, configFiles, options, use) {
|
|
274
|
+
const programs = options.programs ?? new Map();
|
|
263
275
|
try {
|
|
264
276
|
const built = [];
|
|
265
277
|
const params = [];
|
|
@@ -281,30 +293,13 @@ export function runSession(engine, configFiles, visit, unopened = "refuse", prog
|
|
|
281
293
|
const opened = projectsOf(snapshot, built, written);
|
|
282
294
|
const log = new UnansweredLog();
|
|
283
295
|
const views = [];
|
|
284
|
-
const missing = [];
|
|
285
296
|
for (const configFile of configFiles) {
|
|
286
297
|
const project = opened.get(configFile);
|
|
287
|
-
if (project
|
|
288
|
-
|
|
289
|
-
throw new DiscoveryError(`${configFile} opened no project`, []);
|
|
290
|
-
}
|
|
291
|
-
missing.push(configFile);
|
|
292
|
-
continue;
|
|
298
|
+
if (project !== undefined) {
|
|
299
|
+
views.push(viewOf(project, configFile, engine, log));
|
|
293
300
|
}
|
|
294
|
-
views.push(viewOf(project, configFile, engine, log));
|
|
295
301
|
}
|
|
296
|
-
|
|
297
|
-
configFile: view.configFile,
|
|
298
|
-
fileNames: () => view.ownSourceFiles().map((file) => file.fileName),
|
|
299
|
-
})));
|
|
300
|
-
const projects = views.map((view) => visit(view));
|
|
301
|
-
last();
|
|
302
|
-
return {
|
|
303
|
-
projects,
|
|
304
|
-
unopened: missing,
|
|
305
|
-
timing: engine.getTimingInfo(),
|
|
306
|
-
unanswered: log.questions,
|
|
307
|
-
};
|
|
302
|
+
return use({ views }, () => log.questions);
|
|
308
303
|
}
|
|
309
304
|
finally {
|
|
310
305
|
snapshot.dispose();
|
|
@@ -314,3 +309,16 @@ export function runSession(engine, configFiles, visit, unopened = "refuse", prog
|
|
|
314
309
|
engine.close();
|
|
315
310
|
}
|
|
316
311
|
}
|
|
312
|
+
/**
|
|
313
|
+
* Runs `visit` over the project {@link openSession} opens for each configuration, and answers
|
|
314
|
+
* in their order; a configuration the snapshot opens nothing for throws before any visit.
|
|
315
|
+
*/
|
|
316
|
+
export function runSession(engine, configFiles, visit) {
|
|
317
|
+
return openSession(engine, configFiles, {}, (opened) => {
|
|
318
|
+
const unopened = configFiles.find((configFile) => !opened.views.some((view) => view.configFile === configFile));
|
|
319
|
+
if (unopened !== undefined) {
|
|
320
|
+
throw new Error(`${unopened} opened no project`);
|
|
321
|
+
}
|
|
322
|
+
return { projects: opened.views.map((view) => visit(view)), timing: engine.getTimingInfo() };
|
|
323
|
+
});
|
|
324
|
+
}
|
package/dist/src/source-files.js
CHANGED
|
@@ -3,14 +3,13 @@
|
|
|
3
3
|
* in a document or a string names one: as the file itself, or as a file the
|
|
4
4
|
* compiler emits from it.
|
|
5
5
|
*/
|
|
6
|
-
import { commonDirectory, emittedFrom } from "./emit-map.js";
|
|
6
|
+
import { commonDirectory, emittedFrom } from "./load/emit-map.js";
|
|
7
7
|
import { dirnamePath, joinPath, relativePath, resolvePath } from "./paths.js";
|
|
8
|
+
import { OUTPUT_EXTENSIONS } from "./extensions.js";
|
|
8
9
|
/** The one character a subpath pattern of a manifest's `exports` holds. */
|
|
9
10
|
const SUBPATH_WILDCARD = "*";
|
|
10
11
|
/** The extension a source file's name drops when the project writes it out. */
|
|
11
12
|
const SOURCE_EXTENSION = /\.[cm]?[jt]sx?$/u;
|
|
12
|
-
/** The extensions the project may write a source file's output under. */
|
|
13
|
-
const OUTPUT_EXTENSIONS = [".js", ".mjs", ".cjs", ".jsx", ".d.ts", ".d.mts", ".d.cts"];
|
|
14
13
|
/**
|
|
15
14
|
* Whether one path is what a subpath pattern stands for: the text before the
|
|
16
15
|
* wildcard, any run of characters including the solidus, then the text after it.
|
|
@@ -43,13 +42,10 @@ function layoutOf(project, fileNames) {
|
|
|
43
42
|
};
|
|
44
43
|
}
|
|
45
44
|
/**
|
|
46
|
-
* The lookups over one project's own files.
|
|
47
|
-
*
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
-
* extension is one the compiler emits from a source extension, and a path below the
|
|
51
|
-
* output directory is read below the directory the compiler emits from, which the
|
|
52
|
-
* configuration declares or which is the directory every input file shares.
|
|
45
|
+
* The lookups over one project's own files. A path naming an emitted file is read back to its
|
|
46
|
+
* source through the project's own emit mapping alone: the extension is one the compiler emits
|
|
47
|
+
* from a source extension, and a path below the output directory is read below the directory
|
|
48
|
+
* the compiler emits from, which the configuration declares or every input file shares.
|
|
53
49
|
*/
|
|
54
50
|
export function sourceFilesOf(project, targetRoot) {
|
|
55
51
|
const byName = new Map();
|
package/dist/src/stores.js
CHANGED
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { isGetAccessorDeclaration, isSetAccessorDeclaration, } from "@typescript/native/ast";
|
|
7
7
|
import { nodeKey } from "./inventory.js";
|
|
8
|
+
import { classedAsTest, madeByTestCode, withheldBy } from "./tests/file-class.js";
|
|
8
9
|
/** The class members one project's own files declare by a getter or a setter. */
|
|
9
10
|
export function accessorsOf(project, held) {
|
|
10
11
|
const found = [];
|
|
@@ -25,9 +26,10 @@ export function accessorsOf(project, held) {
|
|
|
25
26
|
/** The run's stores, from what each configuration contributed, the records and the mode. */
|
|
26
27
|
export function storesOf(per, exempt, mode) {
|
|
27
28
|
return {
|
|
28
|
-
references: per.flatMap((one) => one.references.filter((reference) => !mode
|
|
29
|
+
references: per.flatMap((one) => one.references.filter((reference) => !withheldBy(mode, reference, one.support))),
|
|
29
30
|
readInTests: new Set(per.flatMap((one) => one.references
|
|
30
|
-
.filter((reference) => reference.
|
|
31
|
+
.filter((reference) => reference.use !== "write" &&
|
|
32
|
+
classedAsTest(madeByTestCode(reference, one.support), reference.consumer !== undefined, mode))
|
|
31
33
|
.map((reference) => reference.to))),
|
|
32
34
|
accessors: new Set(per.flatMap((one) => one.accessors)),
|
|
33
35
|
exempt: new Set(exempt.map((record) => record.id)),
|
|
@@ -4,11 +4,13 @@
|
|
|
4
4
|
* one record shape, so one decoder and one matcher serve both, and a row moves into the
|
|
5
5
|
* ignore file by gaining a maintainer's reason.
|
|
6
6
|
*/
|
|
7
|
+
import { CODE } from "./contract/contract.generated.js";
|
|
8
|
+
import { readTargetDocument } from "./fs/document.js";
|
|
7
9
|
import { jsonChunks } from "./json-chunks.js";
|
|
8
|
-
import {
|
|
9
|
-
import { positionAt, walkDocument } from "./json-document.js";
|
|
10
|
+
import { isRecord, positionAt, readStrict, StrictJSONError } from "./json-document.js";
|
|
10
11
|
import { declarationKey } from "./ref.js";
|
|
11
|
-
import { CODE_FORM,
|
|
12
|
+
import { CODE_FORM, SuppressionError, blankReason, isEntryPath, isPartKind, isSymbolRef, siteText, } from "./suppress.js";
|
|
13
|
+
import { message } from "./product.js";
|
|
12
14
|
/** The name and the location the grammar fixes for the ignore file. */
|
|
13
15
|
export const IGNORE_FILE = "deadset-ignore.json";
|
|
14
16
|
/** The name and the location the grammar fixes for the baseline. */
|
|
@@ -42,9 +44,6 @@ const PATH_WANT = "a path relative to the target root, with the solidus as separ
|
|
|
42
44
|
function documentSite(shape) {
|
|
43
45
|
return { path: shape.file, line: 0, column: 0 };
|
|
44
46
|
}
|
|
45
|
-
function isObject(value) {
|
|
46
|
-
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
47
|
-
}
|
|
48
47
|
/**
|
|
49
48
|
* Reads one entry or row: the records it binds, the refusals it carries, or the
|
|
50
49
|
* malformed value that ends the run.
|
|
@@ -53,7 +52,7 @@ function readRecord(value, site, byReference, shape) {
|
|
|
53
52
|
const refuse = (text, want) => {
|
|
54
53
|
throw new SuppressionError(shape.mechanism, siteText(site), text, want);
|
|
55
54
|
};
|
|
56
|
-
if (!
|
|
55
|
+
if (!isRecord(value)) {
|
|
57
56
|
return refuse(JSON.stringify(value), shape.recordWant);
|
|
58
57
|
}
|
|
59
58
|
for (const [key, held] of Object.entries(value)) {
|
|
@@ -99,10 +98,10 @@ function readRecord(value, site, byReference, shape) {
|
|
|
99
98
|
};
|
|
100
99
|
const refusals = [];
|
|
101
100
|
if (blankReason(reason)) {
|
|
102
|
-
refusals.push({ ...written, reported:
|
|
101
|
+
refusals.push({ ...written, reported: CODE.suppressionWithoutReason });
|
|
103
102
|
}
|
|
104
103
|
if (written.path === "") {
|
|
105
|
-
refusals.push({ ...written, reported:
|
|
104
|
+
refusals.push({ ...written, reported: CODE.unscopedIgnoreEntry });
|
|
106
105
|
}
|
|
107
106
|
if (refusals.length > 0) {
|
|
108
107
|
return { records: [], refusals };
|
|
@@ -131,28 +130,27 @@ function byReferenceOf(symbols) {
|
|
|
131
130
|
}
|
|
132
131
|
/** Reads one document at the target root, binding each record against the run's declarations. */
|
|
133
132
|
function readDocument(host, targetRoot, symbols, shape) {
|
|
134
|
-
const
|
|
135
|
-
if (
|
|
133
|
+
const text = readTargetDocument(host, targetRoot, shape.file);
|
|
134
|
+
if (text === undefined) {
|
|
136
135
|
return { records: [], refusals: [] };
|
|
137
136
|
}
|
|
138
|
-
const text = host.readFile(file);
|
|
139
137
|
const malformed = (detail, site = documentSite(shape)) => {
|
|
140
138
|
throw new SuppressionError(shape.mechanism, siteText(site), detail, shape.documentWant);
|
|
141
139
|
};
|
|
142
|
-
let
|
|
140
|
+
let document;
|
|
143
141
|
try {
|
|
144
|
-
|
|
142
|
+
document = readStrict(text, shape.array);
|
|
145
143
|
}
|
|
146
144
|
catch (error) {
|
|
147
|
-
|
|
145
|
+
if (!(error instanceof StrictJSONError)) {
|
|
146
|
+
throw error;
|
|
147
|
+
}
|
|
148
|
+
return malformed(error.message, positionAt(text, shape.file, error.offset));
|
|
148
149
|
}
|
|
149
|
-
|
|
150
|
+
const parsed = document.value;
|
|
151
|
+
if (!isRecord(parsed)) {
|
|
150
152
|
return malformed(shape.file);
|
|
151
153
|
}
|
|
152
|
-
const walk = walkDocument(text, shape.array);
|
|
153
|
-
if (walk.twice !== undefined) {
|
|
154
|
-
malformed(`the member ${JSON.stringify(walk.twice.name)} is written twice, so neither value is chosen`, positionAt(text, shape.file, walk.twice.offset));
|
|
155
|
-
}
|
|
156
154
|
for (const key of Object.keys(parsed)) {
|
|
157
155
|
if (key !== "description" && key !== shape.array) {
|
|
158
156
|
malformed(`the member ${JSON.stringify(key)} is not one the grammar declares`);
|
|
@@ -167,7 +165,7 @@ function readDocument(host, targetRoot, symbols, shape) {
|
|
|
167
165
|
const records = [];
|
|
168
166
|
const refusals = [];
|
|
169
167
|
held.forEach((value, index) => {
|
|
170
|
-
const offset =
|
|
168
|
+
const offset = document.starts.get(index);
|
|
171
169
|
const site = offset === undefined ? documentSite(shape) : positionAt(text, shape.file, offset);
|
|
172
170
|
const read = readRecord(value, site, byReference, shape);
|
|
173
171
|
records.push(...read.records);
|
|
@@ -227,9 +225,9 @@ export function otherSchemeRows(text, own = OWN_SCHEME) {
|
|
|
227
225
|
parsed = JSON.parse(text);
|
|
228
226
|
}
|
|
229
227
|
catch (error) {
|
|
230
|
-
return refuse(
|
|
228
|
+
return refuse(message(error));
|
|
231
229
|
}
|
|
232
|
-
const held =
|
|
230
|
+
const held = isRecord(parsed) ? parsed[BASELINE_SHAPE.array] : undefined;
|
|
233
231
|
if (!Array.isArray(held)) {
|
|
234
232
|
return refuse(BASELINE_SHAPE.documentWant);
|
|
235
233
|
}
|
|
@@ -238,7 +236,7 @@ export function otherSchemeRows(text, own = OWN_SCHEME) {
|
|
|
238
236
|
readRecord(value, documentSite(BASELINE_SHAPE), new Map(), BASELINE_SHAPE);
|
|
239
237
|
}
|
|
240
238
|
catch (error) {
|
|
241
|
-
return refuse(
|
|
239
|
+
return refuse(message(error));
|
|
242
240
|
}
|
|
243
241
|
// readRecord has checked every member is a string and the code and symbol are present.
|
|
244
242
|
const { code, symbol, path, reason } = value;
|
|
@@ -279,10 +277,9 @@ function* separatorsEscaped(pieces) {
|
|
|
279
277
|
* A baseline holding one row per finding, in the order given, which is the report's, and
|
|
280
278
|
* the other language's rows `kept`, Go's rows ahead of TypeScript's and each scheme's in
|
|
281
279
|
* the order given, so two analyzers writing one document in either order write the same
|
|
282
|
-
* bytes, in the form grammar/suppression.md fixes. Every
|
|
283
|
-
*
|
|
284
|
-
*
|
|
285
|
-
* rather than written, because the grammar requires a reason on every row.
|
|
280
|
+
* bytes, in the form grammar/suppression.md fixes. Every row carries the provenance as
|
|
281
|
+
* its reason, so a finding missing a value a row needs, or an identity missing its name
|
|
282
|
+
* or version, is refused rather than written.
|
|
286
283
|
*/
|
|
287
284
|
export function writeBaseline(findings, provenance, kept = []) {
|
|
288
285
|
if (provenance.analyzer === "" || provenance.version === "") {
|
|
@@ -3,13 +3,14 @@
|
|
|
3
3
|
* one or more codes and a reason, and binding to every declaration that begins on the line
|
|
4
4
|
* below it, or on its own line where it trails a token there.
|
|
5
5
|
*/
|
|
6
|
-
import {
|
|
6
|
+
import { CODE } from "./contract/contract.generated.js";
|
|
7
|
+
import { SyntaxKind } from "@typescript/native/ast";
|
|
7
8
|
import { importBindings } from "./import-bindings.js";
|
|
8
|
-
import {
|
|
9
|
-
import {
|
|
9
|
+
import { nodeKey } from "./inventory.js";
|
|
10
|
+
import { relativePath } from "./paths.js";
|
|
11
|
+
import { byPosition, lineEnd, positionKey, renderPosition, startLine, tokenStart, } from "./position.js";
|
|
10
12
|
import { importRef } from "./ref.js";
|
|
11
|
-
import {
|
|
12
|
-
import { isPartKind, SUPPRESSION_WITHOUT_REASON, SuppressionError, siteText, } from "./suppress.js";
|
|
13
|
+
import { isPartKind, SuppressionError, siteText, } from "./suppress.js";
|
|
13
14
|
/**
|
|
14
15
|
* The three expressions the grammar applies to the text of each line comment, in this
|
|
15
16
|
* order: a comment in the namespace, a well-formed directive, and a directive that lacks
|
|
@@ -54,43 +55,6 @@ const LITERALS = new Set([
|
|
|
54
55
|
SyntaxKind.RegularExpressionLiteral,
|
|
55
56
|
SyntaxKind.JsxText,
|
|
56
57
|
]);
|
|
57
|
-
/** Whether one character ends a line, under the language's line terminators. */
|
|
58
|
-
function endsLine(char) {
|
|
59
|
-
return char === "\n" || char === "\r" || char === "\u2028" || char === "\u2029";
|
|
60
|
-
}
|
|
61
|
-
/** The offset where the line holding `from` ends. */
|
|
62
|
-
function lineEnd(text, from) {
|
|
63
|
-
let at = from;
|
|
64
|
-
while (at < text.length && !endsLine(text[at])) {
|
|
65
|
-
at += 1;
|
|
66
|
-
}
|
|
67
|
-
return at;
|
|
68
|
-
}
|
|
69
|
-
/**
|
|
70
|
-
* The offset of the first token at or after `from`: whitespace, comments and a leading
|
|
71
|
-
* hashbang are trivia.
|
|
72
|
-
*/
|
|
73
|
-
export function tokenStart(text, from) {
|
|
74
|
-
let at = from;
|
|
75
|
-
if (at === 0 && text.startsWith("#!")) {
|
|
76
|
-
at = lineEnd(text, 0);
|
|
77
|
-
}
|
|
78
|
-
for (;;) {
|
|
79
|
-
if (/\s/u.test(text[at] ?? "")) {
|
|
80
|
-
at += 1;
|
|
81
|
-
}
|
|
82
|
-
else if (text.startsWith("//", at)) {
|
|
83
|
-
at = lineEnd(text, at);
|
|
84
|
-
}
|
|
85
|
-
else if (text.startsWith("/*", at)) {
|
|
86
|
-
const close = text.indexOf("*/", at + 2);
|
|
87
|
-
at = close < 0 ? text.length : close + 2;
|
|
88
|
-
}
|
|
89
|
-
else {
|
|
90
|
-
return at;
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
58
|
/**
|
|
95
59
|
* Every `//` line comment of one file, in file order. The text between tokens is read as
|
|
96
60
|
* the language reads it: a block comment holds no line comment, and the literal tokens the
|
|
@@ -139,55 +103,42 @@ function lineComments(file) {
|
|
|
139
103
|
function bindingKey(one) {
|
|
140
104
|
return `${one.declared?.id ?? ""}\u0000${one.part.id}`;
|
|
141
105
|
}
|
|
106
|
+
/** The placed declarations of a project by the path of the file each is in. */
|
|
107
|
+
function placedByPath(held, symbols) {
|
|
108
|
+
const byPath = new Map();
|
|
109
|
+
for (const [id, placed] of held.placement) {
|
|
110
|
+
const one = symbols.get(id);
|
|
111
|
+
const holder = symbols.get(placed.holder);
|
|
112
|
+
if (one === undefined || holder === undefined) {
|
|
113
|
+
continue;
|
|
114
|
+
}
|
|
115
|
+
const at = byPath.get(one.position.path) ?? [];
|
|
116
|
+
at.push({ one, holder, startLines: placed.startLines, partLines: placed.partLines });
|
|
117
|
+
byPath.set(one.position.path, at);
|
|
118
|
+
}
|
|
119
|
+
return byPath;
|
|
120
|
+
}
|
|
142
121
|
/**
|
|
143
|
-
* The declarations of one file by the line each
|
|
144
|
-
*
|
|
145
|
-
* keyword, and a variable written on a later line of the statement also begins there. A
|
|
146
|
-
* function also begins, for a directive, on the line of each of its parameters, and a
|
|
147
|
-
* class, for a part kind, on the lines of its constructor and its constructor's parameters.
|
|
122
|
+
* The declarations of one file by the line a directive binds each on, as the inventory
|
|
123
|
+
* places them, and each import binding of the file on its statement's lines.
|
|
148
124
|
*/
|
|
149
|
-
function declarationLines(file,
|
|
125
|
+
function declarationLines(file, placed, held, targetRoot) {
|
|
150
126
|
const below = new Map();
|
|
151
|
-
const add = (
|
|
152
|
-
const line = file.getLineAndCharacterOfPosition(tokenStart(file.text, offset)).line + 1;
|
|
127
|
+
const add = (line, one) => {
|
|
153
128
|
const at = below.get(line) ?? [];
|
|
154
129
|
if (!at.some((known) => bindingKey(known) === bindingKey(one))) {
|
|
155
130
|
at.push(one);
|
|
156
131
|
}
|
|
157
132
|
below.set(line, at);
|
|
158
133
|
};
|
|
159
|
-
const
|
|
160
|
-
const
|
|
161
|
-
|
|
162
|
-
};
|
|
163
|
-
const visit = (node) => {
|
|
164
|
-
const one = declaredAt(node);
|
|
165
|
-
const owner = isConstructorDeclaration(node) ? declaredAt(node.parent) : undefined;
|
|
166
|
-
if (owner !== undefined && isConstructorDeclaration(node)) {
|
|
167
|
-
for (const at of [node, ...node.parameters.filter((one) => !isParameterProperty(one))]) {
|
|
168
|
-
add(at.pos, { declared: undefined, part: owner });
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
const holder = one !== undefined && isParameterProperty(node) ? declaredAt(node.parent.parent) : one;
|
|
172
|
-
if (one !== undefined && holder !== undefined) {
|
|
173
|
-
add(node.pos, { declared: one, part: holder });
|
|
134
|
+
for (const { one, holder, startLines, partLines } of placed) {
|
|
135
|
+
for (const line of startLines) {
|
|
136
|
+
add(line, { declared: one, part: holder });
|
|
174
137
|
}
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
// line above it, inside the parameter list, and the directive binds the function.
|
|
178
|
-
for (const parameter of signatureOf(node)?.parameters ?? []) {
|
|
179
|
-
add(parameter.pos, { declared: one, part: one });
|
|
180
|
-
}
|
|
181
|
-
const list = node.parent;
|
|
182
|
-
if (node.kind === SyntaxKind.VariableDeclaration &&
|
|
183
|
-
list.kind === SyntaxKind.VariableDeclarationList &&
|
|
184
|
-
list.parent.kind === SyntaxKind.VariableStatement) {
|
|
185
|
-
add(list.parent.pos, { declared: one, part: one });
|
|
186
|
-
}
|
|
138
|
+
for (const line of partLines) {
|
|
139
|
+
add(line, { declared: undefined, part: one });
|
|
187
140
|
}
|
|
188
|
-
|
|
189
|
-
};
|
|
190
|
-
file.forEachChild(visit);
|
|
141
|
+
}
|
|
191
142
|
// An import binding is a subject of its own, bound on its line as a declaration is.
|
|
192
143
|
const fileId = held.declarations.get(nodeKey(file, file));
|
|
193
144
|
const moduleRef = held.symbols.find((symbol) => symbol.id === fileId)?.ref ?? "";
|
|
@@ -199,7 +150,7 @@ function declarationLines(file, held, symbols, targetRoot) {
|
|
|
199
150
|
statement = statement.parent;
|
|
200
151
|
}
|
|
201
152
|
for (const at of [statement.pos, name.getStart()]) {
|
|
202
|
-
add(at, { declared: one, part: one });
|
|
153
|
+
add(startLine(file, at), { declared: one, part: one });
|
|
203
154
|
}
|
|
204
155
|
}
|
|
205
156
|
return below;
|
|
@@ -220,13 +171,15 @@ export function inlineDirectives(project, held, targetRoot) {
|
|
|
220
171
|
const symbols = new Map(held.symbols
|
|
221
172
|
.filter((symbol) => symbol.kind !== "file")
|
|
222
173
|
.map((symbol) => [symbol.id, { id: symbol.id, ref: symbol.ref, position: symbol.position }]));
|
|
174
|
+
const placed = placedByPath(held, symbols);
|
|
223
175
|
const found = [];
|
|
224
176
|
for (const file of project.ownSourceFiles()) {
|
|
225
177
|
const comments = lineComments(file).filter((comment) => CANDIDATE.test(comment.text));
|
|
226
178
|
if (comments.length === 0) {
|
|
227
179
|
continue;
|
|
228
180
|
}
|
|
229
|
-
const
|
|
181
|
+
const path = relativePath(targetRoot, file.fileName) ?? "";
|
|
182
|
+
const below = declarationLines(file, placed.get(path) ?? [], held, targetRoot);
|
|
230
183
|
for (const comment of comments) {
|
|
231
184
|
const site = renderPosition(file, targetRoot, comment.offset);
|
|
232
185
|
const target = trails(file, comment.offset) ? site.line : site.line + 1;
|
|
@@ -274,7 +227,7 @@ export function inlineSuppressions(perProject) {
|
|
|
274
227
|
case "no-reason":
|
|
275
228
|
for (const code of directive.codes) {
|
|
276
229
|
refusals.push({
|
|
277
|
-
reported:
|
|
230
|
+
reported: CODE.suppressionWithoutReason,
|
|
278
231
|
code,
|
|
279
232
|
symbol: "",
|
|
280
233
|
path: site.path,
|