ESLintのルールが教えてもらえないという制限下で作業をしていた。pushすると怒られるという緊張感はちょっと良かった。色々なルールで怒られたが、中でもno-magic-numbersにとりわけ怒られた。怒られたコードをメモしておく。
var d = new Date();
var m = d.getMonth() + 1;
月を数字で取得しようとすると怒られる。
var a = ["foo", "bar", "baz", "qux"];
var firstElement = a[0];
var lastElement = a[a.length - 1];
最初と最後の要素を参照しようとすると怒られる。Array#shift()
やArray#pop()
で済むものは置き換えても良いが、若干コストがかかりそうだ。
var s = "foobarbazqux";
if (s.indexOf("foo") === 0) {
...
}
特定の文字列で始まるかどうか調べようとすると怒られる。これはちゃんとSring#startsWith()
で書き換えた。
var s = "foobarbazqux";
if (s.startsWith(foo)) {
s = s.substr(foo - 1);
}
特定の文字列で始まっていたら削除しようとすると怒られる。素直に正規表現を使うのが良いだろう。
var minimist = require("minimist");
var argv = minimist(process.argv.slice(2));
minimistで処理するためにNode.jsの実行ファイルとスクリプトのパスを捨てようとすると怒られる。えっ、これどうしよう……。
つまり配列へのテキトウなアクセスで怒られるということだ。配列の長さと添え字のずれを矯正する1
と0
が問題と言いかえることもできるだろう。代替手段はあるものはあるが、ないものはかなり苦しい対応になる。
{
"rules": {
"no-magic-numbers": [
"error",
{
"ignores": [0, 1]
}
]
}
}
有効にするなら0
と1
を無視する、このような設定が良いかもしれない。
var d = new Date();
var m = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"][d.getMonth()];
月の数字はこうすると設定をカスタマイズせずとも通る。適切な処理だとは思うが、書きたいとはなかなか思わない。Dateオブジェクトが定数としてロケールに応じた月の名前や月の数字を持っていてくれればいいのかな。