Baby step - 思考と実験の足跡

日常のちょっとした、気になって試したこと集です。

eslintでmax-lenが指摘されたときに試すこと

eslintとは?

  • JavaScriptの静的解析ツール
  • コードを実行する前にスタイルの統一やバグの発見ができる
  • 検証ルールのカスタマイズや多くのビルドツール・プラグインとの連携が可能

cf.

eslint max-lenとは?

  • 可読性を上げるためのルール
  • 1行に指定した文字数以上書かれている箇所を指摘する

解消事例

1. Vue.jsのcomputedテストをjestで書く時

const subject = ((longArgumentFirst, longArgumentSecond) => ComponentName.computed.longComputedName.call({ longArgumentFirst, longArgumentSecond }));

// こんな感じで使う
// longArgumentFirst = true;
// longArgumentSecond = true;
// expect(subject(longArgumentFirst, longArgumentSecond)).toBeTruthy();

=代入時に丸括弧を使う

const subject = (
  (longArgumentFirst, longArgumentSecond) => ComponentName.computed.longComputedName.call({ longArgumentFirst, longArgumentSecond })
);

AirbnbのJavaScript スタイルガイド では以下のように書かれています。

代入で=の前後に改行を入れない。あなたの代入がmax-lenに違反している場合は、値を丸括弧()で囲むこと。 eslint operator-linebreak

// bad
const foo =
  superLongLongLongLongLongLongLongLongFunctionName();

// good
const foo = (
  superLongLongLongLongLongLongLongLongFunctionName()
);

オブジェクトの中括弧に改行を入れる

const subject = ((longArgumentFirst, longArgumentSecond) => ComponentName.computed.longComputedName.call({
  longArgumentFirst, longArgumentSecond 
}));

ここに改行を入れるのはOKのようです。 先程のと合わせ技も使えます。

const subject = (
  (longArgumentFirst, longArgumentSecond) => ComponentName.computed.longComputedName.call({
    longArgumentFirst, longArgumentSecond
  })
);

eslint-disableを使う

// eslint-disable-next-line max-len
const subject = ((longArgumentFirst, longArgumentSecond) => ComponentName.computed.longComputedName.call({ longArgumentFirst, longArgumentSecond }));

最後の手段。 警告は表示されなくなるが、ルールを無効化しただけなので、できれば避けたい...。

2. importが長い時

import LongLongModuleName from '@/LongLongLongLongLongLongLongLongLongLongPath.vue';

importのときのみmax-lenルールを除外する

'max-len': [
        2,
        80,
        4,
        {
            ignoreUrls: true,
            ignorePattern: /^import\s.+\sfrom\s.+;$/
        }
    ],

cf. javascript - Issues with ESLint "max-len" ignore pattern - Stack Overflow

終わりに

直近ハマったケースへの対策をまとめてみました。