正規表現を使用してテキストを検索できるツール ( grepなど)を使用して、まともな仕事ができることを期待しています。
正規表現は次のようになります。
"catch\W*\(.*\)\W*{\W*Log\.log"
ここで、W は、空白と改行を検出する空白認識エンジンを表します。
あなたのパターンは十分にユニークです。プログラマーがあなたが示した規則と一致していれば、誤ヒットはほとんどないと思います。
[編集] OPが示す
次のことを行っていないキャッチブロックを探しています-「+例外」:
try { do something.... }
catch (Throwable exception)
{ Log.log("<<custom message>>" + exception)
かなりまともなハックとして、正規表現に戻ります。Log.log("<<....>" を呼び出していない場所、または呼び出している場合、次の "+exception" がない場所を探す必要があります。 "not" 演算子ですが、可能です。catch 句が存在し (別の正規表現テスト)、Log.log 呼び出しが存在すると仮定すると、おそらく次のようになります。
"catch\W*\(.*\)\W*{\W*Log\.log\(\".*\+^[\+]"
最後のチェックでは、「+」が存在するかどうかを確認します。これに一致するものには「+」がありません。
私たちのソース コード検索エンジン (SCSE) は、正規表現ではなく言語の語彙素を使用して簡単な検索を可能にするため、言語の語彙素に関して書かれた少し変わったクエリ言語を持っています。また、大規模な「否定」も可能です。2 つの領域でヒットを差し引くことができます。これは非常に便利です。これは、次のクエリでうまくいくことを意味します。
'catch' '(' I I ')' '{' I - I=Log '.' I=log '(' S '+' I ')'
(マイナス記号) 結果から。したがって、最終的な結果は「ロギング ステップで始まらない catch 句」になります。
より高度なチェックでは、catch 句とロギング句を見つけて、ロギング句が catch ブロック内のどこにも発生していないことを確認する必要があります。SCSE だけでこれを行うことはできません。これを判断するには、AST を解析して構築するより高度なエンジンを使用できます。OPがさらに詳しく説明したい場合は、これもできるツールを知っています。