Embedded C Code Checker
組み込みC向けの、完全ローカル完結型のコードダブルチェッカーです。QACのような商用ツールや、
外部通信を伴うAI/LLMベースのツールが使えない環境(クローズドな職場環境など)でも動くことを
前提に作られています。tree-sitterによる構文解析のみで完結し、ネットワーク通信は一切行いません。
想定している使い方・対象ユーザー
このツールは、すでにビルドが通っているコードをレビューする側(コードを再確認する担当者・
上位者)が、目視では見落としがちな「意味的な」問題を機械的に拾うことを目的としています。
コードを書いている最中の人がリアルタイムに構文ミスに気づくためのツールではありません。
検出する項目
- 未定義参照・変数の誤記 — スコープ内で宣言されていない識別子への参照
- 参照漏れ — 検査対象フォルダ内のどのファイルにも宣言・定義が見つからないシンボル
- 関数定義の整合性 — プロトタイプ宣言と実装の間で、戻り値の型・引数の数・引数の型が
食い違っている箇所
- キャスト漏れ(ヒューリスティック) — ポインタ変数への
&変数代入で、参照先の型と
明らかに異なるのに明示キャストがない箇所
- 解析エラー箇所の注意喚起 — tree-sitterが構文を正しく読み取れなかった箇所(Information表示)。
この付近は他の検出結果の精度が落ちている可能性があります。
MISRA-Cのような厳密な品質保証は目指しておらず、「広く浅く、怪しい箇所を機械的に拾う」ことを
狙いとしたMVP(試作段階のツール)です。
スコープ外にしていること(意図的な設計判断)
構文エラー(;の後ろの誤字・脱字、閉じ括弧の不足など)は検出しません。 これは実装漏れでは
なく、意図的な役割分担です。
- 構文エラーは、実際のビルド(コンパイラ)が最も確実かつ正確に検出できる領域です。このツールで
重複して検出する意味は薄いと判断しました。
- また、tree-sitterはエラー耐性のある構文解析器のため、曖昧な壊れ方をしたコード(例:
文の途中に予期しない文字列が挟まった場合など)を、構文的には成立する別の解釈に読み替えて
しまうことがあります(Cの古典的な「typedef曖昧性問題」と同種の現象)。この場合、明確な
構文エラーとしては検出されず、静かに誤った解析結果につながる可能性があります。
- このツールの対象ユーザーは「すでにビルドが通っているコードを確認する側」であるため、
ビルドが通らないレベルの構文ミスに遭遇する場面は想定していません。
既知の制約
- 本格的なプリプロセッサ処理はしていません(
#if式の評価、マクロの実展開など)。
- 検査対象フォルダに含まれていない外部ヘッダ(ベンダーSDK、RTOSなど)由来の型・関数・マクロは
認識できません。folder横断チェックは、検査対象として指定したフォルダ内のファイルのみを見ます。
- キャスト漏れの検出は「ポインタ変数への
&変数代入」のパターンに限定しています。数値同士の
暗黙変換(int → uint8_tなど)や、関数の戻り値を介したキャストの欠落は対象外です。
- 型推論エンジンは持たないため、あくまで宣言時の型テキストの単純比較による判定です。
使い方
コマンドパレット(Ctrl+Shift+P)から以下を実行してください。
Cコードチェッカー: フォルダを検査 — エクスプローラーで右クリックしたフォルダ、または
ワークスペース直下を横断的に検査します
Cコードチェッカー: このファイルを検査 — 開いているファイル単体を検査します(軽量版)
Cコードチェッカー: 検査結果をクリア
検出結果は「問題(Problems)」パネルに表示されます。
| |