5

バックグラウンド

プロジェクト全体で一貫した命名規則を適用するためにリファクタリングしたいレガシー 60kloc g++ プロジェクトを継承しました。

質問

次のリストを生成できる無料/オープンソースの静的分析ツールはありますか?

  • グローバル シンボル
  • クラス名
  • メンバー メソッド (可能であれば public/protected/private)
  • メンバー変数
  • 静的メソッド
  • ローカル シンボル (おそらくこれらは無視されます)
  • 私が見逃したかもしれないが、コードのリーダーに影響を与える可能性のある他のシンボル

アプローチ

私の意図は、vim を使用して生成されたシンボルのリストを編集し、Ruby スクリプトを使用して非常に大まかな検索と置換/シンボルのマッピングを行い、少なくとも命名規則が一貫するようにすることです。

手順は少し見苦しく、最初のコンパイルは失敗すると思いますが、より読みやすいコード セットがあれば、手で問題を修正して問題を解決することは問題ありません。

大規模な C++ コード ベースの開発者は、この種のリファクタリングを行うためにどのような種類のツールを使用していますか?

4

2 に答える 2

1

C++ の自動リファクタリングは、一部はプリプロセッサ (マクロとファイル インクルード) と関係があるため、非常に困難ですが、ほとんどの場合、解析、名前検索、および残りの意味解析フェーズ (テンプレートのインスタンス化、定数式、オーバーロード) との間の相互依存関係に関係しています。解像度など)。私が取り組んできた非常に大規模な C++ コードベースでは、自動リファクタリングはまったく行われておらず、固有の難しさのために、リファクタリング ツールの品質は低いものでした。

ただし、特にモジュール式のフロントエンドを備えているため、他のツールよりも優れた方法でASTにアクセスできるclangの出現以来、それに基づくより優れたリファクタリングツールがいくつかあるかもしれませんが、私は息を止めません.

clang からの AST ダンプを見てみましょう。XML にスクリプトを記述して、手動でリファクタリングするための出発点となるダンプを提供することができます。

于 2013-06-16T06:10:17.963 に答える