textlintで表記ゆれチェックルール集を一部無視する設定

textlint-rule-prhを使った表記ゆれチェックを一部無視する設定の紹介です。
2022.06.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

どうも。 えーたん(@eetann092)です。

文章校正ツールtextlintでは、 textlint-rule-prhを使って表記ゆれチェックができます。

具体的には、 「コンピューターコンピュータするようになりますしますの方が良いのでは?」 と表記ゆれや言い回しの改善案を提案できます。

以下はNeovimでの表示の例です。

本記事では、textlint-rule-prhで表記ゆれチェックのルールファイルをimportした場合に、 一部のルールを無視する方法について紹介します。

すでにtextlint-rule-prhを導入している人向けの記事です。

設定例

無視前の設定

.textlintrcのrulesに、 textlint-rule-prhの設定ファイルのパスとして今回はprh.yamlを指定します。

.textlintrc

{
  "rules": {
    "prh": {
      "rulePaths" :["./prh.yaml"]
    }
  }
}

例として、prhの表記ゆれのルールファイル prh/rulesWEB+DB_PRESS.yml に定義されている以下の3つを無視します。

期待する正規表現 表記ゆれの正規表現 提案例
まったく 全く 全く → まったく
$1ほか$2 /([^排人])他([^ァ-ヶ社者人方])/ の他の → のほかの
$1な$2 /([^有])無([かくいけし])/ が無い → がない

ひらがなを提案される部分を漢字で書きたい場合を想定しました。

表記ゆれのルールファイル(今回はWEB+DB_PRESS.yml)では、「期待する正規表現」がexpected、「表記ゆれの正規表現」がpatternにあたります。

以下が無視の設定をしていないprh.yaml例です。

prh.yaml

version: 1
imports:
  - path: ./node_modules/prh/prh-rules/media/WEB+DB_PRESS.yml
    disableImports: true

無視設定を書く

importsでインポートするルールの中から無視したいものは、ignoreRulesで指定します。 指定方法は2種類あり、無視したいルールのexpectedpatternを書きます。

ここで1つ注意です。 表記ゆれのルールファイル(今回はWEB+DB_PRESS.yml)で書かれたexpectedpatternを そのまま書けば良いわけではありません。

prhの実装prh/prh.yml のコメントの通り、設定ファイルパース後の表現を書く必要があります。

パース後の表現はprhコマンドに--rules-yamlオプションをつけて見ることができます。

たとえば、WEB+DB_PRESS.ymlのルールのパース後の表現の出力のコマンドは以下です。

npx prh --rules ./node_modules/prh/prh-rules/media/WEB+DB_PRESS.yml --rules-yaml

以下がWEB+DB_PRESS.ymlのルールのパース後の表現の出力の一部です。

rules:
  - expected: $1な$2
    pattern: '/([^有])無([かくいけし])/gmu'
    options:
      wordBoundary: false
    specs: []
    raw:
      pattern: '/([^有])無([かくいけし])/'
      expected: $1な$2

出力は長いため、必要に応じてlessgrepに渡しましょう。

元のルールの表現はrawの中に書かれており、
「パース後の表現」はrules直下の配列の要素のexpectedpatternです。

上記の出力のルールを例にすると、 ignoreRulesにpatternで指定する場合は/([^有])無([かくいけし])/gmuのように フラグgmuを追加する必要があります。 もちろんexpectedを使って$1な$2を指定しても良いでしょう。

以下が無視の設定をしたprh.yaml例です。

prh.yaml

version: 1
imports:
  - path: ./node_modules/prh/prh-rules/media/WEB+DB_PRESS.yml
    disableImports: true
    ignoreRules:
      - expected: まったく
      - expected: $1ほか$2
      - pattern: /([^有])無([かくいけし])/gmu

そもそも表記ゆれだけではなくtextlint自体で特定の範囲を無視したい場合は、 以下の記事をご覧ください。

リンク集

よく開いたページのリンクをまとめておきます。

今回使用したサンプル文章や設定ファイルは以下のリポジトリにあります。