textlint-ja / textlint-rule-ja-no-mixed-period

文末の句点(。)の統一 と 抜けをチェックするtextlintルール
MIT License
9 stars 3 forks source link

allowPatternsオプションの追加 #5

Closed anchan828 closed 7 years ago

anchan828 commented 7 years ago

「= 章タイトル」というように、特殊なパターンでも句点なしを許可したい場合が出てきました。 そこで「allowPatterns」オプションを追加し、正規表現にマッチした文章は無視する処理を追加して現在は対処しています。 https://github.com/anchan828/textlint-rule-ja-no-mixed-period/commit/a568301b52c58382a807d08adcbc758e51347c20

そこで質問なのですが、このような「ノード内で指定した文字があった場合は無視する」処理をするオプションはすでにありますか? ない場合は、allowPatternsオプションのようなものを追加することは可能でしょうか?

懸念点として、正規表現でのオプションはちょっとオプションとしては範囲が広すぎるかなという気がします。

もしallowPatternsオプションのマージが問題なければ、私の方でPR作成も可能です。

azu commented 7 years ago

==== タイトル というのはHeaderとかではなく、ただのパラグラフという認識で問題ないですかね?(markdown的にはパラグラフとして扱われるので、このルール的としてパラグラフにそういう文字列があるため句点を認識してます。逆に ### タイトルのようにMarkdownがHeaderとして認識できる構文ならば、無視しています。)

=== は構造上の意味合いを持っていそうなので、本来はMarkdownなどのパーサのレイヤーで解決したい問題ですね。

textlintではパーサもpluginとして扱えるので、そういう特殊な構文を解釈してPargraphではないもとして解釈するようにすることで回避することは可能です。(pluginを作るのは面倒なのであんまり推奨できないですが)

もう一つの回避方法として、フィルタールールというものがtextlintにはあり、このルールであらゆるルールから警告されるエラーを無視する部分を決めることができます。

今のところ textlint-filter-rule-whitelist は特定のルールのエラーだけを無視するオプションがないので、グローバルに無視するようになってしまいますが… ( https://github.com/textlint/textlint/blob/bf0672ab22f22259a24821ce071a95482ee68a7b/docs/filter-rule.md#filterrulecontext フィルタールールを直せば特定のものだけ無視などもできそうではあります)

このルールにallowPatternsを追加してもいいのですが、他のルールでも同じようなことが起きる気はするので、フィルタールールのレイヤーで解決できるといいのではないかと思います。

anchan828 commented 7 years ago

今回の=はHeaderの意味を持ちます。(Re:VIEWという執筆ツールの文法です https://github.com/kmuto/review/blob/master/doc/format.ja.md#章節項段見出し

幾つかの解決案の提示ありがとうございます。

今回のような特殊な記法を持つものに対してtextlintを使用する場合に、毎回プラグインの作成は手間ですしグローバルで適用されてしまうのも避けたいです。なので私もフィルタールールの改善によって解決できることが理想かなと思いました。

その場合、フィルタールールを各ルールに適用するとなると、.textlintrcでは既存のfiltersフィールドはグローバルに適用される仕様はそのままで、各ルール配下にfiltersフィールドを追加する形が管理面でもありがたいです。

{
    "filters": {
            "textlint-filter-rule-xxx": true,
             "allow": [] 
    },
    "rules": {
        "textlint-rule-xxx": {
            "filters" : {
              "textlint-filter-rule-xxx": true,
              "allow": []
            }
        }
    }
}
azu commented 7 years ago

@anchan828 RE:VIEW ならば https://github.com/orangain/textlint-plugin-review プラグインを使えば、多分RE:VIEWの構文として解釈できるんじゃないかなと思います。 もし、 = がHeaderとして解釈されないならば、textlint-plugin-reviewが少し変な感じがしますね。

anchan828 commented 7 years ago

おお!reviewプラグインがあったのですね。試したところ問題なくHeaderとして解釈され、エラーも出ず目的が達成できました。

フィルタールールをどうするかの議論もこの場所では不適切だと思いますので、このissueは閉じさせていただきます。 ありがとうございました。