GExpertsの新しいバージョンでは、grepユーティリティがより多くの「エキスパート」式をサポートするようになりました。GExperts grepを使って空のtry ... exceptブロックをすべて見つけるにはどうしたらいいですか?
Delphiソースのブロックを除いて、正規表現を使用して空のtry ...を見つける方法が見つかりませんでしたが、どうすればGExperts grepツールでこれを行うことができますか?
GExpertsの新しいバージョンでは、grepユーティリティがより多くの「エキスパート」式をサポートするようになりました。GExperts grepを使って空のtry ... exceptブロックをすべて見つけるにはどうしたらいいですか?
Delphiソースのブロックを除いて、正規表現を使用して空のtry ...を見つける方法が見つかりませんでしたが、どうすればGExperts grepツールでこれを行うことができますか?
私は、GExperts Regexの機能がラインデリミタを越えて検索できるとは思っていません。
TPerlRegExのようなコンポーネントを使用しても構わない場合は、次のコードで独自の検索を開始する必要があります。
var
emptyExceptBlock: TPerlRegEx;
Results: TStringList;
emptyExceptBlock := TPerlRegEx.Create(nil);
emptyExceptBlock.RegEx := except\s+((//.*|/\*.*\*/|\(\*.*\*\))\s+)*end;
emptyExceptBlock.Options := [preExtended];
emptyExceptBlock.Subject := LoadFromFile('YourFile.pas');
Results := TStringList.Create;
if emptyExceptBlock.Match then begin
repeat
Results.Add(emptyExceptBlock.MatchedExpression);
until not emptyExceptBlock.MatchAgain;
end;
挿入オート藤堂というツールがあります(GExpertsの一部ではない、私はCodeCentralにからそれを得たと思います)が自動的に空の開始/終了ブロックにドスを挿入しています。多分それはあなたが欲しいものですか?
"あなたがそれに触れれば、あなたはそれを所有している"というルールに従う - 解析ツールはソースを修正すべきではなく、違反を報告するだけで、オプションでペナルティを提案する) – mjn
"//すべての例外を無視する"のような埋め込みコメントも許可するように正規表現を変更する必要があります。これは技術的にはまだ空の例外ハンドラです。 – mghie
@mghie:正規表現を//、/ * *と(* *)に合わせて調整しました。私は遠くへ行きたい人のための運動としてネストされたコメントを残しました。 –
素晴らしいソリューション!はい、最後のGExpertリリースにはまだ制限があります。 GExpertがTPerlRegExを使って簡単な静的コード解析タスクを実行できるのは非常に興味深い機能です。 (偽陽性があっても) – mjn