Upgrade to Pro — share decks privately, control downloads, hide ads and more …

大量の ESLint エラーに対処する技術 / The technology to fight with many ESLint's errors

mizdra
January 12, 2024

大量の ESLint エラーに対処する技術 / The technology to fight with many ESLint's errors

2024/01/12 の ToKyoto.js #2 で話した発表資料です。

mizdra

January 12, 2024
Tweet

More Decks by mizdra

Other Decks in Technology

Transcript

  1. 自己紹介 • mizdra (みずどら) • 株式会社はてな ◦ Web アプリケーションエンジニア ◦

    フロントエンドエキスパート • 興味: 開発者体験向上 ◦ よく便利グッズ作ってる 2
  2. 弊社(はてな)でも使ってます • JS を書くならほぼ必ず導入 • 社内向けの shareable config も ◦

    eslint-config-hatena ◦ OSS です 6 module.exports = { root: true, extends: [ '@hatena/hatena', '@hatena/hatena/+typescript', '@hatena/hatena/+prettier', ], };
  3. 修正するのも困難 • 数が多すぎるので • 一応 ESLint には自動修正機能がある ◦ `eslint --fix`

    ◦ けど、自動修正可能なルールは一部 • 数百個手で修正していく羽目に ◦ やってられない 9
  4. ツールを作った • eslint-interactive ◦ https://github.com/mizdra/eslint-interactive ◦ eslint をラップした CLI ツール

    ◦ 大量のエラーを高速に捌くのに特化 • デモを交えつつ紹介していきます ◦ https://github.com/mizdra/eslint-interactive-demo 12
  5. 使い方 1. `npm install -D eslint-interactive` 2. `eslint …` を

    `eslint-interactive …` に置き換えて実行 a. 例: `eslint src/` => `eslint-interactive src/` (デモタイム) 13
  6. • 一気に `eslint --fix` して commit すると... ◦ ごちゃまぜの commit

    になって、レビューが難しい • rule ごとに修正 & commit したい • eslint-interactive を使えばできる! (デモタイム) 15 1. ルールごとに `eslint --fix` する
  7. • 既存のコードでは無効、新規コードでは有効にしたい • そのために... ◦ ` /* eslint-disable ... */`

    を挿入したい • eslint-interactive を使えばできる! (デモタイム) 16 2. ` /* eslint-disable ... */`の挿入
  8. • 自動修正不可なものを可能な状態に変換するモード • 例: `no-unused-vars` ◦ `const unused = 1`

    => `const _unused = 1`にしたい ◦ しかし、そういう自動修正はできない ◦ そこで... ▪ `const _unused = 1` に自動修正する rule に convert ▪ それを `eslint –-fix` する 17 3. 自動修正可能なエラーに強制変換
  9. • Node.js 向けの API ◦ プログラマブルに eslint-interactive の機能を呼び出せる • 例:

    rule ごとに `eslint --fix` しつつ `git commit` (デモタイム) 20 4. Programmable API