io-monad / textlint-rule-general-novel-style-ja

textlint rule to follow general style of Japanese novels
MIT License
36 stars 5 forks source link

複数のルールがあるから rule preset にした方がよい #8

Closed io-monad closed 8 years ago

io-monad commented 8 years ago

https://github.com/textlint/textlint/pull/185#issuecomment-203426542

It is better that One rule check One matter. If you want to check multiple rule in a single module, I recommened that using preset system.

という事なので、ルールを local submodule にして textlint-rule-preset-JTF-style のように preset 化する? ひとつひとつ npm publish してもいいけどさすがに細かすぎる気も……

公式では textlint-rule-preset- の prefix が推奨されてるけど、名前を変えるべき?

azu commented 8 years ago

一つのルールが一つの機能を持つのはあくまで推奨(mustやshouldはないです)で、現実的にはそこまでメリットがあるかというと今のところそうでもないとは思います。

presetなら、presetの中にあるルールに対しても独立した設定値を渡せたり、公式にそういう仕組みがある(使い方統一されている)ので、ユーザーの学ぶコストがちょっとだけ下がるかもしれないぐらいの違いです。

"一つのルールが一つの機能を" というのはtextlintの話というよりもプログラミング一般に単一責任の原則があるのと同じようなものだと思っています。(textlintはルール間が共有ステートの仕組みがないのも関係ありますが。この辺はコストの問題なので状況によります)

presetに対するテスト手法は今の所ないのですが、これはユニットテスト(textlint-testerが今やってるルールに対するテスト)と統合テストという文脈の違いがあります。 それぞれテストする意味合いが違うので両方テストできるのが理想ではありますが、今のところいい方法が分かってないです。

io-monad commented 8 years ago

@azu 理解しました。ありがとうございます!

こちらの textlint-rule-general-novel-style は、一つ一つのルールだけ取り出してもあまり意味がなく、preset 化する意味は薄いように感じるので、今のところ preset 化は見送りたいと思います。 :bow:

単一責任の原則のお話は勉強になりました。設計として美しい形だと思います。 :+1:

preset のテストは統合テストになるかな、と思いまして、公式ではこういったテストはあまり推奨されていないのかな、とも考えたのですが、そういうわけではないのですね。 複数のルールが混ざった時に依存関係や fix の優先度の問題などがあるので、やはり何らかのテストがあると良いなとは思います。