gurkencheck 0.0.7 → 0.0.9

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 (80) hide show
  1. package/README.md +19 -0
  2. package/dist/config-parser.d.ts.map +1 -1
  3. package/dist/config-parser.js +7 -1
  4. package/dist/config-parser.js.map +1 -1
  5. package/dist/diagnostics.d.ts +34 -0
  6. package/dist/diagnostics.d.ts.map +1 -0
  7. package/dist/diagnostics.js +53 -0
  8. package/dist/diagnostics.js.map +1 -0
  9. package/dist/feature-finder.d.ts +38 -0
  10. package/dist/feature-finder.d.ts.map +1 -1
  11. package/dist/feature-finder.js +86 -8
  12. package/dist/feature-finder.js.map +1 -1
  13. package/dist/formatters/index.d.ts +44 -4
  14. package/dist/formatters/index.d.ts.map +1 -1
  15. package/dist/formatters/index.js +52 -15
  16. package/dist/formatters/index.js.map +1 -1
  17. package/dist/formatters/stylish.d.ts +3 -0
  18. package/dist/formatters/stylish.d.ts.map +1 -1
  19. package/dist/formatters/stylish.js +32 -1
  20. package/dist/formatters/stylish.js.map +1 -1
  21. package/dist/formatters/tap.d.ts +14 -0
  22. package/dist/formatters/tap.d.ts.map +1 -1
  23. package/dist/formatters/tap.js +22 -7
  24. package/dist/formatters/tap.js.map +1 -1
  25. package/dist/gherkin/parse.d.ts +42 -1
  26. package/dist/gherkin/parse.d.ts.map +1 -1
  27. package/dist/gherkin/parse.js +68 -3
  28. package/dist/gherkin/parse.js.map +1 -1
  29. package/dist/index.d.ts +18 -10
  30. package/dist/index.d.ts.map +1 -1
  31. package/dist/index.js +10 -6
  32. package/dist/index.js.map +1 -1
  33. package/dist/linter.d.ts +31 -3
  34. package/dist/linter.d.ts.map +1 -1
  35. package/dist/linter.js +82 -15
  36. package/dist/linter.js.map +1 -1
  37. package/dist/logger.d.ts +2 -0
  38. package/dist/logger.d.ts.map +1 -1
  39. package/dist/logger.js +4 -0
  40. package/dist/logger.js.map +1 -1
  41. package/dist/main.d.ts +9 -1
  42. package/dist/main.d.ts.map +1 -1
  43. package/dist/main.js +147 -26
  44. package/dist/main.js.map +1 -1
  45. package/dist/rules/no-dupe-feature-names.d.ts.map +1 -1
  46. package/dist/rules/no-dupe-feature-names.js +26 -13
  47. package/dist/rules/no-dupe-feature-names.js.map +1 -1
  48. package/dist/rules/no-dupe-file-names.d.ts.map +1 -1
  49. package/dist/rules/no-dupe-file-names.js +32 -17
  50. package/dist/rules/no-dupe-file-names.js.map +1 -1
  51. package/dist/rules/no-dupe-scenario-names.d.ts.map +1 -1
  52. package/dist/rules/no-dupe-scenario-names.js +34 -22
  53. package/dist/rules/no-dupe-scenario-names.js.map +1 -1
  54. package/dist/rules.d.ts +41 -3
  55. package/dist/rules.d.ts.map +1 -1
  56. package/dist/rules.js +112 -4
  57. package/dist/rules.js.map +1 -1
  58. package/dist/stats/collect.d.ts +8 -0
  59. package/dist/stats/collect.d.ts.map +1 -1
  60. package/dist/stats/collect.js +67 -37
  61. package/dist/stats/collect.js.map +1 -1
  62. package/dist/stats/command.d.ts +2 -1
  63. package/dist/stats/command.d.ts.map +1 -1
  64. package/dist/stats/command.js +34 -34
  65. package/dist/stats/command.js.map +1 -1
  66. package/dist/types.d.ts +47 -3
  67. package/dist/types.d.ts.map +1 -1
  68. package/dist/util/glob.d.ts +18 -0
  69. package/dist/util/glob.d.ts.map +1 -1
  70. package/dist/util/glob.js +126 -22
  71. package/dist/util/glob.js.map +1 -1
  72. package/dist/util/stream.d.ts +31 -0
  73. package/dist/util/stream.d.ts.map +1 -0
  74. package/dist/util/stream.js +67 -0
  75. package/dist/util/stream.js.map +1 -0
  76. package/dist/watch.d.ts +36 -0
  77. package/dist/watch.d.ts.map +1 -0
  78. package/dist/watch.js +203 -0
  79. package/dist/watch.js.map +1 -0
  80. package/package.json +1 -1
@@ -5,8 +5,22 @@
5
5
  * at, which is what TAP consumers expect. Findings are carried in the YAML
6
6
  * diagnostic block. A file is `not ok` only when it holds something that
7
7
  * fails the run, so a file with warnings alone passes but still says why.
8
+ *
9
+ * Written as the results arrive. A harness seeing `ok 1` while file two is
10
+ * still being checked is the whole point of TAP, and holding the stream back
11
+ * to print it in one go gives that up for nothing. The plan comes last
12
+ * instead of first, because the count is only known then - TAP 13 allows it
13
+ * at either end for exactly this reason.
8
14
  */
15
+ import type { FormatterRun } from './index.ts';
9
16
  import type { FileResult } from '../types.ts';
17
+ /**
18
+ * A TAP stream, written a test point at a time.
19
+ *
20
+ * A new one per run, so its counter belongs to that run and two at once
21
+ * cannot number each other's test points.
22
+ */
23
+ export declare function startRun(): FormatterRun;
10
24
  /** Renders the results as a TAP 13 stream. */
11
25
  export declare function format(results: readonly FileResult[]): string;
12
26
  /** Writes the TAP stream to stdout. */
@@ -1 +1 @@
1
- {"version":3,"file":"tap.d.ts","sourceRoot":"","sources":["../../src/formatters/tap.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAC,UAAU,EAAY,MAAM,aAAa,CAAC;AAqCvD,8CAA8C;AAC9C,wBAAgB,MAAM,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,GAAG,MAAM,CAU7D;AAED,uCAAuC;AACvC,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,GAAG,IAAI,CAEjE"}
1
+ {"version":3,"file":"tap.d.ts","sourceRoot":"","sources":["../../src/formatters/tap.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,KAAK,EAAC,YAAY,EAAC,MAAM,YAAY,CAAC;AAC7C,OAAO,KAAK,EAAC,UAAU,EAAY,MAAM,aAAa,CAAC;AAqCvD;;;;;GAKG;AACH,wBAAgB,QAAQ,IAAI,YAAY,CAYvC;AAED,8CAA8C;AAC9C,wBAAgB,MAAM,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,GAAG,MAAM,CAK7D;AAED,uCAAuC;AACvC,wBAAgB,YAAY,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,GAAG,IAAI,CAEjE"}
@@ -28,15 +28,30 @@ function diagnostics(result) {
28
28
  lines.push(' ...');
29
29
  return lines;
30
30
  }
31
+ /**
32
+ * A TAP stream, written a test point at a time.
33
+ *
34
+ * A new one per run, so its counter belongs to that run and two at once
35
+ * cannot number each other's test points.
36
+ */
37
+ export function startRun() {
38
+ let count = 0;
39
+ return {
40
+ start: () => 'TAP version 13\n',
41
+ file(result) {
42
+ count++;
43
+ const status = fails(result) ? 'not ok' : 'ok';
44
+ return [`${status} ${count} - ${result.filePath}`, ...diagnostics(result), ''].join('\n');
45
+ },
46
+ end: () => `1..${count}\n`,
47
+ };
48
+ }
31
49
  /** Renders the results as a TAP 13 stream. */
32
50
  export function format(results) {
33
- const lines = ['TAP version 13', `1..${results.length}`];
34
- results.forEach((result, index) => {
35
- const status = fails(result) ? 'not ok' : 'ok';
36
- lines.push(`${status} ${index + 1} - ${result.filePath}`);
37
- lines.push(...diagnostics(result));
38
- });
39
- return lines.join('\n');
51
+ const run = startRun();
52
+ const text = [run.start?.() ?? '', ...results.map((result) => run.file(result)), run.end?.() ?? ''];
53
+ // The caller prints this with console.log, which adds the last line break.
54
+ return text.join('').replace(/\n$/u, '');
40
55
  }
41
56
  /** Writes the TAP stream to stdout. */
42
57
  export function printResults(results) {
@@ -1 +1 @@
1
- {"version":3,"file":"tap.js","sourceRoot":"","sources":["../../src/formatters/tap.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,SAAS,KAAK,CAAC,KAAa;IAC1B,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5C,CAAC;AAED,SAAS,UAAU,CAAC,KAAgB;IAClC,OAAO,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC;AACnC,CAAC;AAED,SAAS,KAAK,CAAC,MAAkB;IAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,WAAW,CAAC,MAAkB;IACrC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACvC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,MAAM,CAAC,OAA8B;IACnD,MAAM,KAAK,GAAG,CAAC,gBAAgB,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IAEzD,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QAChC,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,KAAK,GAAG,CAAC,MAAM,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC;IACrC,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,YAAY,CAAC,OAA8B;IACzD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/B,CAAC"}
1
+ {"version":3,"file":"tap.js","sourceRoot":"","sources":["../../src/formatters/tap.ts"],"names":[],"mappings":"AAiBA;;;GAGG;AACH,SAAS,KAAK,CAAC,KAAa;IAC1B,OAAO,IAAI,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;AAC5C,CAAC;AAED,SAAS,UAAU,CAAC,KAAgB;IAClC,OAAO,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC;AACnC,CAAC;AAED,SAAS,KAAK,CAAC,MAAkB;IAC/B,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,CAAC;AACtE,CAAC;AAED,SAAS,WAAW,CAAC,MAAkB;IACrC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;IACvC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,KAAK,CAAC,IAAI,CAAC,mBAAmB,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,kBAAkB,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACrD,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/C,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;QACxC,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,QAAQ;IACtB,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,OAAO;QACL,KAAK,EAAE,GAAG,EAAE,CAAC,kBAAkB;QAC/B,IAAI,CAAC,MAAkB;YACrB,KAAK,EAAE,CAAC;YACR,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;YAC/C,OAAO,CAAC,GAAG,MAAM,IAAI,KAAK,MAAM,MAAM,CAAC,QAAQ,EAAE,EAAE,GAAG,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5F,CAAC;QACD,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,KAAK,IAAI;KAC3B,CAAC;AACJ,CAAC;AAED,8CAA8C;AAC9C,MAAM,UAAU,MAAM,CAAC,OAA8B;IACnD,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACpG,2EAA2E;IAC3E,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED,uCAAuC;AACvC,MAAM,UAAU,YAAY,CAAC,OAA8B;IACzD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;AAC/B,CAAC"}
@@ -1,4 +1,5 @@
1
1
  import type { Feature } from '@cucumber/messages';
2
+ import type { Sequence } from '../util/stream.ts';
2
3
  import type { FeatureFile, RuleError } from '../types.ts';
3
4
  /**
4
5
  * Rules the parser enforces on every file. They cannot be turned off, but
@@ -27,6 +28,46 @@ export declare function toLines(source: string): string[];
27
28
  * language.
28
29
  */
29
30
  export declare function parseFeature(relativePath: string, source: string, defaultLanguage?: string): ParseResult;
30
- /** Reads a feature file from disk and parses it. */
31
+ /**
32
+ * Reads a feature file from disk and parses it.
33
+ *
34
+ * A file that cannot be read at all - missing, unreadable, deleted between
35
+ * being found and being opened - comes back as a result carrying the reason,
36
+ * exactly as a file the parser rejected does. Nothing here throws: one
37
+ * unreadable file among a thousand should cost you that file's findings, not
38
+ * every other file's as well.
39
+ *
40
+ * That promise is what lets `readAndParseFiles` hold started reads in a
41
+ * window. A promise that rejected before anything awaited it would be an
42
+ * unhandled rejection, and take the process with it.
43
+ */
31
44
  export declare function readAndParseFile(relativePath: string, defaultLanguage?: string): Promise<ParseResult>;
45
+ /**
46
+ * How many files are read ahead of the one being handed over.
47
+ *
48
+ * Enough to keep the disk busy while a file is checked, few enough that the
49
+ * memory held is a property of this number rather than of the size of the
50
+ * suite. Reading every file at once - which is what a `Promise.all` over the
51
+ * whole list does - holds the entire suite's source and syntax trees at once,
52
+ * and opens a file descriptor per file while it is at it.
53
+ */
54
+ export declare const DEFAULT_READ_AHEAD = 16;
55
+ export interface ReadOptions {
56
+ /** The dialect for files carrying no `# language:` header of their own. */
57
+ language?: string;
58
+ /** How many files to keep reading ahead of the one handed over. */
59
+ readAhead?: number;
60
+ }
61
+ /**
62
+ * Reads and parses feature files, handing each one over in turn.
63
+ *
64
+ * The files may be an array or something finding them as it goes, so a walk
65
+ * of a directory tree can feed this without being collected first.
66
+ *
67
+ * Files are read ahead of being handed over, so the next one is on its way
68
+ * while this one is being used, but only so many at a time. Results come in
69
+ * the order the files were given whatever order they finish reading in, which
70
+ * is what the rules looking across files need.
71
+ */
72
+ export declare function readAndParseFiles(files: Sequence<string>, options?: ReadOptions): AsyncGenerator<ParseResult>;
32
73
  //# sourceMappingURL=parse.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/gherkin/parse.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAC;AAEhD,OAAO,KAAK,EAAC,WAAW,EAAE,SAAS,EAAC,MAAM,aAAa,CAAC;AAIxD;;;;GAIG;AACH,eAAO,MAAM,eAAe,YAC1B,wBAAwB,EACxB,sBAAsB,EACtB,+BAA+B,EAC/B,6BAA6B,EAC7B,oBAAoB,CACZ,CAAC;AAEX,sDAAsD;AACtD,eAAO,MAAM,YAAY,uKAAoD,CAAC;AAE9E,2DAA2D;AAC3D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,mFAAmF;IACnF,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,gFAAgF;IAChF,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAmMD,8EAA8E;AAC9E,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAEhD;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,eAAe,GAAE,MAAyB,GACzC,WAAW,CA8Cb;AAED,oDAAoD;AACpD,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,WAAW,CAAC,CAGtB"}
1
+ {"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../src/gherkin/parse.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAC,OAAO,EAAC,MAAM,oBAAoB,CAAC;AAGhD,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAC,WAAW,EAAE,SAAS,EAAC,MAAM,aAAa,CAAC;AAIxD;;;;GAIG;AACH,eAAO,MAAM,eAAe,YAC1B,wBAAwB,EACxB,sBAAsB,EACtB,+BAA+B,EAC/B,6BAA6B,EAC7B,oBAAoB,CACZ,CAAC;AAEX,sDAAsD;AACtD,eAAO,MAAM,YAAY,uKAAoD,CAAC;AAE9E,2DAA2D;AAC3D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,WAAW,CAAC;IAClB,mFAAmF;IACnF,OAAO,EAAE,OAAO,GAAG,SAAS,CAAC;IAC7B,gFAAgF;IAChF,MAAM,EAAE,SAAS,EAAE,CAAC;CACrB;AAmMD,8EAA8E;AAC9E,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAEhD;AAED;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,MAAM,EACd,eAAe,GAAE,MAAyB,GACzC,WAAW,CA8Cb;AAiBD;;;;;;;;;;;;GAYG;AACH,wBAAsB,gBAAgB,CACpC,YAAY,EAAE,MAAM,EACpB,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,WAAW,CAAC,CAgBtB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,kBAAkB,KAAK,CAAC;AAErC,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EACvB,OAAO,GAAE,WAAgB,GACxB,cAAc,CAAC,WAAW,CAAC,CAI7B"}
@@ -11,6 +11,7 @@
11
11
  import { AstBuilder, GherkinClassicTokenMatcher, Parser } from '@cucumber/gherkin';
12
12
  import { IdGenerator } from '@cucumber/messages';
13
13
  import { readFile } from 'node:fs/promises';
14
+ import { mapWithWindow } from '../util/stream.js';
14
15
  import { DEFAULT_LANGUAGE, detectLanguage, getDialect } from './dialects.js';
15
16
  /**
16
17
  * Rules the parser enforces on every file. They cannot be turned off, but
@@ -228,9 +229,73 @@ export function parseFeature(relativePath, source, defaultLanguage = DEFAULT_LAN
228
229
  }
229
230
  return { file, feature: undefined, errors };
230
231
  }
231
- /** Reads a feature file from disk and parses it. */
232
+ /** A file that could not be turned into a feature, and why. */
233
+ function unreadable(relativePath, lines, thrown) {
234
+ return {
235
+ file: { relativePath, lines },
236
+ feature: undefined,
237
+ errors: [
238
+ {
239
+ message: thrown instanceof Error ? thrown.message : String(thrown),
240
+ rule: 'unexpected-error',
241
+ line: 0,
242
+ },
243
+ ],
244
+ };
245
+ }
246
+ /**
247
+ * Reads a feature file from disk and parses it.
248
+ *
249
+ * A file that cannot be read at all - missing, unreadable, deleted between
250
+ * being found and being opened - comes back as a result carrying the reason,
251
+ * exactly as a file the parser rejected does. Nothing here throws: one
252
+ * unreadable file among a thousand should cost you that file's findings, not
253
+ * every other file's as well.
254
+ *
255
+ * That promise is what lets `readAndParseFiles` hold started reads in a
256
+ * window. A promise that rejected before anything awaited it would be an
257
+ * unhandled rejection, and take the process with it.
258
+ */
232
259
  export async function readAndParseFile(relativePath, defaultLanguage) {
233
- const source = await readFile(relativePath, 'utf8');
234
- return parseFeature(relativePath, source, defaultLanguage);
260
+ let source;
261
+ try {
262
+ source = await readFile(relativePath, 'utf8');
263
+ }
264
+ catch (thrown) {
265
+ return unreadable(relativePath, [], thrown);
266
+ }
267
+ try {
268
+ return parseFeature(relativePath, source, defaultLanguage);
269
+ }
270
+ catch (thrown) {
271
+ // parseFeature turns the parser's complaints into findings rather than
272
+ // throwing, so getting here means gurkencheck itself went wrong. Even
273
+ // then, one file is one file.
274
+ return unreadable(relativePath, toLines(source), thrown);
275
+ }
276
+ }
277
+ /**
278
+ * How many files are read ahead of the one being handed over.
279
+ *
280
+ * Enough to keep the disk busy while a file is checked, few enough that the
281
+ * memory held is a property of this number rather than of the size of the
282
+ * suite. Reading every file at once - which is what a `Promise.all` over the
283
+ * whole list does - holds the entire suite's source and syntax trees at once,
284
+ * and opens a file descriptor per file while it is at it.
285
+ */
286
+ export const DEFAULT_READ_AHEAD = 16;
287
+ /**
288
+ * Reads and parses feature files, handing each one over in turn.
289
+ *
290
+ * The files may be an array or something finding them as it goes, so a walk
291
+ * of a directory tree can feed this without being collected first.
292
+ *
293
+ * Files are read ahead of being handed over, so the next one is on its way
294
+ * while this one is being used, but only so many at a time. Results come in
295
+ * the order the files were given whatever order they finish reading in, which
296
+ * is what the rules looking across files need.
297
+ */
298
+ export function readAndParseFiles(files, options = {}) {
299
+ return mapWithWindow(files, options.readAhead ?? DEFAULT_READ_AHEAD, (file) => readAndParseFile(file, options.language));
235
300
  }
236
301
  //# sourceMappingURL=parse.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/gherkin/parse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse.js","sourceRoot":"","sources":["../../src/gherkin/parse.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -16,27 +16,35 @@ export { DEFAULT_CONFIG_FILE_NAME, readConfiguration } from './config-parser.ts'
16
16
  export type { ConfigurationResult } from './config-parser.ts';
17
17
  export { verifyConfiguration } from './config-verifier.ts';
18
18
  export { PRESETS, RECOMMENDED } from './presets.ts';
19
- export { DEFAULT_IGNORE_FILE_NAME, DEFAULT_IGNORED_PATTERNS, findFeatureFiles, readIgnorePatterns, } from './feature-finder.ts';
20
- export type { FeatureSearch } from './feature-finder.ts';
21
- export { DEFAULT_FORMAT, FORMATTERS, getFormatter, loadFormatter } from './formatters/index.ts';
22
- export type { Formatter } from './formatters/index.ts';
19
+ export { DEFAULT_IGNORE_FILE_NAME, DEFAULT_IGNORED_PATTERNS, featureRoots, findFeatureFileStream, findFeatureFiles, readIgnorePatterns, } from './feature-finder.ts';
20
+ export type { FeatureFileStream, FeatureSearch } from './feature-finder.ts';
21
+ export { DEFAULT_FORMAT, FORMATTERS, STREAMING_FORMATTERS, getFormatter, getStreamingFormatter, loadFormatter, loadStreamingFormatter, } from './formatters/index.ts';
22
+ export type { Formatter, FormatterRun, StreamingFormatter } from './formatters/index.ts';
23
23
  export { toJson } from './formatters/json.ts';
24
24
  export { toSarif } from './formatters/sarif.ts';
25
25
  export { version } from './version.ts';
26
26
  export type { JsonMessage, JsonResult } from './formatters/json.ts';
27
- export { ALWAYS_ON_RULES, PARSER_RULES, parseFeature, readAndParseFile } from './gherkin/parse.ts';
28
- export type { ParseResult } from './gherkin/parse.ts';
27
+ export { ALWAYS_ON_RULES, DEFAULT_READ_AHEAD, PARSER_RULES, parseFeature, readAndParseFile, readAndParseFiles, } from './gherkin/parse.ts';
28
+ export type { ParseResult, ReadOptions } from './gherkin/parse.ts';
29
29
  export { getNeutralKeyword, getNodeType } from './gherkin/keywords.ts';
30
30
  export { DEFAULT_LANGUAGE, detectLanguage, getDialect, isKnownLanguage } from './gherkin/dialects.ts';
31
31
  export { backgroundsOf, rulesOf, scenariosOf, stepContainersOf } from './gherkin/traverse.ts';
32
32
  export { EXIT_LINT_ERRORS, EXIT_OK, EXIT_USAGE } from './exit-codes.ts';
33
- export { countBySeverity, hasErrors, lint } from './linter.ts';
33
+ export { SILENT, TO_STDERR, collectDiagnostics } from './diagnostics.ts';
34
+ export type { CollectedDiagnostics, Diagnostic, DiagnosticLevel, Diagnostics, } from './diagnostics.ts';
35
+ export { DEFAULT_SETTLE_MS, isInteresting, watch } from './watch.ts';
36
+ export type { WatchOptions } from './watch.ts';
37
+ export { mapWithWindow } from './util/stream.ts';
38
+ export type { Sequence } from './util/stream.ts';
39
+ export { globRoot, globStream, globSync } from './util/glob.ts';
40
+ export { countBySeverity, hasErrors, lint, lintStream } from './linter.ts';
34
41
  export type { LintOptions } from './linter.ts';
35
42
  export { readSuppressions } from './suppressions.ts';
36
43
  export type { Suppressions } from './suppressions.ts';
37
- export { getRuleSettings, getRuleSeverity, isRuleEnabled, loadRules, resetRules, runEnabledRules, } from './rules.ts';
44
+ export { beginRun, finishRun, getRuleSettings, getRuleSeverity, isRuleEnabled, loadRules, newRunContext, resetRules, runEnabledRules, } from './rules.ts';
45
+ export type { Run } from './rules.ts';
38
46
  export { BUILT_IN_RULES } from './rules/index.ts';
39
- export { collectStatistics, distribution } from './stats/collect.ts';
47
+ export { collectStatistics, collectStatisticsFrom, distribution } from './stats/collect.ts';
40
48
  export type { CollectOptions } from './stats/collect.ts';
41
49
  export { DEFAULT_SIMILARITY, boundedEditDistance, groupSimilar } from './stats/similar.ts';
42
50
  export type { SimilarityOptions } from './stats/similar.ts';
@@ -45,5 +53,5 @@ export { DEFAULT_STATS_FORMAT, DEFAULT_TOP, STATS_FORMATTERS, getStatsFormatter,
45
53
  export type { StatsFormatOptions, StatsFormatter } from './stats/format/index.ts';
46
54
  export { runStats, statsUsage } from './stats/command.ts';
47
55
  export type { Distribution, Inventory, KeywordMix, LanguageEntry, ScenarioRef, ScenarioStats, SimilarGroup, Statistics, StepEntry, StepStats, TagEntry, TagStats, UnreadableFile, } from './stats/types.ts';
48
- export type { Configuration, FeatureFile, FileResult, LintRule, RuleConfig, RuleError, RuleRegistry, RuleState, Severity, } from './types.ts';
56
+ export type { Configuration, FeatureFile, FileResult, LintRule, RuleConfig, RuleError, RuleRegistry, RuleState, RunContext, RunFinding, Severity, } from './types.ts';
49
57
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -15,21 +15,25 @@
15
15
  export { DEFAULT_CONFIG_FILE_NAME, readConfiguration } from './config-parser.js';
16
16
  export { verifyConfiguration } from './config-verifier.js';
17
17
  export { PRESETS, RECOMMENDED } from './presets.js';
18
- export { DEFAULT_IGNORE_FILE_NAME, DEFAULT_IGNORED_PATTERNS, findFeatureFiles, readIgnorePatterns, } from './feature-finder.js';
19
- export { DEFAULT_FORMAT, FORMATTERS, getFormatter, loadFormatter } from './formatters/index.js';
18
+ export { DEFAULT_IGNORE_FILE_NAME, DEFAULT_IGNORED_PATTERNS, featureRoots, findFeatureFileStream, findFeatureFiles, readIgnorePatterns, } from './feature-finder.js';
19
+ export { DEFAULT_FORMAT, FORMATTERS, STREAMING_FORMATTERS, getFormatter, getStreamingFormatter, loadFormatter, loadStreamingFormatter, } from './formatters/index.js';
20
20
  export { toJson } from './formatters/json.js';
21
21
  export { toSarif } from './formatters/sarif.js';
22
22
  export { version } from './version.js';
23
- export { ALWAYS_ON_RULES, PARSER_RULES, parseFeature, readAndParseFile } from './gherkin/parse.js';
23
+ export { ALWAYS_ON_RULES, DEFAULT_READ_AHEAD, PARSER_RULES, parseFeature, readAndParseFile, readAndParseFiles, } from './gherkin/parse.js';
24
24
  export { getNeutralKeyword, getNodeType } from './gherkin/keywords.js';
25
25
  export { DEFAULT_LANGUAGE, detectLanguage, getDialect, isKnownLanguage } from './gherkin/dialects.js';
26
26
  export { backgroundsOf, rulesOf, scenariosOf, stepContainersOf } from './gherkin/traverse.js';
27
27
  export { EXIT_LINT_ERRORS, EXIT_OK, EXIT_USAGE } from './exit-codes.js';
28
- export { countBySeverity, hasErrors, lint } from './linter.js';
28
+ export { SILENT, TO_STDERR, collectDiagnostics } from './diagnostics.js';
29
+ export { DEFAULT_SETTLE_MS, isInteresting, watch } from './watch.js';
30
+ export { mapWithWindow } from './util/stream.js';
31
+ export { globRoot, globStream, globSync } from './util/glob.js';
32
+ export { countBySeverity, hasErrors, lint, lintStream } from './linter.js';
29
33
  export { readSuppressions } from './suppressions.js';
30
- export { getRuleSettings, getRuleSeverity, isRuleEnabled, loadRules, resetRules, runEnabledRules, } from './rules.js';
34
+ export { beginRun, finishRun, getRuleSettings, getRuleSeverity, isRuleEnabled, loadRules, newRunContext, resetRules, runEnabledRules, } from './rules.js';
31
35
  export { BUILT_IN_RULES } from './rules/index.js';
32
- export { collectStatistics, distribution } from './stats/collect.js';
36
+ export { collectStatistics, collectStatisticsFrom, distribution } from './stats/collect.js';
33
37
  export { DEFAULT_SIMILARITY, boundedEditDistance, groupSimilar } from './stats/similar.js';
34
38
  export { NUMBER_MARKER, PLACEHOLDER_MARKER, STRING_MARKER, countWords, normaliseStepText, } from './stats/normalise.js';
35
39
  export { DEFAULT_STATS_FORMAT, DEFAULT_TOP, STATS_FORMATTERS, getStatsFormatter, toJson as statisticsToJson, toMarkdown, toText, } from './stats/format/index.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAC,wBAAwB,EAAE,iBAAiB,EAAC,MAAM,oBAAoB,CAAC;AAE/E,OAAO,EAAC,mBAAmB,EAAC,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAC,OAAO,EAAE,WAAW,EAAC,MAAM,cAAc,CAAC;AAClD,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAC,cAAc,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAC,MAAM,uBAAuB,CAAC;AAE9F,OAAO,EAAC,MAAM,EAAC,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAC,OAAO,EAAC,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AAErC,OAAO,EAAC,eAAe,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AAEjG,OAAO,EAAC,iBAAiB,EAAE,WAAW,EAAC,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAC,gBAAgB,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAC,MAAM,uBAAuB,CAAC;AACpG,OAAO,EAAC,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AAC5F,OAAO,EAAC,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAC,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAC,eAAe,EAAE,SAAS,EAAE,IAAI,EAAC,MAAM,aAAa,CAAC;AAE7D,OAAO,EAAC,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EACL,eAAe,EACf,eAAe,EACf,aAAa,EACb,SAAS,EACT,UAAU,EACV,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAC,iBAAiB,EAAE,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAEnE,OAAO,EAAC,kBAAkB,EAAE,mBAAmB,EAAE,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAEzF,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,MAAM,IAAI,gBAAgB,EAC1B,UAAU,EACV,MAAM,GACP,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAC,QAAQ,EAAE,UAAU,EAAC,MAAM,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AACH,OAAO,EAAC,wBAAwB,EAAE,iBAAiB,EAAC,MAAM,oBAAoB,CAAC;AAE/E,OAAO,EAAC,mBAAmB,EAAC,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAC,OAAO,EAAE,WAAW,EAAC,MAAM,cAAc,CAAC;AAClD,OAAO,EACL,wBAAwB,EACxB,wBAAwB,EACxB,YAAY,EACZ,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,YAAY,EACZ,qBAAqB,EACrB,aAAa,EACb,sBAAsB,GACvB,MAAM,uBAAuB,CAAC;AAE/B,OAAO,EAAC,MAAM,EAAC,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAC,OAAO,EAAC,MAAM,uBAAuB,CAAC;AAC9C,OAAO,EAAC,OAAO,EAAC,MAAM,cAAc,CAAC;AAErC,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAC,iBAAiB,EAAE,WAAW,EAAC,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAC,gBAAgB,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,EAAC,MAAM,uBAAuB,CAAC;AACpG,OAAO,EAAC,aAAa,EAAE,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAC,MAAM,uBAAuB,CAAC;AAC5F,OAAO,EAAC,gBAAgB,EAAE,OAAO,EAAE,UAAU,EAAC,MAAM,iBAAiB,CAAC;AACtE,OAAO,EAAC,MAAM,EAAE,SAAS,EAAE,kBAAkB,EAAC,MAAM,kBAAkB,CAAC;AAOvE,OAAO,EAAC,iBAAiB,EAAE,aAAa,EAAE,KAAK,EAAC,MAAM,YAAY,CAAC;AAEnE,OAAO,EAAC,aAAa,EAAC,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAC,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAC,eAAe,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAC,MAAM,aAAa,CAAC;AAEzE,OAAO,EAAC,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EACL,QAAQ,EACR,SAAS,EACT,eAAe,EACf,eAAe,EACf,aAAa,EACb,SAAS,EACT,aAAa,EACb,UAAU,EACV,eAAe,GAChB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAC,iBAAiB,EAAE,qBAAqB,EAAE,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAE1F,OAAO,EAAC,kBAAkB,EAAE,mBAAmB,EAAE,YAAY,EAAC,MAAM,oBAAoB,CAAC;AAEzF,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,aAAa,EACb,UAAU,EACV,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,EACjB,MAAM,IAAI,gBAAgB,EAC1B,UAAU,EACV,MAAM,GACP,MAAM,yBAAyB,CAAC;AAEjC,OAAO,EAAC,QAAQ,EAAE,UAAU,EAAC,MAAM,oBAAoB,CAAC"}
package/dist/linter.d.ts CHANGED
@@ -1,18 +1,46 @@
1
1
  import type { Configuration, FileResult, RuleRegistry } from './types.ts';
2
+ import type { Sequence } from './util/stream.ts';
2
3
  export interface LintOptions {
3
4
  /**
4
5
  * The dialect to read a file in when it carries no `# language:` header,
5
6
  * for projects written entirely in one language.
6
7
  */
7
8
  language?: string;
9
+ /**
10
+ * How many files to read ahead of the one being checked. Left out, a
11
+ * sensible default is used; there is rarely a reason to set it.
12
+ */
13
+ readAhead?: number;
8
14
  }
9
15
  /**
10
- * Lints every file and returns one result per file, in the order given.
16
+ * Lints every file, handing back each result as soon as it is final.
11
17
  *
12
18
  * Files are read concurrently but checked one after another, because rules
13
- * that look for duplicates across files need a predictable order.
19
+ * that look for duplicates across files need a predictable order. Results
20
+ * come in the order the files were given.
21
+ *
22
+ * A rule that reports across files - two files sharing a name - cannot know
23
+ * what it has found until every file has been seen, so switching one on holds
24
+ * every result back until the end. That is the honest cost of the question it
25
+ * answers, not something to work around: a result handed over early would
26
+ * have to be taken back. With no such rule on, each result arrives as its
27
+ * file is checked.
28
+ *
29
+ * Files are read ahead of being checked, a bounded number at a time, so the
30
+ * next one is on its way while this one is being checked without the whole
31
+ * suite being held in memory at once.
32
+ *
33
+ * Stopping early - `break` in a `for await` - stops the reading as well as
34
+ * the checking, rather than running on to the last file.
35
+ */
36
+ export declare function lintStream(files: Sequence<string>, configuration: Configuration, rules: RuleRegistry, options?: LintOptions): AsyncGenerator<FileResult>;
37
+ /**
38
+ * Lints every file and returns one result per file, in the order given.
39
+ *
40
+ * The whole run at once. For results as they are ready - a progress line, an
41
+ * editor, stopping at the first error - use `lintStream`.
14
42
  */
15
- export declare function lint(files: readonly string[], configuration: Configuration, rules: RuleRegistry, options?: LintOptions): Promise<FileResult[]>;
43
+ export declare function lint(files: Sequence<string>, configuration: Configuration, rules: RuleRegistry, options?: LintOptions): Promise<FileResult[]>;
16
44
  /** True when any file has a finding serious enough to fail the run. */
17
45
  export declare function hasErrors(results: readonly FileResult[]): boolean;
18
46
  /** How many findings there are of each severity. */
@@ -1 +1 @@
1
- {"version":3,"file":"linter.d.ts","sourceRoot":"","sources":["../src/linter.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAC,aAAa,EAAE,UAAU,EAAE,YAAY,EAAC,MAAM,YAAY,CAAC;AAGxE,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;GAKG;AACH,wBAAsB,IAAI,CACxB,KAAK,EAAE,SAAS,MAAM,EAAE,EACxB,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,EAAE,CAAC,CA4BvB;AAED,uEAAuE;AACvE,wBAAgB,SAAS,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,GAAG,OAAO,CAIjE;AAED,oDAAoD;AACpD,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,GAAG;IAC/D,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAaA"}
1
+ {"version":3,"file":"linter.d.ts","sourceRoot":"","sources":["../src/linter.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAC,aAAa,EAAE,UAAU,EAAE,YAAY,EAAC,MAAM,YAAY,CAAC;AAExE,OAAO,KAAK,EAAC,QAAQ,EAAC,MAAM,kBAAkB,CAAC;AAK/C,MAAM,WAAW,WAAW;IAC1B;;;OAGG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAYD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAuB,UAAU,CAC/B,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EACvB,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE,WAAgB,GACxB,cAAc,CAAC,UAAU,CAAC,CAuD5B;AAED;;;;;GAKG;AACH,wBAAsB,IAAI,CACxB,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,EACvB,aAAa,EAAE,aAAa,EAC5B,KAAK,EAAE,YAAY,EACnB,OAAO,GAAE,WAAgB,GACxB,OAAO,CAAC,UAAU,EAAE,CAAC,CAMvB;AAED,uEAAuE;AACvE,wBAAgB,SAAS,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,GAAG,OAAO,CAIjE;AAED,oDAAoD;AACpD,wBAAgB,eAAe,CAAC,OAAO,EAAE,SAAS,UAAU,EAAE,GAAG;IAC/D,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAaA"}
package/dist/linter.js CHANGED
@@ -2,35 +2,102 @@
2
2
  * Running the rules over a set of feature files.
3
3
  */
4
4
  import path from 'node:path';
5
- import { readAndParseFile } from './gherkin/parse.js';
6
- import { resetRules, runEnabledRules } from './rules.js';
5
+ import { readAndParseFiles } from './gherkin/parse.js';
6
+ import { beginRun, finishRun, isRuleEnabled, runEnabledRules } from './rules.js';
7
7
  import { readSuppressions } from './suppressions.js';
8
8
  import { sortBy } from './util/collections.js';
9
+ /** Stands in for a file whose directives were never read, and hides nothing. */
10
+ const EMPTY_SUPPRESSIONS = { isEmpty: true, isSuppressed: () => false };
11
+ /** True when a rule that only reports once every file has been seen is on. */
12
+ function reportsAcrossFiles(rules, configuration) {
13
+ for (const rule of rules.values()) {
14
+ if (rule.onRunEnd !== undefined && isRuleEnabled(configuration[rule.name])) {
15
+ return true;
16
+ }
17
+ }
18
+ return false;
19
+ }
9
20
  /**
10
- * Lints every file and returns one result per file, in the order given.
21
+ * Lints every file, handing back each result as soon as it is final.
11
22
  *
12
23
  * Files are read concurrently but checked one after another, because rules
13
- * that look for duplicates across files need a predictable order.
24
+ * that look for duplicates across files need a predictable order. Results
25
+ * come in the order the files were given.
26
+ *
27
+ * A rule that reports across files - two files sharing a name - cannot know
28
+ * what it has found until every file has been seen, so switching one on holds
29
+ * every result back until the end. That is the honest cost of the question it
30
+ * answers, not something to work around: a result handed over early would
31
+ * have to be taken back. With no such rule on, each result arrives as its
32
+ * file is checked.
33
+ *
34
+ * Files are read ahead of being checked, a bounded number at a time, so the
35
+ * next one is on its way while this one is being checked without the whole
36
+ * suite being held in memory at once.
37
+ *
38
+ * Stopping early - `break` in a `for await` - stops the reading as well as
39
+ * the checking, rather than running on to the last file.
14
40
  */
15
- export async function lint(files, configuration, rules, options = {}) {
16
- resetRules(rules);
17
- const parsed = await Promise.all(files.map((file) => readAndParseFile(file, options.language)));
18
- const results = [];
19
- for (const result of parsed) {
41
+ export async function* lintStream(files, configuration, rules, options = {}) {
42
+ const run = beginRun(rules, configuration);
43
+ const held = reportsAcrossFiles(rules, configuration);
44
+ const waiting = [];
45
+ /** Where to put a finding that names a file, and what may hide it there. */
46
+ const byPath = new Map();
47
+ for await (const result of readAndParseFiles(files, {
48
+ language: options.language,
49
+ readAhead: options.readAhead,
50
+ })) {
20
51
  // Parse errors are not suppressible: the file could not be read, so
21
52
  // hiding the message would leave nothing in its place.
22
53
  let errors = result.errors;
54
+ let suppressions = EMPTY_SUPPRESSIONS;
23
55
  if (errors.length === 0) {
24
- errors = await runEnabledRules(result.feature, result.file, configuration, rules);
25
- const suppressions = readSuppressions(result.file.lines);
56
+ errors = await runEnabledRules(result.feature, result.file, configuration, rules, run);
57
+ suppressions = readSuppressions(result.file.lines);
26
58
  if (!suppressions.isEmpty) {
27
59
  errors = errors.filter((error) => !suppressions.isSuppressed(error));
28
60
  }
29
61
  }
30
- results.push({
31
- filePath: path.resolve(result.file.relativePath),
32
- errors: sortBy(errors, (error) => error.line),
33
- });
62
+ const fileResult = { filePath: path.resolve(result.file.relativePath), errors };
63
+ byPath.set(result.file.relativePath, { result: fileResult, suppressions });
64
+ if (held) {
65
+ waiting.push(fileResult);
66
+ }
67
+ else {
68
+ fileResult.errors = sortBy(fileResult.errors, (error) => error.line);
69
+ yield fileResult;
70
+ }
71
+ }
72
+ // What only the whole run could show: two files sharing a name, and the
73
+ // like. A finding naming no file is about the run itself - a rule that
74
+ // failed looking back over it - and goes against the first file so that it
75
+ // is seen at all.
76
+ for (const { filePath, ...error } of await finishRun(rules, configuration, run)) {
77
+ const target = filePath === undefined ? undefined : byPath.get(filePath);
78
+ if (target === undefined) {
79
+ waiting[0]?.errors.push(error);
80
+ continue;
81
+ }
82
+ if (!target.suppressions.isSuppressed(error)) {
83
+ target.result.errors.push(error);
84
+ }
85
+ }
86
+ for (const result of waiting) {
87
+ result.errors = sortBy(result.errors, (error) => error.line);
88
+ yield result;
89
+ }
90
+ }
91
+ /**
92
+ * Lints every file and returns one result per file, in the order given.
93
+ *
94
+ * The whole run at once. For results as they are ready - a progress line, an
95
+ * editor, stopping at the first error - use `lintStream`.
96
+ */
97
+ export async function lint(files, configuration, rules, options = {}) {
98
+ const results = [];
99
+ for await (const result of lintStream(files, configuration, rules, options)) {
100
+ results.push(result);
34
101
  }
35
102
  return results;
36
103
  }
@@ -1 +1 @@
1
- {"version":3,"file":"linter.js","sourceRoot":"","sources":["../src/linter.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAC,gBAAgB,EAAC,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAC,UAAU,EAAE,eAAe,EAAC,MAAM,YAAY,CAAC;AACvD,OAAO,EAAC,gBAAgB,EAAC,MAAM,mBAAmB,CAAC;AAEnD,OAAO,EAAC,MAAM,EAAC,MAAM,uBAAuB,CAAC;AAU7C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CACxB,KAAwB,EACxB,aAA4B,EAC5B,KAAmB,EACnB,OAAO,GAAgB,EAAE;IAEzB,UAAU,CAAC,KAAK,CAAC,CAAC;IAElB,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC,CAC9D,CAAC;IACF,MAAM,OAAO,GAAiB,EAAE,CAAC;IAEjC,KAAK,MAAM,MAAM,IAAI,MAAM,EAAE,CAAC;QAC5B,oEAAoE;QACpE,uDAAuD;QACvD,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAE3B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;YAClF,MAAM,YAAY,GAAG,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzD,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAC;gBAC1B,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;QAED,OAAO,CAAC,IAAI,CAAC;YACX,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC;YAChD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC;SAC9C,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,SAAS,CAAC,OAA8B;IACtD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAC7B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,OAAO,CAAC,CACvE,CAAC;AACJ,CAAC;AAED,oDAAoD;AACpD,MAAM,UAAU,eAAe,CAAC,OAA8B;IAI5D,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClC,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,KAAK,SAAS,EAAE,CAAC;gBAC9C,QAAQ,EAAE,CAAC;YACb,CAAC;iBAAM,CAAC;gBACN,MAAM,EAAE,CAAC;YACX,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAC,MAAM,EAAE,QAAQ,EAAC,CAAC;AAC5B,CAAC"}
1
+ {"version":3,"file":"linter.js","sourceRoot":"","sources":["../src/linter.ts"],"names":[],"mappings":"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"}
package/dist/logger.d.ts CHANGED
@@ -6,6 +6,8 @@
6
6
  export declare function error(message: string): void;
7
7
  /** Writes a bold red message to stderr. */
8
8
  export declare function boldError(message: string): void;
9
+ /** Writes a message to stderr without colouring it. */
10
+ export declare function note(message: string): void;
9
11
  /** Text decorations used by the stylish formatter. */
10
12
  export declare const style: {
11
13
  gray: (text: string) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,sCAAsC;AACtC,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,2CAA2C;AAC3C,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,sDAAsD;AACtD,eAAO,MAAM,KAAK;IAChB,IAAI,SAAS,MAAM,KAAG,MAAM;IAC5B,SAAS,SAAS,MAAM,KAAG,MAAM;IACjC,gFAAgF;IAChF,QAAQ,aAAa,MAAM,QAAQ,MAAM,KAAG,MAAM;CAEnD,CAAC"}
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAaH,sCAAsC;AACtC,wBAAgB,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE3C;AAED,2CAA2C;AAC3C,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE/C;AAED,uDAAuD;AACvD,wBAAgB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,sDAAsD;AACtD,eAAO,MAAM,KAAK;IAChB,IAAI,SAAS,MAAM,KAAG,MAAM;IAC5B,SAAS,SAAS,MAAM,KAAG,MAAM;IACjC,gFAAgF;IAChF,QAAQ,aAAa,MAAM,QAAQ,MAAM,KAAG,MAAM;CAEnD,CAAC"}
package/dist/logger.js CHANGED
@@ -18,6 +18,10 @@ export function error(message) {
18
18
  export function boldError(message) {
19
19
  console.error(paint(`${ESC}31m${ESC}1m`, message));
20
20
  }
21
+ /** Writes a message to stderr without colouring it. */
22
+ export function note(message) {
23
+ console.error(message);
24
+ }
21
25
  /** Text decorations used by the stylish formatter. */
22
26
  export const style = {
23
27
  gray: (text) => paint(`${ESC}38;5;243m`, text),
@@ -1 +1 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,GAAG,GAAG,SAAS,CAAC;AACtB,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC;AAEzB,SAAS,QAAQ;IACf,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,KAAK,CAAC,KAAa,EAAE,OAAe;IAC3C,OAAO,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AAC7D,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,KAAK,CAAC,OAAe;IACnC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,sDAAsD;AACtD,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,IAAI,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,WAAW,EAAE,IAAI,CAAC;IAC9D,SAAS,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACvF,gFAAgF;IAChF,QAAQ,EAAE,CAAC,QAAgB,EAAE,IAAY,EAAU,EAAE,CACnD,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,EAAE,IAAI,CAAC;CAClE,CAAC"}
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,GAAG,GAAG,SAAS,CAAC;AACtB,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,CAAC;AAEzB,SAAS,QAAQ;IACf,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;AACnE,CAAC;AAED,SAAS,KAAK,CAAC,KAAa,EAAE,OAAe;IAC3C,OAAO,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,OAAO,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;AAC7D,CAAC;AAED,sCAAsC;AACtC,MAAM,UAAU,KAAK,CAAC,OAAe;IACnC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,GAAG,MAAM,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,IAAI,CAAC,OAAe;IAClC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC;AAED,sDAAsD;AACtD,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,IAAI,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,WAAW,EAAE,IAAI,CAAC;IAC9D,SAAS,EAAE,CAAC,IAAY,EAAU,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,GAAG,OAAO,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;IACvF,gFAAgF;IAChF,QAAQ,EAAE,CAAC,QAAgB,EAAE,IAAY,EAAU,EAAE,CACnD,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,EAAE,IAAI,CAAC;CAClE,CAAC"}