Lint

lint とは、主にC言語のソースコードに対し、コンパイラよりも詳細かつ厳密なチェックを行なうプログラムである。静的解析ツールとも呼ばれる。以下に挙げるように、コンパイラではチェックされないが、バグの原因になるような曖昧な記述についても警告される。構文（シンタックス）レベルのチェックだけでなく、意味（セマンティクス）レベルのチェックまで実行するものもある。
は、もともと「糸くず」や「綿ぼこり」といった意味を持つ英単語である。
lintで警告が出る例.
int foo(int count) {
 int sum = 0;
 int i;
 for (i = 1; i <= count; ++i) {
 sum += i;
 if (sum >= 100) {
 return sum;
上記の例の場合、codice_1 は、codice_2 が100以上であれば値を返すが、それ以外の時には値を返さない。これはC言語の構文的には合法だが、実行時エラーなどの未定義動作を引き起こす。そのため、lint では警告が出る。
ただ、のコンパイラは、細かな警告やエラーを出す機能が強化されているため、以前は lint を使わなければ検出できなかった類のミスも、コンパイル段階で検出できるようになっているものがある。上記の例は、Microsoft Visual C++では既定で C4715 の警告が生成され、コンパイルオプションcodice_3を指定することでコンパイルエラーになる。GCCやClangではコンパイルオプションcodice_4を指定することで警告が生成され、またcodice_5を指定することでコンパイルエラーになる。
後発のプログラミング言語では安全性を考慮して、上記のようなコードを常に非合法とし、必ずコンパイルエラーにしてしまう仕様となっているもののほうが多い。C言語およびC++では、仕様により動作が厳密に規定されていない事項（未規定動作、処理系定義動作、未定義動作）が非常に多く、そのためコンパイラやlintによる警告に頼らなければならないことが多い。
「lint」の派生用法.
転じて、C言語に限らず、各種プログラミング言語で書かれたコードに対して構文チェックや静的解析を行なうプログラムも、lintと呼ばれるようになった。この意味でのlintの代表例としては、HTMLの構文チェックを行なうAnother HTML-lintがある。Android StudioではJavaおよびKotlinで書かれたコードに対して静的解析を実行するツールとしてlintが利用可能である。
また、コードをチェック・解析する動作をlint/linting、lintを行なうプログラムをlinterと呼ぶこともある。ClangベースのC++ linterとしては、Clang-Tidyがある。
コンパイラが存在する言語の場合、静的コード解析にコンパイラとlinterを併用することで、字句/構文チェックと意味論的チェックを実現できる。コードエディター上でリアルタイムに動作するlinterを利用すれば、コーディングしながら常時lintingを行なえる。例えばVisual Studio Code上でTypeScriptコードを書く場合、字句/構文チェックを担うcodice_6とlintingを担うcodice_7を用いてコーディング中に常時静的コード解析が走る状態を実現できる。モダンな統合開発環境では、名称は異なれど一般的に何らかの静的コード分析ツールが最初から組み込まれていて、問題のある個所をコードエディター上でハイライト表示したり、分析結果一覧をリスト表示したりする機能が標準的に利用できるようになっている。
lintingを行なっても即座にバグが発見されるわけではない。lintingの主な目的は低品質コードの検出によるバグの予防である。言語構文に合致しているコードはコンパイルエラーにならないが、実行時エラーや意図しない動作、あるいはメンテナンス性や移植性の低下などの潜在的問題を引き起こす可能性のあるコードはlintエラーになることがある。また、linterの出す警告は一般的なコンパイラ警告よりも細やかな分析結果となる。linterは「エラーをしばしば引き起こすパターン」あるいは「エラーを避けるベストプラクティスパターン」を用いて品質の低いコードを検出する。検出された低品質コードを改善することにより、バグが埋め込まれる可能性を低減しバグを予防できる。