リンター
Def:linter
リンターとは, プログラミング言語で記述されたソースコードを静的に解析し, 潜在的なエラー, バグの可能性, スタイル規約違反, 非効率な記述などを検出し, 開発者に警告または改善提案を行うツールである.リンターは, プログラムを実行することなく解析を行う静的解析ツールの一種であり, ソフトウェア品質の向上, 保守性の確保, チーム開発におけるコードスタイルの統一に寄与するものである.
プログラミング言語 $L$ におけるリンターとは,ソースコードの集合 $\mathcal{P}_L$ を入力とし,検出された診断情報[エラー・警告・改善提案など]の有限集合 $\mathcal{D}$ を出力とする写像である.
リンター $\mathcal{L}$ は次のように定義される.\[\mathcal{L} : \mathcal{P}_L \to \mathcal{D}^*\]ここで,
- $\mathcal{P}_L$ は言語 $L$ のソースコードの集合である
- $\mathcal{D}$ は診断情報の集合である[例:未使用変数,型不一致,スタイル違反など]
- $\mathcal{D}^*$ は $\mathcal{D}$ 上の有限列の集合[リスト]または集合としての診断情報.すなわち,\[\mathcal{D}^* = \bigcup_{n \in \mathbb{N}} \mathcal{D}^n .\]
従って,リンターは「ソースコードを入力とし、その静的解析結果を有限個の診断情報として返す写像」である.
代表的なリンター
- JavaScript / TypeScript
- ESLint:最も広く使用される.高度にカスタマイズ可能
- JSHint:JSLint の改良版。ESLint 登場以降は使用減少
- TSLint:TypeScript 専用[現在は非推奨,ESLint に統合]
- Python
- pylint:総合的な静的解析,コード品質スコア表示
- flake8:PEP8 準拠チェック,軽量で高速
- mypy:型注釈に基づく型チェックに特化
- ruff: Rust 製の高速な Python リンター,flake8・pylint の代替を目指す
- C/C++: clang-tidy, cppcheck
- Go
- golint:旧来のリンター[現在は非推奨]
- staticcheck:現在推奨される高機能リンター
- golangci-lint:複数のリンターを統合したメタリンター
- go vet:Go 標準ツールチェーンに含まれる静的解析ツールであり,一見正しいように見えるが実際にはバグを含むコードパターン[例:Printf の引数不一致,無意味な条件式,誤用されやすい構文など]を検出
- Rust
- clippy:Rust コンパイラ公式のリンター拡張であり,コードの可読性,効率性,安全性に関する豊富なルールセットを備える.非推奨な書き方,冗長な記述,誤解を招きやすい構文,パフォーマンス上の潜在的問題などを検出する
Mathematics is the language with which God has written the universe.