@descent-vtt/spec-guard 0.3.0 → 0.5.0

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.
Files changed (54) hide show
  1. package/CHANGELOG.md +125 -0
  2. package/README.md +292 -49
  3. package/dist/cli.d.ts +9 -1
  4. package/dist/cli.d.ts.map +1 -1
  5. package/dist/cli.js +46 -7
  6. package/dist/cli.js.map +1 -1
  7. package/dist/comments.d.ts +23 -4
  8. package/dist/comments.d.ts.map +1 -1
  9. package/dist/comments.js +40 -14
  10. package/dist/comments.js.map +1 -1
  11. package/dist/engine.d.ts +52 -49
  12. package/dist/engine.d.ts.map +1 -1
  13. package/dist/engine.js +185 -259
  14. package/dist/engine.js.map +1 -1
  15. package/dist/glob.d.ts +19 -6
  16. package/dist/glob.d.ts.map +1 -1
  17. package/dist/glob.js +14 -28
  18. package/dist/glob.js.map +1 -1
  19. package/dist/imports.d.ts +28 -4
  20. package/dist/imports.d.ts.map +1 -1
  21. package/dist/imports.js +36 -4
  22. package/dist/imports.js.map +1 -1
  23. package/dist/index.d.ts +15 -10
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +9 -6
  26. package/dist/index.js.map +1 -1
  27. package/dist/parser.d.ts.map +1 -1
  28. package/dist/parser.js +28 -23
  29. package/dist/parser.js.map +1 -1
  30. package/dist/polyglot.d.ts +129 -0
  31. package/dist/polyglot.d.ts.map +1 -0
  32. package/dist/polyglot.js +544 -0
  33. package/dist/polyglot.js.map +1 -0
  34. package/dist/reporter.d.ts +41 -0
  35. package/dist/reporter.d.ts.map +1 -1
  36. package/dist/reporter.js +187 -4
  37. package/dist/reporter.js.map +1 -1
  38. package/dist/runner.d.ts +47 -3
  39. package/dist/runner.d.ts.map +1 -1
  40. package/dist/runner.js +371 -105
  41. package/dist/runner.js.map +1 -1
  42. package/dist/scope.d.ts +108 -0
  43. package/dist/scope.d.ts.map +1 -0
  44. package/dist/scope.js +115 -0
  45. package/dist/scope.js.map +1 -0
  46. package/dist/text.d.ts +26 -0
  47. package/dist/text.d.ts.map +1 -0
  48. package/dist/text.js +69 -0
  49. package/dist/text.js.map +1 -0
  50. package/dist/types.d.ts +87 -0
  51. package/dist/types.d.ts.map +1 -1
  52. package/dist/types.js +0 -6
  53. package/dist/types.js.map +1 -1
  54. package/package.json +1 -1
package/dist/reporter.js CHANGED
@@ -6,6 +6,8 @@
6
6
  * carries the spec location, the expectation, the observed count and real
7
7
  * snippets from the offending code.
8
8
  */
9
+ import { createHash } from 'node:crypto';
10
+ import { mergeLedgers, tallyLedger } from './scope.js';
9
11
  // Raw SGR codes - a colour library is not worth a dependency here.
10
12
  const ESC = String.fromCharCode(27);
11
13
  const ANSI = {
@@ -77,6 +79,39 @@ function commentNotes(result) {
77
79
  if (result.unclassifiedFiles > 0) {
78
80
  notes.push(`comment syntax unknown for ${countLabel(result.unclassifiedFiles, 'matching file')}; comments in ${result.unclassifiedFiles === 1 ? 'it' : 'them'} counted as code`);
79
81
  }
82
+ if (result.baselinedMatches > 0) {
83
+ // The third way a green can be bought rather than earned, after comment
84
+ // exclusion and an unreadable file. Same treatment: say it every time.
85
+ notes.push(`${countLabel(result.baselinedMatches, 'match')} excluded by the baseline`);
86
+ }
87
+ return notes;
88
+ }
89
+ /**
90
+ * Prose for the files an assertion did not inspect.
91
+ *
92
+ * This is the line that decides whether a green run can be trusted. A guard
93
+ * that skips a directory and says nothing is indistinguishable from one that
94
+ * searched it and found nothing, and only one of those is a reason to relax.
95
+ */
96
+ function scopeNotes(ledger) {
97
+ const notes = [];
98
+ const totals = tallyLedger(ledger);
99
+ const unreadable = totals.get('unreadable') ?? 0;
100
+ if (unreadable > 0) {
101
+ const sample = ledger.skipped
102
+ .filter((entry) => entry.reason === 'unreadable')
103
+ .slice(0, 3)
104
+ .map((entry) => entry.path);
105
+ notes.push(`${countLabel(unreadable, 'path')} could not be read: ${sample.join(', ')}`);
106
+ }
107
+ const binary = ledger.skipped.filter((entry) => entry.reason === 'binary');
108
+ if (binary.length > 0) {
109
+ const matches = binary.reduce((total, entry) => total + (entry.matches ?? 0), 0);
110
+ notes.push(`${countLabel(matches, 'match')} in ${countLabel(binary.length, 'binary file')} not counted: ${binary
111
+ .slice(0, 3)
112
+ .map((entry) => entry.path)
113
+ .join(', ')}`);
114
+ }
80
115
  return notes;
81
116
  }
82
117
  function formatFailure(result, paint, glyphs, maxSnippets) {
@@ -86,7 +121,7 @@ function formatFailure(result, paint, glyphs, maxSnippets) {
86
121
  lines.push(` ${paint(result.message, 'red')}`);
87
122
  if (result.reason)
88
123
  lines.push(` ${paint(`reason: ${result.reason}`, 'dim')}`);
89
- for (const note of commentNotes(result)) {
124
+ for (const note of [...commentNotes(result), ...scopeNotes(result.scope)]) {
90
125
  lines.push(` ${paint(`${glyphs.warn} ${note}`, 'yellow')}`);
91
126
  }
92
127
  for (const warning of result.warnings) {
@@ -147,7 +182,7 @@ export function formatReport(report, options, maxSnippets = 5) {
147
182
  lines.push('');
148
183
  if (options.verbose) {
149
184
  for (const result of passes) {
150
- for (const note of [...commentNotes(result), ...result.warnings]) {
185
+ for (const note of [...commentNotes(result), ...scopeNotes(result.scope), ...result.warnings]) {
151
186
  lines.push(`${paint(glyphs.warn, 'yellow')} ${paint(`${formatLocation(result)} ${note}`, 'yellow')}`);
152
187
  }
153
188
  }
@@ -166,8 +201,9 @@ export function formatReport(report, options, maxSnippets = 5) {
166
201
  const totals = passes.reduce((sum, result) => ({
167
202
  commentMatches: sum.commentMatches + result.commentMatches,
168
203
  unclassifiedFiles: sum.unclassifiedFiles + result.unclassifiedFiles,
169
- }), { commentMatches: 0, unclassifiedFiles: 0 });
170
- const summaryNotes = commentNotes(totals);
204
+ baselinedMatches: sum.baselinedMatches + result.baselinedMatches,
205
+ }), { commentMatches: 0, unclassifiedFiles: 0, baselinedMatches: 0 });
206
+ const summaryNotes = [...commentNotes(totals), ...scopeNotes(mergeLedgers(passes.map((result) => result.scope)))];
171
207
  if (summaryNotes.length > 0) {
172
208
  for (const note of summaryNotes)
173
209
  lines.push(`${paint(glyphs.warn, 'yellow')} ${paint(note, 'yellow')}`);
@@ -186,6 +222,40 @@ export function formatReport(report, options, maxSnippets = 5) {
186
222
  }
187
223
  return lines.join('\n');
188
224
  }
225
+ /**
226
+ * The `baseline="..."` attribute that would exempt today's violations.
227
+ *
228
+ * The one machine-written edit spec-guard offers, and it is offered rather than
229
+ * applied. `--fix` is refused for architecture rules on purpose (ADR-0009): the
230
+ * only edits a machine can make to a failing boundary assertion are edits that
231
+ * record the rule no longer holding, and a tool that ships a button turning red
232
+ * into green without changing any code has shipped the wrong button - most of
233
+ * all to an agent in a loop, for which that button is the shortest path to a
234
+ * passing build.
235
+ *
236
+ * Printing is different from applying in the way that matters. The author
237
+ * pastes it into the spec, and the diff shows every exempted file by name, to a
238
+ * reviewer, in the commit that grants the exemption. Adopting a strict rule on
239
+ * a codebase that already violates it is otherwise a hand-transcription job,
240
+ * and the realistic alternative to that is not a clean codebase - it is no
241
+ * rule at all.
242
+ */
243
+ export function formatBaselines(report) {
244
+ const lines = [];
245
+ for (const result of report.results) {
246
+ if (result.ok || result.fileMatches.length === 0)
247
+ continue;
248
+ const entries = result.fileMatches
249
+ .map(({ file, count }) => (count === 1 ? file : `${file}:${count}`))
250
+ .sort();
251
+ lines.push(`# ${result.location.relativeFile}:${result.location.line} ${result.description}`);
252
+ lines.push(`baseline="${entries.join('\n ')}"`);
253
+ lines.push('');
254
+ }
255
+ if (lines.length === 0)
256
+ return '# nothing to baseline: no failing assertion had a match to exempt';
257
+ return lines.join('\n').trimEnd();
258
+ }
189
259
  /** Machine-readable output for CI consumers. */
190
260
  export function formatJson(report) {
191
261
  return JSON.stringify({
@@ -215,6 +285,10 @@ export function formatJson(report) {
215
285
  warnings: result.warnings,
216
286
  commentMatches: result.commentMatches,
217
287
  unclassifiedFiles: result.unclassifiedFiles,
288
+ baselinedMatches: result.baselinedMatches,
289
+ staleBaseline: result.staleBaseline,
290
+ fileMatches: result.fileMatches,
291
+ skipped: result.scope.skipped,
218
292
  engine: result.engine,
219
293
  durationMs: Math.round(result.durationMs * 1000) / 1000,
220
294
  })),
@@ -230,4 +304,113 @@ export function formatJson(report) {
230
304
  warnings: report.warnings,
231
305
  }, null, 2);
232
306
  }
307
+ /* --------------------------------------------------------------------- sarif */
308
+ /**
309
+ * A stable identity for one assertion, so a code-scanning service can tell
310
+ * "the same alert, still open" from "a new alert". Derived from what the
311
+ * assertion is about rather than where its matches landed, so moving the
312
+ * offending code does not close and reopen the alert.
313
+ */
314
+ function fingerprint(parts) {
315
+ return createHash('sha256').update(parts.join('\u0000')).digest('hex').slice(0, 32);
316
+ }
317
+ /** SARIF severity for anything spec-guard reports. */
318
+ const SARIF_LEVEL = 'error';
319
+ /** One rule per directive kind, plus the one for a directive that will not parse. */
320
+ const SARIF_RULES = [
321
+ { id: 'assert-absence', text: 'A symbol that must not appear in a part of the codebase.' },
322
+ { id: 'assert-count', text: 'A symbol that must appear an exact number of times.' },
323
+ { id: 'assert-present', text: 'A file or directory the specification says must exist.' },
324
+ { id: 'assert-import-absence', text: 'A dependency one part of the codebase must not have.' },
325
+ { id: 'assert-import-count', text: 'A dependency count one part of the codebase must hold to.' },
326
+ { id: 'invalid-directive', text: 'A directive that could not be parsed, so nothing was checked.' },
327
+ ];
328
+ function sarifLocation(uri, line, column, text) {
329
+ const location = {
330
+ physicalLocation: { artifactLocation: { uri }, region: { startLine: line, startColumn: column } },
331
+ };
332
+ if (text)
333
+ location.message = { text };
334
+ return location;
335
+ }
336
+ /**
337
+ * The static analysis interchange format, which is how a failure becomes a
338
+ * line-level annotation on a pull request.
339
+ *
340
+ * Chosen over an editor language server for the fast-feedback problem, and the
341
+ * reason is what spec-guard checks rather than how fast it is. Its claims are
342
+ * about a whole repository - "this symbol appears nowhere in src" - and a
343
+ * language server is handed one buffer at a time. Answering a repository-wide
344
+ * question on every keystroke means rescanning the tree on every keystroke; the
345
+ * alternative is answering a different, smaller question and calling it the
346
+ * same one. SARIF needs no daemon, no editor extension per editor and no
347
+ * protocol version matrix, and it puts the failure on the offending line for
348
+ * every reviewer rather than only for the author who has the plugin installed.
349
+ *
350
+ * One result per failing assertion, not per match: the thing that broke is the
351
+ * rule. The primary location is the first offending line so the annotation
352
+ * lands on the code; the directive that was violated is always a related
353
+ * location, because that is where the fix usually goes.
354
+ */
355
+ export function formatSarif(report, options = {}) {
356
+ const results = [];
357
+ for (const result of report.results) {
358
+ if (result.ok)
359
+ continue;
360
+ const spec = sarifLocation(result.location.relativeFile, result.location.line, result.location.column, 'the assertion that failed');
361
+ const matches = result.matches.map((match) => sarifLocation(match.file, match.line, match.column, match.text.trim()));
362
+ results.push({
363
+ ruleId: result.kind,
364
+ level: SARIF_LEVEL,
365
+ message: { text: `${result.description}: ${result.message}` },
366
+ // A failure with no match - a missing target, an empty scope, a stale
367
+ // baseline - is anchored on the directive, which is where its fix goes.
368
+ locations: [matches[0] ?? spec],
369
+ relatedLocations: matches[0] ? [...matches.slice(1), spec] : [],
370
+ partialFingerprints: {
371
+ specGuardAssertion: fingerprint([
372
+ result.location.relativeFile,
373
+ result.kind,
374
+ result.symbol ?? result.files.join(','),
375
+ result.targets.join(','),
376
+ ]),
377
+ },
378
+ });
379
+ }
380
+ for (const error of report.errors) {
381
+ results.push({
382
+ ruleId: 'invalid-directive',
383
+ level: SARIF_LEVEL,
384
+ message: { text: error.message },
385
+ locations: [
386
+ sarifLocation(error.location.relativeFile, error.location.line, error.location.column),
387
+ ],
388
+ relatedLocations: [],
389
+ partialFingerprints: {
390
+ specGuardAssertion: fingerprint([error.location.relativeFile, 'invalid', error.message]),
391
+ },
392
+ });
393
+ }
394
+ return JSON.stringify({
395
+ $schema: 'https://json.schemastore.org/sarif-2.1.0.json',
396
+ version: '2.1.0',
397
+ runs: [
398
+ {
399
+ tool: {
400
+ driver: {
401
+ name: 'spec-guard',
402
+ informationUri: 'https://github.com/DescentVTT/spec-guard',
403
+ version: options.version ?? '0.0.0',
404
+ rules: SARIF_RULES.map((rule) => ({
405
+ id: rule.id,
406
+ name: rule.id,
407
+ shortDescription: { text: rule.text },
408
+ })),
409
+ },
410
+ },
411
+ results,
412
+ },
413
+ ],
414
+ }, null, 2);
415
+ }
233
416
  //# sourceMappingURL=reporter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reporter.js","sourceRoot":"","sources":["../src/reporter.ts"],"names":[],"mappings":"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"}
package/dist/runner.d.ts CHANGED
@@ -5,9 +5,10 @@
5
5
  * number, an unknown boolean or a path escaping the root is an error, never a
6
6
  * silently-passing assertion. A spec that lies is worse than no spec at all.
7
7
  */
8
- import { type Engine, type EnginePreference } from './engine.js';
9
- import { type ImportIndex } from './imports.js';
10
- import type { Assertion, AssertionResult, Directive, DirectiveError, RunReport } from './types.js';
8
+ import { type Engine, type EnginePreference, type SearchRequest } from "./engine.js";
9
+ import { type ImportIndex } from "./imports.js";
10
+ import { type ScopePolicy } from "./scope.js";
11
+ import type { Assertion, AssertionResult, BaselineEntry, Directive, DirectiveError, RunReport, StaleBaselineEntry } from "./types.js";
11
12
  export declare const DEFAULT_MAX_SNIPPETS = 5;
12
13
  export declare const DEFAULT_CONCURRENCY = 8;
13
14
  export interface RunOptions {
@@ -28,20 +29,60 @@ export interface RunOptions {
28
29
  allowMissingTargets?: boolean;
29
30
  /** Treat analysis that could not be completed as a failure. */
30
31
  strictTargets?: boolean;
32
+ /**
33
+ * Tolerate assertions whose scope contains no files.
34
+ *
35
+ * The run-level counterpart of `allow-empty` on a directive. Off by default:
36
+ * an assertion that inspected nothing passes, and a passing assertion that
37
+ * verified nothing is the failure mode this tool exists to prevent.
38
+ */
39
+ allowEmptyScope?: boolean;
31
40
  /** Count matches inside the spec files themselves (off by default). */
32
41
  includeSpecs?: boolean;
33
42
  /** Max concurrent assertions. */
34
43
  concurrency?: number;
35
44
  /** Max snippets kept per failing assertion. */
36
45
  maxSnippets?: number;
46
+ /**
47
+ * Skip the four directories spec-guard skips by default (`.git`, `.hg`,
48
+ * `.svn`, `node_modules`). On by default; turn it off for a run that must
49
+ * look at literally everything.
50
+ */
51
+ defaultSkips?: boolean;
37
52
  }
38
53
  export interface RunResult extends RunReport {
39
54
  /** Spec files that were executed, relative to root. */
40
55
  specFiles: string[];
41
56
  }
57
+ /**
58
+ * Subtracts the declared debt from what was found.
59
+ *
60
+ * Two questions, and the ratchet needs both. Matches inside a baselined file
61
+ * stop counting *up to the declared number* - so a file allowed two violations
62
+ * that grows a third reports one, not three, and the failure points at the
63
+ * change rather than at the history. And a file that no longer has as many as
64
+ * it declares is a stale entry: the debt was paid and the ledger still claims
65
+ * it, which is a spec asserting something untrue about the code.
66
+ */
67
+ export declare function applyBaseline(entries: readonly BaselineEntry[], fileCounts: ReadonlyMap<string, number>): {
68
+ excluded: number;
69
+ stale: StaleBaselineEntry[];
70
+ shows: (file: string) => boolean;
71
+ };
72
+ /**
73
+ * Per-run cache for "does this scope contain anything at all".
74
+ *
75
+ * The same shape as the import index, and for the same reason: a document with
76
+ * twenty assertions over `src/` asks this question twenty times and it has one
77
+ * answer. Without the cache the probe measured about 0.9 ms per assertion,
78
+ * which is small until a spec has two hundred of them.
79
+ */
80
+ export declare function createScopeProbe(): (request: SearchRequest) => Promise<boolean>;
42
81
  export interface ResolveContext {
43
82
  root: string;
44
83
  excludeFiles: ReadonlySet<string>;
84
+ /** Run-level scope policy. Defaults to DEFAULT_SCOPE when unset. */
85
+ scope?: ScopePolicy;
45
86
  }
46
87
  /** Turns one directive into an executable assertion, or an error. */
47
88
  export declare function resolveDirective(directive: Directive, context: ResolveContext): {
@@ -54,9 +95,12 @@ export interface ExecuteOptions {
54
95
  engine: Engine;
55
96
  allowMissingTargets: boolean;
56
97
  strictTargets: boolean;
98
+ allowEmptyScope: boolean;
57
99
  maxSnippets: number;
58
100
  /** Per-run analysis cache: parse once, query many. */
59
101
  imports: ImportIndex;
102
+ /** Per-run cache for "is there anything in this scope". */
103
+ hasFiles: (request: SearchRequest) => Promise<boolean>;
60
104
  }
61
105
  /** Executes a single resolved assertion. */
62
106
  export declare function executeAssertion(assertion: Assertion, options: ExecuteOptions): Promise<AssertionResult>;
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,EAKL,KAAK,MAAM,EACX,KAAK,gBAAgB,EAEtB,MAAM,aAAa,CAAC;AAErB,OAAO,EAIL,KAAK,WAAW,EACjB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EACV,SAAS,EACT,eAAe,EAEf,SAAS,EACT,cAAc,EAEd,SAAS,EAGV,MAAM,YAAY,CAAC;AAEpB,eAAO,MAAM,oBAAoB,IAAI,CAAC;AACtC,eAAO,MAAM,mBAAmB,IAAI,CAAC;AAErC,MAAM,WAAW,UAAU;IACzB,8DAA8D;IAC9D,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAC;IAC5B,kEAAkE;IAClE,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6DAA6D;IAC7D,MAAM,CAAC,EAAE,gBAAgB,CAAC;IAC1B,2CAA2C;IAC3C,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,+DAA+D;IAC/D,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,uEAAuE;IACvE,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAU,SAAQ,SAAS;IAC1C,uDAAuD;IACvD,SAAS,EAAE,MAAM,EAAE,CAAC;CACrB;AAiGD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACnC;AAED,qEAAqE;AACrE,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,SAAS,EACpB,OAAO,EAAE,cAAc,GACtB;IAAE,SAAS,EAAE,SAAS,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,cAAc,CAAA;CAAE,CAkJtD;AAMD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,EAAE,OAAO,CAAC;IAC7B,aAAa,EAAE,OAAO,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,sDAAsD;IACtD,OAAO,EAAE,WAAW,CAAC;CACtB;AA0MD,4CAA4C;AAC5C,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC,CAI9G;AAYD,gFAAgF;AAChF,wBAAsB,YAAY,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CA6H1E"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../src/runner.ts"],"names":[],"mappings":"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"}