// Deterministic, regex-based prose conventions. A mechanical rule belongs here. A rule that needs // semantic judgement to apply correctly does not belong in an automated check at all; it stays // documentation guidance instead. See extractProseForRules below for what "prose" means for these // patterns. /** One mechanically checkable prose rule: a regex and the label its hit is reported under. */ interface ProseRule { readonly label: string; readonly pattern: RegExp; } export const PROSE_RULES: ReadonlyArray = [ { label: 'prose semicolon', pattern: /;/ }, { label: '"assistive technologies"', pattern: /\bassistive\s+technologies\b/i }, { label: 'unspaced em dash', pattern: /[^ \n]—|—[^ \n]/ }, { label: 'filler "simply"', pattern: /\bsimply\b/i }, { label: 'filler "note that"', pattern: /\bnote\s+that\b/i }, { label: 'filler "it is important to"', pattern: /\bit\s+is\s+important\s+to\b/i }, { label: 'filler "allows you to"', pattern: /\ballows\s+you\s+to\b/i }, { label: 'filler "enables you to"', pattern: /\benables\s+you\s+to\b/i }, { label: 'filler "can be used to"', pattern: /\bcan\s+be\s+used\s+to\b/i }, { label: 'filler "seamless"', pattern: /\bseamless\b/i }, { label: 'first-person "we"', pattern: /\bwe\b/i }, { label: 'first-person "us"', pattern: /\bus\b/ }, { label: 'first-person "let\'s"', pattern: /\blet's\b/i }, { label: 'terminology "users"', pattern: /\busers\b/i }, { label: 'terminology "the user"', pattern: /\bthe\s+user\b/i }, { label: 'terminology "a person"', pattern: /\ba\s+person\b/i }, { label: 'terminology "people"', pattern: /\bpeople\b/i }, ]; /** Every rule in `PROSE_RULES` that matches `prose`, as `