jslint と eslint に相反することを言われる (RegExp の character class の件)

探せば結構出てきそうだね。

正規表現の文字クラス:

1 return s.replace(/[!\[\].,()@?*%~$]/g, "");

ESLint にはこれで「Unnecessary escape character: \[」と言われる。ので、

1 return s.replace(/[![\].,()@?*%~$]/g, "");

とすると今度は JSLint に「Expected ‘\’ before ‘[‘.」と言われる。

JSHint はどちらにも無頓着。「 is limiting its scope to issues of code correctness.」だからかね。

JSLint と ESLint のこの喧嘩については、どっちとも言えんなぁと思う。javascript に限らず「正規表現翻訳器」の処理上は、この場合エスケープがあってもなくても曖昧さがない解釈が出来るので、書き手はどちらを選んでもいい。単に「処理上不可欠なエスケープではない」というだけのことで、基本的に「冗長なエスケープは単に無視される」。(つまり「\1」とかみたいに特殊な解釈がされないエスケープは文字通り「文字通り」に解釈させる目的でいつでも使えるということ。)

個人的には「普段は冗長だと思うなら書かない方を選ぶことの方が若干多いかな」くらいの、まぁ結構軽いノリ。そして「迷ったら付ける」という考え方も嫌いではない。square bracket の場合、square bracket が character class をあらわすわけだから、それ自身を character class に含めたい場合は「気分的にはエスケープしたくなる」という感じかもね。(つまり square bracket 以外ではあんまり悩まずにエスケープしない方を選んでるかもしんない。)

そういう意味で JSLint は「迷うくらいなら付けろや」派で、ESLint は「いらないなら付けるな」派なわけで、これを喧嘩といわずして何と言うか。でもまぁ、個々に個々のポリシーがあるんだろうから、こうなってくると「どっちを愛してるのか言って、言わないと海に飛び込むから!」てことなんでしょうなぁ。

まぁもうちっと使い込んでみてから、どっちを本妻にするか決めるとしますか。そして JSHint はもういらんな、「dot notation の方がええぜ」にも共感出来てないこともあるし。