textlint-ja / textlint-rule-no-synonyms

同義語を表記ゆれをチェックするtextlintルール

Repository from Github https://github.comtextlint-ja/textlint-rule-no-synonymsRepository from Github https://github.comtextlint-ja/textlint-rule-no-synonyms

HTML プラグインと併用すると検出されない場合がある

hankei6km opened this issue · comments

再現手順

設定(textlintrc)

{
  "plugins": [
    "html"
  ],
  "rules": {
     "@textlint-ja/no-synonyms": true
  }
}

試した文章(test.html)

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>Title</title>
  </head>
  <body>
    <p>サーバとサーバーの表記揺れがある。</p>
    <p>この雇入と雇入れの違いを見つける。</p>
  </body>
</html>

実行結果。

$ npx textlint --c textlintrc test.html

<< 結果の出力無し >>

期待する結果

  • 「サーバ」と「サーバー」、「雇入」と「雇入れ」それぞれが同義語として検出される。

実際の結果

  • どちらも検出されない。

ワークアラウンド

body 内のみの記述にすると検出されます。

試した文章(test-body.html)

<p>サーバとサーバーの表記揺れがある。</p>
<p>この雇入と雇入れの違いを見つける。</p>

実行結果。

$ npx textlint --c textlintrc test-body.html

/sandbox/reproduce/no-synonym-html/test-body.html
  1:8  error  同義語である「サーバ」と「サーバー」が利用されています  @textlint-ja/no-synonyms
  2:9  error  同義語である「雇入」と「雇入れ」が利用されています      @textlint-ja/no-synonyms

✖ 2 problems (2 errors, 0 warnings)

ワークアラウンドの HTML から作成される AST は Document の直下に Paragraph が作成されます。
一方で、<html><body></body></html> で囲まれていると AST は Document/Html/Html となります。
そのため、以下の設定により除外されていると予想しています。

ignoreNodeTypes: [Syntax.BlockQuote, Syntax.CodeBlock, Syntax.Code, Syntax.Html, Syntax.Link, Syntax.Image, Syntax.Comment]

commented

HTMLプラグインが<html lang="en">Html nodeとして扱っちゃうのが良くない感じがしますね。。
(Markdown中の <p> など任意のHTMLをHtml nodeとして扱うためのtypeなので、なんか混在してしまっている…)

HTMLプラグイン側で <html>DocumentHtml とか別の名前にするなどした方が汎用的に修正できそうな気がしますね…
Syntax.Html を無視しているルールは他にもあると思うので。
https://github.com/textlint/textlint-plugin-html

📝 Syntax.Html === "Html なので値が偶然一致してしまっているのが主な原因。Syntax.Htmlの値を変えるというのもあるがちょっと影響が大きいかも知れない…

言われてみれば、他のルールでも無視されてしまいそうですね。

HTMLプラグイン側で を DocumentHtml とか別の名前にするなどした方が汎用的に修正できそうな気がしますね…

textlint を使い始めたばかりなので全体的な判断は難しいのですが、
感覚的には <html> の node を Html 以外に変更していただくは良いように感じます。

@azu ご対応ありがとうございました。想定通りに検出されることを確認しました。

$ npx textlint --c textlintrc test.html 

/project/home/hankei6km/workspace/test.html
  8:12  error  同義語である「サーバ」と「サーバー」が利用されています  @textlint-ja/no-synonyms
  9:13  error  同義語である「雇入」と「雇入れ」が利用されています      @textlint-ja/no-synonyms

✖ 2 problems (2 errors, 0 warnings)

確認は下記 CodeSandbox のサンドボックスで行いました。
https://codesandbox.io/p/sandbox/test-textlint-rule-no-synonyms-bdbhdo

commented

確認ありがとうございます!