podlite 0.0.79 → 0.0.80

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/CHANGELOG.podlite +28 -0
  2. package/esm/cli.js +79 -11
  3. package/esm/cli.js.map +1 -1
  4. package/esm/lint/config.d.ts +2 -0
  5. package/esm/lint/config.js +46 -0
  6. package/esm/lint/config.js.map +1 -1
  7. package/esm/lint/grammar/lint.js +7 -4
  8. package/esm/lint/grammar/lint.js.map +1 -1
  9. package/esm/lint/grammar/scan.d.ts +1 -1
  10. package/esm/lint/grammar/scan.js +12 -2
  11. package/esm/lint/grammar/scan.js.map +1 -1
  12. package/esm/lint/index.d.ts +11 -0
  13. package/esm/lint/index.js +29 -17
  14. package/esm/lint/index.js.map +1 -1
  15. package/esm/lint/parallel.d.ts +4 -0
  16. package/esm/lint/parallel.js +57 -0
  17. package/esm/lint/parallel.js.map +1 -0
  18. package/esm/lint/rules/abbreviated-attrs.d.ts +4 -0
  19. package/esm/lint/rules/abbreviated-attrs.js +67 -0
  20. package/esm/lint/rules/abbreviated-attrs.js.map +1 -0
  21. package/esm/lint/rules/dead-definitions.d.ts +3 -0
  22. package/esm/lint/rules/dead-definitions.js +80 -0
  23. package/esm/lint/rules/dead-definitions.js.map +1 -0
  24. package/esm/lint/rules/index.js +2 -0
  25. package/esm/lint/rules/index.js.map +1 -1
  26. package/esm/lint/rules/markdown-in-pod.d.ts +4 -0
  27. package/esm/lint/rules/markdown-in-pod.js +67 -0
  28. package/esm/lint/rules/markdown-in-pod.js.map +1 -0
  29. package/esm/lint/rules/table-column-width.js +10 -6
  30. package/esm/lint/rules/table-column-width.js.map +1 -1
  31. package/esm/lint/types.d.ts +1 -0
  32. package/esm/lint/worker.d.ts +5 -0
  33. package/esm/lint/worker.js +15 -0
  34. package/esm/lint/worker.js.map +1 -0
  35. package/esm/query.js +4 -1
  36. package/esm/query.js.map +1 -1
  37. package/esm/resolve-includes.js +56 -7
  38. package/esm/resolve-includes.js.map +1 -1
  39. package/esm/version.d.ts +1 -1
  40. package/esm/version.js +1 -1
  41. package/lib/cli.js +78 -10
  42. package/lib/cli.js.map +1 -1
  43. package/lib/lint/config.d.ts +2 -0
  44. package/lib/lint/config.js +48 -0
  45. package/lib/lint/config.js.map +1 -1
  46. package/lib/lint/grammar/lint.js +7 -4
  47. package/lib/lint/grammar/lint.js.map +1 -1
  48. package/lib/lint/grammar/scan.d.ts +1 -1
  49. package/lib/lint/grammar/scan.js +11 -1
  50. package/lib/lint/grammar/scan.js.map +1 -1
  51. package/lib/lint/index.d.ts +11 -0
  52. package/lib/lint/index.js +67 -15
  53. package/lib/lint/index.js.map +1 -1
  54. package/lib/lint/parallel.d.ts +4 -0
  55. package/lib/lint/parallel.js +95 -0
  56. package/lib/lint/parallel.js.map +1 -0
  57. package/lib/lint/rules/abbreviated-attrs.d.ts +4 -0
  58. package/lib/lint/rules/abbreviated-attrs.js +71 -0
  59. package/lib/lint/rules/abbreviated-attrs.js.map +1 -0
  60. package/lib/lint/rules/dead-definitions.d.ts +3 -0
  61. package/lib/lint/rules/dead-definitions.js +83 -0
  62. package/lib/lint/rules/dead-definitions.js.map +1 -0
  63. package/lib/lint/rules/index.js +2 -0
  64. package/lib/lint/rules/index.js.map +1 -1
  65. package/lib/lint/rules/markdown-in-pod.d.ts +4 -0
  66. package/lib/lint/rules/markdown-in-pod.js +71 -0
  67. package/lib/lint/rules/markdown-in-pod.js.map +1 -0
  68. package/lib/lint/rules/table-column-width.js +9 -5
  69. package/lib/lint/rules/table-column-width.js.map +1 -1
  70. package/lib/lint/types.d.ts +1 -0
  71. package/lib/lint/worker.d.ts +5 -0
  72. package/lib/lint/worker.js +17 -0
  73. package/lib/lint/worker.js.map +1 -0
  74. package/lib/query.js +4 -1
  75. package/lib/query.js.map +1 -1
  76. package/lib/resolve-includes.js +55 -6
  77. package/lib/resolve-includes.js.map +1 -1
  78. package/lib/version.d.ts +1 -1
  79. package/lib/version.js +1 -1
  80. package/package.json +13 -7
@@ -1,9 +1,20 @@
1
+ import type { LintConfig } from './types';
2
+ import { FileReport } from './formatters/text';
3
+ export type { Violation, Severity, LintConfig, LintContext, Rule, RuleSetting } from './types';
4
+ export type { FileReport } from './formatters/text';
5
+ export { ConfigError, findConfig, readConfig } from './config';
1
6
  export type LintFormat = 'text' | 'json';
2
7
  export type LintOptions = {
3
8
  strict: boolean;
4
9
  format: LintFormat;
5
10
  configPath?: string;
6
11
  stdinContent?: string;
12
+ enable?: string[];
13
+ disable?: string[];
7
14
  };
8
15
  export declare const STDIN_NAME = "<stdin>";
16
+ export declare function lintSource(content: string, filePath: string, config: LintConfig): FileReport;
17
+ export declare function lintFile(filePath: string, config: LintConfig): FileReport;
18
+ export declare function resolveConfig(files: string[], options: LintOptions): LintConfig;
19
+ export declare function reportLint(reports: FileReport[], options: LintOptions): number;
9
20
  export declare function runLint(files: string[], options: LintOptions): number;
package/esm/lint/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ import * as path from 'path';
1
2
  import { makeSyntaxViolation } from './rules/syntax-valid';
2
3
  import { DEFAULT_RULES } from './rules';
3
4
  import { runRules } from './engine';
@@ -5,16 +6,17 @@ import { detectFileType, readFile, parseContent } from './loader';
5
6
  import { formatText } from './formatters/text';
6
7
  import { formatJson } from './formatters/json';
7
8
  import { scanSourceRules } from './grammar/scan';
8
- import { applyConfig, ConfigError, readConfig } from './config';
9
+ import { applyConfig, applyRuleFlags, ConfigError, findConfig, readConfig } from './config';
9
10
  import { applyMutes } from './mute';
11
+ export { ConfigError, findConfig, readConfig } from './config';
10
12
  // text handed to the command instead of a path is reported under this name
11
13
  export const STDIN_NAME = '<stdin>';
12
- function lintSource(content, filePath, config) {
13
- const violations = [...applyConfig(scanSourceRules(content), config)];
14
+ export function lintSource(content, filePath, config) {
14
15
  const fileType = detectFileType(filePath);
16
+ const violations = [...applyConfig(scanSourceRules(content, fileType), config)];
15
17
  try {
16
18
  const ast = parseContent(content, fileType);
17
- const ctx = { filePath, fileType, config };
19
+ const ctx = { filePath, fileType, config, source: content };
18
20
  violations.push(...runRules(ast, DEFAULT_RULES, ctx));
19
21
  const muted = applyMutes(violations, ast);
20
22
  return { filePath, violations: applyConfig(muted.kept, config), silenced: muted.silenced };
@@ -24,7 +26,7 @@ function lintSource(content, filePath, config) {
24
26
  }
25
27
  return { filePath, violations };
26
28
  }
27
- function lintFile(filePath, config) {
29
+ export function lintFile(filePath, config) {
28
30
  let content;
29
31
  try {
30
32
  content = readFile(filePath);
@@ -43,10 +45,30 @@ function lintFile(filePath, config) {
43
45
  }
44
46
  return lintSource(content, filePath, config);
45
47
  }
48
+ // Thrown out of resolveConfig so a caller can turn it into exit code 2 wherever
49
+ // the run is scheduled from.
50
+ export function resolveConfig(files, options) {
51
+ const searchFrom = files.length > 0 ? path.dirname(path.resolve(files[0])) : process.cwd();
52
+ const configPath = options.configPath || findConfig(searchFrom);
53
+ return applyRuleFlags(readConfig(configPath), options.enable || [], options.disable || []);
54
+ }
55
+ export function reportLint(reports, options) {
56
+ const output = options.format === 'json' ? formatJson(reports) : formatText(reports, { color: process.stdout.isTTY === true });
57
+ if (output)
58
+ process.stdout.write(output);
59
+ const totals = reports.flatMap(r => r.violations);
60
+ const hasError = totals.some(v => v.severity === 'error');
61
+ const hasWarning = totals.some(v => v.severity === 'warning');
62
+ if (hasError)
63
+ return 1;
64
+ if (options.strict && hasWarning)
65
+ return 1;
66
+ return 0;
67
+ }
46
68
  export function runLint(files, options) {
47
69
  let config;
48
70
  try {
49
- config = readConfig(options.configPath);
71
+ config = resolveConfig(files, options);
50
72
  }
51
73
  catch (e) {
52
74
  if (!(e instanceof ConfigError))
@@ -58,16 +80,6 @@ export function runLint(files, options) {
58
80
  if (options.stdinContent !== undefined) {
59
81
  reports.push(lintSource(options.stdinContent, STDIN_NAME, config));
60
82
  }
61
- const output = options.format === 'json' ? formatJson(reports) : formatText(reports, { color: process.stdout.isTTY === true });
62
- if (output)
63
- process.stdout.write(output);
64
- const totals = reports.flatMap(r => r.violations);
65
- const hasError = totals.some(v => v.severity === 'error');
66
- const hasWarning = totals.some(v => v.severity === 'warning');
67
- if (hasError)
68
- return 1;
69
- if (options.strict && hasWarning)
70
- return 1;
71
- return 0;
83
+ return reportLint(reports, options);
72
84
  }
73
85
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lint/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACjE,OAAO,EAAE,UAAU,EAAc,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAWnC,2EAA2E;AAC3E,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAA;AAEnC,SAAS,UAAU,CAAC,OAAe,EAAE,QAAgB,EAAE,MAAkB;IACvE,MAAM,UAAU,GAAgB,CAAC,GAAG,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;IAClF,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;IACzC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QAC3C,MAAM,GAAG,GAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAA;QACvD,UAAU,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC,CAAA;QACrD,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;QACzC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAA;IAC5F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAA;IACnD,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAA;AACjC,CAAC;AAED,SAAS,QAAQ,CAAC,QAAgB,EAAE,MAAkB;IACpD,IAAI,OAAe,CAAA;IACnB,IAAI,CAAC;QACH,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAC9B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO;YACL,QAAQ;YACR,UAAU,EAAE;gBACV;oBACE,IAAI,EAAE,IAAI;oBACV,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,qBAAsB,CAAW,CAAC,OAAO,EAAE;iBACrD;aACF;SACF,CAAA;IACH,CAAC;IACD,OAAO,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;AAC9C,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAe,EAAE,OAAoB;IAC3D,IAAI,MAAkB,CAAA;IACtB,IAAI,CAAC;QACH,MAAM,GAAG,UAAU,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;IACzC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,CAAC,CAAC,YAAY,WAAW,CAAC;YAAE,MAAM,CAAC,CAAA;QACxC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;QAC3C,OAAO,CAAC,CAAA;IACV,CAAC;IAED,MAAM,OAAO,GAAiB,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;IAC/E,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAA;IACpE,CAAC;IAED,MAAM,MAAM,GACV,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC,CAAA;IACjH,IAAI,MAAM;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAExC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAA;IACzD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAA;IAC7D,IAAI,QAAQ;QAAE,OAAO,CAAC,CAAA;IACtB,IAAI,OAAO,CAAC,MAAM,IAAI,UAAU;QAAE,OAAO,CAAC,CAAA;IAC1C,OAAO,CAAC,CAAA;AACV,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lint/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAE5B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACjE,OAAO,EAAE,UAAU,EAAc,MAAM,mBAAmB,CAAA;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAC3F,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAA;AAMnC,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAa9D,2EAA2E;AAC3E,MAAM,CAAC,MAAM,UAAU,GAAG,SAAS,CAAA;AAEnC,MAAM,UAAU,UAAU,CAAC,OAAe,EAAE,QAAgB,EAAE,MAAkB;IAC9E,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,CAAA;IACzC,MAAM,UAAU,GAAgB,CAAC,GAAG,WAAW,CAAC,eAAe,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,CAAC,CAAA;IAC5F,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;QAC3C,MAAM,GAAG,GAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,CAAA;QACxE,UAAU,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,aAAa,EAAE,GAAG,CAAC,CAAC,CAAA;QACrD,MAAM,KAAK,GAAG,UAAU,CAAC,UAAU,EAAE,GAAG,CAAC,CAAA;QACzC,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAA;IAC5F,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,UAAU,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAA;IACnD,CAAC;IACD,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAA;AACjC,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,QAAgB,EAAE,MAAkB;IAC3D,IAAI,OAAe,CAAA;IACnB,IAAI,CAAC;QACH,OAAO,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAA;IAC9B,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO;YACL,QAAQ;YACR,UAAU,EAAE;gBACV;oBACE,IAAI,EAAE,IAAI;oBACV,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,qBAAsB,CAAW,CAAC,OAAO,EAAE;iBACrD;aACF;SACF,CAAA;IACH,CAAC;IACD,OAAO,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAA;AAC9C,CAAC;AAED,gFAAgF;AAChF,6BAA6B;AAC7B,MAAM,UAAU,aAAa,CAAC,KAAe,EAAE,OAAoB;IACjE,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAA;IAC1F,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,UAAU,CAAC,UAAU,CAAC,CAAA;IAC/D,OAAO,cAAc,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,MAAM,IAAI,EAAE,EAAE,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;AAC5F,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,OAAqB,EAAE,OAAoB;IACpE,MAAM,MAAM,GACV,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC,CAAA;IACjH,IAAI,MAAM;QAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAExC,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAA;IACjD,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAA;IACzD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAA;IAC7D,IAAI,QAAQ;QAAE,OAAO,CAAC,CAAA;IACtB,IAAI,OAAO,CAAC,MAAM,IAAI,UAAU;QAAE,OAAO,CAAC,CAAA;IAC1C,OAAO,CAAC,CAAA;AACV,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,KAAe,EAAE,OAAoB;IAC3D,IAAI,MAAkB,CAAA;IACtB,IAAI,CAAC;QACH,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IACxC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,IAAI,CAAC,CAAC,CAAC,YAAY,WAAW,CAAC;YAAE,MAAM,CAAC,CAAA;QACxC,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC,OAAO,EAAE,CAAC,CAAA;QAC3C,OAAO,CAAC,CAAA;IACV,CAAC;IAED,MAAM,OAAO,GAAiB,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAA;IAC/E,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,YAAY,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAA;IACpE,CAAC;IAED,OAAO,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AACrC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { LintConfig } from './types';
2
+ import type { FileReport } from './formatters/text';
3
+ export declare const worthThreads: (files: string[]) => boolean;
4
+ export declare function lintFilesInParallel(files: string[], config: LintConfig): Promise<FileReport[]>;
@@ -0,0 +1,57 @@
1
+ import * as fs from 'fs';
2
+ import * as os from 'os';
3
+ import * as path from 'path';
4
+ import { Worker } from 'worker_threads';
5
+ import { lintFile } from './index';
6
+ // Measured on a 126-file corpus: reading takes 5 ms and parsing 1032 ms, so the
7
+ // work is bound by the processor and threads are what buys anything. Eight of
8
+ // them start in 80 ms together, which pays for itself only on a longer list.
9
+ const MIN_FILES = 12;
10
+ const threadCount = (files) => Math.max(2, Math.min(os.cpus().length - 2, 8, Math.floor(files / 4)));
11
+ const workerFile = () => {
12
+ const candidate = path.join(__dirname, 'worker.js');
13
+ return fs.existsSync(candidate) ? candidate : undefined;
14
+ };
15
+ export const worthThreads = (files) => files.length >= MIN_FILES && workerFile() !== undefined;
16
+ // Reports come back in the order the files were given, whichever thread got
17
+ // there first: the report is read by a person and by a snapshot test, and both
18
+ // expect the order they asked for.
19
+ export function lintFilesInParallel(files, config) {
20
+ const script = workerFile();
21
+ if (!script)
22
+ return Promise.resolve(files.map(f => lintFile(f, config)));
23
+ const threads = threadCount(files.length);
24
+ const jobs = files.map((filePath, index) => ({ index, filePath }));
25
+ const chunks = Array.from({ length: threads }, () => []);
26
+ jobs.forEach(job => chunks[job.index % threads].push(job));
27
+ return new Promise((resolve, reject) => {
28
+ const collected = new Array(files.length);
29
+ const workers = [];
30
+ let finished = 0;
31
+ let failed = false;
32
+ const stop = () => workers.forEach(w => void w.terminate());
33
+ for (let i = 0; i < threads; i++) {
34
+ const worker = new Worker(script);
35
+ workers.push(worker);
36
+ worker.on('message', (message) => {
37
+ if (message === 'ready') {
38
+ worker.postMessage({ config, jobs: chunks[i] });
39
+ return;
40
+ }
41
+ for (const item of message)
42
+ collected[item.index] = item.report;
43
+ void worker.terminate();
44
+ if (++finished === threads && !failed)
45
+ resolve(collected);
46
+ });
47
+ worker.on('error', err => {
48
+ if (failed)
49
+ return;
50
+ failed = true;
51
+ stop();
52
+ reject(err);
53
+ });
54
+ }
55
+ });
56
+ }
57
+ //# sourceMappingURL=parallel.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parallel.js","sourceRoot":"","sources":["../../src/lint/parallel.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Violation, SourceRule } from '../types';
2
+ export declare const ABBREVIATED_ATTRS_RULE_ID = "abbreviated-attrs";
3
+ export declare const abbreviatedAttrsRule: SourceRule;
4
+ export declare function scanAbbreviatedAttrs(content: string): Violation[];
@@ -0,0 +1,67 @@
1
+ import { isVerbatimBlock } from '@podlite/schema';
2
+ export const ABBREVIATED_ATTRS_RULE_ID = 'abbreviated-attrs';
3
+ export const abbreviatedAttrsRule = {
4
+ id: ABBREVIATED_ATTRS_RULE_ID,
5
+ severity: 'warning',
6
+ };
7
+ // The specification is plain about it: the rest of an abbreviated block's line
8
+ // is block data, not configuration. What the author wrote as an attribute
9
+ // arrives as text, the markup stays legal, and nothing says the mechanism did
10
+ // not run.
11
+ const ABBREVIATED = /^\s*=([A-Za-z][\w-]*)[ \t]+(\S.*)$/;
12
+ const DELIMITED = /^\s*=(?:begin|end|for)[ \t]+([\w-]+)/;
13
+ // Only a line made of attributes and nothing else is reported. A line where
14
+ // attributes stand next to real text is the author writing prose that happens
15
+ // to hold a colon, and calling that a fault would bury the rule in noise.
16
+ const ONLY_ATTRIBUTES = /^(:[A-Za-z][\w-]*(<[^>]*>|\([^)]*\)|\{[^}]*\}|\[[^\]]*\])?[ \t]*)+$/;
17
+ // An attribute written with nothing inside documents the attribute itself,
18
+ // which is how the registries and the specifications spell one out.
19
+ const EMPTY_VALUE = /^:[A-Za-z][\w-]*<>$/;
20
+ const allEmpty = (rest) => rest
21
+ .trim()
22
+ .split(/[ \t]+/)
23
+ .every(part => EMPTY_VALUE.test(part));
24
+ export function scanAbbreviatedAttrs(content) {
25
+ const lines = content.split(/\r?\n/);
26
+ const open = [];
27
+ const violations = [];
28
+ for (let i = 0; i < lines.length; i++) {
29
+ const line = lines[i];
30
+ const delimited = line.match(DELIMITED);
31
+ if (delimited) {
32
+ if (/^\s*=end\b/.test(line))
33
+ open.pop();
34
+ else if (/^\s*=begin\b/.test(line))
35
+ open.push(delimited[1]);
36
+ continue;
37
+ }
38
+ if (open.some(isVerbatimBlock))
39
+ continue;
40
+ const abbreviated = line.match(ABBREVIATED);
41
+ if (!abbreviated)
42
+ continue;
43
+ const [, name, rest] = abbreviated;
44
+ if (isVerbatimBlock(name))
45
+ continue;
46
+ if (!ONLY_ATTRIBUTES.test(rest.trim()))
47
+ continue;
48
+ if (allEmpty(rest))
49
+ continue;
50
+ // content has to follow, otherwise the line is the whole block and the
51
+ // author wrote no data at all — a different mistake, if it is one
52
+ const next = lines[i + 1];
53
+ if (next === undefined || next.trim() === '' || /^\s*=/.test(next))
54
+ continue;
55
+ violations.push({
56
+ rule: ABBREVIATED_ATTRS_RULE_ID,
57
+ severity: 'warning',
58
+ message: `=${name} takes the rest of its line as data, so ${rest.trim()} arrives as text; write =for ${name} to pass configuration`,
59
+ location: {
60
+ start: { line: i + 1, column: 1, offset: 0 },
61
+ end: { line: i + 1, column: 1, offset: 0 },
62
+ },
63
+ });
64
+ }
65
+ return violations;
66
+ }
67
+ //# sourceMappingURL=abbreviated-attrs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"abbreviated-attrs.js","sourceRoot":"","sources":["../../../src/lint/rules/abbreviated-attrs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAA;AAGjD,MAAM,CAAC,MAAM,yBAAyB,GAAG,mBAAmB,CAAA;AAE5D,MAAM,CAAC,MAAM,oBAAoB,GAAe;IAC9C,EAAE,EAAE,yBAAyB;IAC7B,QAAQ,EAAE,SAAS;CACpB,CAAA;AAED,+EAA+E;AAC/E,0EAA0E;AAC1E,8EAA8E;AAC9E,WAAW;AACX,MAAM,WAAW,GAAG,oCAAoC,CAAA;AACxD,MAAM,SAAS,GAAG,sCAAsC,CAAA;AAExD,4EAA4E;AAC5E,8EAA8E;AAC9E,0EAA0E;AAC1E,MAAM,eAAe,GAAG,qEAAqE,CAAA;AAE7F,2EAA2E;AAC3E,oEAAoE;AACpE,MAAM,WAAW,GAAG,qBAAqB,CAAA;AAEzC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAW,EAAE,CACzC,IAAI;KACD,IAAI,EAAE;KACN,KAAK,CAAC,QAAQ,CAAC;KACf,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;AAE1C,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;IACpC,MAAM,IAAI,GAAa,EAAE,CAAA;IACzB,MAAM,UAAU,GAAgB,EAAE,CAAA;IAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAA;QAErB,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAA;QACvC,IAAI,SAAS,EAAE,CAAC;YACd,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,IAAI,CAAC,GAAG,EAAE,CAAA;iBAClC,IAAI,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAA;YAC3D,SAAQ;QACV,CAAC;QAED,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC;YAAE,SAAQ;QAExC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;QAC3C,IAAI,CAAC,WAAW;YAAE,SAAQ;QAE1B,MAAM,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,WAAW,CAAA;QAClC,IAAI,eAAe,CAAC,IAAI,CAAC;YAAE,SAAQ;QACnC,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YAAE,SAAQ;QAChD,IAAI,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAQ;QAE5B,uEAAuE;QACvE,kEAAkE;QAClE,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QACzB,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,SAAQ;QAE5E,UAAU,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,yBAAyB;YAC/B,QAAQ,EAAE,SAAS;YACnB,OAAO,EAAE,IAAI,IAAI,2CAA2C,IAAI,CAAC,IAAI,EAAE,gCAAgC,IAAI,wBAAwB;YACnI,QAAQ,EAAE;gBACR,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;gBAC5C,GAAG,EAAE,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;aAC3C;SACF,CAAC,CAAA;IACJ,CAAC;IAED,OAAO,UAAU,CAAA;AACnB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { Rule } from '../types';
2
+ export declare const DEAD_DEFINITIONS_RULE_ID = "dead-definitions";
3
+ export declare const deadDefinitionsRule: Rule;
@@ -0,0 +1,80 @@
1
+ import { getFromTree, getTextContentFromNode } from '@podlite/schema';
2
+ export const DEAD_DEFINITIONS_RULE_ID = 'dead-definitions';
3
+ const attr = (node, name) => {
4
+ const item = (Array.isArray(node.config) ? node.config : []).find(c => c && c.name === name);
5
+ return item && item.value !== undefined && item.value !== null ? String(item.value) : undefined;
6
+ };
7
+ // An alias node carries no location, so the line is read back from the source;
8
+ // a warning that cannot say where is a warning the author cannot act on.
9
+ const aliasLine = (source, name) => {
10
+ const lines = source.split(/\r?\n/);
11
+ const at = lines.findIndex(line => new RegExp(`^\\s*=alias\\s+${name}(\\s|$)`).test(line));
12
+ if (at === -1)
13
+ return undefined;
14
+ return { start: { line: at + 1, column: 1, offset: 0 }, end: { line: at + 1, column: 1, offset: 0 } };
15
+ };
16
+ const definitions = (ast) => {
17
+ const nodes = getFromTree(ast, () => true);
18
+ const found = [];
19
+ for (const node of nodes) {
20
+ if (node.type === 'alias' && node.name) {
21
+ found.push({ kind: 'alias', name: node.name, location: node.location });
22
+ continue;
23
+ }
24
+ if (node.name === 'data') {
25
+ const key = attr(node, 'key');
26
+ if (key)
27
+ found.push({ kind: 'data', name: key, location: node.location });
28
+ }
29
+ }
30
+ return found;
31
+ };
32
+ const aliasUses = (ast) => {
33
+ const nodes = getFromTree(ast, () => true);
34
+ const used = new Set();
35
+ for (const node of nodes) {
36
+ if (node.type !== 'fcode' || node.name !== 'A')
37
+ continue;
38
+ const name = getTextContentFromNode(node)
39
+ ?.toString()
40
+ .trim();
41
+ if (name)
42
+ used.add(name);
43
+ }
44
+ return used;
45
+ };
46
+ // A data reference is read from the source rather than from the tree: the block
47
+ // that consumes it resolves the reference while the tree is built, so by the
48
+ // time a rule sees the tree the mention is already gone.
49
+ const dataUses = (source) => {
50
+ const used = new Set();
51
+ const reference = /data:([A-Za-z0-9_-]+)/g;
52
+ let match;
53
+ while ((match = reference.exec(source)) !== null)
54
+ used.add(match[1]);
55
+ return used;
56
+ };
57
+ export const deadDefinitionsRule = {
58
+ id: DEAD_DEFINITIONS_RULE_ID,
59
+ severity: 'warning',
60
+ check: (ast, ctx) => {
61
+ // without the source a data reference cannot be found at all, and reporting
62
+ // every keyed block as dead would be worse than saying nothing
63
+ const declared = definitions(ast).filter(item => item.kind === 'alias' || ctx.source !== undefined);
64
+ if (declared.length === 0)
65
+ return [];
66
+ const aliases = aliasUses(ast);
67
+ const keys = dataUses(ctx.source || '');
68
+ return declared
69
+ .filter(item => !(item.kind === 'alias' ? aliases.has(item.name) : keys.has(item.name)))
70
+ .map(item => ({
71
+ rule: DEAD_DEFINITIONS_RULE_ID,
72
+ severity: 'warning',
73
+ message: item.kind === 'alias'
74
+ ? `=alias ${item.name} is never used; A<${item.name}> appears nowhere in the document`
75
+ : `=data :key<${item.name}> is never used; data:${item.name} appears nowhere in the document`,
76
+ location: item.location || (item.kind === 'alias' ? aliasLine(ctx.source || '', item.name) : undefined),
77
+ }));
78
+ },
79
+ };
80
+ //# sourceMappingURL=dead-definitions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dead-definitions.js","sourceRoot":"","sources":["../../../src/lint/rules/dead-definitions.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,7 @@ import { mediaAbsoluteFileRule } from './media-absolute-file';
5
5
  import { linkTargetResolvesRule } from './link-target-resolves';
6
6
  import { attrValueDroppedRule } from './attr-value-dropped';
7
7
  import { tableShapeRule } from './table-shape';
8
+ import { deadDefinitionsRule } from './dead-definitions';
8
9
  export const DEFAULT_RULES = [
9
10
  syntaxValidRule,
10
11
  headingHierarchyRule,
@@ -13,5 +14,6 @@ export const DEFAULT_RULES = [
13
14
  linkTargetResolvesRule,
14
15
  attrValueDroppedRule,
15
16
  tableShapeRule,
17
+ deadDefinitionsRule,
16
18
  ];
17
19
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lint/rules/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAE9C,MAAM,CAAC,MAAM,aAAa,GAAW;IACnC,eAAe;IACf,oBAAoB;IACpB,YAAY;IACZ,qBAAqB;IACrB,sBAAsB;IACtB,oBAAoB;IACpB,cAAc;CACf,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lint/rules/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAA;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAA;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAA;AAC9C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAExD,MAAM,CAAC,MAAM,aAAa,GAAW;IACnC,eAAe;IACf,oBAAoB;IACpB,YAAY;IACZ,qBAAqB;IACrB,sBAAsB;IACtB,oBAAoB;IACpB,cAAc;IACd,mBAAmB;CACpB,CAAA"}
@@ -0,0 +1,4 @@
1
+ import type { Violation, SourceRule } from '../types';
2
+ export declare const MARKDOWN_IN_POD_RULE_ID = "markdown-in-pod";
3
+ export declare const markdownInPodRule: SourceRule;
4
+ export declare function scanMarkdownInPod(content: string): Violation[];
@@ -0,0 +1,67 @@
1
+ import { isVerbatimBlock } from '@podlite/schema';
2
+ export const MARKDOWN_IN_POD_RULE_ID = 'markdown-in-pod';
3
+ export const markdownInPodRule = {
4
+ id: MARKDOWN_IN_POD_RULE_ID,
5
+ severity: 'warning',
6
+ };
7
+ const FOREIGN = [
8
+ { test: /^\s*#{1,6}\s+\S/, says: 'a heading written with hashes is text here; write =head1 and its levels' },
9
+ {
10
+ test: /^\s*\|?[\s:|-]*-[\s:|-]*\|[\s:|-]*$/,
11
+ says: 'a row of bars and dashes is text here; a table is written as =begin table with its own separator',
12
+ },
13
+ { test: /\*\*[^*\s](?:[^*]*[^*\s])?\*\*/, says: 'a pair of asterisks is text here; bold is written as B<>' },
14
+ ];
15
+ // Talk about Markdown is legal: a line whose construct sits inside an inline
16
+ // code span is showing the markup, not using it.
17
+ const insideCode = (line) => /C<[^>]*>/.test(line) || /`[^`]+`/.test(line);
18
+ export function scanMarkdownInPod(content) {
19
+ const lines = content.split(/\r?\n/);
20
+ const open = [];
21
+ const violations = [];
22
+ let abbreviatedTable = false;
23
+ for (let i = 0; i < lines.length; i++) {
24
+ const line = lines[i];
25
+ const end = line.match(/^\s*=end\s+([\w-]+)/);
26
+ if (end) {
27
+ open.pop();
28
+ continue;
29
+ }
30
+ const begin = line.match(/^\s*=begin\s+([\w-]+)/);
31
+ if (begin) {
32
+ open.push(begin[1]);
33
+ abbreviatedTable = false;
34
+ continue;
35
+ }
36
+ // a dash separator belongs to a table written the short way too, and that
37
+ // block runs to the first blank line
38
+ if (/^\s*=(?:for\s+)?table\b/.test(line)) {
39
+ abbreviatedTable = true;
40
+ continue;
41
+ }
42
+ if (abbreviatedTable && line.trim() === '')
43
+ abbreviatedTable = false;
44
+ if (/^\s*=/.test(line))
45
+ abbreviatedTable = false;
46
+ if (open.some(isVerbatimBlock) || open.includes('data') || abbreviatedTable)
47
+ continue;
48
+ if (insideCode(line))
49
+ continue;
50
+ for (const foreign of FOREIGN) {
51
+ if (!foreign.test.test(line))
52
+ continue;
53
+ violations.push({
54
+ rule: MARKDOWN_IN_POD_RULE_ID,
55
+ severity: 'warning',
56
+ message: foreign.says,
57
+ location: {
58
+ start: { line: i + 1, column: 1, offset: 0 },
59
+ end: { line: i + 1, column: 1, offset: 0 },
60
+ },
61
+ });
62
+ break;
63
+ }
64
+ }
65
+ return violations;
66
+ }
67
+ //# sourceMappingURL=markdown-in-pod.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown-in-pod.js","sourceRoot":"","sources":["../../../src/lint/rules/markdown-in-pod.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { VERBATIM_BLOCKS } from '@podlite/schema';
1
+ import { isVerbatimBlock } from '@podlite/schema';
2
2
  export const TABLE_COLUMN_WIDTH_RULE_ID = 'table-column-width';
3
3
  export const tableColumnWidthRule = {
4
4
  id: TABLE_COLUMN_WIDTH_RULE_ID,
@@ -22,10 +22,14 @@ const isEdge = (char) => char === '|' || char === '+' || char === ' ';
22
22
  const collides = (line, boundary) => {
23
23
  if (boundary >= line.length)
24
24
  return false;
25
- // content standing on the boundary, or pressed against it with no space left
25
+ // content standing on the boundary is wrong however the row is written
26
26
  if (!isEdge(line[boundary]))
27
27
  return true;
28
- return boundary > 0 && !isEdge(line[boundary - 1]);
28
+ // pressed against the boundary only matters where the row draws a bar of its
29
+ // own: a row whose cells are held apart by spaces may fill its column to the
30
+ // last position, and the parser reads it correctly
31
+ const drawsBar = line[boundary] === '|' || line[boundary] === '+';
32
+ return drawsBar && boundary > 0 && !isEdge(line[boundary - 1]);
29
33
  };
30
34
  const checkTable = (lines) => {
31
35
  const separator = lines.find(l => SEPARATOR_LINE.test(l.text) && hasBar(l.text));
@@ -58,7 +62,7 @@ const checkTable = (lines) => {
58
62
  export function scanTableColumns(content) {
59
63
  const lines = content.split(/\r?\n/);
60
64
  // a table keeps its content verbatim too, and it is the one being read here
61
- const verbatim = new Set(VERBATIM_BLOCKS.filter(name => name !== 'table'));
65
+ const verbatim = (name) => name !== 'table' && isVerbatimBlock(name);
62
66
  const openBlocks = [];
63
67
  const violations = [];
64
68
  let table = null;
@@ -81,11 +85,11 @@ export function scanTableColumns(content) {
81
85
  if (begin) {
82
86
  closeTable();
83
87
  openBlocks.push(begin[1]);
84
- if (begin[1] === 'table' && !openBlocks.some(b => verbatim.has(b)))
88
+ if (begin[1] === 'table' && !openBlocks.some(verbatim))
85
89
  table = [];
86
90
  continue;
87
91
  }
88
- if (openBlocks.some(b => verbatim.has(b)))
92
+ if (openBlocks.some(verbatim))
89
93
  continue;
90
94
  if (abbreviated) {
91
95
  closeTable();
@@ -1 +1 @@
1
- {"version":3,"file":"table-column-width.js","sourceRoot":"","sources":["../../../src/lint/rules/table-column-width.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"table-column-width.js","sourceRoot":"","sources":["../../../src/lint/rules/table-column-width.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,7 @@ export type LintContext = {
9
9
  filePath: string;
10
10
  fileType: FileType;
11
11
  config: LintConfig;
12
+ source?: string;
12
13
  };
13
14
  export type Violation = {
14
15
  rule: string;
@@ -0,0 +1,5 @@
1
+ import type { FileReport } from './formatters/text';
2
+ export type WorkerResult = {
3
+ index: number;
4
+ report: FileReport;
5
+ };
@@ -0,0 +1,15 @@
1
+ import { parentPort } from 'worker_threads';
2
+ import { lintFile } from './index';
3
+ if (parentPort) {
4
+ const port = parentPort;
5
+ // the first message back says the parser is loaded and the thread can be fed
6
+ port.postMessage('ready');
7
+ port.on('message', (batch) => {
8
+ const done = batch.jobs.map(job => ({
9
+ index: job.index,
10
+ report: lintFile(job.filePath, batch.config),
11
+ }));
12
+ port.postMessage(done);
13
+ });
14
+ }
15
+ //# sourceMappingURL=worker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker.js","sourceRoot":"","sources":["../../src/lint/worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAE3C,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAOlC,IAAI,UAAU,EAAE,CAAC;IACf,MAAM,IAAI,GAAG,UAAU,CAAA;IACvB,6EAA6E;IAC7E,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,CAAA;IACzB,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,CAAC,KAAY,EAAE,EAAE;QAClC,MAAM,IAAI,GAAmB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAClD,KAAK,EAAE,GAAG,CAAC,KAAK;YAChB,MAAM,EAAE,QAAQ,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,CAAC,MAAM,CAAC;SAC7C,CAAC,CAAC,CAAA;QACH,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAA;IACxB,CAAC,CAAC,CAAA;AACJ,CAAC"}
package/esm/query.js CHANGED
@@ -21,7 +21,10 @@ const renderViaRoot = (block, serializer) => {
21
21
  };
22
22
  const formatBlocks = (format, matches) => {
23
23
  if (format === 'json') {
24
- return JSON.stringify(matches.map(m => m.block), null, 2);
24
+ // without the source, a query over several files answers "here are the
25
+ // blocks" and drops "from where", which leaves the caller no way back to
26
+ // the document
27
+ return JSON.stringify(matches.map(m => ({ file: m.source.file, ...m.block })), null, 2);
25
28
  }
26
29
  if (format === 'podlite') {
27
30
  return matches
package/esm/query.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../src/query.ts"],"names":[],"mappings":"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"}