@cplieger/deadset-ts 8.0.0-dev.14 → 8.0.0-dev.16
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/dist/src/alias-chain.js +2 -2
- package/dist/src/analysis.js +43 -38
- package/dist/src/commands/read.js +6 -7
- package/dist/src/conformance-record.js +1 -1
- package/dist/src/consumers.js +4 -2
- package/dist/src/contract/config.generated.js +1 -1
- package/dist/src/contract/contract.generated.js +120 -2
- package/dist/src/dependencies.js +81 -49
- package/dist/src/entries/build-scripts.js +222 -0
- package/dist/src/{configuration-files.js → entries/configuration-files.js} +20 -58
- package/dist/src/{convention-rows.js → entries/convention-rows.js} +120 -27
- package/dist/src/entries/conventions.js +739 -0
- package/dist/src/{html-entries.js → entries/html-entries.js} +3 -3
- package/dist/src/{mdx-entries.js → entries/mdx-entries.js} +2 -2
- package/dist/src/entries/run-directories.js +77 -0
- package/dist/src/entries/sources.js +144 -0
- package/dist/src/entries/static-module.js +669 -0
- package/dist/src/entries/test-runners.js +684 -0
- package/dist/src/{workflow-steps.js → entries/workflow-steps.js} +18 -8
- package/dist/src/extensions.js +37 -0
- package/dist/src/facts.js +38 -0
- package/dist/src/file-facts.js +1 -1
- package/dist/src/findings/emitters.js +5 -8
- package/dist/src/findings/self-check.js +36 -20
- package/dist/src/findings-pass.js +5 -6
- package/dist/src/framework-lifecycle.js +1 -1
- package/dist/src/fs/manifest.js +15 -20
- package/dist/src/generated-file.js +172 -29
- package/dist/src/graph.js +2 -5
- package/dist/src/index.js +1 -1
- package/dist/src/injection-container.js +1 -1
- 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 +305 -705
- package/dist/src/javascript-file.js +26 -11
- package/dist/src/load/classify.js +28 -9
- package/dist/src/load/diagnostics.js +8 -1
- package/dist/src/load/discover.js +16 -8
- package/dist/src/load/package-scope.js +56 -0
- package/dist/src/load/plan.js +2 -2
- package/dist/src/load/synthesize.js +5 -5
- package/dist/src/load/workspace-manifests.js +1 -1
- package/dist/src/matrix.js +6 -13
- package/dist/src/outside-tests.js +1 -1
- package/dist/src/paths.js +16 -0
- package/dist/src/platform-calls.js +78 -0
- package/dist/src/platform-symbols.js +140 -0
- package/dist/src/position.js +41 -0
- package/dist/src/ref.js +11 -20
- package/dist/src/references.js +281 -50
- package/dist/src/resolve.js +1 -1
- package/dist/src/{configured-declarations.js → roots/configured-declarations.js} +4 -4
- package/dist/src/{entry-point-gaps.js → roots/entry-point-gaps.js} +5 -8
- package/dist/src/{manifest.js → roots/manifest.js} +4 -4
- package/dist/src/roots/published-reach.js +412 -0
- package/dist/src/roots/root-set.js +489 -0
- package/dist/src/roots/unseen-loads.js +208 -0
- package/dist/src/serialization-contract.js +1 -1
- package/dist/src/session.js +3 -0
- package/dist/src/source-files.js +5 -9
- package/dist/src/suppress-inline.js +33 -81
- package/dist/src/suppress.js +30 -32
- package/dist/src/test-support.js +4 -2
- package/dist/src/verbs/analyze.js +13 -1
- package/dist/src/verbs/describe.js +5 -3
- package/jsr.json +1 -1
- package/package.json +3 -3
- package/src/alias-chain.ts +2 -2
- package/src/analysis.ts +77 -53
- package/src/automatic-types.ts +1 -1
- package/src/commands/read.ts +6 -8
- package/src/conformance-record.ts +1 -1
- package/src/consumers.ts +5 -1
- package/src/contract/config.generated.ts +1 -1
- package/src/contract/contract.generated.ts +139 -2
- package/src/dependencies.ts +98 -50
- package/src/entries/build-scripts.ts +292 -0
- package/src/{configuration-files.ts → entries/configuration-files.ts} +23 -75
- package/src/{convention-rows.ts → entries/convention-rows.ts} +167 -28
- package/src/{conventions.ts → entries/conventions.ts} +347 -522
- package/src/{html-entries.ts → entries/html-entries.ts} +5 -5
- package/src/{mdx-entries.ts → entries/mdx-entries.ts} +4 -4
- package/src/entries/run-directories.ts +108 -0
- package/src/entries/sources.ts +266 -0
- package/src/entries/static-module.ts +857 -0
- package/src/entries/test-runners.ts +868 -0
- package/src/{workflow-steps.ts → entries/workflow-steps.ts} +29 -11
- package/src/exempt.ts +3 -2
- package/src/extensions.ts +45 -0
- package/src/facts.ts +44 -0
- package/src/file-facts.ts +2 -2
- package/src/findings/emitters.ts +14 -10
- package/src/findings/self-check.ts +41 -22
- package/src/findings/visibility-narrowing.ts +1 -1
- package/src/findings-pass.ts +5 -12
- package/src/framework-lifecycle.ts +1 -1
- package/src/fs/manifest.ts +25 -21
- package/src/generated-file.ts +240 -36
- package/src/graph.ts +3 -6
- package/src/index.ts +1 -1
- package/src/injection-container.ts +1 -1
- 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 +424 -878
- package/src/javascript-file.ts +29 -12
- package/src/load/classify.ts +49 -13
- package/src/load/diagnostics.ts +11 -1
- package/src/load/discover.ts +28 -12
- package/src/load/package-scope.ts +74 -0
- package/src/load/plan.ts +11 -2
- package/src/load/synthesize.ts +6 -6
- package/src/load/test-globals.ts +1 -1
- package/src/load/workspace-manifests.ts +1 -1
- package/src/load/workspace-run.ts +1 -1
- package/src/matrix.ts +7 -14
- package/src/outside-tests.ts +1 -1
- package/src/paths.ts +18 -0
- package/src/platform-calls.ts +119 -0
- package/src/platform-symbols.ts +205 -0
- package/src/position.ts +42 -0
- package/src/ref.ts +11 -20
- package/src/references.ts +383 -73
- package/src/report.ts +1 -1
- package/src/resolve.ts +1 -1
- package/src/{configured-declarations.ts → roots/configured-declarations.ts} +7 -7
- package/src/{entry-point-gaps.ts → roots/entry-point-gaps.ts} +5 -8
- package/src/{manifest.ts → roots/manifest.ts} +5 -5
- package/src/roots/published-reach.ts +481 -0
- package/src/{roots.ts → roots/root-set.ts} +203 -630
- package/src/roots/unseen-loads.ts +307 -0
- package/src/serialization-contract.ts +1 -1
- package/src/session.ts +17 -1
- package/src/source-files.ts +5 -10
- package/src/suppress-inline.ts +53 -89
- package/src/suppress.ts +48 -33
- package/src/test-support.ts +8 -3
- package/src/verbs/analyze.ts +17 -4
- package/src/verbs/describe.ts +5 -2
- package/src/verbs/explain.ts +1 -1
- package/dist/src/build-scripts.js +0 -418
- package/dist/src/conventions.js +0 -907
- package/dist/src/entry-points.js +0 -513
- package/dist/src/roots.js +0 -865
- package/dist/src/unseen-loads.js +0 -100
- package/src/build-scripts.ts +0 -536
- package/src/entry-points.ts +0 -661
- package/src/unseen-loads.ts +0 -134
package/src/suppress.ts
CHANGED
|
@@ -4,12 +4,13 @@
|
|
|
4
4
|
* ignore entry or a baseline row. A bound record marks its declaration live before the
|
|
5
5
|
* sweep, unless its code reports a part or a dependency row, and is in effect when it
|
|
6
6
|
* withholds a finding its code would have produced there, dormant when the configuration
|
|
7
|
-
* withholds every such finding anyway, and stale otherwise.
|
|
7
|
+
* or a hold withholds every such finding anyway, and stale otherwise.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
10
|
import {
|
|
11
11
|
type CODE,
|
|
12
12
|
KIND_ROWS,
|
|
13
|
+
REMEDIES,
|
|
13
14
|
SYMBOL_SUBJECTS,
|
|
14
15
|
type Subject,
|
|
15
16
|
} from "./contract/contract.generated.ts";
|
|
@@ -147,6 +148,20 @@ export interface Dials<F extends Finding = Finding> {
|
|
|
147
148
|
readonly withholds: (finding: F) => boolean;
|
|
148
149
|
}
|
|
149
150
|
|
|
151
|
+
/**
|
|
152
|
+
* What the analysis holds because it cannot decide it, as the ledger reads it: a hold is a
|
|
153
|
+
* gap, not evidence that the code changed, so a record it touches is dormant.
|
|
154
|
+
*/
|
|
155
|
+
export interface Holds<F extends Finding = Finding> {
|
|
156
|
+
/** Whether a hold withholds one finding: a type error's skip, or a hold of its declaration. */
|
|
157
|
+
readonly withholds: (finding: F) => boolean;
|
|
158
|
+
/** Whether a hold keeps the declaration one record is bound to live, so no finding about it is computed. */
|
|
159
|
+
readonly holdsRecord: (record: SuppressionRecord) => boolean;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/** No hold. */
|
|
163
|
+
const NO_HOLDS: Holds = { withholds: () => false, holdsRecord: () => false };
|
|
164
|
+
|
|
150
165
|
/** What every record did, and the findings the records withhold. */
|
|
151
166
|
export interface Ledger {
|
|
152
167
|
/** One verdict per record, in reading order. */
|
|
@@ -172,36 +187,30 @@ function rowOf(subject: Subject | undefined): boolean {
|
|
|
172
187
|
return subject === "file" || subject === "dependency" || subject === "record";
|
|
173
188
|
}
|
|
174
189
|
|
|
175
|
-
/**
|
|
176
|
-
* Whether a finding's subject is a row of a document rather than a declaration. Apart
|
|
177
|
-
* from a dependency row, nothing withholds a finding about one.
|
|
178
|
-
*/
|
|
190
|
+
/** Whether a finding's subject is a row of a document rather than a declaration. */
|
|
179
191
|
export function isRowSubject(kind: string): boolean {
|
|
180
192
|
return rowOf(subjectOf(kind));
|
|
181
193
|
}
|
|
182
194
|
|
|
183
|
-
/**
|
|
184
|
-
export function
|
|
185
|
-
return
|
|
195
|
+
/** The subject a code reports, which kinds.json's remedies table answers for. */
|
|
196
|
+
export function subjectOfCode(code: string): Subject | undefined {
|
|
197
|
+
return SUBJECT_OF_CODE.get(code);
|
|
186
198
|
}
|
|
187
199
|
|
|
188
200
|
/**
|
|
189
|
-
* Whether a
|
|
190
|
-
*
|
|
191
|
-
*
|
|
201
|
+
* Whether a record of `mechanism` can name a finding about `subject`, as kinds.json's
|
|
202
|
+
* remedies table lists the suppressions of each subject. A subject the table does not
|
|
203
|
+
* know is a declaration's.
|
|
192
204
|
*/
|
|
193
|
-
export function
|
|
194
|
-
return
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
/** Whether a code reports a dependency row, which only an ignore entry or a baseline row names. */
|
|
198
|
-
export function isDependencyCode(code: string): boolean {
|
|
199
|
-
return SUBJECT_OF_CODE.get(code) === "dependency";
|
|
205
|
+
export function names(subject: Subject | undefined, mechanism: Mechanism): boolean {
|
|
206
|
+
return (REMEDIES[subject ?? "declaration"].suppressions as readonly Mechanism[]).includes(
|
|
207
|
+
mechanism,
|
|
208
|
+
);
|
|
200
209
|
}
|
|
201
210
|
|
|
202
|
-
/** Whether a
|
|
203
|
-
export function
|
|
204
|
-
return
|
|
211
|
+
/** Whether a finding about a symbol of `kind` is one a record of `mechanism` can name. */
|
|
212
|
+
export function namesKind(kind: string, mechanism: Mechanism): boolean {
|
|
213
|
+
return names(subjectOf(kind), mechanism);
|
|
205
214
|
}
|
|
206
215
|
|
|
207
216
|
/**
|
|
@@ -238,16 +247,13 @@ export function pairs(record: SuppressionRecord, finding: Finding): boolean {
|
|
|
238
247
|
if (record.code !== finding.code) {
|
|
239
248
|
return false;
|
|
240
249
|
}
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
record.mechanism !== "inline" &&
|
|
244
|
-
record.symbol === finding.symbol.ref &&
|
|
245
|
-
record.path === finding.position.path
|
|
246
|
-
);
|
|
247
|
-
}
|
|
248
|
-
if (isRowSubject(finding.symbol.kind)) {
|
|
250
|
+
const subject = subjectOf(finding.symbol.kind);
|
|
251
|
+
if (!names(subject, record.mechanism)) {
|
|
249
252
|
return false;
|
|
250
253
|
}
|
|
254
|
+
if (subject === "dependency") {
|
|
255
|
+
return record.symbol === finding.symbol.ref && record.path === finding.position.path;
|
|
256
|
+
}
|
|
251
257
|
if (record.bound !== "" && record.bound === positionKey(finding.position)) {
|
|
252
258
|
return true;
|
|
253
259
|
}
|
|
@@ -262,13 +268,14 @@ export function pairs(record: SuppressionRecord, finding: Finding): boolean {
|
|
|
262
268
|
* there: swept with no mark for a liveness kind, and as swept otherwise. The first record
|
|
263
269
|
* in reading order claims a finding, so a second naming it is stale; a part-kind record
|
|
264
270
|
* claims every finding of its code about a part of its declaration. A record is dormant
|
|
265
|
-
* when the dials withhold every finding it claims,
|
|
266
|
-
*
|
|
271
|
+
* when the dials or `holds` withhold every finding it claims, or when it claims none and
|
|
272
|
+
* its code is at `allow` or a hold keeps its declaration live.
|
|
267
273
|
*/
|
|
268
274
|
export function ledgerOf<F extends Finding>(
|
|
269
275
|
records: readonly SuppressionRecord[],
|
|
270
276
|
would: readonly F[],
|
|
271
277
|
dials: Dials<F>,
|
|
278
|
+
holds: Holds<F> = NO_HOLDS,
|
|
272
279
|
): Ledger {
|
|
273
280
|
const taken = new Set<string>();
|
|
274
281
|
const verdicts: Verdict[] = [];
|
|
@@ -278,13 +285,21 @@ export function ledgerOf<F extends Finding>(
|
|
|
278
285
|
const claimed =
|
|
279
286
|
first === undefined ? [] : isPartKind(record.code) ? would.filter(open) : [first];
|
|
280
287
|
if (claimed.length === 0) {
|
|
281
|
-
verdicts.push(
|
|
288
|
+
verdicts.push(
|
|
289
|
+
record.bound !== "" && (dials.allows(record.code) || holds.holdsRecord(record))
|
|
290
|
+
? "dormant"
|
|
291
|
+
: "stale",
|
|
292
|
+
);
|
|
282
293
|
continue;
|
|
283
294
|
}
|
|
284
295
|
for (const finding of claimed) {
|
|
285
296
|
taken.add(claimKey(finding));
|
|
286
297
|
}
|
|
287
|
-
verdicts.push(
|
|
298
|
+
verdicts.push(
|
|
299
|
+
claimed.every((finding) => dials.withholds(finding) || holds.withholds(finding))
|
|
300
|
+
? "dormant"
|
|
301
|
+
: "in-effect",
|
|
302
|
+
);
|
|
288
303
|
}
|
|
289
304
|
return {
|
|
290
305
|
verdicts,
|
package/src/test-support.ts
CHANGED
|
@@ -6,11 +6,11 @@
|
|
|
6
6
|
* test code.
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
-
import { CONVENTION_ROWS, TEST_LIBRARIES, TEST_LIBRARY_SCOPES } from "./convention-rows.ts";
|
|
9
|
+
import { CONVENTION_ROWS, TEST_LIBRARIES, TEST_LIBRARY_SCOPES } from "./entries/convention-rows.ts";
|
|
10
10
|
import { packageOfSpecifier } from "./dependencies.ts";
|
|
11
11
|
import type { InventorySymbol } from "./inventory.ts";
|
|
12
12
|
import type { Reference } from "./references.ts";
|
|
13
|
-
import type { Root } from "./roots.ts";
|
|
13
|
+
import type { Root } from "./roots/root-set.ts";
|
|
14
14
|
|
|
15
15
|
/** The root kind that never takes a file out of test-support code: the skip only withholds. */
|
|
16
16
|
const SKIP_ROOT = "type-error";
|
|
@@ -20,7 +20,12 @@ const SKIP_ROOT = "type-error";
|
|
|
20
20
|
* convention row reads test files for, and the convention table's test libraries.
|
|
21
21
|
*/
|
|
22
22
|
const TEST_PACKAGES: ReadonlySet<string> = new Set([
|
|
23
|
-
...CONVENTION_ROWS.filter(
|
|
23
|
+
...CONVENTION_ROWS.filter(
|
|
24
|
+
(row) =>
|
|
25
|
+
row.testFiles !== undefined ||
|
|
26
|
+
row.testDirectories !== undefined ||
|
|
27
|
+
row.testRunner !== undefined,
|
|
28
|
+
).map((row) => row.package),
|
|
24
29
|
...TEST_LIBRARIES,
|
|
25
30
|
]);
|
|
26
31
|
|
package/src/verbs/analyze.ts
CHANGED
|
@@ -9,10 +9,11 @@ import {
|
|
|
9
9
|
import { kindOf } from "../config.ts";
|
|
10
10
|
import { CONFORMANCE, DECLARED_GAPS } from "../conformance.ts";
|
|
11
11
|
import { analyzerProvenance, verdictOf } from "../findings-pass.ts";
|
|
12
|
+
import { factsDocument } from "../facts.ts";
|
|
12
13
|
import { dirnamePath, joinPath, normalizePath, relativePath, resolvePath } from "../paths.ts";
|
|
13
14
|
import type { Host } from "../host.ts";
|
|
14
|
-
import type { ManifestEntry } from "../manifest.ts";
|
|
15
|
-
import type { HeldScripts } from "../roots.ts";
|
|
15
|
+
import type { ManifestEntry } from "../roots/manifest.ts";
|
|
16
|
+
import type { HeldScripts } from "../roots/root-set.ts";
|
|
16
17
|
import { moduleIdentity, type NotBuilt } from "../load/discover.ts";
|
|
17
18
|
import { partialNotes } from "../partial.ts";
|
|
18
19
|
import {
|
|
@@ -29,7 +30,7 @@ import { RENDERINGS } from "../reporters/reporters.ts";
|
|
|
29
30
|
import { parseTemplate, TemplateError, type Template } from "../reporters/template.ts";
|
|
30
31
|
import { resolve } from "../resolve.ts";
|
|
31
32
|
import { otherSchemeRows, rowReason, writeBaseline, type Recorded } from "../suppress-file.ts";
|
|
32
|
-
import type { UnseenLoad } from "../unseen-loads.ts";
|
|
33
|
+
import type { UnseenLoad } from "../roots/unseen-loads.ts";
|
|
33
34
|
import type { UnreadInput } from "../load/plan.ts";
|
|
34
35
|
import type { UnresolvedSpecifier } from "../load/specifiers.ts";
|
|
35
36
|
|
|
@@ -42,7 +43,7 @@ import { ownVersion } from "./version.ts";
|
|
|
42
43
|
|
|
43
44
|
/** The options `analyze` takes beside the ones every verb takes. */
|
|
44
45
|
export const ANALYZE_OPTIONS: VerbOptions = {
|
|
45
|
-
plain: ["report", "baseline-write", "exit-code", "template"],
|
|
46
|
+
plain: ["report", "facts", "baseline-write", "exit-code", "template"],
|
|
46
47
|
repeatable: ["format"],
|
|
47
48
|
};
|
|
48
49
|
|
|
@@ -258,6 +259,7 @@ function templateOf(
|
|
|
258
259
|
/** Every document one invocation asked for: the report, each rendering beside it, a baseline. */
|
|
259
260
|
interface Documents {
|
|
260
261
|
readonly report: string;
|
|
262
|
+
readonly facts: string | undefined;
|
|
261
263
|
readonly formats: readonly Format[];
|
|
262
264
|
readonly baseline: string | undefined;
|
|
263
265
|
}
|
|
@@ -286,8 +288,13 @@ export const analyzeVerb: Verb = ({ err, host, inputs, scope, openClient, option
|
|
|
286
288
|
const { config, provenance } = resolve(inputs());
|
|
287
289
|
const invoked = host.workingDirectory();
|
|
288
290
|
const baseline = option("baseline-write");
|
|
291
|
+
const facts = option("facts");
|
|
292
|
+
if (facts === "") {
|
|
293
|
+
throw new UsageError("--facts names the path the facts document is written to, and named none");
|
|
294
|
+
}
|
|
289
295
|
const documents: Documents = {
|
|
290
296
|
report: resolvePath(invoked, reportPath),
|
|
297
|
+
facts: facts === undefined ? undefined : resolvePath(invoked, facts),
|
|
291
298
|
formats: formatsOf(repeated("format"), config.reporters.formats),
|
|
292
299
|
baseline: baseline === undefined ? undefined : resolvePath(invoked, baseline),
|
|
293
300
|
};
|
|
@@ -378,6 +385,12 @@ export const analyzeVerb: Verb = ({ err, host, inputs, scope, openClient, option
|
|
|
378
385
|
);
|
|
379
386
|
}
|
|
380
387
|
writeDocument(host, documents.report, "name a path the run can write", () => json(report));
|
|
388
|
+
const factsPath = documents.facts;
|
|
389
|
+
if (factsPath !== undefined) {
|
|
390
|
+
writeDocument(host, factsPath, "name a path the run can write", () => [
|
|
391
|
+
factsDocument(version, run.generated),
|
|
392
|
+
]);
|
|
393
|
+
}
|
|
381
394
|
const options = {
|
|
382
395
|
readSource: (path: string) => host.readFile(joinPath(targetRoot, path)),
|
|
383
396
|
template,
|
package/src/verbs/describe.ts
CHANGED
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
CONTRACT_VERSION,
|
|
3
3
|
EXIT_CLEAN,
|
|
4
4
|
EXIT_USAGE,
|
|
5
|
+
FACTS_VERSION,
|
|
5
6
|
SCHEMA_VERSIONS,
|
|
6
7
|
} from "../contract/contract.generated.ts";
|
|
7
8
|
import { CONFORMANCE, type Conformance } from "../conformance.ts";
|
|
@@ -11,8 +12,9 @@ import { ownVersion } from "./version.ts";
|
|
|
11
12
|
|
|
12
13
|
/**
|
|
13
14
|
* The document `describe` writes: the analyzer, the Contract version it implements, the
|
|
14
|
-
* report schema versions it reads, the languages it claims,
|
|
15
|
-
* the conformance corpus, a member the document omits where
|
|
15
|
+
* report schema versions it reads, the languages it claims, the facts version it writes,
|
|
16
|
+
* and its recorded result over the conformance corpus, a member the document omits where
|
|
17
|
+
* no run is recorded.
|
|
16
18
|
*/
|
|
17
19
|
export function describeDocument(version: string, recorded: Conformance | undefined): string {
|
|
18
20
|
const document = {
|
|
@@ -21,6 +23,7 @@ export function describeDocument(version: string, recorded: Conformance | undefi
|
|
|
21
23
|
contract_version: CONTRACT_VERSION,
|
|
22
24
|
schema_versions_accepted: SCHEMA_VERSIONS,
|
|
23
25
|
languages: [LANGUAGE],
|
|
26
|
+
facts_version_written: FACTS_VERSION,
|
|
24
27
|
...(recorded === undefined
|
|
25
28
|
? {}
|
|
26
29
|
: {
|
package/src/verbs/explain.ts
CHANGED
|
@@ -11,7 +11,7 @@ import { resolvePath } from "../paths.ts";
|
|
|
11
11
|
import { positionKey } from "../position.ts";
|
|
12
12
|
import type { Reference } from "../references.ts";
|
|
13
13
|
import { resolve } from "../resolve.ts";
|
|
14
|
-
import type { Root } from "../roots.ts";
|
|
14
|
+
import type { Root } from "../roots/root-set.ts";
|
|
15
15
|
import { type Verb, type VerbOptions } from "./verb.ts";
|
|
16
16
|
import { UsageError } from "../usage.ts";
|
|
17
17
|
import { bytewise } from "../text/compare.ts";
|