chaffjs 0.20.0 → 0.21.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.
- package/README.md +5 -4
- package/dist/api.d.ts +16 -1
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js.map +1 -1
- package/dist/cli-text.d.ts +2 -0
- package/dist/cli-text.d.ts.map +1 -1
- package/dist/cli-text.js +14 -5
- package/dist/cli-text.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +4 -0
- package/dist/cli.js.map +1 -1
- package/dist/command-help.d.ts +7 -0
- package/dist/command-help.d.ts.map +1 -0
- package/dist/command-help.js +18 -0
- package/dist/command-help.js.map +1 -0
- package/dist/commands/eval.js +2 -2
- package/dist/commands/eval.js.map +1 -1
- package/dist/commands/fix-plan.d.ts.map +1 -1
- package/dist/commands/fix-plan.js +11 -1
- package/dist/commands/fix-plan.js.map +1 -1
- package/dist/commands/help.d.ts +4 -0
- package/dist/commands/help.d.ts.map +1 -0
- package/dist/commands/help.js +7 -0
- package/dist/commands/help.js.map +1 -0
- package/dist/config/load.d.ts +2 -0
- package/dist/config/load.d.ts.map +1 -1
- package/dist/config/load.js +1 -0
- package/dist/config/load.js.map +1 -1
- package/dist/config/option-problems.js +2 -2
- package/dist/config/option-problems.js.map +1 -1
- package/dist/config/rule-problems.js +2 -2
- package/dist/config/rule-problems.js.map +1 -1
- package/dist/custom/checked.d.ts +9 -0
- package/dist/custom/checked.d.ts.map +1 -0
- package/dist/custom/checked.js +3 -0
- package/dist/custom/checked.js.map +1 -0
- package/dist/custom/dsl-fields.d.ts +27 -0
- package/dist/custom/dsl-fields.d.ts.map +1 -0
- package/dist/custom/dsl-fields.js +86 -0
- package/dist/custom/dsl-fields.js.map +1 -0
- package/dist/custom/load.d.ts.map +1 -1
- package/dist/custom/load.js +2 -0
- package/dist/custom/load.js.map +1 -1
- package/dist/custom/parse.d.ts +14 -3
- package/dist/custom/parse.d.ts.map +1 -1
- package/dist/custom/parse.js +44 -40
- package/dist/custom/parse.js.map +1 -1
- package/dist/custom/problems.d.ts.map +1 -1
- package/dist/custom/problems.js +11 -1
- package/dist/custom/problems.js.map +1 -1
- package/dist/detectors/blank-structure.d.ts.map +1 -1
- package/dist/detectors/blank-structure.js +6 -4
- package/dist/detectors/blank-structure.js.map +1 -1
- package/dist/detectors/clause-shape.d.ts +22 -0
- package/dist/detectors/clause-shape.d.ts.map +1 -0
- package/dist/detectors/clause-shape.js +149 -0
- package/dist/detectors/clause-shape.js.map +1 -0
- package/dist/detectors/code-fences.d.ts +34 -0
- package/dist/detectors/code-fences.d.ts.map +1 -0
- package/dist/detectors/code-fences.js +100 -0
- package/dist/detectors/code-fences.js.map +1 -0
- package/dist/detectors/cross-definitions.d.ts +4 -0
- package/dist/detectors/cross-definitions.d.ts.map +1 -0
- package/dist/detectors/cross-definitions.js +43 -0
- package/dist/detectors/cross-definitions.js.map +1 -0
- package/dist/detectors/cross-facts.d.ts +4 -0
- package/dist/detectors/cross-facts.d.ts.map +1 -0
- package/dist/detectors/cross-facts.js +53 -0
- package/dist/detectors/cross-facts.js.map +1 -0
- package/dist/detectors/cross-registry/cross-doc-duplicate-definition.d.ts +3 -0
- package/dist/detectors/cross-registry/cross-doc-duplicate-definition.d.ts.map +1 -0
- package/dist/detectors/cross-registry/cross-doc-duplicate-definition.js +3 -0
- package/dist/detectors/cross-registry/cross-doc-duplicate-definition.js.map +1 -0
- package/dist/detectors/cross-registry/cross-doc-fact-conflict.d.ts +3 -0
- package/dist/detectors/cross-registry/cross-doc-fact-conflict.d.ts.map +1 -0
- package/dist/detectors/cross-registry/cross-doc-fact-conflict.js +3 -0
- package/dist/detectors/cross-registry/cross-doc-fact-conflict.js.map +1 -0
- package/dist/detectors/custom.d.ts.map +1 -1
- package/dist/detectors/custom.js +4 -1
- package/dist/detectors/custom.js.map +1 -1
- package/dist/detectors/defined-term-form.d.ts +25 -0
- package/dist/detectors/defined-term-form.d.ts.map +1 -0
- package/dist/detectors/defined-term-form.js +170 -0
- package/dist/detectors/defined-term-form.js.map +1 -0
- package/dist/detectors/email-letter.d.ts +46 -0
- package/dist/detectors/email-letter.d.ts.map +1 -0
- package/dist/detectors/email-letter.js +234 -0
- package/dist/detectors/email-letter.js.map +1 -0
- package/dist/detectors/impossible-date.d.ts +20 -0
- package/dist/detectors/impossible-date.d.ts.map +1 -0
- package/dist/detectors/impossible-date.js +105 -0
- package/dist/detectors/impossible-date.js.map +1 -0
- package/dist/detectors/impossible-time.d.ts +18 -0
- package/dist/detectors/impossible-time.d.ts.map +1 -0
- package/dist/detectors/impossible-time.js +116 -0
- package/dist/detectors/impossible-time.js.map +1 -0
- package/dist/detectors/link-shape.d.ts +11 -0
- package/dist/detectors/link-shape.d.ts.map +1 -0
- package/dist/detectors/link-shape.js +56 -0
- package/dist/detectors/link-shape.js.map +1 -0
- package/dist/detectors/mark-shape.d.ts +53 -0
- package/dist/detectors/mark-shape.d.ts.map +1 -0
- package/dist/detectors/mark-shape.js +160 -0
- package/dist/detectors/mark-shape.js.map +1 -0
- package/dist/detectors/registry/adverb-polarity.d.ts +3 -0
- package/dist/detectors/registry/adverb-polarity.d.ts.map +1 -0
- package/dist/detectors/registry/adverb-polarity.js +3 -0
- package/dist/detectors/registry/adverb-polarity.js.map +1 -0
- package/dist/detectors/registry/attachment-missing.d.ts +3 -0
- package/dist/detectors/registry/attachment-missing.d.ts.map +1 -0
- package/dist/detectors/registry/attachment-missing.js +3 -0
- package/dist/detectors/registry/attachment-missing.js.map +1 -0
- package/dist/detectors/registry/bare-url-mix.d.ts +3 -0
- package/dist/detectors/registry/bare-url-mix.d.ts.map +1 -0
- package/dist/detectors/registry/bare-url-mix.js +3 -0
- package/dist/detectors/registry/bare-url-mix.js.map +1 -0
- package/dist/detectors/registry/caps-shouting.d.ts +3 -0
- package/dist/detectors/registry/caps-shouting.d.ts.map +1 -0
- package/dist/detectors/registry/caps-shouting.js +3 -0
- package/dist/detectors/registry/caps-shouting.js.map +1 -0
- package/dist/detectors/registry/code-fence-language.d.ts +3 -0
- package/dist/detectors/registry/code-fence-language.d.ts.map +1 -0
- package/dist/detectors/registry/code-fence-language.js +3 -0
- package/dist/detectors/registry/code-fence-language.js.map +1 -0
- package/dist/detectors/registry/defined-name-repeated.d.ts +3 -0
- package/dist/detectors/registry/defined-name-repeated.d.ts.map +1 -0
- package/dist/detectors/registry/defined-name-repeated.js +3 -0
- package/dist/detectors/registry/defined-name-repeated.js.map +1 -0
- package/dist/detectors/registry/defined-term-form.d.ts +3 -0
- package/dist/detectors/registry/defined-term-form.d.ts.map +1 -0
- package/dist/detectors/registry/defined-term-form.js +3 -0
- package/dist/detectors/registry/defined-term-form.js.map +1 -0
- package/dist/detectors/registry/email-frame.d.ts +3 -0
- package/dist/detectors/registry/email-frame.d.ts.map +1 -0
- package/dist/detectors/registry/email-frame.js +3 -0
- package/dist/detectors/registry/email-frame.js.map +1 -0
- package/dist/detectors/registry/email-subject.d.ts +3 -0
- package/dist/detectors/registry/email-subject.d.ts.map +1 -0
- package/dist/detectors/registry/email-subject.js +3 -0
- package/dist/detectors/registry/email-subject.js.map +1 -0
- package/dist/detectors/registry/ending-run.d.ts +3 -0
- package/dist/detectors/registry/ending-run.d.ts.map +1 -0
- package/dist/detectors/registry/ending-run.js +3 -0
- package/dist/detectors/registry/ending-run.js.map +1 -0
- package/dist/detectors/registry/heading-command.d.ts +3 -0
- package/dist/detectors/registry/heading-command.d.ts.map +1 -0
- package/dist/detectors/registry/heading-command.js +3 -0
- package/dist/detectors/registry/heading-command.js.map +1 -0
- package/dist/detectors/registry/hyphen-dash.d.ts +3 -0
- package/dist/detectors/registry/hyphen-dash.d.ts.map +1 -0
- package/dist/detectors/registry/hyphen-dash.js +3 -0
- package/dist/detectors/registry/hyphen-dash.js.map +1 -0
- package/dist/detectors/registry/image-file-name-alt.d.ts +3 -0
- package/dist/detectors/registry/image-file-name-alt.d.ts.map +1 -0
- package/dist/detectors/registry/image-file-name-alt.js +3 -0
- package/dist/detectors/registry/image-file-name-alt.js.map +1 -0
- package/dist/detectors/registry/impossible-date.d.ts +3 -0
- package/dist/detectors/registry/impossible-date.d.ts.map +1 -0
- package/dist/detectors/registry/impossible-date.js +3 -0
- package/dist/detectors/registry/impossible-date.js.map +1 -0
- package/dist/detectors/registry/impossible-time.d.ts +3 -0
- package/dist/detectors/registry/impossible-time.d.ts.map +1 -0
- package/dist/detectors/registry/impossible-time.js +3 -0
- package/dist/detectors/registry/impossible-time.js.map +1 -0
- package/dist/detectors/registry/latin-abbreviation.d.ts +3 -0
- package/dist/detectors/registry/latin-abbreviation.d.ts.map +1 -0
- package/dist/detectors/registry/latin-abbreviation.js +3 -0
- package/dist/detectors/registry/latin-abbreviation.js.map +1 -0
- package/dist/detectors/registry/link-text-url-mismatch.d.ts +3 -0
- package/dist/detectors/registry/link-text-url-mismatch.d.ts.map +1 -0
- package/dist/detectors/registry/link-text-url-mismatch.js +3 -0
- package/dist/detectors/registry/link-text-url-mismatch.js.map +1 -0
- package/dist/detectors/registry/mark-consistency.d.ts +3 -0
- package/dist/detectors/registry/mark-consistency.d.ts.map +1 -0
- package/dist/detectors/registry/mark-consistency.js +3 -0
- package/dist/detectors/registry/mark-consistency.js.map +1 -0
- package/dist/detectors/registry/origin-particle.d.ts +3 -0
- package/dist/detectors/registry/origin-particle.d.ts.map +1 -0
- package/dist/detectors/registry/origin-particle.js +3 -0
- package/dist/detectors/registry/origin-particle.js.map +1 -0
- package/dist/detectors/registry/request-without-deadline.d.ts +3 -0
- package/dist/detectors/registry/request-without-deadline.d.ts.map +1 -0
- package/dist/detectors/registry/request-without-deadline.js +3 -0
- package/dist/detectors/registry/request-without-deadline.js.map +1 -0
- package/dist/detectors/registry/sentence-spacing.d.ts +3 -0
- package/dist/detectors/registry/sentence-spacing.d.ts.map +1 -0
- package/dist/detectors/registry/sentence-spacing.js +3 -0
- package/dist/detectors/registry/sentence-spacing.js.map +1 -0
- package/dist/detectors/registry/shell-prompt.d.ts +3 -0
- package/dist/detectors/registry/shell-prompt.d.ts.map +1 -0
- package/dist/detectors/registry/shell-prompt.js +3 -0
- package/dist/detectors/registry/shell-prompt.js.map +1 -0
- package/dist/detectors/registry/step-statement.d.ts +3 -0
- package/dist/detectors/registry/step-statement.d.ts.map +1 -0
- package/dist/detectors/registry/step-statement.js +3 -0
- package/dist/detectors/registry/step-statement.js.map +1 -0
- package/dist/detectors/registry/unpaired-parallel.d.ts +3 -0
- package/dist/detectors/registry/unpaired-parallel.d.ts.map +1 -0
- package/dist/detectors/registry/unpaired-parallel.js +3 -0
- package/dist/detectors/registry/unpaired-parallel.js.map +1 -0
- package/dist/detectors/request-owner.d.ts +23 -0
- package/dist/detectors/request-owner.d.ts.map +1 -0
- package/dist/detectors/request-owner.js +110 -0
- package/dist/detectors/request-owner.js.map +1 -0
- package/dist/detectors/technical-docs.d.ts +32 -0
- package/dist/detectors/technical-docs.d.ts.map +1 -0
- package/dist/detectors/technical-docs.js +199 -0
- package/dist/detectors/technical-docs.js.map +1 -0
- package/dist/extension/pack-read.d.ts +21 -0
- package/dist/extension/pack-read.d.ts.map +1 -0
- package/dist/extension/pack-read.js +117 -0
- package/dist/extension/pack-read.js.map +1 -0
- package/dist/extension/plugin-load.d.ts.map +1 -1
- package/dist/extension/plugin-load.js +44 -10
- package/dist/extension/plugin-load.js.map +1 -1
- package/dist/extension/plugin-parse.d.ts.map +1 -1
- package/dist/extension/plugin-parse.js +10 -3
- package/dist/extension/plugin-parse.js.map +1 -1
- package/dist/facts/address-values.d.ts +5 -0
- package/dist/facts/address-values.d.ts.map +1 -0
- package/dist/facts/address-values.js +64 -0
- package/dist/facts/address-values.js.map +1 -0
- package/dist/facts/cross-facts.d.ts +20 -0
- package/dist/facts/cross-facts.d.ts.map +1 -0
- package/dist/facts/cross-facts.js +41 -0
- package/dist/facts/cross-facts.js.map +1 -0
- package/dist/fix-plan/chosen-depth.d.ts +10 -0
- package/dist/fix-plan/chosen-depth.d.ts.map +1 -0
- package/dist/fix-plan/chosen-depth.js +24 -0
- package/dist/fix-plan/chosen-depth.js.map +1 -0
- package/dist/fix-plan/mode.d.ts +13 -4
- package/dist/fix-plan/mode.d.ts.map +1 -1
- package/dist/fix-plan/mode.js +38 -7
- package/dist/fix-plan/mode.js.map +1 -1
- package/dist/fix-plan/plan.d.ts +20 -0
- package/dist/fix-plan/plan.d.ts.map +1 -1
- package/dist/fix-plan/plan.js +23 -5
- package/dist/fix-plan/plan.js.map +1 -1
- package/dist/fix-plan/render.d.ts.map +1 -1
- package/dist/fix-plan/render.js +24 -0
- package/dist/fix-plan/render.js.map +1 -1
- package/dist/fix-plan/text.d.ts +8 -0
- package/dist/fix-plan/text.d.ts.map +1 -1
- package/dist/fix-plan/text.js +36 -10
- package/dist/fix-plan/text.js.map +1 -1
- package/dist/genre-load.d.ts +1 -1
- package/dist/genre-load.d.ts.map +1 -1
- package/dist/genre-load.js +7 -4
- package/dist/genre-load.js.map +1 -1
- package/dist/genre-parse.d.ts +6 -0
- package/dist/genre-parse.d.ts.map +1 -1
- package/dist/genre-parse.js +18 -0
- package/dist/genre-parse.js.map +1 -1
- package/dist/init.js +10 -10
- package/dist/init.js.map +1 -1
- package/dist/known-genres.d.ts +8 -0
- package/dist/known-genres.d.ts.map +1 -0
- package/dist/known-genres.js +17 -0
- package/dist/known-genres.js.map +1 -0
- package/dist/link-shape.d.ts +20 -0
- package/dist/link-shape.d.ts.map +1 -0
- package/dist/link-shape.js +58 -0
- package/dist/link-shape.js.map +1 -0
- package/dist/reasons.d.ts.map +1 -1
- package/dist/reasons.js +15 -4
- package/dist/reasons.js.map +1 -1
- package/dist/render/explain.d.ts.map +1 -1
- package/dist/render/explain.js +11 -2
- package/dist/render/explain.js.map +1 -1
- package/dist/render/friendly.js +1 -1
- package/dist/render/friendly.js.map +1 -1
- package/dist/render/rules-json.d.ts.map +1 -1
- package/dist/render/rules-json.js +12 -3
- package/dist/render/rules-json.js.map +1 -1
- package/dist/render/rules-table.js +6 -6
- package/dist/render/rules-table.js.map +1 -1
- package/dist/render/semantic.js +2 -2
- package/dist/render/semantic.js.map +1 -1
- package/dist/render/suppressions.js +2 -2
- package/dist/render/suppressions.js.map +1 -1
- package/dist/rewrite-depth.d.ts +22 -0
- package/dist/rewrite-depth.d.ts.map +1 -0
- package/dist/rewrite-depth.js +42 -0
- package/dist/rewrite-depth.js.map +1 -0
- package/dist/rule-fields.d.ts +23 -0
- package/dist/rule-fields.d.ts.map +1 -0
- package/dist/rule-fields.js +64 -0
- package/dist/rule-fields.js.map +1 -0
- package/dist/rule-guide.d.ts +3 -0
- package/dist/rule-guide.d.ts.map +1 -1
- package/dist/rule-guide.js +6 -0
- package/dist/rule-guide.js.map +1 -1
- package/dist/rule-load.d.ts.map +1 -1
- package/dist/rule-load.js +13 -5
- package/dist/rule-load.js.map +1 -1
- package/dist/rule-offs.d.ts +14 -0
- package/dist/rule-offs.d.ts.map +1 -0
- package/dist/rule-offs.js +45 -0
- package/dist/rule-offs.js.map +1 -0
- package/dist/structure/build.d.ts.map +1 -1
- package/dist/structure/build.js +14 -1
- package/dist/structure/build.js.map +1 -1
- package/dist/structure/cross-definitions.d.ts +23 -0
- package/dist/structure/cross-definitions.d.ts.map +1 -0
- package/dist/structure/cross-definitions.js +34 -0
- package/dist/structure/cross-definitions.js.map +1 -0
- package/genres.yaml +14 -313
- package/package.json +3 -3
- package/rules/absolute-exception.yaml +3 -1
- package/rules/abstract-length.yaml +7 -1
- package/rules/acronym-expansion-conflict.yaml +2 -1
- package/rules/adverb-overuse.yaml +7 -1
- package/rules/adverb-without-negation.yaml +60 -0
- package/rules/adversative-ga-repeat.yaml +2 -1
- package/rules/agentless-passive.yaml +10 -1
- package/rules/agreement-slip.yaml +4 -1
- package/rules/ai-generated-composite.yaml +6 -1
- package/rules/ai-structure.yaml +8 -2
- package/rules/ai-tell.yaml +7 -1
- package/rules/all-caps-shouting.yaml +61 -0
- package/rules/announced-count-mismatch.yaml +3 -1
- package/rules/announcing-opener.yaml +7 -1
- package/rules/article-sound.yaml +6 -2
- package/rules/assistant-residue.yaml +4 -1
- package/rules/attachment-not-attached.yaml +112 -0
- package/rules/baito-keigo.yaml +64 -0
- package/rules/bare-url-mix.yaml +86 -0
- package/rules/bold-density.yaml +1 -0
- package/rules/bold-label-list.yaml +9 -1
- package/rules/bracket-nesting.yaml +2 -1
- package/rules/bracket-width-consistency.yaml +64 -0
- package/rules/broken-link.yaml +1 -1
- package/rules/chat-citation-residue.yaml +2 -1
- package/rules/citation-reference-mismatch.yaml +7 -1
- package/rules/citation-style-mix.yaml +7 -1
- package/rules/clause-chain.yaml +6 -1
- package/rules/closing-cliche.yaml +7 -0
- package/rules/code-fence-language-mix.yaml +176 -0
- package/rules/colloquial-opener.yaml +62 -0
- package/rules/colon-lead-in.yaml +7 -1
- package/rules/concrete-evidence-density.yaml +6 -0
- package/rules/contraction-consistency.yaml +4 -1
- package/rules/contrast-framing.yaml +7 -1
- package/rules/cross-doc-duplicate-definition.yaml +70 -0
- package/rules/cross-doc-fact-conflict.yaml +64 -0
- package/rules/cushion-phrase-density.yaml +8 -1
- package/rules/dangling-figure-reference.yaml +3 -1
- package/rules/dangling-reference.yaml +3 -1
- package/rules/date-format-consistency.yaml +3 -2
- package/rules/date-order.yaml +3 -1
- package/rules/date-range-reversed.yaml +3 -1
- package/rules/date-weekday-mismatch.yaml +3 -1
- package/rules/date-without-year.yaml +4 -3
- package/rules/defined-name-repeated.yaml +97 -0
- package/rules/defined-term-form.yaml +113 -0
- package/rules/demonstrative-opener-run.yaml +2 -1
- package/rules/double-keigo.yaml +6 -1
- package/rules/double-negative.yaml +5 -1
- package/rules/doubled-nado.yaml +2 -1
- package/rules/doubled-punctuation.yaml +1 -1
- package/rules/doubled-word.yaml +4 -1
- package/rules/duplicate-definition.yaml +3 -1
- package/rules/duplicate-heading.yaml +1 -1
- package/rules/duration-mismatch.yaml +2 -1
- package/rules/elapsed-years-mismatch.yaml +4 -1
- package/rules/email-greeting-closing.yaml +122 -0
- package/rules/email-subject-length.yaml +112 -0
- package/rules/emoji-density.yaml +3 -1
- package/rules/emoji-heading.yaml +7 -1
- package/rules/empty-intensifier.yaml +4 -0
- package/rules/empty-list-item.yaml +2 -1
- package/rules/empty-section.yaml +1 -1
- package/rules/empty-table-cell.yaml +2 -1
- package/rules/excessive-hedging.yaml +7 -1
- package/rules/exclamation-width-consistency.yaml +64 -0
- package/rules/expletive-construction.yaml +7 -1
- package/rules/fact-conflict.yaml +4 -1
- package/rules/figure-reference-order.yaml +7 -1
- package/rules/fullwidth-alnum-consistency.yaml +2 -2
- package/rules/hankaku-kana.yaml +1 -1
- package/rules/heading-command-missing.yaml +109 -0
- package/rules/heading-echo.yaml +6 -1
- package/rules/heading-level-skip.yaml +3 -3
- package/rules/heading-numbering-mix.yaml +4 -3
- package/rules/hiragana-fukushi.yaml +4 -1
- package/rules/homophone-slip.yaml +5 -1
- package/rules/humble-for-others.yaml +63 -0
- package/rules/hyphen-as-dash.yaml +59 -0
- package/rules/idiom-misuse.yaml +4 -1
- package/rules/image-file-name-alt.yaml +83 -0
- package/rules/impossible-date.yaml +79 -0
- package/rules/impossible-time.yaml +76 -0
- package/rules/internal-jargon.yaml +1 -1
- package/rules/invisible-character.yaml +1 -1
- package/rules/katakana-density.yaml +2 -1
- package/rules/katakana-long-vowel.yaml +1 -1
- package/rules/known-misspelling.yaml +2 -1
- package/rules/kutoten-consistency.yaml +1 -1
- package/rules/latin-abbreviation-form.yaml +58 -0
- package/rules/latin-spacing.yaml +6 -2
- package/rules/link-text-url-mismatch.yaml +72 -0
- package/rules/list-item-form-mix.yaml +7 -1
- package/rules/max-kanji-continuous.yaml +10 -2
- package/rules/max-paragraph-length.yaml +4 -1
- package/rules/max-sentence-length.yaml +29 -21
- package/rules/max-ten.yaml +4 -1
- package/rules/misconversion.yaml +2 -1
- package/rules/modal-conflict.yaml +2 -1
- package/rules/name-variant.yaml +4 -3
- package/rules/ngram-repetition.yaml +5 -0
- package/rules/no-doubled-joshi.yaml +5 -1
- package/rules/no-em-dash.yaml +4 -1
- package/rules/no-lead.yaml +6 -1
- package/rules/no-mixed-desumasu.yaml +5 -2
- package/rules/no-nakaguro-parallel.yaml +3 -0
- package/rules/nominalization.yaml +5 -1
- package/rules/number-style-consistency.yaml +6 -1
- package/rules/number-without-unit.yaml +2 -1
- package/rules/numbering-gap.yaml +1 -1
- package/rules/one-sentence-paragraph-run.yaml +5 -1
- package/rules/orthographic-variant.yaml +4 -1
- package/rules/outside-announced-list.yaml +2 -1
- package/rules/oxford-comma-consistency.yaml +3 -1
- package/rules/padded-intro.yaml +7 -0
- package/rules/paragraph-length-variance.yaml +7 -1
- package/rules/paragraph-restatement.yaml +6 -1
- package/rules/percent-sum-mismatch.yaml +3 -1
- package/rules/person-consistency.yaml +4 -1
- package/rules/preamble-length.yaml +6 -0
- package/rules/preferred-term.yaml +1 -1
- package/rules/proper-noun-density.yaml +8 -1
- package/rules/quote-style-consistency.yaml +66 -0
- package/rules/ra-nuki.yaml +4 -1
- package/rules/redundant-expression.yaml +4 -1
- package/rules/reference-title-mismatch.yaml +4 -3
- package/rules/reference-topic-missing.yaml +2 -1
- package/rules/relative-date-mismatch.yaml +2 -1
- package/rules/repeated-conjunction.yaml +4 -1
- package/rules/repeated-sentence-ending.yaml +62 -0
- package/rules/repeated-sentence-head.yaml +4 -0
- package/rules/request-without-deadline.yaml +92 -0
- package/rules/required-sections.yaml +1 -1
- package/rules/requirement-modal.yaml +1 -1
- package/rules/requirement-smell.yaml +12 -4
- package/rules/rule-of-three.yaml +8 -1
- package/rules/sasete-itadaku.yaml +7 -1
- package/rules/section-length-uniformity.yaml +7 -1
- package/rules/sentence-initial-conjunction-run.yaml +5 -1
- package/rules/sentence-initial-so.yaml +6 -1
- package/rules/sentence-rhythm.yaml +8 -1
- package/rules/sentence-spacing-consistency.yaml +63 -0
- package/rules/shell-prompt-mix.yaml +128 -0
- package/rules/space-before-punctuation.yaml +1 -1
- package/rules/spelling-consistency.yaml +3 -1
- package/rules/step-statement-mix.yaml +76 -0
- package/rules/stock-transition.yaml +8 -1
- package/rules/stray-space.yaml +2 -2
- package/rules/summary-fact-mismatch.yaml +4 -1
- package/rules/table-header-variant.yaml +2 -1
- package/rules/taigen-dome-in-prose.yaml +6 -0
- package/rules/tari-unpaired.yaml +58 -0
- package/rules/teki-overuse.yaml +2 -1
- package/rules/title-case-consistency.yaml +1 -1
- package/rules/title-length.yaml +7 -1
- package/rules/topic-predicate-distance.yaml +6 -1
- package/rules/total-mismatch.yaml +3 -1
- package/rules/translationese-density.yaml +4 -1
- package/rules/unbalanced-bracket.yaml +3 -3
- package/rules/undefined-acronym.yaml +8 -1
- package/rules/unfilled-placeholder.yaml +1 -1
- package/rules/unit-mismatch.yaml +2 -1
- package/rules/unknown-word.yaml +4 -1
- package/rules/unqualified-superlative.yaml +6 -1
- package/rules/unused-definition.yaml +4 -3
- package/rules/url-run-on.yaml +1 -1
- package/rules/use-before-definition.yaml +4 -3
- package/rules/vague-figure-reference.yaml +3 -1
- package/rules/vague-link-text.yaml +2 -1
- package/rules/vague-word-density.yaml +2 -1
- package/rules/very-adjective.yaml +5 -1
- package/rules/weasel-word.yaml +6 -1
- package/rules/wordy-phrase.yaml +6 -1
- package/rules/yori-as-from.yaml +61 -0
- package/src/api.ts +13 -1
- package/src/cli-text.ts +18 -7
- package/src/cli.ts +3 -0
- package/src/command-help.ts +26 -0
- package/src/commands/eval.ts +2 -2
- package/src/commands/fix-plan.ts +13 -1
- package/src/commands/help.ts +8 -0
- package/src/config/load.ts +3 -0
- package/src/config/option-problems.ts +2 -2
- package/src/config/rule-problems.ts +2 -2
- package/src/custom/checked.ts +8 -0
- package/src/custom/dsl-fields.ts +102 -0
- package/src/custom/load.ts +2 -0
- package/src/custom/parse.ts +72 -50
- package/src/custom/problems.ts +18 -2
- package/src/detectors/blank-structure.ts +12 -4
- package/src/detectors/clause-shape.ts +199 -0
- package/src/detectors/code-fences.ts +113 -0
- package/src/detectors/cross-definitions.ts +49 -0
- package/src/detectors/cross-facts.ts +60 -0
- package/src/detectors/cross-registry/cross-doc-duplicate-definition.ts +4 -0
- package/src/detectors/cross-registry/cross-doc-fact-conflict.ts +4 -0
- package/src/detectors/custom.ts +10 -2
- package/src/detectors/defined-term-form.ts +200 -0
- package/src/detectors/email-letter.ts +262 -0
- package/src/detectors/impossible-date.ts +141 -0
- package/src/detectors/impossible-time.ts +151 -0
- package/src/detectors/link-shape.ts +70 -0
- package/src/detectors/mark-shape.ts +202 -0
- package/src/detectors/registry/adverb-polarity.ts +4 -0
- package/src/detectors/registry/attachment-missing.ts +4 -0
- package/src/detectors/registry/bare-url-mix.ts +4 -0
- package/src/detectors/registry/caps-shouting.ts +4 -0
- package/src/detectors/registry/code-fence-language.ts +4 -0
- package/src/detectors/registry/defined-name-repeated.ts +4 -0
- package/src/detectors/registry/defined-term-form.ts +4 -0
- package/src/detectors/registry/email-frame.ts +4 -0
- package/src/detectors/registry/email-subject.ts +4 -0
- package/src/detectors/registry/ending-run.ts +4 -0
- package/src/detectors/registry/heading-command.ts +4 -0
- package/src/detectors/registry/hyphen-dash.ts +4 -0
- package/src/detectors/registry/image-file-name-alt.ts +4 -0
- package/src/detectors/registry/impossible-date.ts +4 -0
- package/src/detectors/registry/impossible-time.ts +4 -0
- package/src/detectors/registry/latin-abbreviation.ts +4 -0
- package/src/detectors/registry/link-text-url-mismatch.ts +4 -0
- package/src/detectors/registry/mark-consistency.ts +4 -0
- package/src/detectors/registry/origin-particle.ts +4 -0
- package/src/detectors/registry/request-without-deadline.ts +4 -0
- package/src/detectors/registry/sentence-spacing.ts +4 -0
- package/src/detectors/registry/shell-prompt.ts +4 -0
- package/src/detectors/registry/step-statement.ts +4 -0
- package/src/detectors/registry/unpaired-parallel.ts +4 -0
- package/src/detectors/request-owner.ts +141 -0
- package/src/detectors/technical-docs.ts +230 -0
- package/src/extension/pack-read.ts +128 -0
- package/src/extension/plugin-load.ts +49 -9
- package/src/extension/plugin-parse.ts +10 -3
- package/src/facts/address-values.ts +74 -0
- package/src/facts/cross-facts.ts +54 -0
- package/src/fix-plan/chosen-depth.ts +28 -0
- package/src/fix-plan/mode.ts +57 -11
- package/src/fix-plan/plan.ts +37 -5
- package/src/fix-plan/render.ts +24 -0
- package/src/fix-plan/text.ts +47 -10
- package/src/genre-load.ts +7 -4
- package/src/genre-parse.ts +19 -0
- package/src/init.ts +10 -10
- package/src/known-genres.ts +19 -0
- package/src/link-shape.ts +62 -0
- package/src/reasons.ts +16 -4
- package/src/render/explain.ts +14 -2
- package/src/render/friendly.ts +1 -1
- package/src/render/rules-json.ts +14 -3
- package/src/render/rules-table.ts +6 -6
- package/src/render/semantic.ts +2 -2
- package/src/render/suppressions.ts +2 -2
- package/src/rewrite-depth.ts +60 -0
- package/src/rule-fields.ts +95 -0
- package/src/rule-guide.ts +9 -0
- package/src/rule-load.ts +10 -4
- package/src/rule-offs.ts +50 -0
- package/src/structure/build.ts +21 -1
- package/src/structure/cross-definitions.ts +60 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type Vote } from "../cross-votes.ts";
|
|
2
|
+
/** A definition as a file writes it: the term, what follows it up to the end of the sentence, and where it is. */
|
|
3
|
+
export type WrittenDefinition = {
|
|
4
|
+
readonly term: string;
|
|
5
|
+
readonly body: string;
|
|
6
|
+
readonly offset: number;
|
|
7
|
+
};
|
|
8
|
+
export type FileDefinitions = {
|
|
9
|
+
readonly path: string;
|
|
10
|
+
readonly definitions: readonly WrittenDefinition[];
|
|
11
|
+
};
|
|
12
|
+
/** A file that defines a term unlike most files that define it, and one file of the usual wording. */
|
|
13
|
+
export type DefinitionOutOfStep = {
|
|
14
|
+
readonly path: string;
|
|
15
|
+
readonly definition: WrittenDefinition;
|
|
16
|
+
readonly usual: Vote<WrittenDefinition>;
|
|
17
|
+
readonly files: number;
|
|
18
|
+
};
|
|
19
|
+
/** The wording compared: width, spaces and the punctuation at the ends evened out. */
|
|
20
|
+
export declare const definitionKey: (body: string) => string;
|
|
21
|
+
/** The files that define a term in other words than most files of the run that define it. */
|
|
22
|
+
export declare const definitionsOutOfStep: (files: readonly FileDefinitions[]) => DefinitionOutOfStep[];
|
|
23
|
+
//# sourceMappingURL=cross-definitions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-definitions.d.ts","sourceRoot":"","sources":["../../src/structure/cross-definitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAI1D,kHAAkH;AAClH,MAAM,MAAM,iBAAiB,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAE1G,MAAM,MAAM,eAAe,GAAG;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,iBAAiB,EAAE,CAAA;CAAE,CAAC;AAE5G,sGAAsG;AACtG,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB,CAAC;AAkBF,sFAAsF;AACtF,eAAO,MAAM,aAAa,GAAI,MAAM,MAAM,KAAG,MAGlC,CAAC;AAUZ,6FAA6F;AAC7F,eAAO,MAAM,oBAAoB,GAAI,OAAO,SAAS,eAAe,EAAE,KAAG,mBAAmB,EAW3F,CAAC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { tallyVotes } from "../cross-votes.js";
|
|
2
|
+
/** Marks that do not change what a definition says: the punctuation at its two ends. Spaces are evened out apart. */
|
|
3
|
+
const LEADING = new Set(["、", ",", ",", ":", ":"]);
|
|
4
|
+
const TRAILING = new Set(["。", ".", "."]);
|
|
5
|
+
const SPACE = /\s+/gu;
|
|
6
|
+
const SPACE_CHAR = /\s/u;
|
|
7
|
+
/** The text without spaces and the marks of a set at its start, or at its end. */
|
|
8
|
+
const trimStartOf = (text, marks) => {
|
|
9
|
+
const first = text.split("").findIndex((char) => !marks.has(char) && !SPACE_CHAR.test(char));
|
|
10
|
+
return first === -1 ? "" : text.slice(first);
|
|
11
|
+
};
|
|
12
|
+
const trimEndOf = (text, marks) => text.slice(0, text.split("").findLastIndex((char) => !marks.has(char) && !SPACE_CHAR.test(char)) + 1);
|
|
13
|
+
/** The wording compared: width, spaces and the punctuation at the ends evened out. */
|
|
14
|
+
export const definitionKey = (body) => trimEndOf(trimStartOf(body.normalize("NFKC"), LEADING), TRAILING)
|
|
15
|
+
.replace(SPACE, " ")
|
|
16
|
+
.trim();
|
|
17
|
+
/** A file's vote for a term: its first definition of it (a second one in the same file is duplicate-definition's). */
|
|
18
|
+
const voteOf = (file, term) => {
|
|
19
|
+
const first = file.definitions.find((definition) => definition.term === term && definitionKey(definition.body) !== "");
|
|
20
|
+
return first === undefined ? [] : [{ path: file.path, value: first }];
|
|
21
|
+
};
|
|
22
|
+
const sameWording = (left, right) => definitionKey(left.body) === definitionKey(right.body);
|
|
23
|
+
/** The files that define a term in other words than most files of the run that define it. */
|
|
24
|
+
export const definitionsOutOfStep = (files) => {
|
|
25
|
+
const terms = [...new Set(files.flatMap((file) => file.definitions.map((definition) => definition.term)))];
|
|
26
|
+
return terms.flatMap((term) => {
|
|
27
|
+
const tally = tallyVotes(files.flatMap((file) => voteOf(file, term)), sameWording);
|
|
28
|
+
const [usual] = tally?.usual ?? [];
|
|
29
|
+
if (tally === undefined || usual === undefined)
|
|
30
|
+
return [];
|
|
31
|
+
return tally.odd.map((vote) => ({ path: vote.path, definition: vote.value, usual, files: tally.usual.length }));
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=cross-definitions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-definitions.js","sourceRoot":"","sources":["../../src/structure/cross-definitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAa,MAAM,mBAAmB,CAAC;AAiB1D,qHAAqH;AACrH,MAAM,OAAO,GAAwB,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AACxE,MAAM,QAAQ,GAAwB,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC,CAAC;AAC/D,MAAM,KAAK,GAAG,OAAO,CAAC;AAEtB,MAAM,UAAU,GAAG,KAAK,CAAC;AAEzB,kFAAkF;AAClF,MAAM,WAAW,GAAG,CAAC,IAAY,EAAE,KAA0B,EAAU,EAAE;IACvE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7F,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAC/C,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,CAAC,IAAY,EAAE,KAA0B,EAAU,EAAE,CACrE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,aAAa,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAExG,sFAAsF;AACtF,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAY,EAAU,EAAE,CACpD,SAAS,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,EAAE,QAAQ,CAAC;KAC9D,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC;KACnB,IAAI,EAAE,CAAC;AAEZ,sHAAsH;AACtH,MAAM,MAAM,GAAG,CAAC,IAAqB,EAAE,IAAY,EAA6B,EAAE;IAChF,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,IAAI,IAAI,aAAa,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;IACvH,OAAO,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;AACxE,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,IAAuB,EAAE,KAAwB,EAAW,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,aAAa,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAE3I,6FAA6F;AAC7F,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,KAAiC,EAAyB,EAAE;IAC/F,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3G,OAAO,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;QAC5B,MAAM,KAAK,GAAG,UAAU,CACtB,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAC3C,WAAW,CACZ,CAAC;QACF,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,EAAE,KAAK,IAAI,EAAE,CAAC;QACnC,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,EAAE,CAAC;QAC1D,OAAO,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAClH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
package/genres.yaml
CHANGED
|
@@ -1,9 +1,12 @@
|
|
|
1
1
|
# The genres chaff knows, in the order `chaff genres` lists them.
|
|
2
2
|
#
|
|
3
3
|
# A genre is a preset: pick the kind of document and chaff checks it the way that kind is written.
|
|
4
|
-
# rules: the level a rule runs at for this genre (strict / normal / relaxed
|
|
4
|
+
# rules: the level a rule runs at for this genre (strict / normal / relaxed), under chaff.yaml's rules.
|
|
5
5
|
# A group's rules apply to every genre in it; a genre's own rules win over its group's.
|
|
6
|
-
# A rule
|
|
6
|
+
# A rule a group or genre turns off says so in its own file (off_for, with why), not here; chaff reads it
|
|
7
|
+
# as an off in that group's or genre's rules. It is listed under "did not run" with the genre as the reason.
|
|
8
|
+
# An off_for entry "<group>: measured by yarn rules:measure" is written by `yarn rules:measure --apply`: the
|
|
9
|
+
# rule reports on most human documents of the group (chaff-spec.md §21.1). Edit the measurement, not these.
|
|
7
10
|
# profile: the document profile (profiles/*.yaml) this genre reads with, when chaff.yaml names none.
|
|
8
11
|
# suggest: when no genre is set, what makes a file look like this genre, strongest first:
|
|
9
12
|
# paths (the file's path), then per language an opening (the body's first line, past front matter and
|
|
@@ -23,266 +26,19 @@ groups:
|
|
|
23
26
|
# (shall be deemed), and joins long noun compounds (個人情報取扱事業者). Those rules would only flag the form.
|
|
24
27
|
- id: legal
|
|
25
28
|
name: { ja: 法務, en: Legal }
|
|
26
|
-
rules:
|
|
27
|
-
agentless-passive: off
|
|
28
|
-
max-kanji-continuous: off
|
|
29
|
-
no-doubled-joshi: off
|
|
30
|
-
ngram-repetition: off
|
|
31
|
-
repeated-sentence-head: off
|
|
32
|
-
heading-echo: off
|
|
33
|
-
taigen-dome-in-prose: off
|
|
34
|
-
unqualified-superlative: off
|
|
35
|
-
excessive-hedging: off
|
|
36
|
-
proper-noun-density: off
|
|
37
|
-
expletive-construction: off
|
|
38
|
-
adverb-overuse: off
|
|
39
|
-
concrete-evidence-density: off
|
|
40
|
-
closing-cliche: off
|
|
41
|
-
padded-intro: off
|
|
42
|
-
preamble-length: off
|
|
43
|
-
cushion-phrase-density: off
|
|
44
|
-
sasete-itadaku: off
|
|
45
|
-
sentence-rhythm: off
|
|
46
|
-
rule-of-three: off
|
|
47
|
-
section-length-uniformity: off
|
|
48
|
-
paragraph-length-variance: off
|
|
49
|
-
ai-tell: off
|
|
50
|
-
ai-generated-composite: off
|
|
51
|
-
contrast-framing: off
|
|
52
|
-
stock-transition: off
|
|
53
|
-
announcing-opener: off
|
|
54
|
-
colon-lead-in: off
|
|
55
|
-
emoji-heading: off
|
|
56
|
-
bold-label-list: off
|
|
57
|
-
# A clause, a definition or a claim is a paragraph of one sentence by form.
|
|
58
|
-
one-sentence-paragraph-run: off
|
|
59
|
-
ai-structure: off
|
|
60
|
-
# Statutes and opinions write "not inconsistent with" on purpose.
|
|
61
|
-
double-negative: off
|
|
62
|
-
# Drafting writes "in the event that" and "for the purpose of" on purpose.
|
|
63
|
-
wordy-phrase: off
|
|
64
|
-
weasel-word: off
|
|
65
|
-
sentence-initial-so: off
|
|
66
|
-
# Legal drafting writes 「…を行う」 and "make a payment" as its register; the corpus statutes are full of them.
|
|
67
|
-
nominalization: off
|
|
68
|
-
# すなわち and that is, open a definition that restates on purpose.
|
|
69
|
-
paragraph-restatement: off
|
|
70
|
-
# A statute or contract opens with its first article, and its titles are formal names.
|
|
71
|
-
no-lead: off
|
|
72
|
-
title-length: off
|
|
73
|
-
# Drafting writes a number twice on purpose: thirty (30) days.
|
|
74
|
-
number-style-consistency: off
|
|
75
|
-
# An enumeration of conditions mixes 〜こと and 〜とき by what each condition is.
|
|
76
|
-
list-item-form-mix: off
|
|
77
|
-
# A paper's citations, figures and abstract: only the academic paper genre turns these on.
|
|
78
|
-
citation-style-mix: off
|
|
79
|
-
citation-reference-mismatch: off
|
|
80
|
-
figure-reference-order: off
|
|
81
|
-
abstract-length: off
|
|
82
29
|
# A help page repeats its heading in its first line (To upload a file, ...) and states no claims to back up.
|
|
83
30
|
- id: docs
|
|
84
31
|
name: { ja: 説明書, en: Documentation }
|
|
85
|
-
rules:
|
|
86
|
-
heading-echo: off
|
|
87
|
-
agentless-passive: off
|
|
88
|
-
concrete-evidence-density: off
|
|
89
|
-
preamble-length: off
|
|
90
|
-
proper-noun-density: off
|
|
91
|
-
unqualified-superlative: off
|
|
92
|
-
expletive-construction: off
|
|
93
|
-
adverb-overuse: off
|
|
94
|
-
cushion-phrase-density: off
|
|
95
|
-
double-keigo: off
|
|
96
|
-
sasete-itadaku: off
|
|
97
|
-
sentence-initial-conjunction-run: off
|
|
98
|
-
closing-cliche: off
|
|
99
|
-
padded-intro: off
|
|
100
|
-
sentence-rhythm: off
|
|
101
|
-
rule-of-three: off
|
|
102
|
-
section-length-uniformity: off
|
|
103
|
-
paragraph-length-variance: off
|
|
104
|
-
ai-tell: off
|
|
105
|
-
ai-generated-composite: off
|
|
106
|
-
contrast-framing: off
|
|
107
|
-
stock-transition: off
|
|
108
|
-
announcing-opener: off
|
|
109
|
-
colon-lead-in: off
|
|
110
|
-
emoji-heading: off
|
|
111
|
-
bold-label-list: off
|
|
112
|
-
ai-structure: off
|
|
113
|
-
# A paper's citations, figures and abstract: only the academic paper genre turns these on.
|
|
114
|
-
citation-style-mix: off
|
|
115
|
-
citation-reference-mismatch: off
|
|
116
|
-
figure-reference-order: off
|
|
117
|
-
abstract-length: off
|
|
118
32
|
# Science writes in the passive, hedges its claims on purpose (may, suggest) and cites numbers as its evidence.
|
|
119
33
|
- id: academic
|
|
120
34
|
name: { ja: 学術, en: Academic }
|
|
121
|
-
rules:
|
|
122
|
-
agentless-passive: off
|
|
123
|
-
excessive-hedging: off
|
|
124
|
-
expletive-construction: off
|
|
125
|
-
concrete-evidence-density: off
|
|
126
|
-
proper-noun-density: off
|
|
127
|
-
adverb-overuse: off
|
|
128
|
-
closing-cliche: off
|
|
129
|
-
padded-intro: off
|
|
130
|
-
preamble-length: off
|
|
131
|
-
cushion-phrase-density: off
|
|
132
|
-
sasete-itadaku: off
|
|
133
|
-
double-keigo: off
|
|
134
|
-
sentence-rhythm: off
|
|
135
|
-
rule-of-three: off
|
|
136
|
-
section-length-uniformity: off
|
|
137
|
-
paragraph-length-variance: off
|
|
138
|
-
stock-transition: off
|
|
139
|
-
emoji-heading: off
|
|
140
|
-
bold-label-list: off
|
|
141
|
-
ai-structure: off
|
|
142
|
-
requirement-smell: off
|
|
143
35
|
# Length, rhythm, repetition and register are the author's choices in literature, and dialogue mixes styles.
|
|
144
36
|
# Only what one work can hold itself to runs: consistent spacing and commas, and numbering without gaps.
|
|
145
37
|
- id: literature
|
|
146
38
|
name: { ja: 文学, en: Literature }
|
|
147
|
-
rules:
|
|
148
|
-
# A character who says "never" and later makes an exception is the story, not a drafting slip.
|
|
149
|
-
absolute-exception: off
|
|
150
|
-
# A story's narrator and its characters each say 私 or 僕 in their own voice.
|
|
151
|
-
person-consistency: off
|
|
152
|
-
max-sentence-length: off
|
|
153
|
-
max-paragraph-length: off
|
|
154
|
-
ngram-repetition: off
|
|
155
|
-
repeated-sentence-head: off
|
|
156
|
-
heading-echo: off
|
|
157
|
-
empty-intensifier: off
|
|
158
|
-
no-doubled-joshi: off
|
|
159
|
-
no-nakaguro-parallel: off
|
|
160
|
-
taigen-dome-in-prose: off
|
|
161
|
-
max-kanji-continuous: off
|
|
162
|
-
hiragana-fukushi: off
|
|
163
|
-
no-mixed-desumasu: off
|
|
164
|
-
contraction-consistency: off
|
|
165
|
-
doubled-word: off
|
|
166
|
-
agreement-slip: off
|
|
167
|
-
agentless-passive: off
|
|
168
|
-
expletive-construction: off
|
|
169
|
-
excessive-hedging: off
|
|
170
|
-
unqualified-superlative: off
|
|
171
|
-
adverb-overuse: off
|
|
172
|
-
sentence-initial-conjunction-run: off
|
|
173
|
-
repeated-conjunction: off
|
|
174
|
-
undefined-acronym: off
|
|
175
|
-
proper-noun-density: off
|
|
176
|
-
concrete-evidence-density: off
|
|
177
|
-
closing-cliche: off
|
|
178
|
-
padded-intro: off
|
|
179
|
-
preamble-length: off
|
|
180
|
-
cushion-phrase-density: off
|
|
181
|
-
sasete-itadaku: off
|
|
182
|
-
double-keigo: off
|
|
183
|
-
no-em-dash: off
|
|
184
|
-
emoji-density: off
|
|
185
|
-
elapsed-years-mismatch: off
|
|
186
|
-
fact-conflict: off
|
|
187
|
-
summary-fact-mismatch: off
|
|
188
|
-
sentence-rhythm: off
|
|
189
|
-
rule-of-three: off
|
|
190
|
-
section-length-uniformity: off
|
|
191
|
-
paragraph-length-variance: off
|
|
192
|
-
ai-tell: off
|
|
193
|
-
ai-generated-composite: off
|
|
194
|
-
contrast-framing: off
|
|
195
|
-
stock-transition: off
|
|
196
|
-
announcing-opener: off
|
|
197
|
-
colon-lead-in: off
|
|
198
|
-
emoji-heading: off
|
|
199
|
-
bold-label-list: off
|
|
200
|
-
nominalization: off
|
|
201
|
-
dangling-reference: off
|
|
202
|
-
duplicate-definition: off
|
|
203
|
-
date-order: off
|
|
204
|
-
date-weekday-mismatch: off
|
|
205
|
-
total-mismatch: off
|
|
206
|
-
announced-count-mismatch: off
|
|
207
|
-
dangling-figure-reference: off
|
|
208
|
-
date-range-reversed: off
|
|
209
|
-
percent-sum-mismatch: off
|
|
210
|
-
vague-figure-reference: off
|
|
211
|
-
# A narrator may hedge, speak with ら dropped, and spell as the work's time and place did.
|
|
212
|
-
double-negative: off
|
|
213
|
-
ra-nuki: off
|
|
214
|
-
spelling-consistency: off
|
|
215
|
-
orthographic-variant: off
|
|
216
|
-
translationese-density: off
|
|
217
|
-
unknown-word: off
|
|
218
|
-
redundant-expression: off
|
|
219
|
-
requirement-smell: off
|
|
220
|
-
# Dialogue may misuse an idiom on purpose, to draw the speaker.
|
|
221
|
-
idiom-misuse: off
|
|
222
|
-
paragraph-restatement: off
|
|
223
|
-
# A story or poem chooses its own opening and its own title.
|
|
224
|
-
no-lead: off
|
|
225
|
-
title-length: off
|
|
226
|
-
# A narrator spells out numbers in dialogue and writes figures in a date.
|
|
227
|
-
number-style-consistency: off
|
|
228
|
-
list-item-form-mix: off
|
|
229
|
-
# Dialogue and verse set each line apart.
|
|
230
|
-
one-sentence-paragraph-run: off
|
|
231
|
-
# Dialect and old usage ("an hospital") are the work's voice, and dialogue leans on "very".
|
|
232
|
-
article-sound: off
|
|
233
|
-
very-adjective: off
|
|
234
|
-
# A paper's citations, figures and abstract: only the academic paper genre turns these on.
|
|
235
|
-
citation-style-mix: off
|
|
236
|
-
citation-reference-mismatch: off
|
|
237
|
-
figure-reference-order: off
|
|
238
|
-
abstract-length: off
|
|
239
|
-
# A narrator and a character speak as they speak: dialect ("would of"), "So," and hearsay are the voice.
|
|
240
|
-
homophone-slip: off
|
|
241
|
-
wordy-phrase: off
|
|
242
|
-
weasel-word: off
|
|
243
|
-
sentence-initial-so: off
|
|
244
39
|
# A speech opens with greetings and closes with thanks: that is its form, not padding.
|
|
245
40
|
- id: speech
|
|
246
41
|
name: { ja: 話し言葉, en: Speech }
|
|
247
|
-
rules:
|
|
248
|
-
agentless-passive: off
|
|
249
|
-
preamble-length: off
|
|
250
|
-
padded-intro: off
|
|
251
|
-
closing-cliche: off
|
|
252
|
-
concrete-evidence-density: off
|
|
253
|
-
proper-noun-density: off
|
|
254
|
-
sentence-rhythm: off
|
|
255
|
-
rule-of-three: off
|
|
256
|
-
section-length-uniformity: off
|
|
257
|
-
paragraph-length-variance: off
|
|
258
|
-
contrast-framing: off
|
|
259
|
-
stock-transition: off
|
|
260
|
-
announcing-opener: off
|
|
261
|
-
colon-lead-in: off
|
|
262
|
-
ai-structure: off
|
|
263
|
-
# A transcript keeps the speaker's words: hedges and ら dropped as spoken.
|
|
264
|
-
double-negative: off
|
|
265
|
-
ra-nuki: off
|
|
266
|
-
requirement-smell: off
|
|
267
|
-
article-sound: off
|
|
268
|
-
very-adjective: off
|
|
269
|
-
homophone-slip: off
|
|
270
|
-
wordy-phrase: off
|
|
271
|
-
weasel-word: off
|
|
272
|
-
sentence-initial-so: off
|
|
273
|
-
# A speaker says it again so the room hears it: 要するに, in other words.
|
|
274
|
-
paragraph-restatement: off
|
|
275
|
-
# An address or a transcript is titled by occasion (第221回国会における…演説) and opens as spoken.
|
|
276
|
-
no-lead: off
|
|
277
|
-
title-length: off
|
|
278
|
-
# Spoken numbers are transcribed as heard.
|
|
279
|
-
number-style-consistency: off
|
|
280
|
-
list-item-form-mix: off
|
|
281
|
-
# A paper's citations, figures and abstract: only the academic paper genre turns these on.
|
|
282
|
-
citation-style-mix: off
|
|
283
|
-
citation-reference-mismatch: off
|
|
284
|
-
figure-reference-order: off
|
|
285
|
-
abstract-length: off
|
|
286
42
|
|
|
287
43
|
genres:
|
|
288
44
|
- id: technical/spec
|
|
@@ -335,23 +91,11 @@ genres:
|
|
|
335
91
|
summary:
|
|
336
92
|
ja: プレスリリースと、お知らせ
|
|
337
93
|
en: Press releases and public notices
|
|
338
|
-
# A release names the agency, the people quoted, the mission and the place: that is its news, not a crowd of
|
|
339
|
-
# names to thin out. Every English release in the corpus (GSA, NASA, NOAA) is over the limit.
|
|
340
|
-
rules:
|
|
341
|
-
proper-noun-density: off
|
|
342
94
|
- id: business/meeting-notes
|
|
343
95
|
name: { ja: 議事録, en: Meeting notes }
|
|
344
96
|
summary:
|
|
345
97
|
ja: 議事録・議事要旨
|
|
346
98
|
en: Minutes and meeting notes
|
|
347
|
-
# Minutes record what the meeting did (the meeting was held, 了承された): the actor is the meeting, by the form.
|
|
348
|
-
# In the corpus the rule fires on nearly every set of minutes, English and Japanese.
|
|
349
|
-
# A header block of labelled fields (- **日時**:…, - **出席者**:…) is the form of minutes, not a list of captions.
|
|
350
|
-
rules:
|
|
351
|
-
# Minutes jot points down as they come: a noun, a remark, a decision, side by side.
|
|
352
|
-
list-item-form-mix: off
|
|
353
|
-
agentless-passive: off
|
|
354
|
-
bold-label-list: off
|
|
355
99
|
- id: legal/contract
|
|
356
100
|
name: { ja: 契約書・規約, en: Contract and terms }
|
|
357
101
|
summary:
|
|
@@ -374,6 +118,9 @@ genres:
|
|
|
374
118
|
total-mismatch: normal
|
|
375
119
|
dangling-figure-reference: normal
|
|
376
120
|
date-range-reversed: normal
|
|
121
|
+
# A contract names each party and term once and uses that name: a term quoted again or a party written out in full is a slip.
|
|
122
|
+
defined-term-form: normal
|
|
123
|
+
defined-name-repeated: normal
|
|
377
124
|
- id: legal/statute
|
|
378
125
|
name: { ja: 法令・規程, en: Statute and regulation }
|
|
379
126
|
summary:
|
|
@@ -395,8 +142,6 @@ genres:
|
|
|
395
142
|
total-mismatch: normal
|
|
396
143
|
dangling-figure-reference: normal
|
|
397
144
|
date-range-reversed: normal
|
|
398
|
-
# A statute defines its 等 terms (以下「個人情報等」という) and uses them in its obligations.
|
|
399
|
-
requirement-smell: off
|
|
400
145
|
- id: legal/judgment
|
|
401
146
|
name: { ja: 判決, en: Court decision }
|
|
402
147
|
summary:
|
|
@@ -405,9 +150,6 @@ genres:
|
|
|
405
150
|
suggest:
|
|
406
151
|
ja: { line: "^(?:#{1,6}\\s*)?(?:主\\s*文|理\\s*由|判\\s*決)\\s*$", min_lines: 2 }
|
|
407
152
|
en: { line: "delivered the opinion of the Court|^(?:Reversed|Affirmed)\\.?$", min_lines: 1 }
|
|
408
|
-
# requirement-smell is for the documents that state requirements: specifications, contracts and documentation.
|
|
409
|
-
rules:
|
|
410
|
-
requirement-smell: off
|
|
411
153
|
- id: legal/patent
|
|
412
154
|
name: { ja: 特許明細書, en: Patent }
|
|
413
155
|
summary:
|
|
@@ -416,9 +158,6 @@ genres:
|
|
|
416
158
|
suggest:
|
|
417
159
|
ja: { line: "【(?:課題|解決手段|請求項[0-90-9]+|選択図|技術分野|背景技術|発明の詳細な説明|特許請求の範囲)】", min_lines: 2 }
|
|
418
160
|
en: { line: "^#{1,6}\\s*(?:BACKGROUND OF THE INVENTION|SUMMARY OF THE INVENTION|Claims\\b)|\\bof claim \\d+", min_lines: 3 }
|
|
419
|
-
# requirement-smell is for the documents that state requirements: specifications, contracts and documentation.
|
|
420
|
-
rules:
|
|
421
|
-
requirement-smell: off
|
|
422
161
|
- id: docs/manual
|
|
423
162
|
name: { ja: マニュアル・手順書, en: Manual and how-to }
|
|
424
163
|
summary:
|
|
@@ -427,6 +166,12 @@ genres:
|
|
|
427
166
|
# Path only: step and procedure headings are as common in tech blogs and specifications as in manuals.
|
|
428
167
|
suggest:
|
|
429
168
|
paths: ["(^|/)(manuals?|guides?|how-?tos?|help|tutorials?|user-?guides?)(/|[-_.])"]
|
|
169
|
+
# A manual is followed command by command: its code blocks, prompts, command headings and steps are what the reader acts on.
|
|
170
|
+
rules:
|
|
171
|
+
code-fence-language-mix: normal
|
|
172
|
+
shell-prompt-mix: normal
|
|
173
|
+
heading-command-missing: normal
|
|
174
|
+
step-statement-mix: normal
|
|
430
175
|
- id: docs/faq
|
|
431
176
|
name: { ja: よくある質問, en: FAQ }
|
|
432
177
|
summary:
|
|
@@ -436,9 +181,6 @@ genres:
|
|
|
436
181
|
paths: ["(^|[/_-])(faqs?|q-?and-?a)([/_.-]|$)"]
|
|
437
182
|
ja: { line: "^(?:#{1,6}\\s*)?(?:[QQ][0-90-9]*[..::、\\s ]|問[0-90-9]+[..::\\s ])|^#{1,6}\\s*(?:よくある(?:ご)?質問|Q&A|Q&A)", min_lines: 2 }
|
|
438
183
|
en: { line: "^(?:#{1,6}\\s*)?Q[0-9]*[.:)]\\s|^#{1,6}\\s*(?:FAQs?|Frequently asked questions)\\b", min_lines: 2 }
|
|
439
|
-
# A question is the heading: its length is the reader's question, not a name to shorten.
|
|
440
|
-
rules:
|
|
441
|
-
title-length: off
|
|
442
184
|
- id: docs/glossary
|
|
443
185
|
name: { ja: 用語集, en: Glossary }
|
|
444
186
|
summary:
|
|
@@ -448,13 +190,6 @@ genres:
|
|
|
448
190
|
paths: ["(^|/)(glossary|glossaries|yogo|用語集)(/|[-_.])"]
|
|
449
191
|
ja: { line: "^#{1,6}\\s*用語集", min_lines: 1 }
|
|
450
192
|
en: { line: "^#{1,6}\\s*Glossary\\b", min_lines: 1 }
|
|
451
|
-
# A reader looks up one entry and reads only that. A definition is a noun phrase (風の吹いてくる方向。), and sibling
|
|
452
|
-
# entries share one wording on purpose (Portion of labor productivity change attributed to …), which no reader sees twice.
|
|
453
|
-
rules:
|
|
454
|
-
taigen-dome-in-prose: off
|
|
455
|
-
ngram-repetition: off
|
|
456
|
-
# An entry that ends 〜すること or 〜のこと defines a word; it is no requirement.
|
|
457
|
-
requirement-smell: off
|
|
458
193
|
- id: academic/paper
|
|
459
194
|
name: { ja: 論文, en: Academic paper }
|
|
460
195
|
summary:
|
|
@@ -529,37 +264,3 @@ genres:
|
|
|
529
264
|
paths: ["(^|/)(transcripts?|kaigiroku)(/|[-_.])"]
|
|
530
265
|
ja: { line: "^○[^ \\s]{1,30} |^((?:問|答))|^【(?:記者|大臣|質問|回答)】", min_lines: 3 }
|
|
531
266
|
en: { line: "^(?:Mr|Ms|Mrs|Dr)\\. [A-Z][A-Z-]{2,}(?: of [A-Z][a-z]+)?\\. ", min_lines: 3 }
|
|
532
|
-
# A transcript records what was said: its sentences, repeats and register are the speaker's, not the writer's to fix.
|
|
533
|
-
rules:
|
|
534
|
-
# Several people speak, each naming themselves their own way.
|
|
535
|
-
person-consistency: off
|
|
536
|
-
max-sentence-length: off
|
|
537
|
-
max-paragraph-length: off
|
|
538
|
-
ngram-repetition: off
|
|
539
|
-
repeated-sentence-head: off
|
|
540
|
-
heading-echo: off
|
|
541
|
-
empty-intensifier: off
|
|
542
|
-
no-doubled-joshi: off
|
|
543
|
-
no-nakaguro-parallel: off
|
|
544
|
-
taigen-dome-in-prose: off
|
|
545
|
-
max-kanji-continuous: off
|
|
546
|
-
hiragana-fukushi: off
|
|
547
|
-
no-mixed-desumasu: off
|
|
548
|
-
contraction-consistency: off
|
|
549
|
-
doubled-word: off
|
|
550
|
-
agreement-slip: off
|
|
551
|
-
sasete-itadaku: off
|
|
552
|
-
double-keigo: off
|
|
553
|
-
# Labelled speaker turns (- **記者**:…) are how a transcript is laid out.
|
|
554
|
-
bold-label-list: off
|
|
555
|
-
cushion-phrase-density: off
|
|
556
|
-
excessive-hedging: off
|
|
557
|
-
unqualified-superlative: off
|
|
558
|
-
expletive-construction: off
|
|
559
|
-
adverb-overuse: off
|
|
560
|
-
sentence-initial-conjunction-run: off
|
|
561
|
-
repeated-conjunction: off
|
|
562
|
-
undefined-acronym: off
|
|
563
|
-
ai-tell: off
|
|
564
|
-
ai-generated-composite: off
|
|
565
|
-
assistant-residue: off
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "chaffjs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.21.0",
|
|
4
4
|
"description": "Prose validation harness. Finds what is hard to read, and never rewrites it for you.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"chaff",
|
|
@@ -66,8 +66,8 @@
|
|
|
66
66
|
},
|
|
67
67
|
"dependencies": {
|
|
68
68
|
"@anthropic-ai/sdk": "^0.125.0",
|
|
69
|
-
"@chaffjs/lang-en": "0.
|
|
70
|
-
"@chaffjs/lang-ja": "0.
|
|
69
|
+
"@chaffjs/lang-en": "0.19.0",
|
|
70
|
+
"@chaffjs/lang-ja": "0.20.0",
|
|
71
71
|
"mdast-util-from-markdown": "^2.0.3",
|
|
72
72
|
"mdast-util-frontmatter": "^2.0.1",
|
|
73
73
|
"mdast-util-gfm-table": "^2.0.0",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
id: absolute-exception
|
|
2
2
|
layer: L3
|
|
3
|
-
status:
|
|
3
|
+
status: stable
|
|
4
4
|
how_to_find: absolute-exception
|
|
5
5
|
word_list: absolute-word
|
|
6
6
|
extra_word_lists: [exception-marker, light-verb]
|
|
@@ -37,6 +37,8 @@ placeholders:
|
|
|
37
37
|
levels: { strict: error, normal: warning, relaxed: info }
|
|
38
38
|
|
|
39
39
|
use_for: [business, technical, blog, legal, docs, academic, literature, speech]
|
|
40
|
+
off_for:
|
|
41
|
+
literature: 'A character who says "never" and later makes an exception is the story, not a drafting slip.'
|
|
40
42
|
|
|
41
43
|
group: structure
|
|
42
44
|
summary:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
id: abstract-length
|
|
2
2
|
layer: L3
|
|
3
|
-
status:
|
|
3
|
+
status: stable
|
|
4
4
|
how_to_find: abstract-length
|
|
5
5
|
severity: info
|
|
6
6
|
|
|
@@ -36,6 +36,11 @@ levels:
|
|
|
36
36
|
en: { strict: 250, normal: 400, relaxed: 500 }
|
|
37
37
|
|
|
38
38
|
use_for: [academic, legal, docs, literature, speech]
|
|
39
|
+
off_for:
|
|
40
|
+
legal: "A paper's citations, figures and abstract: only the academic paper genre turns these on."
|
|
41
|
+
docs: "A paper's citations, figures and abstract: only the academic paper genre turns these on."
|
|
42
|
+
literature: "A paper's citations, figures and abstract: only the academic paper genre turns these on."
|
|
43
|
+
speech: "A paper's citations, figures and abstract: only the academic paper genre turns these on."
|
|
39
44
|
|
|
40
45
|
group: structure
|
|
41
46
|
summary:
|
|
@@ -102,6 +107,7 @@ level_meaning:
|
|
|
102
107
|
ja: 要旨 {limit} 字まで
|
|
103
108
|
en: up to {limit} words in the abstract
|
|
104
109
|
rewrite:
|
|
110
|
+
depth: structure
|
|
105
111
|
ja:
|
|
106
112
|
direction: 要旨を、目的・方法・結果・結論をそれぞれ一、二文で言う形に縮めてください。背景の説明や先行研究の紹介は本文に移します。数字は、結論を支える一つか二つだけを残します。要旨が無ければ、本文から目的・方法・結果・結論を抜き出して要旨を書きます。
|
|
107
113
|
pairs:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
id: acronym-expansion-conflict
|
|
2
2
|
layer: L3
|
|
3
|
-
status:
|
|
3
|
+
status: stable
|
|
4
4
|
how_to_find: acronym-expansion-conflict
|
|
5
5
|
severity: warning
|
|
6
6
|
|
|
@@ -58,6 +58,7 @@ not_flagged:
|
|
|
58
58
|
ja: 名前の大文字小文字、ハイフン、終わりの複数の s の違いは同じ名前と見ます。英語の名前は、頭文字が略語と揃うときだけ展開と読みます。
|
|
59
59
|
en: Differences of case, hyphens and a final plural s are not counted. An English name counts as an expansion only when its initials spell the abbreviation.
|
|
60
60
|
rewrite:
|
|
61
|
+
depth: light
|
|
61
62
|
ja:
|
|
62
63
|
direction: 二つの展開のうち正しいほうを書き手に確かめ、もう一方を消すか正しい名前に替えてください。二度目以降は略語だけで書けます。
|
|
63
64
|
pairs:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
id: adverb-overuse
|
|
2
2
|
layer: L3
|
|
3
|
-
status:
|
|
3
|
+
status: stable
|
|
4
4
|
how_to_find: adverb-density
|
|
5
5
|
requires: [pos]
|
|
6
6
|
languages: [en]
|
|
@@ -26,6 +26,12 @@ how_to_fix:
|
|
|
26
26
|
levels: { strict: 10, normal: 15, relaxed: 25 }
|
|
27
27
|
|
|
28
28
|
use_for: [blog, business, legal, docs, academic, literature, speech]
|
|
29
|
+
off_for:
|
|
30
|
+
legal: "Legal drafting repeats its terms and its sentence heads on purpose, puts the actor in the passive (shall be deemed), and joins long noun compounds (個人情報取扱事業者). This rule would only flag the form."
|
|
31
|
+
docs: "A help page repeats its heading in its first line (To upload a file, ...) and states no claims to back up."
|
|
32
|
+
academic: "Science writes in the passive, hedges its claims on purpose (may, suggest) and cites numbers as its evidence."
|
|
33
|
+
literature: "Length, rhythm, repetition and register are the author's choices in literature, and dialogue mixes styles. Only what one work can hold itself to runs: consistent spacing and commas, and numbering without gaps."
|
|
34
|
+
speech/transcript: "A transcript records what was said: its sentences, repeats and register are the speaker's, not the writer's to fix."
|
|
29
35
|
|
|
30
36
|
group: readability
|
|
31
37
|
summary:
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
id: adverb-without-negation
|
|
2
|
+
layer: L3
|
|
3
|
+
status: stable
|
|
4
|
+
how_to_find: adverb-polarity
|
|
5
|
+
word_list: negative-polarity-adverb
|
|
6
|
+
extra_word_lists: [negation-word]
|
|
7
|
+
requires: [pos]
|
|
8
|
+
languages: [ja]
|
|
9
|
+
severity: info
|
|
10
|
+
|
|
11
|
+
name:
|
|
12
|
+
ja: 打ち消しを伴わない「全然」「決して」
|
|
13
|
+
en: 全然 or 決して with no negation
|
|
14
|
+
|
|
15
|
+
why:
|
|
16
|
+
ja: 「全然」「決して」「到底」は、書き言葉では「全然足りない」「決して許されない」のように打ち消しと組む副詞です。「全然大丈夫です」のように打ち消し無しで使うのは話し言葉で、報告書や案内では砕けて読まれます。文の後ろに打ち消しの語(ない、ません、ず、違う、不〜、無〜)が一つも無いときだけ指します。
|
|
17
|
+
en: In written Japanese, adverbs such as 全然 and 決して pair with a negation (全然足りない, "not at all enough"). Without one (全然大丈夫です, "totally fine") they are spoken usage and read as casual in a report or a notice. chaff reports one only when no negating word (ない, ません, ず, 違う, a 不 or 無 prefix) follows it in the sentence.
|
|
18
|
+
|
|
19
|
+
message:
|
|
20
|
+
ja: 「{word}」の後に打ち消しがありません
|
|
21
|
+
en: '"{word}" has no negation after it'
|
|
22
|
+
|
|
23
|
+
how_to_fix:
|
|
24
|
+
ja: 打ち消しを伴わないなら、別の副詞に替えてください(全然大丈夫です → まったく問題ありません、十分に間に合います)。
|
|
25
|
+
en: Without a negation, use another adverb (全然大丈夫です → まったく問題ありません).
|
|
26
|
+
|
|
27
|
+
levels: { strict: warning, normal: info, relaxed: info }
|
|
28
|
+
|
|
29
|
+
use_for: [business, technical, legal, docs, academic, literature, speech]
|
|
30
|
+
off_for:
|
|
31
|
+
literature: "Spoken 全然大丈夫, なので and より in a character's voice; classical verse has a たり that does not list."
|
|
32
|
+
speech: "Spoken Japanese says 全然大丈夫, opens with なので and greets with より参りました."
|
|
33
|
+
|
|
34
|
+
group: wording
|
|
35
|
+
summary:
|
|
36
|
+
ja: 「全然大丈夫です」のように、打ち消しと組む副詞を打ち消し無しで使った所
|
|
37
|
+
en: A Japanese adverb that pairs with a negation (全然, 決して) used without one
|
|
38
|
+
example:
|
|
39
|
+
ja:
|
|
40
|
+
before: |
|
|
41
|
+
納期は全然大丈夫です。
|
|
42
|
+
after: |
|
|
43
|
+
納期には十分に間に合います。
|
|
44
|
+
|
|
45
|
+
not_flagged:
|
|
46
|
+
ja: 後ろに打ち消しの語(ない、ません、ず、まい、違う、異なる、駄目)か、不・未・無・非で始まる語(不十分、無理)があれば指しません。「まったく」は「まったく同じ」が正しいので見ません。ブログ、文芸、話し言葉のジャンルでは動きません。
|
|
47
|
+
en: Not reported when a negating word (ない, ません, ず, 違う, 駄目) or a word opening with 不, 未, 無 or 非 follows. まったく is not checked, since まったく同じ is correct. Off for blogs, literature and speech.
|
|
48
|
+
rewrite:
|
|
49
|
+
depth: light
|
|
50
|
+
ja:
|
|
51
|
+
direction: 打ち消しの無い「全然」「決して」を、肯定と組む言い方に替えてください。打ち消しを言いたかったのなら、打ち消しの形にします。
|
|
52
|
+
pairs:
|
|
53
|
+
- before: 納期は全然大丈夫です。
|
|
54
|
+
after: 納期には十分に間に合います。
|
|
55
|
+
- before: 新しい手順は全然簡単です。
|
|
56
|
+
after: 新しい手順はとても簡単です。
|
|
57
|
+
keep:
|
|
58
|
+
- 文が言っている判断の向き(問題が無い、簡単だ)
|
|
59
|
+
avoid:
|
|
60
|
+
- 打ち消しを足して文の意味を逆にする
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
id: adversative-ga-repeat
|
|
2
2
|
layer: L3
|
|
3
|
-
status:
|
|
3
|
+
status: stable
|
|
4
4
|
how_to_find: sentence-conjunctive-count
|
|
5
5
|
word_list: adversative-particle
|
|
6
6
|
requires: [pos]
|
|
@@ -45,6 +45,7 @@ level_meaning:
|
|
|
45
45
|
ja: 一文の逆接の「が」{limit} 個まで
|
|
46
46
|
en: up to {limit} contrastive が in a sentence
|
|
47
47
|
rewrite:
|
|
48
|
+
depth: light
|
|
48
49
|
ja:
|
|
49
50
|
direction: 一つ目の逆接の「が」の所で文を切ってください。次の文の頭に、前との関係を言う語(しかし、ただし)を置けます。
|
|
50
51
|
pairs:
|