tl;dr: ==
、!=
、&&
、||
を使っている時に、warningを出すcoffeelint
のcustom ruleを作ったよ
coffeescriptの有名なcoding styleとして、polarmobileがあります。このcoding styleに則って書いているのですが、coding styleを維持するために、何か良いツールがないか探した所、coffeelintなるものを見つけました。
coffeelint
でもある程度カバーできるのですが、カバーできない部分で、自分で実装できそうな部分をcustom ruleとして作りました。
具体的には、==
、!=
、&&
、||
を使っている場合に、warningを出すルールです。polar mobileのcoding styleでは
i is i # Yes
i == i # No
の様に、英語風のoperatorを優先して使う様に、勧めています。coffeelint
標準のオプションでは、なかったので、実装しました。coffeelint
のcustom ruleを作る事自体は簡単で、
module.exports = class RuleProcessor
rule:
name: 'custome_rule_name'
description: 'description of custom rule.'
level: 'error' # or 'warn'
message: 'message shown when lint failed'
# add one from below
lintLine: (line, lineApi) ->
# return true if lint fails
lintToken(token, tokenApi) ->
lintNode(node, nodeApi) ->
で終わりです。あとはlintLine
、lintToken
、lintNode
の中身を実装するだけです。今回作ったcustom ruleは、正規表現を使った簡単なもので、
lintLine: (line, lineApi) ->
/[&|\||\=]{2}|\!\=/.test(line)
のみです。
使う時は、
npm install
でcoffeelint-prefer-english-operator
をインストールcoffeelint --makeconfig > coffeelint.json
でcoffeelint.json
を作成coffeelint.json
に以下を足します
"prefer_english_operator": {
"module": "coffeelint-prefer-english-operator",
"level": "error"
}
あとはcoffeelint *.coffee
でlintしたいcoffee
ファイルを指定すれば、lintしてくれます。
感想
npm
に不慣れで、色々とハマりましたが、custom ruleを作る事自体はとても簡単でした。