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 となります。
そのため、以下の設定により除外されていると予想しています。
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 以外に変更していただくは良いように感じます。
textlint-plugin-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
確認ありがとうございます!