chaffjs 0.18.0 → 0.19.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 (682) hide show
  1. package/README.md +52 -56
  2. package/bin/chaff.js +17 -2
  3. package/dist/acronym-expansions.d.ts +26 -0
  4. package/dist/acronym-expansions.d.ts.map +1 -0
  5. package/dist/acronym-expansions.js +88 -0
  6. package/dist/acronym-expansions.js.map +1 -0
  7. package/dist/announced-count.d.ts.map +1 -1
  8. package/dist/announced-count.js +44 -10
  9. package/dist/announced-count.js.map +1 -1
  10. package/dist/announced-list.d.ts +30 -0
  11. package/dist/announced-list.d.ts.map +1 -0
  12. package/dist/announced-list.js +95 -0
  13. package/dist/announced-list.js.map +1 -0
  14. package/dist/api.d.ts +168 -0
  15. package/dist/api.d.ts.map +1 -0
  16. package/dist/api.js +10 -0
  17. package/dist/api.js.map +1 -0
  18. package/dist/cli-text.d.ts +0 -1
  19. package/dist/cli-text.d.ts.map +1 -1
  20. package/dist/cli-text.js +6 -14
  21. package/dist/cli-text.js.map +1 -1
  22. package/dist/cli.d.ts.map +1 -1
  23. package/dist/cli.js +58 -62
  24. package/dist/cli.js.map +1 -1
  25. package/dist/closing-paragraph.d.ts +7 -0
  26. package/dist/closing-paragraph.d.ts.map +1 -0
  27. package/dist/closing-paragraph.js +22 -0
  28. package/dist/closing-paragraph.js.map +1 -0
  29. package/dist/commands/compare.d.ts +8 -1
  30. package/dist/commands/compare.d.ts.map +1 -1
  31. package/dist/commands/compare.js +9 -17
  32. package/dist/commands/compare.js.map +1 -1
  33. package/dist/commands/document-commands.d.ts +9 -0
  34. package/dist/commands/document-commands.d.ts.map +1 -0
  35. package/dist/commands/document-commands.js +17 -0
  36. package/dist/commands/document-commands.js.map +1 -0
  37. package/dist/commands/eval.d.ts.map +1 -1
  38. package/dist/commands/eval.js +3 -2
  39. package/dist/commands/eval.js.map +1 -1
  40. package/dist/commands/facts.d.ts +8 -0
  41. package/dist/commands/facts.d.ts.map +1 -0
  42. package/dist/commands/facts.js +30 -0
  43. package/dist/commands/facts.js.map +1 -0
  44. package/dist/commands/feedback.d.ts +10 -0
  45. package/dist/commands/feedback.d.ts.map +1 -1
  46. package/dist/commands/feedback.js +25 -1
  47. package/dist/commands/feedback.js.map +1 -1
  48. package/dist/commands/fix-plan.d.ts +13 -0
  49. package/dist/commands/fix-plan.d.ts.map +1 -0
  50. package/dist/commands/fix-plan.js +44 -0
  51. package/dist/commands/fix-plan.js.map +1 -0
  52. package/dist/commands/outline.d.ts +8 -0
  53. package/dist/commands/outline.d.ts.map +1 -0
  54. package/dist/commands/outline.js +43 -0
  55. package/dist/commands/outline.js.map +1 -0
  56. package/dist/commands/read-document.d.ts +14 -0
  57. package/dist/commands/read-document.d.ts.map +1 -0
  58. package/dist/commands/read-document.js +21 -0
  59. package/dist/commands/read-document.js.map +1 -0
  60. package/dist/commands/suppressions.d.ts +7 -0
  61. package/dist/commands/suppressions.d.ts.map +1 -0
  62. package/dist/commands/suppressions.js +9 -0
  63. package/dist/commands/suppressions.js.map +1 -0
  64. package/dist/commands/test.js +1 -1
  65. package/dist/commands/test.js.map +1 -1
  66. package/dist/compare/clock-time.d.ts.map +1 -1
  67. package/dist/compare/clock-time.js +5 -2
  68. package/dist/compare/clock-time.js.map +1 -1
  69. package/dist/compare/distinct.d.ts +9 -0
  70. package/dist/compare/distinct.d.ts.map +1 -0
  71. package/dist/compare/distinct.js +12 -0
  72. package/dist/compare/distinct.js.map +1 -0
  73. package/dist/compare/extract.d.ts.map +1 -1
  74. package/dist/compare/extract.js +7 -5
  75. package/dist/compare/extract.js.map +1 -1
  76. package/dist/compare/fact-key.d.ts +17 -0
  77. package/dist/compare/fact-key.d.ts.map +1 -0
  78. package/dist/compare/fact-key.js +25 -0
  79. package/dist/compare/fact-key.js.map +1 -0
  80. package/dist/compare/fact-text.d.ts +5 -0
  81. package/dist/compare/fact-text.d.ts.map +1 -1
  82. package/dist/compare/fact-text.js +16 -2
  83. package/dist/compare/fact-text.js.map +1 -1
  84. package/dist/compare/facts-render.d.ts +17 -0
  85. package/dist/compare/facts-render.d.ts.map +1 -0
  86. package/dist/compare/facts-render.js +43 -0
  87. package/dist/compare/facts-render.js.map +1 -0
  88. package/dist/compare/facts-text.d.ts +15 -0
  89. package/dist/compare/facts-text.d.ts.map +1 -0
  90. package/dist/compare/facts-text.js +27 -0
  91. package/dist/compare/facts-text.js.map +1 -0
  92. package/dist/compare/match.d.ts +1 -0
  93. package/dist/compare/match.d.ts.map +1 -1
  94. package/dist/compare/match.js +1 -1
  95. package/dist/compare/match.js.map +1 -1
  96. package/dist/compare/outcome.d.ts +4 -1
  97. package/dist/compare/outcome.d.ts.map +1 -1
  98. package/dist/compare/outcome.js +10 -4
  99. package/dist/compare/outcome.js.map +1 -1
  100. package/dist/compare/proper-nouns.d.ts +3 -3
  101. package/dist/compare/proper-nouns.d.ts.map +1 -1
  102. package/dist/compare/proper-nouns.js +2 -3
  103. package/dist/compare/proper-nouns.js.map +1 -1
  104. package/dist/compare/render.d.ts +4 -0
  105. package/dist/compare/render.d.ts.map +1 -1
  106. package/dist/compare/render.js +2 -2
  107. package/dist/compare/render.js.map +1 -1
  108. package/dist/compare/text-atoms.d.ts +5 -2
  109. package/dist/compare/text-atoms.d.ts.map +1 -1
  110. package/dist/compare/text-atoms.js +7 -5
  111. package/dist/compare/text-atoms.js.map +1 -1
  112. package/dist/compare/text.d.ts.map +1 -1
  113. package/dist/compare/text.js +2 -2
  114. package/dist/compare/text.js.map +1 -1
  115. package/dist/config/load.d.ts +8 -0
  116. package/dist/config/load.d.ts.map +1 -1
  117. package/dist/config/load.js +1 -0
  118. package/dist/config/load.js.map +1 -1
  119. package/dist/config/option-problems.d.ts +3 -2
  120. package/dist/config/option-problems.d.ts.map +1 -1
  121. package/dist/config/option-problems.js +4 -3
  122. package/dist/config/option-problems.js.map +1 -1
  123. package/dist/config/style.d.ts +5 -0
  124. package/dist/config/style.d.ts.map +1 -1
  125. package/dist/config/style.js +13 -1
  126. package/dist/config/style.js.map +1 -1
  127. package/dist/custom/load.d.ts +6 -3
  128. package/dist/custom/load.d.ts.map +1 -1
  129. package/dist/custom/load.js +10 -2
  130. package/dist/custom/load.js.map +1 -1
  131. package/dist/custom/module-path.d.ts +11 -0
  132. package/dist/custom/module-path.d.ts.map +1 -0
  133. package/dist/custom/module-path.js +15 -0
  134. package/dist/custom/module-path.js.map +1 -0
  135. package/dist/custom/parse.d.ts +17 -3
  136. package/dist/custom/parse.d.ts.map +1 -1
  137. package/dist/custom/parse.js +57 -14
  138. package/dist/custom/parse.js.map +1 -1
  139. package/dist/custom/problems.d.ts +4 -1
  140. package/dist/custom/problems.d.ts.map +1 -1
  141. package/dist/custom/problems.js +56 -39
  142. package/dist/custom/problems.js.map +1 -1
  143. package/dist/detect-language.js +1 -1
  144. package/dist/detect.d.ts.map +1 -1
  145. package/dist/detect.js +9 -3
  146. package/dist/detect.js.map +1 -1
  147. package/dist/detectors/ai-phrasing.d.ts +4 -1
  148. package/dist/detectors/ai-phrasing.d.ts.map +1 -1
  149. package/dist/detectors/ai-phrasing.js +6 -2
  150. package/dist/detectors/ai-phrasing.js.map +1 -1
  151. package/dist/detectors/bold-label.d.ts +10 -0
  152. package/dist/detectors/bold-label.d.ts.map +1 -0
  153. package/dist/detectors/bold-label.js +44 -0
  154. package/dist/detectors/bold-label.js.map +1 -0
  155. package/dist/detectors/dangling-figure.d.ts +5 -2
  156. package/dist/detectors/dangling-figure.d.ts.map +1 -1
  157. package/dist/detectors/dangling-figure.js +5 -3
  158. package/dist/detectors/dangling-figure.js.map +1 -1
  159. package/dist/detectors/definition-use.d.ts +8 -0
  160. package/dist/detectors/definition-use.d.ts.map +1 -0
  161. package/dist/detectors/definition-use.js +32 -0
  162. package/dist/detectors/definition-use.js.map +1 -0
  163. package/dist/detectors/doubled-punctuation.d.ts.map +1 -1
  164. package/dist/detectors/doubled-punctuation.js +4 -2
  165. package/dist/detectors/doubled-punctuation.js.map +1 -1
  166. package/dist/detectors/duplicate-heading.d.ts +14 -0
  167. package/dist/detectors/duplicate-heading.d.ts.map +1 -0
  168. package/dist/detectors/duplicate-heading.js +39 -0
  169. package/dist/detectors/duplicate-heading.js.map +1 -0
  170. package/dist/detectors/empty-section.d.ts +8 -0
  171. package/dist/detectors/empty-section.d.ts.map +1 -0
  172. package/dist/detectors/empty-section.js +16 -0
  173. package/dist/detectors/empty-section.js.map +1 -0
  174. package/dist/detectors/fullwidth-alnum.d.ts +24 -0
  175. package/dist/detectors/fullwidth-alnum.d.ts.map +1 -0
  176. package/dist/detectors/fullwidth-alnum.js +88 -0
  177. package/dist/detectors/fullwidth-alnum.js.map +1 -0
  178. package/dist/detectors/hankaku-kana.d.ts +9 -0
  179. package/dist/detectors/hankaku-kana.d.ts.map +1 -0
  180. package/dist/detectors/hankaku-kana.js +27 -0
  181. package/dist/detectors/hankaku-kana.js.map +1 -0
  182. package/dist/detectors/heading-code-words.js +2 -2
  183. package/dist/detectors/heading-code-words.js.map +1 -1
  184. package/dist/detectors/index.d.ts.map +1 -1
  185. package/dist/detectors/index.js +36 -0
  186. package/dist/detectors/index.js.map +1 -1
  187. package/dist/detectors/invisible-character.d.ts +20 -0
  188. package/dist/detectors/invisible-character.d.ts.map +1 -0
  189. package/dist/detectors/invisible-character.js +143 -0
  190. package/dist/detectors/invisible-character.js.map +1 -0
  191. package/dist/detectors/kutoten-consistency.js +2 -2
  192. package/dist/detectors/kutoten-consistency.js.map +1 -1
  193. package/dist/detectors/lexicon-match.d.ts +10 -1
  194. package/dist/detectors/lexicon-match.d.ts.map +1 -1
  195. package/dist/detectors/lexicon-match.js +26 -1
  196. package/dist/detectors/lexicon-match.js.map +1 -1
  197. package/dist/detectors/lexicon.d.ts +6 -1
  198. package/dist/detectors/lexicon.d.ts.map +1 -1
  199. package/dist/detectors/lexicon.js +31 -13
  200. package/dist/detectors/lexicon.js.map +1 -1
  201. package/dist/detectors/list-sentence.d.ts +3 -1
  202. package/dist/detectors/list-sentence.d.ts.map +1 -1
  203. package/dist/detectors/list-sentence.js +26 -1
  204. package/dist/detectors/list-sentence.js.map +1 -1
  205. package/dist/detectors/long-vowel.d.ts.map +1 -1
  206. package/dist/detectors/long-vowel.js +18 -4
  207. package/dist/detectors/long-vowel.js.map +1 -1
  208. package/dist/detectors/markup-finding.d.ts +3 -1
  209. package/dist/detectors/markup-finding.d.ts.map +1 -1
  210. package/dist/detectors/markup-finding.js +10 -0
  211. package/dist/detectors/markup-finding.js.map +1 -1
  212. package/dist/detectors/modal-conflict.d.ts +4 -0
  213. package/dist/detectors/modal-conflict.d.ts.map +1 -0
  214. package/dist/detectors/modal-conflict.js +22 -0
  215. package/dist/detectors/modal-conflict.js.map +1 -0
  216. package/dist/detectors/name-variant.d.ts +4 -0
  217. package/dist/detectors/name-variant.d.ts.map +1 -0
  218. package/dist/detectors/name-variant.js +13 -0
  219. package/dist/detectors/name-variant.js.map +1 -0
  220. package/dist/detectors/nominalization.d.ts +11 -0
  221. package/dist/detectors/nominalization.d.ts.map +1 -0
  222. package/dist/detectors/nominalization.js +56 -0
  223. package/dist/detectors/nominalization.js.map +1 -0
  224. package/dist/detectors/orthography.d.ts.map +1 -1
  225. package/dist/detectors/orthography.js +59 -28
  226. package/dist/detectors/orthography.js.map +1 -1
  227. package/dist/detectors/outside-announced-list.d.ts +4 -0
  228. package/dist/detectors/outside-announced-list.d.ts.map +1 -0
  229. package/dist/detectors/outside-announced-list.js +24 -0
  230. package/dist/detectors/outside-announced-list.js.map +1 -0
  231. package/dist/detectors/oxford-comma.d.ts.map +1 -1
  232. package/dist/detectors/oxford-comma.js +1 -0
  233. package/dist/detectors/oxford-comma.js.map +1 -1
  234. package/dist/detectors/phrase-match.d.ts +4 -1
  235. package/dist/detectors/phrase-match.d.ts.map +1 -1
  236. package/dist/detectors/phrase-match.js +26 -7
  237. package/dist/detectors/phrase-match.js.map +1 -1
  238. package/dist/detectors/ra-nuki.d.ts +9 -0
  239. package/dist/detectors/ra-nuki.d.ts.map +1 -0
  240. package/dist/detectors/ra-nuki.js +30 -0
  241. package/dist/detectors/ra-nuki.js.map +1 -0
  242. package/dist/detectors/requirement-modal.d.ts +5 -0
  243. package/dist/detectors/requirement-modal.d.ts.map +1 -0
  244. package/dist/detectors/requirement-modal.js +54 -0
  245. package/dist/detectors/requirement-modal.js.map +1 -0
  246. package/dist/detectors/requirement-smell.d.ts +4 -0
  247. package/dist/detectors/requirement-smell.d.ts.map +1 -0
  248. package/dist/detectors/requirement-smell.js +41 -0
  249. package/dist/detectors/requirement-smell.js.map +1 -0
  250. package/dist/detectors/space-before-punctuation.d.ts +8 -0
  251. package/dist/detectors/space-before-punctuation.d.ts.map +1 -0
  252. package/dist/detectors/space-before-punctuation.js +24 -0
  253. package/dist/detectors/space-before-punctuation.js.map +1 -0
  254. package/dist/detectors/spelling-variety.d.ts +23 -0
  255. package/dist/detectors/spelling-variety.d.ts.map +1 -0
  256. package/dist/detectors/spelling-variety.js +59 -0
  257. package/dist/detectors/spelling-variety.js.map +1 -0
  258. package/dist/detectors/structure-tree.d.ts.map +1 -1
  259. package/dist/detectors/structure-tree.js +3 -1
  260. package/dist/detectors/structure-tree.js.map +1 -1
  261. package/dist/detectors/structure.d.ts.map +1 -1
  262. package/dist/detectors/structure.js +16 -2
  263. package/dist/detectors/structure.js.map +1 -1
  264. package/dist/detectors/superlative-comparison.d.ts +20 -0
  265. package/dist/detectors/superlative-comparison.d.ts.map +1 -0
  266. package/dist/detectors/superlative-comparison.js +32 -0
  267. package/dist/detectors/superlative-comparison.js.map +1 -0
  268. package/dist/detectors/url-run-on.d.ts.map +1 -1
  269. package/dist/detectors/url-run-on.js +6 -1
  270. package/dist/detectors/url-run-on.js.map +1 -1
  271. package/dist/detectors/vague-figure-pointer.d.ts +10 -0
  272. package/dist/detectors/vague-figure-pointer.d.ts.map +1 -0
  273. package/dist/detectors/vague-figure-pointer.js +46 -0
  274. package/dist/detectors/vague-figure-pointer.js.map +1 -0
  275. package/dist/detectors/word-list.d.ts +2 -0
  276. package/dist/detectors/word-list.d.ts.map +1 -1
  277. package/dist/detectors/word-list.js +4 -1
  278. package/dist/detectors/word-list.js.map +1 -1
  279. package/dist/document.d.ts +9 -3
  280. package/dist/document.d.ts.map +1 -1
  281. package/dist/document.js +55 -32
  282. package/dist/document.js.map +1 -1
  283. package/dist/extension/document-view.d.ts +7 -0
  284. package/dist/extension/document-view.d.ts.map +1 -0
  285. package/dist/extension/document-view.js +91 -0
  286. package/dist/extension/document-view.js.map +1 -0
  287. package/dist/extension/failure-text.d.ts +5 -0
  288. package/dist/extension/failure-text.d.ts.map +1 -0
  289. package/dist/extension/failure-text.js +33 -0
  290. package/dist/extension/failure-text.js.map +1 -0
  291. package/dist/extension/import-default.d.ts +7 -0
  292. package/dist/extension/import-default.d.ts.map +1 -0
  293. package/dist/extension/import-default.js +21 -0
  294. package/dist/extension/import-default.js.map +1 -0
  295. package/dist/extension/load.d.ts +28 -0
  296. package/dist/extension/load.d.ts.map +1 -0
  297. package/dist/extension/load.js +51 -0
  298. package/dist/extension/load.js.map +1 -0
  299. package/dist/extension/module-detector.d.ts +21 -0
  300. package/dist/extension/module-detector.d.ts.map +1 -0
  301. package/dist/extension/module-detector.js +49 -0
  302. package/dist/extension/module-detector.js.map +1 -0
  303. package/dist/extension/plugin-load.d.ts +9 -0
  304. package/dist/extension/plugin-load.d.ts.map +1 -0
  305. package/dist/extension/plugin-load.js +68 -0
  306. package/dist/extension/plugin-load.js.map +1 -0
  307. package/dist/extension/plugin-name.d.ts +8 -0
  308. package/dist/extension/plugin-name.d.ts.map +1 -0
  309. package/dist/extension/plugin-name.js +22 -0
  310. package/dist/extension/plugin-name.js.map +1 -0
  311. package/dist/extension/plugin-parse.d.ts +41 -0
  312. package/dist/extension/plugin-parse.d.ts.map +1 -0
  313. package/dist/extension/plugin-parse.js +156 -0
  314. package/dist/extension/plugin-parse.js.map +1 -0
  315. package/dist/extension/problem-text.d.ts +5 -0
  316. package/dist/extension/problem-text.d.ts.map +1 -0
  317. package/dist/extension/problem-text.js +74 -0
  318. package/dist/extension/problem-text.js.map +1 -0
  319. package/dist/extension/real-path.d.ts +3 -0
  320. package/dist/extension/real-path.d.ts.map +1 -0
  321. package/dist/extension/real-path.js +8 -0
  322. package/dist/extension/real-path.js.map +1 -0
  323. package/dist/extension/returned-findings.d.ts +17 -0
  324. package/dist/extension/returned-findings.d.ts.map +1 -0
  325. package/dist/extension/returned-findings.js +48 -0
  326. package/dist/extension/returned-findings.js.map +1 -0
  327. package/dist/extension/rule-export.d.ts +13 -0
  328. package/dist/extension/rule-export.d.ts.map +1 -0
  329. package/dist/extension/rule-export.js +16 -0
  330. package/dist/extension/rule-export.js.map +1 -0
  331. package/dist/feedback/draft.d.ts +2 -0
  332. package/dist/feedback/draft.d.ts.map +1 -1
  333. package/dist/feedback/draft.js +3 -0
  334. package/dist/feedback/draft.js.map +1 -1
  335. package/dist/figure-references.d.ts +11 -2
  336. package/dist/figure-references.d.ts.map +1 -1
  337. package/dist/figure-references.js +50 -13
  338. package/dist/figure-references.js.map +1 -1
  339. package/dist/finding-order.d.ts +9 -0
  340. package/dist/finding-order.d.ts.map +1 -0
  341. package/dist/finding-order.js +3 -0
  342. package/dist/finding-order.js.map +1 -0
  343. package/dist/fix-plan/mode.d.ts +21 -0
  344. package/dist/fix-plan/mode.d.ts.map +1 -0
  345. package/dist/fix-plan/mode.js +16 -0
  346. package/dist/fix-plan/mode.js.map +1 -0
  347. package/dist/fix-plan/plan.d.ts +77 -0
  348. package/dist/fix-plan/plan.d.ts.map +1 -0
  349. package/dist/fix-plan/plan.js +100 -0
  350. package/dist/fix-plan/plan.js.map +1 -0
  351. package/dist/fix-plan/render.d.ts +6 -0
  352. package/dist/fix-plan/render.d.ts.map +1 -0
  353. package/dist/fix-plan/render.js +101 -0
  354. package/dist/fix-plan/render.js.map +1 -0
  355. package/dist/fix-plan/text.d.ts +35 -0
  356. package/dist/fix-plan/text.d.ts.map +1 -0
  357. package/dist/fix-plan/text.js +95 -0
  358. package/dist/fix-plan/text.js.map +1 -0
  359. package/dist/language-sample.d.ts +2 -0
  360. package/dist/language-sample.d.ts.map +1 -0
  361. package/dist/language-sample.js +41 -0
  362. package/dist/language-sample.js.map +1 -0
  363. package/dist/link-line.d.ts +8 -0
  364. package/dist/link-line.d.ts.map +1 -0
  365. package/dist/link-line.js +12 -0
  366. package/dist/link-line.js.map +1 -0
  367. package/dist/long-vowel.d.ts +9 -6
  368. package/dist/long-vowel.d.ts.map +1 -1
  369. package/dist/long-vowel.js +15 -8
  370. package/dist/long-vowel.js.map +1 -1
  371. package/dist/markup.d.ts.map +1 -1
  372. package/dist/markup.js +4 -2
  373. package/dist/markup.js.map +1 -1
  374. package/dist/name-variants.d.ts +25 -0
  375. package/dist/name-variants.d.ts.map +1 -0
  376. package/dist/name-variants.js +181 -0
  377. package/dist/name-variants.js.map +1 -0
  378. package/dist/node-version.d.ts +7 -0
  379. package/dist/node-version.d.ts.map +1 -0
  380. package/dist/node-version.js +19 -0
  381. package/dist/node-version.js.map +1 -0
  382. package/dist/not-run.d.ts +14 -0
  383. package/dist/not-run.d.ts.map +1 -0
  384. package/dist/not-run.js +12 -0
  385. package/dist/not-run.js.map +1 -0
  386. package/dist/orthography.d.ts +8 -1
  387. package/dist/orthography.d.ts.map +1 -1
  388. package/dist/orthography.js +33 -12
  389. package/dist/orthography.js.map +1 -1
  390. package/dist/outline/render.d.ts +18 -0
  391. package/dist/outline/render.d.ts.map +1 -0
  392. package/dist/outline/render.js +60 -0
  393. package/dist/outline/render.js.map +1 -0
  394. package/dist/outline/shape.d.ts +26 -0
  395. package/dist/outline/shape.d.ts.map +1 -0
  396. package/dist/outline/shape.js +37 -0
  397. package/dist/outline/shape.js.map +1 -0
  398. package/dist/outline/text.d.ts +21 -0
  399. package/dist/outline/text.d.ts.map +1 -0
  400. package/dist/outline/text.js +30 -0
  401. package/dist/outline/text.js.map +1 -0
  402. package/dist/plugin.d.ts +24 -2
  403. package/dist/plugin.d.ts.map +1 -1
  404. package/dist/reasons.d.ts +1 -0
  405. package/dist/reasons.d.ts.map +1 -1
  406. package/dist/reasons.js +2 -0
  407. package/dist/reasons.js.map +1 -1
  408. package/dist/render/compact.d.ts +3 -1
  409. package/dist/render/compact.d.ts.map +1 -1
  410. package/dist/render/compact.js +8 -2
  411. package/dist/render/compact.js.map +1 -1
  412. package/dist/render/explain.d.ts +3 -1
  413. package/dist/render/explain.d.ts.map +1 -1
  414. package/dist/render/explain.js +32 -15
  415. package/dist/render/explain.js.map +1 -1
  416. package/dist/render/rules-json.d.ts.map +1 -1
  417. package/dist/render/rules-json.js +16 -12
  418. package/dist/render/rules-json.js.map +1 -1
  419. package/dist/render/suppressions.d.ts +3 -0
  420. package/dist/render/suppressions.d.ts.map +1 -1
  421. package/dist/render/suppressions.js +20 -1
  422. package/dist/render/suppressions.js.map +1 -1
  423. package/dist/rule-guide.d.ts +19 -0
  424. package/dist/rule-guide.d.ts.map +1 -1
  425. package/dist/rule-guide.js +14 -0
  426. package/dist/rule-guide.js.map +1 -1
  427. package/dist/run-semantic.d.ts.map +1 -1
  428. package/dist/run-semantic.js +2 -1
  429. package/dist/run-semantic.js.map +1 -1
  430. package/dist/run.d.ts +5 -1
  431. package/dist/run.d.ts.map +1 -1
  432. package/dist/run.js +31 -14
  433. package/dist/run.js.map +1 -1
  434. package/dist/setting-problems.d.ts.map +1 -1
  435. package/dist/setting-problems.js +3 -1
  436. package/dist/setting-problems.js.map +1 -1
  437. package/dist/spacing-minority.d.ts +16 -0
  438. package/dist/spacing-minority.d.ts.map +1 -0
  439. package/dist/spacing-minority.js +23 -0
  440. package/dist/spacing-minority.js.map +1 -0
  441. package/dist/stet-block.d.ts +5 -0
  442. package/dist/stet-block.d.ts.map +1 -0
  443. package/dist/stet-block.js +59 -0
  444. package/dist/stet-block.js.map +1 -0
  445. package/dist/stet.d.ts +4 -0
  446. package/dist/stet.d.ts.map +1 -1
  447. package/dist/stet.js +31 -11
  448. package/dist/stet.js.map +1 -1
  449. package/dist/structure/date-range.d.ts +10 -0
  450. package/dist/structure/date-range.d.ts.map +1 -1
  451. package/dist/structure/date-range.js +33 -1
  452. package/dist/structure/date-range.js.map +1 -1
  453. package/dist/structure/definition-use.d.ts +32 -0
  454. package/dist/structure/definition-use.d.ts.map +1 -0
  455. package/dist/structure/definition-use.js +102 -0
  456. package/dist/structure/definition-use.js.map +1 -0
  457. package/dist/structure/lazy-tree.d.ts +8 -0
  458. package/dist/structure/lazy-tree.d.ts.map +1 -0
  459. package/dist/structure/lazy-tree.js +14 -0
  460. package/dist/structure/lazy-tree.js.map +1 -0
  461. package/dist/structure/modal-conflict.d.ts +28 -0
  462. package/dist/structure/modal-conflict.d.ts.map +1 -0
  463. package/dist/structure/modal-conflict.js +74 -0
  464. package/dist/structure/modal-conflict.js.map +1 -0
  465. package/dist/structure/numbered-clauses.d.ts +4 -0
  466. package/dist/structure/numbered-clauses.d.ts.map +1 -0
  467. package/dist/structure/numbered-clauses.js +9 -0
  468. package/dist/structure/numbered-clauses.js.map +1 -0
  469. package/dist/structure/universal.d.ts.map +1 -1
  470. package/dist/structure/universal.js +8 -2
  471. package/dist/structure/universal.js.map +1 -1
  472. package/dist/style-parse.d.ts +6 -0
  473. package/dist/style-parse.d.ts.map +1 -1
  474. package/dist/style-parse.js +32 -4
  475. package/dist/style-parse.js.map +1 -1
  476. package/dist/subheading-line.d.ts +19 -2
  477. package/dist/subheading-line.d.ts.map +1 -1
  478. package/dist/subheading-line.js +39 -11
  479. package/dist/subheading-line.js.map +1 -1
  480. package/dist/tag-coverage.d.ts +8 -0
  481. package/dist/tag-coverage.d.ts.map +1 -0
  482. package/dist/tag-coverage.js +7 -0
  483. package/dist/tag-coverage.js.map +1 -0
  484. package/genres.yaml +42 -0
  485. package/package.json +7 -3
  486. package/rules/acronym-expansion-conflict.yaml +82 -0
  487. package/rules/adverb-overuse.yaml +2 -2
  488. package/rules/agentless-passive.yaml +28 -0
  489. package/rules/ai-tell.yaml +34 -0
  490. package/rules/announced-count-mismatch.yaml +2 -2
  491. package/rules/announcing-opener.yaml +31 -0
  492. package/rules/assistant-residue.yaml +30 -0
  493. package/rules/bold-density.yaml +28 -0
  494. package/rules/bold-label-list.yaml +81 -0
  495. package/rules/closing-cliche.yaml +27 -2
  496. package/rules/colon-lead-in.yaml +28 -4
  497. package/rules/contrast-framing.yaml +33 -2
  498. package/rules/cushion-phrase-density.yaml +32 -5
  499. package/rules/dangling-reference.yaml +1 -0
  500. package/rules/date-order.yaml +1 -0
  501. package/rules/date-range-reversed.yaml +2 -2
  502. package/rules/double-negative.yaml +51 -0
  503. package/rules/doubled-punctuation.yaml +2 -2
  504. package/rules/doubled-word.yaml +2 -2
  505. package/rules/duplicate-heading.yaml +78 -0
  506. package/rules/emoji-density.yaml +5 -4
  507. package/rules/empty-intensifier.yaml +25 -0
  508. package/rules/empty-section.yaml +74 -0
  509. package/rules/excessive-hedging.yaml +32 -4
  510. package/rules/fullwidth-alnum-consistency.yaml +53 -0
  511. package/rules/hankaku-kana.yaml +41 -0
  512. package/rules/image-alt-text.yaml +1 -1
  513. package/rules/invisible-character.yaml +63 -0
  514. package/rules/katakana-long-vowel.yaml +10 -9
  515. package/rules/latin-spacing.yaml +12 -5
  516. package/rules/max-kanji-continuous.yaml +1 -0
  517. package/rules/max-paragraph-length.yaml +1 -0
  518. package/rules/max-sentence-length.yaml +26 -0
  519. package/rules/modal-conflict.yaml +106 -0
  520. package/rules/name-variant.yaml +88 -0
  521. package/rules/no-doubled-joshi.yaml +1 -0
  522. package/rules/no-em-dash.yaml +26 -2
  523. package/rules/no-mixed-desumasu.yaml +1 -0
  524. package/rules/nominalization.yaml +89 -0
  525. package/rules/outside-announced-list.yaml +80 -0
  526. package/rules/padded-intro.yaml +25 -0
  527. package/rules/paragraph-length-variance.yaml +26 -2
  528. package/rules/preferred-term.yaml +1 -0
  529. package/rules/proper-noun-density.yaml +14 -5
  530. package/rules/ra-nuki.yaml +43 -0
  531. package/rules/requirement-modal.yaml +94 -0
  532. package/rules/requirement-smell.yaml +70 -0
  533. package/rules/rule-of-three.yaml +46 -0
  534. package/rules/section-length-uniformity.yaml +26 -2
  535. package/rules/sentence-rhythm.yaml +26 -0
  536. package/rules/space-before-punctuation.yaml +41 -0
  537. package/rules/spelling-consistency.yaml +47 -0
  538. package/rules/stock-transition.yaml +33 -2
  539. package/rules/taigen-dome-in-prose.yaml +14 -0
  540. package/rules/total-mismatch.yaml +1 -0
  541. package/rules/undefined-acronym.yaml +1 -0
  542. package/rules/unqualified-superlative.yaml +5 -4
  543. package/rules/unused-definition.yaml +75 -0
  544. package/rules/use-before-definition.yaml +77 -0
  545. package/rules/vague-figure-reference.yaml +66 -0
  546. package/skills/chaff/SKILL.md +108 -8
  547. package/src/acronym-expansions.ts +106 -0
  548. package/src/announced-count.ts +53 -11
  549. package/src/announced-list.ts +120 -0
  550. package/src/api.ts +154 -0
  551. package/src/cli-text.ts +6 -11
  552. package/src/cli.ts +64 -63
  553. package/src/closing-paragraph.ts +24 -0
  554. package/src/commands/compare.ts +11 -18
  555. package/src/commands/document-commands.ts +19 -0
  556. package/src/commands/eval.ts +3 -2
  557. package/src/commands/facts.ts +33 -0
  558. package/src/commands/feedback.ts +33 -1
  559. package/src/commands/fix-plan.ts +53 -0
  560. package/src/commands/outline.ts +49 -0
  561. package/src/commands/read-document.ts +24 -0
  562. package/src/commands/suppressions.ts +19 -0
  563. package/src/commands/test.ts +1 -1
  564. package/src/compare/clock-time.ts +5 -2
  565. package/src/compare/distinct.ts +13 -0
  566. package/src/compare/extract.ts +7 -5
  567. package/src/compare/fact-key.ts +31 -0
  568. package/src/compare/fact-text.ts +21 -2
  569. package/src/compare/facts-render.ts +63 -0
  570. package/src/compare/facts-text.ts +41 -0
  571. package/src/compare/match.ts +1 -1
  572. package/src/compare/outcome.ts +14 -4
  573. package/src/compare/proper-nouns.ts +4 -4
  574. package/src/compare/render.ts +2 -2
  575. package/src/compare/text-atoms.ts +7 -6
  576. package/src/compare/text.ts +3 -2
  577. package/src/config/load.ts +9 -0
  578. package/src/config/option-problems.ts +6 -4
  579. package/src/config/style.ts +14 -1
  580. package/src/custom/load.ts +11 -3
  581. package/src/custom/module-path.ts +23 -0
  582. package/src/custom/parse.ts +67 -18
  583. package/src/custom/problems.ts +63 -41
  584. package/src/detect-language.ts +1 -1
  585. package/src/detect.ts +10 -3
  586. package/src/detectors/ai-phrasing.ts +6 -2
  587. package/src/detectors/bold-label.ts +55 -0
  588. package/src/detectors/dangling-figure.ts +8 -4
  589. package/src/detectors/definition-use.ts +41 -0
  590. package/src/detectors/doubled-punctuation.ts +5 -2
  591. package/src/detectors/duplicate-heading.ts +47 -0
  592. package/src/detectors/empty-section.ts +21 -0
  593. package/src/detectors/fullwidth-alnum.ts +118 -0
  594. package/src/detectors/hankaku-kana.ts +38 -0
  595. package/src/detectors/heading-code-words.ts +2 -2
  596. package/src/detectors/index.ts +36 -0
  597. package/src/detectors/invisible-character.ts +190 -0
  598. package/src/detectors/kutoten-consistency.ts +2 -2
  599. package/src/detectors/lexicon-match.ts +33 -1
  600. package/src/detectors/lexicon.ts +40 -13
  601. package/src/detectors/list-sentence.ts +45 -4
  602. package/src/detectors/long-vowel.ts +20 -4
  603. package/src/detectors/markup-finding.ts +16 -1
  604. package/src/detectors/modal-conflict.ts +26 -0
  605. package/src/detectors/name-variant.ts +15 -0
  606. package/src/detectors/nominalization.ts +73 -0
  607. package/src/detectors/orthography.ts +77 -27
  608. package/src/detectors/outside-announced-list.ts +25 -0
  609. package/src/detectors/oxford-comma.ts +1 -0
  610. package/src/detectors/phrase-match.ts +27 -7
  611. package/src/detectors/ra-nuki.ts +38 -0
  612. package/src/detectors/requirement-modal.ts +67 -0
  613. package/src/detectors/requirement-smell.ts +52 -0
  614. package/src/detectors/space-before-punctuation.ts +32 -0
  615. package/src/detectors/spelling-variety.ts +81 -0
  616. package/src/detectors/structure-tree.ts +3 -1
  617. package/src/detectors/structure.ts +17 -3
  618. package/src/detectors/superlative-comparison.ts +47 -0
  619. package/src/detectors/url-run-on.ts +7 -1
  620. package/src/detectors/vague-figure-pointer.ts +58 -0
  621. package/src/detectors/word-list.ts +6 -1
  622. package/src/document.ts +88 -41
  623. package/src/extension/document-view.ts +109 -0
  624. package/src/extension/failure-text.ts +46 -0
  625. package/src/extension/import-default.ts +13 -0
  626. package/src/extension/load.ts +97 -0
  627. package/src/extension/module-detector.ts +61 -0
  628. package/src/extension/plugin-load.ts +82 -0
  629. package/src/extension/plugin-name.ts +26 -0
  630. package/src/extension/plugin-parse.ts +229 -0
  631. package/src/extension/problem-text.ts +103 -0
  632. package/src/extension/real-path.ts +10 -0
  633. package/src/extension/returned-findings.ts +62 -0
  634. package/src/extension/rule-export.ts +23 -0
  635. package/src/feedback/draft.ts +6 -0
  636. package/src/figure-references.ts +73 -12
  637. package/src/finding-order.ts +3 -0
  638. package/src/fix-plan/mode.ts +34 -0
  639. package/src/fix-plan/plan.ts +181 -0
  640. package/src/fix-plan/render.ts +128 -0
  641. package/src/fix-plan/text.ts +133 -0
  642. package/src/language-sample.ts +48 -0
  643. package/src/link-line.ts +13 -0
  644. package/src/long-vowel.ts +18 -8
  645. package/src/markup.ts +4 -2
  646. package/src/name-variants.ts +217 -0
  647. package/src/node-version.ts +22 -0
  648. package/src/not-run.ts +16 -0
  649. package/src/orthography.ts +40 -11
  650. package/src/outline/render.ts +85 -0
  651. package/src/outline/shape.ts +72 -0
  652. package/src/outline/text.ts +50 -0
  653. package/src/plugin.ts +21 -4
  654. package/src/reasons.ts +3 -0
  655. package/src/render/compact.ts +13 -3
  656. package/src/render/explain.ts +47 -20
  657. package/src/render/rules-json.ts +18 -12
  658. package/src/render/suppressions.ts +30 -2
  659. package/src/rule-guide.ts +38 -0
  660. package/src/run-semantic.ts +2 -1
  661. package/src/run.ts +37 -17
  662. package/src/setting-problems.ts +3 -1
  663. package/src/spacing-minority.ts +27 -0
  664. package/src/stet-block.ts +60 -0
  665. package/src/stet.ts +41 -15
  666. package/src/structure/date-range.ts +49 -1
  667. package/src/structure/definition-use.ts +130 -0
  668. package/src/structure/lazy-tree.ts +15 -0
  669. package/src/structure/modal-conflict.ts +86 -0
  670. package/src/structure/numbered-clauses.ts +11 -0
  671. package/src/structure/universal.ts +10 -2
  672. package/src/style-parse.ts +38 -3
  673. package/src/subheading-line.ts +51 -13
  674. package/src/tag-coverage.ts +13 -0
  675. package/styles/ieice.yaml +5 -4
  676. package/styles/jis-z8301-2011.yaml +5 -2
  677. package/styles/jis-z8301-2019.yaml +31 -0
  678. package/styles/koyobun.yaml +35 -0
  679. package/dist/legal-address.d.ts +0 -2
  680. package/dist/legal-address.d.ts.map +0 -1
  681. package/dist/legal-address.js +0 -16
  682. package/dist/legal-address.js.map +0 -1
@@ -47,3 +47,28 @@ not_flagged:
47
47
  level_meaning:
48
48
  ja: 当てはまる言い回しが {limit} 箇所あれば指摘
49
49
  en: reported once there are {limit}
50
+ rewrite:
51
+ ja:
52
+ direction: 強める語(「非常に」「言うまでもなく」)を消し、何がどう大事なのかが本文にあれば、それを主語と述語で書いてください。無ければ書き手に聞きます。
53
+ pairs:
54
+ - before: 言うまでもなく、バックアップは非常に重要で、消えたデータは戻りません。
55
+ after: バックアップが無いと、消えたデータは戻りません。
56
+ - before: この変更は極めて重要です。料金が月額から従量制に変わります。
57
+ after: この変更で、料金が月額から従量制に変わります。
58
+ keep:
59
+ - なぜ大事なのかを書いた部分
60
+ avoid:
61
+ - 強める語を別の強める語(「とても」「きわめて」)に替える
62
+ - 大事な理由を作る
63
+ en:
64
+ direction: Delete the intensifier ("extremely", "needless to say") and, if the text says why the thing matters, say that instead. If it does not, ask the writer.
65
+ pairs:
66
+ - before: Needless to say, backups are extremely important, because lost data cannot be recovered.
67
+ after: Without a backup, lost data cannot be recovered.
68
+ - before: This change is critically important. Billing moves from monthly to usage-based.
69
+ after: With this change, billing moves from monthly to usage-based.
70
+ keep:
71
+ - the part that says why it matters
72
+ avoid:
73
+ - swapping one intensifier for another ("very", "truly")
74
+ - inventing a reason it matters
@@ -0,0 +1,74 @@
1
+ id: empty-section
2
+ layer: L1
3
+ status: experimental
4
+ how_to_find: empty-section
5
+ requires: [markdown]
6
+ severity: warning
7
+
8
+ name:
9
+ ja: 中身の無い節
10
+ en: Empty section
11
+
12
+ why:
13
+ ja: 見出しのすぐ後ろに、同じ深さか浅い見出しが来ると、その節には何も書かれていません。書くつもりで見出しだけ立てたか、中身を消したときに見出しが残ったものです。目次には載るので、読み手は開いて何も無いことに気づきます。深い見出しが続く(節を小さな節に分けた)ときは中身があるので指摘しません。文書の最後の見出しも、後ろに何も無ければ指摘します。HTML のコメントだけの節は空と数えます。
14
+ en: A heading followed straight away by a heading of the same or a higher level has nothing under it. A heading was put up to be filled in later, or its content was deleted and the heading left behind. It still shows in the table of contents, and a reader who opens it finds nothing. A heading followed by a deeper one (a section split into subsections) has content and is not reported. The last heading of the document is reported if nothing follows it. A section holding only an HTML comment counts as empty.
15
+
16
+ message:
17
+ ja: 見出し「{heading}」の下に中身がありません
18
+ en: 'Nothing under the heading "{heading}"'
19
+
20
+ how_to_fix:
21
+ ja: 節の中身を書くか、見出しを消してください。
22
+ en: Write the section, or remove the heading.
23
+
24
+ levels: { strict: error, normal: warning, relaxed: info }
25
+
26
+ use_for: [business, technical, blog, legal, docs, academic, literature, speech]
27
+
28
+ group: structure
29
+ summary:
30
+ ja: 見出しのすぐ後ろに同じ深さか浅い見出しが来て、何も書かれていない節
31
+ en: A heading with nothing under it before the next heading of the same or a higher level
32
+ example:
33
+ ja:
34
+ before: |
35
+ # 手順書
36
+
37
+ ## 準備
38
+
39
+ ## 作業
40
+
41
+ 部品を取り付けます。
42
+ after: |
43
+ # 手順書
44
+
45
+ ## 準備
46
+
47
+ 道具をそろえます。
48
+
49
+ ## 作業
50
+
51
+ 部品を取り付けます。
52
+ en:
53
+ before: |
54
+ # Setup guide
55
+
56
+ ## Before you start
57
+
58
+ ## Steps
59
+
60
+ Fit the parts.
61
+ after: |
62
+ # Setup guide
63
+
64
+ ## Before you start
65
+
66
+ Gather the tools.
67
+
68
+ ## Steps
69
+
70
+ Fit the parts.
71
+
72
+ not_flagged:
73
+ ja: すぐ後ろに深い見出しが来る節(小さな節に分けたもの)は指しません。Markdown の文書でだけ動きます。
74
+ en: A heading followed by a deeper heading (a section split into subsections) is not reported. It runs on Markdown only.
@@ -18,7 +18,7 @@ why:
18
18
  en: The more the text avoids claiming, the less the reader can tell what was decided. One hedge is caution; many mean nobody is accountable. chaff looks two ways. A sentence that stacks hedges ("may possibly", "it could perhaps be argued") is reported on its own, even in a short document. Too many hedges across the whole document is measured only on longer documents. When counting hedges stacked in a sentence, a hedge inside a quotation is the speaker's, not the writer's, and is left out.
19
19
 
20
20
  message:
21
- ja: 「{matched}」など、逃げの表現が 1000 語あたり {density} 個あります({limit} 個まで)
21
+ ja: 「{matched}」など、逃げの表現が 1000 字あたり {density} 個あります({limit} 個まで)
22
22
  en: '"{matched}" and other hedges: {density} per 1000 words (limit {limit})'
23
23
 
24
24
  # 1 つの文に重ねたもの。上の message は文書全体の密度。
@@ -31,10 +31,11 @@ how_to_fix:
31
31
  ja: 言い切れるものは言い切ってください。言い切れないなら、何が分かれば言い切れるのかを書いてください。重ねた逃げは、1 つ残すか、全部外して言い切ってください。
32
32
  en: Commit where you can. Where you cannot, say what you would need to know. Where hedges are stacked, keep one or drop them all and commit.
33
33
 
34
- # 文書全体の、1000 語あたりの数の上限。1 つの文に 2 つ以上重ねたものは、どの段でも指摘する。
34
+ # 文書全体の、1000 語(日本語は 1000 字)あたりの数の上限。1 つの文に 2 つ以上重ねたものは、どの段でも指摘する。
35
35
  levels: { strict: 3, normal: 6, relaxed: 12 }
36
36
 
37
37
  use_for: [business, blog, technical, legal, docs, academic, literature, speech]
38
+ sources: [femmer-2017]
38
39
 
39
40
  group: wording
40
41
  summary:
@@ -52,5 +53,32 @@ not_flagged:
52
53
  ja: 逃げの表現が一つだけなら慎重さなので指しません。引用の中の逃げは、書き手ではなく話し手のものなので数えません。
53
54
  en: A single hedge is caution and is not reported. A hedge inside a quotation is the speaker's, not the writer's, and is not counted.
54
55
  level_meaning:
55
- ja: 1000 語あたり {limit} 個まで(一文に重ねた逃げは、文書の長さによらず指摘)
56
- en: up to {limit} per 1000 words (hedges stacked in one sentence are reported whatever the length)
56
+ ja: 1000 字あたり逃げの表現 {limit} 個まで(一文に重ねた逃げは、文書の長さによらず指摘)
57
+ en: up to {limit} hedges per 1000 words (hedges stacked in one sentence are reported whatever the length)
58
+ rewrite:
59
+ ja:
60
+ direction: 重ねた逃げは一つだけ残すか、確かめたことなら全部外して言い切ってください。言い切れないなら、何が分かれば言い切れるかを書きます。
61
+ pairs:
62
+ - before: 遅延の原因はキャッシュにある可能性があるかもしれません。
63
+ after: 遅延の原因はキャッシュかもしれません。
64
+ - before: この方法で改善できる場合もあると考えられるのではないでしょうか。
65
+ after: この方法で改善できる場合があります。
66
+ keep:
67
+ - 書き手が確かめていないことの推量
68
+ - 根拠の強さ
69
+ avoid:
70
+ - 確かめていないことを言い切りにする
71
+ - 推量を作った数字(「8 割の確率で」)に替える
72
+ en:
73
+ direction: Where hedges are stacked, keep one, or drop them all and commit if the point was checked. Where you cannot commit, say what would settle it.
74
+ pairs:
75
+ - before: The delay may possibly be caused by the cache.
76
+ after: The delay may be caused by the cache.
77
+ - before: It could perhaps be argued that this approach might help in some cases.
78
+ after: This approach helps in some cases.
79
+ keep:
80
+ - doubt about what the writer has not checked
81
+ - how strong the evidence is
82
+ avoid:
83
+ - committing to something nobody checked
84
+ - turning a hedge into an invented figure ("80% likely")
@@ -0,0 +1,53 @@
1
+ id: fullwidth-alnum-consistency
2
+ layer: L3
3
+ status: experimental
4
+ how_to_find: fullwidth-alnum
5
+ languages: [ja]
6
+ severity: warning
7
+
8
+ name:
9
+ ja: 英数字の全角と半角が混ざっている
10
+ en: Full-width and half-width letters and digits are mixed
11
+
12
+ why:
13
+ ja: 英字と数字を全角(ABC123)で書くか半角(ABC123)で書くかは、どちらでも読めます。困るのは一つの文書の中で混ざることで、検索で別の語になり、貼り付けた文がそこだけ違って見えます。chaff はどちらが正しいかを決めず、英字一字・英字の語・数字一字・数字の並びの組ごとに、文書の中で少ないほうを指摘します(「1桁は全角、2桁以上は半角」と決めている文書は組の中でそろっています)。少ないほうが組の三分の一を超える文書は、使い分けている(数え方の語だけ全角にする、など)と見て言いません。鉤括弧で引いたもの、項目と注の番号(「1.」「(1)」「※1」)、箇条書きの頭の番号、注の番号で始まる行と URL を含む文、日本語の中の英文は数えません。
14
+ en: Whether Japanese text writes letters and digits full-width (ABC123) or half-width (ABC123) is a choice either way. What reads badly is mixing both in one document, which makes search treat them as different words and makes a pasted sentence stand out. chaff does not decide which is right; for single letters, words, single digits and longer numbers separately, it points at whichever the document uses less (a document that writes one-digit numbers full-width and longer ones half-width is consistent within each group). It says nothing when the minority is more than a third of its group, since the document then uses the two on purpose (full-width only for counters, for example). Quotations in brackets, item and note numbers (1., (1), ※1), a number at the head of a list item, a sentence that starts with a note number or holds a URL, and English sentences inside Japanese text are not counted.
15
+
16
+ message:
17
+ ja: 「{written}」と書いています(ほかは「{other}」の書き方。{of} 箇所のうち {count} 箇所が違う)
18
+ en: '"{written}" here, where the document usually writes "{other}" ({count} of {of})'
19
+
20
+ messages:
21
+ fullwidth:
22
+ ja: 全角の「{written}」と書いています(この文書はふつう半角の「{other}」。{of} 箇所のうち {count} 箇所が違う)
23
+ en: 'Full-width "{written}" here, where the document usually writes half-width "{other}" ({count} of {of})'
24
+ halfwidth:
25
+ ja: 半角の「{written}」と書いています(この文書はふつう全角の「{other}」。{of} 箇所のうち {count} 箇所が違う)
26
+ en: 'Half-width "{written}" here, where the document usually writes full-width "{other}" ({count} of {of})'
27
+
28
+ how_to_fix:
29
+ ja: 文書の多いほうの書き方に合わせてください。チームで決めているなら、STYLE.md に書いておくと迷いません。
30
+ en: Match the way the rest of the document does it. If the team has decided, write it in the style guide.
31
+
32
+ # 少ないほうが組の何パーセントまでなら「混ざっている」と見るか。これを超えたら、文書が使い分けている。
33
+ levels: { strict: 49, normal: 34, relaxed: 20 }
34
+
35
+ use_for: [business, technical, blog, legal, docs, academic, literature, speech]
36
+
37
+ group: consistency
38
+ summary:
39
+ ja: 英字や数字を、全角(ABC123)と半角(ABC123)で混ぜて書いている所
40
+ en: Letters and digits written both full-width (ABC123) and half-width (ABC123) in one Japanese document
41
+ example:
42
+ ja:
43
+ before: |
44
+ 申込は2024年4月10日までです。説明会は2024年4月3日と2024年4月5日に開きます。
45
+ after: |
46
+ 申込は2024年4月10日までです。説明会は2024年4月3日と2024年4月5日に開きます。
47
+
48
+ not_flagged:
49
+ ja: 鉤括弧で引いたもの、項目と注の番号(「1.」「(1)」「※1」)、箇条書きの頭の番号、版の番号の続き(TLS1.2 の 2)、注や URL を含む文は数えません。英字一字・英字の語・数字一字・数字の並びは別々に比べるので、「1桁は全角、2桁以上は半角」はそろっていると見ます。どちらの書き方が正しいかは決めません。
50
+ en: Quotations in brackets, item and note numbers (1., (1), ※1), a number at the head of a list item, the rest of a version number (the 2 of TLS1.2), and notes or sentences with a URL are not counted. Single letters, words, single digits and longer numbers are compared separately, so "one digit full-width, more digits half-width" counts as consistent. Neither way is called right.
51
+ level_meaning:
52
+ ja: 少ないほうが組の {limit}% 以下のとき指摘
53
+ en: reported when the minority form is {limit}% of its group or less
@@ -0,0 +1,41 @@
1
+ id: hankaku-kana
2
+ layer: L1
3
+ status: experimental
4
+ how_to_find: hankaku-kana
5
+ languages: [ja]
6
+ severity: warning
7
+
8
+ name:
9
+ ja: 半角の片仮名がある
10
+ en: Half-width katakana
11
+
12
+ why:
13
+ ja: 「アイウ」のような半角の片仮名は、古い機械やシステムから貼り付けたときに残る書き方です。全角の「アイウ」と同じ語でも検索で別の語になり、読み上げや字幅もそろいません。半角の句読点・鉤括弧・中黒(。「」、・)も同じです。コードとリンクの中、鉤括弧や引用符で引いた名前(画面に出る表示をそのまま引いたもの)は数えません。
14
+ en: Half-width katakana such as "アイウ" is left over from text pasted out of an old system. It is the same word as the full-width "アイウ" but a search treats it as a different one, and a screen reader and the character widths do not match. Half-width Japanese punctuation, brackets and the middle dot (。「」、・) are the same. Code, link text and a name quoted in brackets or quotation marks (a label copied from a screen) are not counted.
15
+
16
+ message:
17
+ ja: 半角の片仮名「{kana}」があります(全角は「{fullwidth}」)
18
+ en: 'Half-width katakana "{kana}" (full-width: "{fullwidth}")'
19
+
20
+ how_to_fix:
21
+ ja: 全角の片仮名に直してください。システムの表示をそのまま引くなら、鉤括弧で囲んでください。
22
+ en: Write it in full-width katakana. If it quotes a system's display as it is, put it in brackets.
23
+
24
+ levels: { strict: error, normal: warning, relaxed: info }
25
+
26
+ use_for: [business, technical, blog, legal, docs, academic, literature, speech]
27
+
28
+ group: slips
29
+ summary:
30
+ ja: 「アイウ」のような半角の片仮名と、半角の句読点・鉤括弧・中黒
31
+ en: Half-width katakana such as "アイウ", and half-width Japanese punctuation
32
+ example:
33
+ ja:
34
+ before: |
35
+ 申込書はメールで送ってください。
36
+ after: |
37
+ 申込書はメールで送ってください。
38
+
39
+ not_flagged:
40
+ ja: コードとリンクの中、鉤括弧や引用符で引いた名前(「カナ表示」のような画面の表示)は数えません。
41
+ en: Code, link text and a name quoted in brackets or quotation marks (a screen label such as 「カナ表示」) are not counted.
@@ -1,6 +1,6 @@
1
1
  id: image-alt-text
2
2
  layer: L1
3
- status: experimental
3
+ status: stable
4
4
  how_to_find: image-alt-text
5
5
  requires: [markdown]
6
6
  severity: warning
@@ -0,0 +1,63 @@
1
+ id: invisible-character
2
+ layer: L1
3
+ status: experimental
4
+ how_to_find: invisible-character
5
+ severity: warning
6
+
7
+ name:
8
+ ja: 見えない字がある
9
+ en: Invisible character
10
+
11
+ why:
12
+ ja: ゼロ幅の空白、途中に残った BOM、任意の改行位置の印(ソフトハイフン)、文字の向きの指定、制御文字は、画面では見えないまま本文に残ります。Web ページや PDF から貼り付けると入り、検索に当たらない語、押しても開かない URL、動かないコマンドの原因になります。向きの指定や、字の後ろに隠したタグ文字は、読み手に見える文と機械が読む文を食い違わせることにも使えるので、安全のための目印でもあります。見出しや箇条の印の後ろのノーブレークスペースは印を印でなくし、日本語の隣のノーブレークスペースは貼り付けの名残です。コードの中も数えます(コピーしたコマンドが動かなくなるため)。絵文字をつなぐ接合子、アラビア文字やインドの文字の接合子、右から左に書く文字の隣の向きの印と分離の印、地域の旗のタグ文字、字に一つ付いた異体字の指定は書き方の一部なので数えません。向きを強制する印(LRO・RLO)は、どこにあっても指摘します。
13
+ en: A zero-width space, a byte order mark left mid-text, a soft hyphen, a direction mark and a control character stay in the text without showing on screen. They come in with text pasted from a web page or a PDF, and make a word that search does not find, a URL that does not open and a command that does not run. Direction marks and tag characters hidden after a letter can also make what a reader sees differ from what a machine reads, so they are a safety signal too. A no-break space after a heading or list marker stops the marker from working, and one next to Japanese text is left over from a paste. Code is checked too, since a copied command stops working. A joiner inside an emoji or in Arabic or Indic script, a direction mark or isolate next to right-to-left text, the tag characters of a regional flag and a single variation selector after a character are part of the writing and are not counted. A direction override (LRO, RLO) is always reported.
14
+
15
+ message:
16
+ ja: 見えない字({code})があります
17
+ en: "Invisible character ({code})"
18
+
19
+ messages:
20
+ zero-width:
21
+ ja: ゼロ幅の字({code})が {count} 字あります。検索やコピーで語が切れます
22
+ en: "{count} zero-width {count|character|characters} ({code}): search and copy break the word here"
23
+ soft-hyphen:
24
+ ja: 見えないソフトハイフン({code})が {count} 字あります。検索で語が切れます
25
+ en: "{count} soft {count|hyphen|hyphens} ({code}): search breaks the word here"
26
+ direction:
27
+ ja: 文字の向きの指定({code})が {count} 字あります。見える順と読まれる順が食い違うことがあります
28
+ en: "{count} direction {count|mark|marks} ({code}): the order a reader sees can differ from the order a machine reads"
29
+ control:
30
+ ja: 制御文字({code})が {count} 字あります
31
+ en: "{count} control {count|character|characters} ({code})"
32
+ hidden:
33
+ ja: 字の後ろに隠れた印({code})が {count} 字あります。読み手に見えない文を運べます
34
+ en: "{count} hidden {count|tag|tags} ({code}) after a character: they can carry text a reader cannot see"
35
+ nbsp:
36
+ ja: 普通の空白の所にノーブレークスペース({code})があります
37
+ en: "A no-break space ({code}) where an ordinary space belongs"
38
+
39
+ how_to_fix:
40
+ ja: 見えない字を消してください。ノーブレークスペースは普通の空白にしてください。エディタの「不可視文字を表示」で場所が見えます。
41
+ en: Delete the invisible character, and replace a no-break space with an ordinary space. An editor's "show invisibles" setting shows where they are.
42
+
43
+ levels: { strict: error, normal: warning, relaxed: info }
44
+
45
+ use_for: [business, technical, blog, legal, docs, academic, literature, speech]
46
+
47
+ group: slips
48
+ summary:
49
+ ja: ゼロ幅の空白、途中の BOM、ソフトハイフン、文字の向きの指定、制御文字、隠れたタグ文字のような、画面に出ない字
50
+ en: Characters that do not show on screen, such as a zero-width space, a stray byte order mark, a soft hyphen, a direction mark or hidden tag characters
51
+ example:
52
+ ja:
53
+ before: "申込書は\u200B総務課へ送ってください。\n"
54
+ after: |
55
+ 申込書は総務課へ送ってください。
56
+ en:
57
+ before: "Send the form to the\u200B office.\n"
58
+ after: |
59
+ Send the form to the office.
60
+
61
+ not_flagged:
62
+ ja: 絵文字をつなぐ接合子、アラビア文字やインドの文字の接合子、右から左に書く文字の隣の向きの印、地域の旗のタグ文字、字に一つ付いた異体字の指定、ファイルの頭の BOM、英文の語と語のあいだのノーブレークスペースは指しません。
63
+ en: A joiner inside an emoji or in Arabic or Indic script, a direction mark next to right-to-left text, the tag characters of a regional flag, a single variation selector after a character, a byte order mark at the start of the file and a no-break space between English words are not reported.
@@ -14,8 +14,8 @@ name:
14
14
  en: The final ー of katakana words is inconsistent
15
15
 
16
16
  why:
17
- ja: 「コンピューター」と「コンピュータ」のように、カタカナ語の語末の「ー」は付ける書き方と省く書き方があります。どちらも正しく、困るのは一つの文書の中で混ざることです。読み手は別のものかと迷い、検索でも片方を取りこぼします。設定が無ければ、同じ語が両方で書かれた所だけを指摘し、違う語どうし(サーバーとブラウザ)は比べません。options の ending を drop か keep にすると、決めた書き方に合わない語をすべて指摘します。音は「コ・ン・ピュ・ー・タ・ー」で 6 音と数えます(小さい「ャュョァィゥェォ」は前の字と合わせて 1 音、「ッ」「ン」「ー」は 1 音ずつ)。辞書が固有名詞と知っている語(ディズニー)と、chaff.yaml の names に並べた名前は見ません。
18
- en: A katakana loanword can be written with or without its final long-vowel mark (コンピューター / コンピュータ). Both are right; what reads badly is mixing them in one document, which makes a reader wonder whether they differ and makes a search miss one. With no setting chaff points only at a word written both ways, and does not compare different words (サーバー and ブラウザ). Setting ending under options to drop or keep points at every word written the other way. Morae are counted as コ・ン・ピュ・ー・タ・ー, six (a small ャュョァィゥェォ joins the kana before it; ッ, ン and ー are one each). Words the dictionary knows as proper nouns (ディズニー) and the names under names in chaff.yaml are left alone.
17
+ ja: 「コンピューター」と「コンピュータ」のように、カタカナ語の語末の「ー」は付ける書き方と省く書き方があります。どちらも正しく、困るのは一つの文書の中で混ざることです。読み手は別のものかと迷い、検索でも片方を取りこぼします。設定が無ければ、同じ語が両方で書かれた所だけを指摘し、違う語どうし(サーバーとブラウザ)は比べません。options の ending を drop か keep にすると、決めた書き方に合わない語をすべて指摘します。音は語末の「ー」を除いて「コ・ン・ピュ・ー・タ」で 5 音と数えます(小さい「ャュョァィゥェォ」は前の字と合わせて 1 音、「ッ」「ン」と語中の「ー」は 1 音ずつ。JIS Z 8301:2011 表 G.3 の数え方)。辞書が固有名詞と知っている語(ディズニー)と、chaff.yaml の names に並べた名前は見ません。
18
+ en: A katakana loanword can be written with or without its final long-vowel mark (コンピューター / コンピュータ). Both are right; what reads badly is mixing them in one document, which makes a reader wonder whether they differ and makes a search miss one. With no setting chaff points only at a word written both ways, and does not compare different words (サーバー and ブラウザ). Setting ending under options to drop or keep points at every word written the other way. Morae are counted before the final ー, as コ・ン・ピュ・ー・タ, five (a small ャュョァィゥェォ joins the kana before it; ッ, ン and a ー inside the word are one each), as JIS Z 8301:2011 Table G.3 counts. Words the dictionary knows as proper nouns (ディズニー) and the names under names in chaff.yaml are left alone.
19
19
 
20
20
  message:
21
21
  ja: 「{matched}」は語末の「ー」がほかと違います(「{preferred}」)
@@ -59,17 +59,17 @@ options:
59
59
  ja: 決めない。文書の中でそろっているかだけを見る
60
60
  en: No side taken; only checks that the document is consistent
61
61
  drop:
62
- ja: min_morae 音以上の語の語末の「ー」を省く(電子情報通信学会、JIS Z 8301:2011 まで)
63
- en: Drop the final ー on words of min_morae morae or more (IEICE; JIS Z 8301 up to 2011)
62
+ ja: min_morae 音以上の語の、英語の -er、-or、-ar に当たる語末の「ー」(ア段の字の後ろ)を省く(電子情報通信学会、JIS Z 8301:2011 まで)
63
+ en: Drop the final ー that stands for English -er, -or, -ar (after a kana of the ア row) on words of min_morae morae or more (IEICE; JIS Z 8301 up to 2011)
64
64
  keep:
65
65
  ja: 語末の「ー」を付ける(文化庁「外来語の表記」、JIS Z 8301:2019)。「ー」の無い語は、辞書が「ー」付きで知っている語(メモリ)か、文書がほかで「ー」付きで書く語だけを見る
66
66
  en: Keep the final ー (the Agency for Cultural Affairs' 外来語の表記; JIS Z 8301:2019). A word without one is checked only when the dictionary knows it with one (メモリ) or the document writes it with one elsewhere
67
67
  min_morae:
68
68
  kind: count
69
- default: 3
69
+ default: 2
70
70
  about:
71
- ja: 何音以上の語を見るか。語末の「ー」も 1 音と数える(コンピューターは 6 音、カーは 2 音)
72
- en: The shortest word checked, in morae, counting the final ー (コンピューター is six, カー two)
71
+ ja: 何音以上の語を見るか。語末の「ー」は数えない(コンピューターは 5 音、カバーは 2 音、カーは 1 音)
72
+ en: The shortest word checked, in morae before the final ー (コンピューター is five, カバー two, カー one)
73
73
  except:
74
74
  kind: words
75
75
  default: []
@@ -78,6 +78,7 @@ options:
78
78
  en: Words left alone; listing either way of writing one exempts both
79
79
 
80
80
  use_for: [business, blog, technical, legal, docs, academic, literature, speech]
81
+ sources: [koyobun-2022, gairaigo-1991, jis-z8301-2019, jtf-style-guide]
81
82
 
82
83
  group: consistency
83
84
  summary:
@@ -91,8 +92,8 @@ example:
91
92
  新しいコンピューターを買いました。古いコンピューターは来月捨てます。
92
93
 
93
94
  not_flagged:
94
- ja: 違う語どうし(サーバーとブラウザ)は比べません。2 音の語(カー)、辞書が固有名詞と知っている語、chaff.yaml の names に並べた名前も見ません。
95
- en: Different words (サーバー and ブラウザ) are not compared. Two-mora words (カー), words the dictionary knows as proper nouns and the names under names in chaff.yaml are left alone.
95
+ ja: 違う語どうし(サーバーとブラウザ)は比べません。「ー」の前が 1 音の語(カー)、辞書が固有名詞と知っている語、chaff.yaml の names に並べた名前も見ません。「ー」を付けると別の語になる語(知ってるフリ/フリー、タブ/タブー、ベタ/ベター)は、語彙表 long-vowel-distinct に並べたものを同じ語として比べず、keep でも「ー」を足させません。drop は ュー・エー・イーなどで終わる語(メニュー、グレー、コピー)を見ません。
96
+ en: Different words (サーバー and ブラウザ) are not compared. Words of one mora before the final ー (カー), words the dictionary knows as proper nouns and the names under names in chaff.yaml are left alone. A word that becomes another word with a final ー (フリ and フリー, タブ (tab) and タブー (taboo), ベタ and ベター) is not compared, nor asked for a ー by keep, when it is in the long-vowel-distinct word list. drop leaves words ending in ュー, エー, イー and the like alone (メニュー, グレー, コピー).
96
97
  level_meaning:
97
98
  ja: 違う書き方の語が {limit} 箇所あれば指摘
98
99
  en: reported once {limit} words go the other way
@@ -9,20 +9,26 @@ uses: [pos]
9
9
  # 番地(千代田区紀尾井町1-3)を、都道府県までの地名の後ろの範囲(東京都2-3 営業日)と分ける。
10
10
  # 日付・時刻(9月、2026年、令和8年、10時5分)を、長さ(3ヶ月、3 時間)と分ける。
11
11
  # 番号と組んで名前を付ける語(問3、第1節)を見分ける。
12
- extra_word_lists: [prefecture-unit, date-time-unit, calendar-unit, calendar-year-unit, calendar-era, numbered-label]
12
+ extra_word_lists: [prefecture-unit, date-time-unit, calendar-unit, calendar-year-unit, calendar-era, numbered-label, item-number]
13
13
 
14
14
  name:
15
15
  ja: 英数字の前後の空白がそろっていない
16
16
  en: Spacing around Latin text is inconsistent
17
17
 
18
18
  why:
19
- ja: 日本語と英字・数字のあいだを空けるか詰めるかは、どちらでも読めます。困るのは一つの文書の中で混ざることで、読み手には違いに意味があるように見えます。chaff はどちらが正しいかを決めず、文書の中で少ないほうを指摘します。英字と、数字の前、数字の後ろは別々に数えます。「を 3回」のように、数字の前は空けて助数詞とは詰める書き方がふつうにあるからです。「3GBの」のように数字に続く単位は、英字ではなく数字の側として数えます。逆に「H30 等」「EC2 で」「Phase 1 は」のように英字で始まって数字で終わる名前は、英字の側として数えます。「073-489-5909」「2026-06-02」のような番号は数量ではないので数えません。日付・時刻(「9月」「2026年」「令和8年」「10月1日」「3時」「10時5分」)も、数と単位を詰めて書く決まりなので、その中の境目も、前の境目(「は 9月」「午後3時」)も数えません。長さ(「3ヶ月」「3 時間」「5日で」「3年」)は数量として数えます。題や注の番号として書かれた数(「3.1 リサーチの原則」の節番号、※1 の注番号、行の頭に続き番号で並べた注の番号、番号が増えていく箇条書きの頭の番号、「問3」「図2」のように語のすぐ後ろに書いた番号)、0 で始まる組を含む番号(102-0094)、〒の後ろの郵便番号(〒100-8916)、市・区・町まで下りた地名のすぐ後ろの番地(千代田区紀尾井町1-3)も、後ろの空白が番号と題・項目の区切りなので数えません。「第1節 AI の…」の「第1節」の後ろの空白も同じです。鉤括弧(「」『』)で引いた題名や発言の中も、空け方は引いた元のものなので数えません。
20
- en: Whether to put a space between Japanese and Latin letters or digits is a choice either way. What reads badly is mixing both in one document, which suggests the difference means something. chaff does not decide which is right; it points at whichever the document uses less. Letters, the space before a digit and the space after one are counted separately, since spacing before a number but not before its counter is common. A unit after a number (3GB) counts with the number; a name that starts with a letter and ends in a digit (H30, EC2, Phase 1) counts with the letters. A code such as a phone number or a date (073-489-5909, 2026-06-02) is not a quantity and is not counted. Nor is a date or a time written with units (9月, 2026年, 令和8年, 10月1日, 3時, 10時5分), which is packed by convention; neither its inside nor the space before it (は 9月, 午後3時) counts. A length of time (3ヶ月, 3 時間, 5日で, 3年) is a quantity and counts. Neither is a number written as the label of a title or a note (a section number such as 3.1 before its title, a note number after ※, the numbers of notes listed one per line in sequence, numbers opening the items of a list that go up, a number written right after a word such as 問 or 図), a code with a part starting with 0 (102-0094), a postal code after 〒 (〒100-8916), or a hyphenated address number right after a city, ward or town (千代田区紀尾井町1-3), since the space after it separates the label from its title or the next item. The same goes for the space after a division such as 第1節. Nor is the spacing inside a title or a quotation in 「」 or 『』, which is the source's, not the writer's.
19
+ ja: 日本語と英字・数字のあいだを空けるか詰めるかは、どちらでも読めます。困るのは一つの文書の中で混ざることで、読み手には違いに意味があるように見えます。chaff はどちらが正しいかを決めず、文書の中で少ないほうを指摘します。英字と、数字の前、数字の後ろは別々に数えます。「を 3回」のように、数字の前は空けて助数詞とは詰める書き方がふつうにあるからです。「3GBの」のように数字に続く単位は、英字ではなく数字の側として数えます。逆に「H30 等」「EC2 で」「Phase 1 は」のように英字で始まって数字で終わる名前は、英字の側として数えます。「073-489-5909」「2026-06-02」のような番号や、「1.0.0」のような版番号は数量ではないので数えません。日付・時刻(「9月」「2026年」「令和8年」「10月1日」「3時」「10時5分」)も、数と単位を詰めて書く決まりなので、その中の境目も、前の境目(「は 9月」「午後3時」)も数えません。長さ(「3ヶ月」「3 時間」「5日で」「3年」)は数量として数えます。題や注の番号として書かれた数(「3.1 リサーチの原則」の節番号、※1 の注番号、行の頭に続き番号で並べた注の番号、番号が増えていく箇条書きの頭の番号、「問3」「図2」のように語のすぐ後ろに書いた番号)、0 で始まる組を含む番号(102-0094)、〒の後ろの郵便番号(〒100-8916)、市・区・町まで下りた地名のすぐ後ろの番地(千代田区紀尾井町1-3)も、後ろの空白が番号と題・項目の区切りなので数えません。「第1節 AI の…」の「第1節」の後ろの空白も同じです。鉤括弧(「」『』)で引いた題名や発言の中も、リンクの文字の中も、空け方は引いた元のものなので数えません。
20
+ en: Whether to put a space between Japanese and Latin letters or digits is a choice either way. What reads badly is mixing both in one document, which suggests the difference means something. chaff does not decide which is right; it points at whichever the document uses less. Letters, the space before a digit and the space after one are counted separately, since spacing before a number but not before its counter is common. A unit after a number (3GB) counts with the number; a name that starts with a letter and ends in a digit (H30, EC2, Phase 1) counts with the letters. A code such as a phone number, a date or a version (073-489-5909, 2026-06-02, 1.0.0) is not a quantity and is not counted. Nor is a date or a time written with units (9月, 2026年, 令和8年, 10月1日, 3時, 10時5分), which is packed by convention; neither its inside nor the space before it (は 9月, 午後3時) counts. A length of time (3ヶ月, 3 時間, 5日で, 3年) is a quantity and counts. Neither is a number written as the label of a title or a note (a section number such as 3.1 before its title, a note number after ※, the numbers of notes listed one per line in sequence, numbers opening the items of a list that go up, a number written right after a word such as 問 or 図), a code with a part starting with 0 (102-0094), a postal code after 〒 (〒100-8916), or a hyphenated address number right after a city, ward or town (千代田区紀尾井町1-3), since the space after it separates the label from its title or the next item. The same goes for the space after a division such as 第1節. Nor is the spacing inside a title or a quotation in 「」 or 『』, or inside the text of a link, which is the source's, not the writer's.
21
21
 
22
22
  message:
23
23
  ja: "日本語と{kind}のあいだを{style}(この文書はふつう{usual}。{of} 箇所のうち {count} 箇所が違う)"
24
24
  en: "Spacing between Japanese and {kind} differs here ({count} of {of})"
25
25
 
26
+ # 少ないほうが 5 箇所以上で、全体の 2 割を超えるとき。書き損じではなく書き方が二通りあるので、1 件にまとめて両方の数を言う。
27
+ messages:
28
+ mixed:
29
+ ja: "日本語と{kind}のあいだを、空ける所が {spaced} 箇所、詰める所が {touching} 箇所あります。この文書には書き方が二通りあります"
30
+ en: "Spacing between Japanese and {kind} is done two ways in this document ({spaced} spaced, {touching} not)"
31
+
26
32
  how_to_fix:
27
33
  ja: 文書の多いほうの書き方に合わせてください。チームで決めているなら、STYLE.md に書いておくと迷いません。
28
34
  en: Match the way the rest of the document does it. If the team has decided, write it in the style guide.
@@ -31,6 +37,7 @@ how_to_fix:
31
37
  levels: { strict: 1, normal: 1, relaxed: 3 }
32
38
 
33
39
  use_for: [business, blog, technical, legal, docs, academic, literature, speech]
40
+ sources: [koyobun-2022, jtf-style-guide]
34
41
 
35
42
  group: consistency
36
43
  summary:
@@ -44,8 +51,8 @@ example:
44
51
  表は Excel で作り、Word に貼ります。図は PowerPoint で描きます。最後に PDF にします。
45
52
 
46
53
  not_flagged:
47
- ja: 電話番号や日付のような番号、単位つきの日付や時刻(9月、10時5分)、見出しの番号、「」の中は数えません。どちらの空け方が正しいかは決めません。
48
- en: Codes such as phone numbers and dates, dates and times with units (9月, 10時5分), heading numbers and quotations are not counted. Neither way is called right.
54
+ ja: 電話番号や日付のような番号、版番号(1.0.0)、単位つきの日付や時刻(9月、10時5分)、見出しの番号、行の頭の項目の番号(「一 JIS…」の一、イ)の後ろ、「」の中、リンクの文字の中は数えません。どちらの空け方が正しいかは決めません。少ないほうが全体の 2 割を超えるほど多ければ(5 箇所以上)、1 箇所ずつではなく、書き方が二通りあることを 1 件で言います。
55
+ en: Codes such as phone numbers, dates and version numbers (1.0.0), dates and times with units (9月, 10時5分), heading numbers, the space after an item number at the head of a line (一 JIS…), quotations and the text of links are not counted. Neither way is called right. When the less common way is more than a fifth of the places (and at least five), it is reported once, as a document written two ways, rather than place by place.
49
56
  level_meaning:
50
57
  ja: 少ないほうの空け方が {limit} 箇所あれば指摘
51
58
  en: reported once {limit} places go against the document's habit
@@ -29,6 +29,7 @@ how_to_fix:
29
29
  levels: { strict: 6, normal: 8, relaxed: 12 }
30
30
 
31
31
  use_for: [blog, business, technical, legal, docs, academic, literature, speech]
32
+ sources: [shibasaki-tamaoka-2010, lee-2016]
32
33
 
33
34
  group: readability
34
35
  summary:
@@ -37,6 +37,7 @@ by_genre:
37
37
  academic: { strict: 5, normal: 9, relaxed: 12 }
38
38
 
39
39
  use_for: [blog, business, technical, legal, docs, academic, literature, speech]
40
+ sources: [gov-uk-clear-language]
40
41
 
41
42
  group: readability
42
43
  summary:
@@ -73,6 +73,7 @@ by_genre:
73
73
  en: { strict: 35, normal: 50, relaxed: 65 }
74
74
 
75
75
  use_for: [blog, business, technical, legal, docs, academic, literature, speech]
76
+ sources: [shibasaki-tamaoka-2010, yasashii-nihongo-2020, koyobun-2022, gov-uk-clear-language]
76
77
 
77
78
  group: readability
78
79
  summary:
@@ -96,3 +97,28 @@ not_flagged:
96
97
  level_meaning:
97
98
  ja: 一文 {limit} 字まで
98
99
  en: up to {limit} words in a sentence
100
+ rewrite:
101
+ ja:
102
+ direction: 接続助詞(〜が、〜ので、〜し)か「、そして」の所で二文に割り、二文目にも主語を書いてください。
103
+ pairs:
104
+ - before: 申請書は総務部に提出しますが、期限を過ぎた場合は翌月の扱いになり、その場合は再申請が必要になります。
105
+ after: 申請書は総務部に提出します。期限を過ぎた申請は翌月の扱いになり、再申請が必要です。
106
+ - before: 新しい端末は来週届く予定なので、それまでは今の端末を使い、届いたら情報システム部が設定します。
107
+ after: 新しい端末は来週届く予定です。それまでは今の端末を使います。届いた端末は情報システム部が設定します。
108
+ keep:
109
+ - 条件と例外(「〜の場合」)と、それが掛かる先
110
+ avoid:
111
+ - 割るときに条件を別の文へ移して、掛かる先を変える
112
+ - 長い修飾を削って中身を落とす
113
+ en:
114
+ direction: Split the sentence at a conjunction (and, but, so, which) and give the second sentence its own subject.
115
+ pairs:
116
+ - before: Submit the form to the office, but if you miss the deadline it moves to the next month, in which case you have to apply again.
117
+ after: Submit the form to the office. A form that misses the deadline moves to the next month and has to be submitted again.
118
+ - before: The new laptops arrive next week, so keep using the old ones until then, and IT will set the new ones up when they come.
119
+ after: The new laptops arrive next week. Keep using the old ones until then. IT will set the new ones up when they come.
120
+ keep:
121
+ - conditions and exceptions ("if", "unless") and what they apply to
122
+ avoid:
123
+ - moving a condition into another sentence so that it applies to something else
124
+ - dropping content to make the sentence shorter
@@ -0,0 +1,106 @@
1
+ id: modal-conflict
2
+ layer: L3
3
+ status: experimental
4
+ how_to_find: modal-conflict
5
+ requires: [structure, pos]
6
+ severity: warning
7
+
8
+ name:
9
+ ja: 同じ行為への逆の決まり
10
+ en: Opposite obligations on the same act
11
+
12
+ why:
13
+ ja: 同じ人の同じ行為を、ある文では「しなければならない」「することができる」と、別の文では「してはならない」と書くと、読み手はどちらに従えばよいか分かりません。後から足した条や、別の文書から写した文で起きます。条件や例外を書き分けていれば、二つの文の中身の語が違うので、ここには出ません。
14
+ en: The same act by the same party written as "must" or "may" in one sentence and "must not" in another leaves the reader unable to tell which to follow. It happens when a clause is added later or copied from another document. A condition or an exception changes the sentence's words, so a carefully scoped pair is not reported.
15
+
16
+ message:
17
+ ja: 「{marker}」と書いていますが、{otherLine} 行目では同じ行為を「{other}」と書いています
18
+ en: 'This says "{marker}", but line {otherLine} says "{other}" about the same act'
19
+
20
+ how_to_fix:
21
+ ja: どちらが正しいかを決め、もう一方を消すか、条件や例外(「書面で承諾を得た場合を除き」)を書き足して二つの範囲を分けてください。
22
+ en: Decide which one holds and delete the other, or add the condition or exception ("unless the Customer agrees in writing") that separates them.
23
+
24
+ placeholders:
25
+ marker:
26
+ ja: してはならない
27
+ en: must not
28
+ other:
29
+ ja: することができる
30
+ en: may
31
+ otherLine:
32
+ ja: 〇
33
+ en: N
34
+
35
+ levels: { strict: error, normal: warning, relaxed: info }
36
+
37
+ use_for: [business, technical, blog, legal, docs, academic, literature, speech]
38
+
39
+ group: structure
40
+ summary:
41
+ ja: 同じ主語の同じ行為を、ある文では義務や許可に、別の文では禁止にしている所
42
+ en: The same act by the same party required or allowed in one sentence and forbidden in another
43
+ example:
44
+ ja:
45
+ before: |
46
+ ## 第5条(再委託)
47
+
48
+ 受託者は、本件業務を第三者に委託してはならない。
49
+
50
+ ## 第9条(体制)
51
+
52
+ 受託者は、本件業務を第三者に委託することができる。
53
+ after: |
54
+ ## 第5条(再委託)
55
+
56
+ 受託者は、委託者の書面による承諾を得た場合を除き、本件業務を第三者に委託してはならない。
57
+
58
+ ## 第9条(体制)
59
+
60
+ 受託者は、委託者の書面による承諾を得て、本件業務を第三者に委託することができる。
61
+ en:
62
+ before: |
63
+ ## 5. Confidentiality
64
+
65
+ The Supplier must not disclose Confidential Information to third parties.
66
+
67
+ ## 9. Advisers
68
+
69
+ The Supplier may disclose Confidential Information to third parties.
70
+ after: |
71
+ ## 5. Confidentiality
72
+
73
+ The Supplier must not disclose Confidential Information to third parties.
74
+
75
+ ## 9. Advisers
76
+
77
+ The Supplier may disclose Confidential Information to its legal advisers.
78
+
79
+ not_flagged:
80
+ ja: 中身の語(名詞・動詞・形容詞)がまったく同じ二つの文だけを比べます。様相の語を二つ以上持つ文と、中身の語が一つしか無い文は見ません。「しなければならない」と「することができる」は食い違いと見ません。
81
+ en: Only two sentences with exactly the same content words (nouns, verbs, adjectives) are compared. A sentence with two or more modal markers, or with fewer than two content words, is not checked. "Must" and "may" are not counted as a conflict.
82
+ rewrite:
83
+ ja:
84
+ direction: どちらの文が正しいかを書き手に確かめてください。両方が正しいなら、それぞれの条件や例外を本文から書き足して範囲を分けます。本文に条件が無ければ作らず、書き手に聞きます。
85
+ pairs:
86
+ - before: 受託者は、本件業務を第三者に委託してはならない。(第9条)受託者は、本件業務を第三者に委託することができる。
87
+ after: 受託者は、委託者の書面による承諾を得た場合を除き、本件業務を第三者に委託してはならない。(第9条)受託者は、委託者の書面による承諾を得て、本件業務を第三者に委託することができる。(承諾の条件が本文にあるとき)
88
+ - before: 利用者は、本サービスを商用に使ってはならない。(第12条)利用者は、本サービスを商用に使うことができる。
89
+ after: 利用者は、本サービスを商用に使ってはならない。(第12条を消す。書き手が禁止を正しいとしたとき)
90
+ keep:
91
+ - 正しいとされた方の決まりの中身
92
+ avoid:
93
+ - 本文に無い条件や例外を作る
94
+ - どちらが正しいかを書き手に聞かずに決める
95
+ en:
96
+ direction: Ask the writer which sentence holds. If both do, separate them with the condition or exception the text gives; if the text gives none, ask rather than invent one.
97
+ pairs:
98
+ - before: The Supplier must not disclose Confidential Information to third parties. (Section 9) The Supplier may disclose Confidential Information to third parties.
99
+ after: The Supplier must not disclose Confidential Information to third parties. (Section 9) The Supplier may disclose Confidential Information to its legal advisers. (when Section 9 is about advisers)
100
+ - before: Users must not resell the Service. (Section 12) Users may resell the Service.
101
+ after: Users must not resell the Service. (Section 12 deleted, when the writer confirms the ban)
102
+ keep:
103
+ - what the rule that holds says
104
+ avoid:
105
+ - inventing a condition or exception
106
+ - picking a side without asking the writer