chaffjs 0.22.0 → 0.23.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 (157) hide show
  1. package/README.md +7 -1
  2. package/dist/api.d.ts +14 -0
  3. package/dist/api.d.ts.map +1 -1
  4. package/dist/api.js.map +1 -1
  5. package/dist/cli-args.d.ts +2 -0
  6. package/dist/cli-args.d.ts.map +1 -1
  7. package/dist/cli-args.js +2 -0
  8. package/dist/cli-args.js.map +1 -1
  9. package/dist/cli-text.d.ts.map +1 -1
  10. package/dist/cli-text.js +2 -0
  11. package/dist/cli-text.js.map +1 -1
  12. package/dist/cli.d.ts.map +1 -1
  13. package/dist/cli.js +13 -19
  14. package/dist/cli.js.map +1 -1
  15. package/dist/commands/feedback.d.ts +3 -0
  16. package/dist/commands/feedback.d.ts.map +1 -1
  17. package/dist/commands/feedback.js.map +1 -1
  18. package/dist/commands/fix-plan.d.ts.map +1 -1
  19. package/dist/commands/fix-plan.js +5 -0
  20. package/dist/commands/fix-plan.js.map +1 -1
  21. package/dist/commands/rules.d.ts +9 -0
  22. package/dist/commands/rules.d.ts.map +1 -0
  23. package/dist/commands/rules.js +26 -0
  24. package/dist/commands/rules.js.map +1 -0
  25. package/dist/config/load.d.ts +6 -1
  26. package/dist/config/load.d.ts.map +1 -1
  27. package/dist/config/load.js +1 -0
  28. package/dist/config/load.js.map +1 -1
  29. package/dist/config/style.js +1 -1
  30. package/dist/config/style.js.map +1 -1
  31. package/dist/config/warnings.d.ts +1 -1
  32. package/dist/config/warnings.d.ts.map +1 -1
  33. package/dist/config/warnings.js +3 -1
  34. package/dist/config/warnings.js.map +1 -1
  35. package/dist/detectors/ellipsis.d.ts +10 -0
  36. package/dist/detectors/ellipsis.d.ts.map +1 -0
  37. package/dist/detectors/ellipsis.js +56 -0
  38. package/dist/detectors/ellipsis.js.map +1 -0
  39. package/dist/detectors/registry/ellipsis-consistency.d.ts +3 -0
  40. package/dist/detectors/registry/ellipsis-consistency.d.ts.map +1 -0
  41. package/dist/detectors/registry/ellipsis-consistency.js +3 -0
  42. package/dist/detectors/registry/ellipsis-consistency.js.map +1 -0
  43. package/dist/extension/load.d.ts +3 -0
  44. package/dist/extension/load.d.ts.map +1 -1
  45. package/dist/extension/load.js +1 -0
  46. package/dist/extension/load.js.map +1 -1
  47. package/dist/extension/pack-read.d.ts.map +1 -1
  48. package/dist/extension/pack-read.js +1 -0
  49. package/dist/extension/pack-read.js.map +1 -1
  50. package/dist/extension/plugin-load.js.map +1 -1
  51. package/dist/extension/plugin-parse.d.ts +7 -0
  52. package/dist/extension/plugin-parse.d.ts.map +1 -1
  53. package/dist/extension/plugin-parse.js +18 -2
  54. package/dist/extension/plugin-parse.js.map +1 -1
  55. package/dist/extension/problem-text.d.ts.map +1 -1
  56. package/dist/extension/problem-text.js +5 -0
  57. package/dist/extension/problem-text.js.map +1 -1
  58. package/dist/fix-plan/plan.d.ts +4 -0
  59. package/dist/fix-plan/plan.d.ts.map +1 -1
  60. package/dist/fix-plan/plan.js +1 -0
  61. package/dist/fix-plan/plan.js.map +1 -1
  62. package/dist/fix-plan/render.d.ts.map +1 -1
  63. package/dist/fix-plan/render.js +9 -0
  64. package/dist/fix-plan/render.js.map +1 -1
  65. package/dist/fix-plan/text.d.ts +4 -0
  66. package/dist/fix-plan/text.d.ts.map +1 -1
  67. package/dist/fix-plan/text.js +8 -2
  68. package/dist/fix-plan/text.js.map +1 -1
  69. package/dist/genre-guide/key-rules.d.ts +10 -0
  70. package/dist/genre-guide/key-rules.d.ts.map +1 -0
  71. package/dist/genre-guide/key-rules.js +23 -0
  72. package/dist/genre-guide/key-rules.js.map +1 -0
  73. package/dist/genre-guide/layer.d.ts +44 -0
  74. package/dist/genre-guide/layer.d.ts.map +1 -0
  75. package/dist/genre-guide/layer.js +43 -0
  76. package/dist/genre-guide/layer.js.map +1 -0
  77. package/dist/genre-guide/lines.d.ts +15 -0
  78. package/dist/genre-guide/lines.d.ts.map +1 -0
  79. package/dist/genre-guide/lines.js +39 -0
  80. package/dist/genre-guide/lines.js.map +1 -0
  81. package/dist/genre-guide/of-config.d.ts +13 -0
  82. package/dist/genre-guide/of-config.d.ts.map +1 -0
  83. package/dist/genre-guide/of-config.js +18 -0
  84. package/dist/genre-guide/of-config.js.map +1 -0
  85. package/dist/genre-guide/problem-text.d.ts +5 -0
  86. package/dist/genre-guide/problem-text.d.ts.map +1 -0
  87. package/dist/genre-guide/problem-text.js +29 -0
  88. package/dist/genre-guide/problem-text.js.map +1 -0
  89. package/dist/genre-guide/render.d.ts +5 -0
  90. package/dist/genre-guide/render.d.ts.map +1 -0
  91. package/dist/genre-guide/render.js +38 -0
  92. package/dist/genre-guide/render.js.map +1 -0
  93. package/dist/genre-guide/report.d.ts +32 -0
  94. package/dist/genre-guide/report.d.ts.map +1 -0
  95. package/dist/genre-guide/report.js +42 -0
  96. package/dist/genre-guide/report.js.map +1 -0
  97. package/dist/genre-guide/resolve.d.ts +16 -0
  98. package/dist/genre-guide/resolve.d.ts.map +1 -0
  99. package/dist/genre-guide/resolve.js +31 -0
  100. package/dist/genre-guide/resolve.js.map +1 -0
  101. package/dist/genre-parse.d.ts +5 -1
  102. package/dist/genre-parse.d.ts.map +1 -1
  103. package/dist/genre-parse.js +8 -1
  104. package/dist/genre-parse.js.map +1 -1
  105. package/dist/init.d.ts.map +1 -1
  106. package/dist/init.js +14 -0
  107. package/dist/init.js.map +1 -1
  108. package/dist/render/rules-json.d.ts +2 -1
  109. package/dist/render/rules-json.d.ts.map +1 -1
  110. package/dist/render/rules-json.js +3 -1
  111. package/dist/render/rules-json.js.map +1 -1
  112. package/dist/render/sarif.d.ts +3 -1
  113. package/dist/render/sarif.d.ts.map +1 -1
  114. package/dist/render/sarif.js +3 -1
  115. package/dist/render/sarif.js.map +1 -1
  116. package/dist/style-parse.d.ts +3 -0
  117. package/dist/style-parse.d.ts.map +1 -1
  118. package/dist/style-parse.js +18 -2
  119. package/dist/style-parse.js.map +1 -1
  120. package/genres.yaml +329 -0
  121. package/package.json +3 -3
  122. package/rules/ellipsis-consistency.yaml +73 -0
  123. package/rules/figurative-density.yaml +84 -0
  124. package/skills/chaff/SKILL.md +6 -0
  125. package/src/api.ts +13 -0
  126. package/src/cli-args.ts +3 -0
  127. package/src/cli-text.ts +2 -0
  128. package/src/cli.ts +16 -20
  129. package/src/commands/feedback.ts +3 -0
  130. package/src/commands/fix-plan.ts +8 -0
  131. package/src/commands/rules.ts +34 -0
  132. package/src/config/load.ts +7 -1
  133. package/src/config/style.ts +1 -1
  134. package/src/config/warnings.ts +3 -1
  135. package/src/detectors/ellipsis.ts +74 -0
  136. package/src/detectors/registry/ellipsis-consistency.ts +4 -0
  137. package/src/extension/load.ts +4 -0
  138. package/src/extension/pack-read.ts +1 -0
  139. package/src/extension/plugin-load.ts +1 -1
  140. package/src/extension/plugin-parse.ts +27 -4
  141. package/src/extension/problem-text.ts +7 -1
  142. package/src/fix-plan/plan.ts +5 -0
  143. package/src/fix-plan/render.ts +9 -0
  144. package/src/fix-plan/text.ts +12 -2
  145. package/src/genre-guide/key-rules.ts +37 -0
  146. package/src/genre-guide/layer.ts +77 -0
  147. package/src/genre-guide/lines.ts +41 -0
  148. package/src/genre-guide/of-config.ts +26 -0
  149. package/src/genre-guide/problem-text.ts +34 -0
  150. package/src/genre-guide/render.ts +50 -0
  151. package/src/genre-guide/report.ts +63 -0
  152. package/src/genre-guide/resolve.ts +36 -0
  153. package/src/genre-parse.ts +13 -3
  154. package/src/init.ts +14 -0
  155. package/src/render/rules-json.ts +4 -0
  156. package/src/render/sarif.ts +4 -1
  157. package/src/style-parse.ts +19 -1
@@ -1,5 +1,8 @@
1
1
  import { isLevel } from "./levels.ts";
2
2
  import type { Level, Localized } from "./plugin.ts";
3
+ import { guideLayerOf, type GuideLayer } from "./genre-guide/layer.ts";
4
+ import { guideProblemText } from "./genre-guide/problem-text.ts";
5
+ import { knownGenres } from "./known-genres.ts";
3
6
 
4
7
  // A house style (styles/*.yaml): a well-known guideline a team picks with style: in chaff.yaml. It sets rule levels and
5
8
  // options, and says where they come from. Pure: the YAML comes in already parsed.
@@ -21,6 +24,8 @@ export type StyleDefinition = {
21
24
  readonly options: Readonly<Record<string, Readonly<Record<string, unknown>>>>;
22
25
  /** The numbers the guideline sets, by language. The rule needs a level under rules too, or the limit decides nothing. */
23
26
  readonly limits: StyleLimits;
27
+ /** Its changes to the genre guides (genre-guide/layer.ts), between a rule pack's and chaff.yaml's. */
28
+ readonly guide?: GuideLayer | undefined;
24
29
  };
25
30
 
26
31
  const isRecord = (value: unknown): value is Record<string, unknown> => typeof value === "object" && value !== null && !Array.isArray(value);
@@ -85,6 +90,15 @@ const limitsOf = (value: unknown, rules: Readonly<Record<string, Level>>, where:
85
90
  );
86
91
  };
87
92
 
93
+ /** The style's guide: as a layer named after the style. undefined when it writes none. */
94
+ const guideOf = (value: unknown, id: string, where: string): GuideLayer | undefined => {
95
+ if (value === undefined) return undefined;
96
+ const read = guideLayerOf(value, `style: ${id}`, knownGenres());
97
+ const [problem] = read.problems;
98
+ if (problem !== undefined) throw new Error(`${where}: ${guideProblemText(problem, "en")}`);
99
+ return read.layer;
100
+ };
101
+
88
102
  /** One style file. Throws on anything it cannot read: the file ships with chaff, so a wrong entry is chaff's bug. */
89
103
  export const parseStyle = (raw: unknown, file: string): StyleDefinition => {
90
104
  const id = isRecord(raw) ? raw["id"] : undefined;
@@ -99,7 +113,10 @@ export const styleOf = (raw: unknown, where: string): StyleDefinition => {
99
113
  if (typeof id !== "string" || id === "") throw new Error(`${where}: a style needs an id`);
100
114
  const rules = levelsOf(raw["rules"], where);
101
115
  const options = optionsOf(raw["options"], where);
102
- if (Object.keys(rules).length === 0 && Object.keys(options).length === 0) throw new Error(`${where}: a style must set rules or options`);
116
+ const guide = guideOf(raw["guide"], id, where);
117
+ if (Object.keys(rules).length === 0 && Object.keys(options).length === 0 && guide === undefined) {
118
+ throw new Error(`${where}: a style must set rules, options or guide`);
119
+ }
103
120
  return {
104
121
  id,
105
122
  name: localizedOf(raw["name"], "name", where),
@@ -108,5 +125,6 @@ export const styleOf = (raw: unknown, where: string): StyleDefinition => {
108
125
  rules,
109
126
  options,
110
127
  limits: limitsOf(raw["limits"], rules, where),
128
+ ...(guide === undefined ? {} : { guide }),
111
129
  };
112
130
  };