Clangコードモデル
コードモデルとは、アプリケーションを書くために使用している言語を理解するIDEの一部です。これはQt Creator が以下のサービスを提供するためのフレームワークです:
- コード補完
- 構文と意味のハイライト
- ロケータを使用したコード内の移動、シンボルをたどるなど。
- クラス・ブラウザーや アウトラインなどを使ったコードの検査
- 診断
- ツールチップ
- 記号の検索
- シンボルの名前を変更する
- クイック修正
Clangコードモデル・プラグインはClangd上でC++のためにこれらのサービスの一部を提供します。
Clangコードモデルについて
Clangプロジェクトには、C言語ファミリーのソースファイルを解析するためのライブラリがあります。警告やエラーマーカーを通して得られるフィードバックはコンパイラが与えてくれるものと同じで、組み込みのQt Creator コードモデルを使うときのような不完全なセットや近似値ではありません。Clangは診断のための詳細な情報に重点を置いており、例えばコードにタイプミスがあった場合にとても便利です。私たちはLSPサーバを実装したclangdツールを使ってこれらのライブラリを利用しています。
ClangはC++言語の発展に対応している。この記事を書いている時点では、C++98/03、C++11、C++14、C++17、C89、C99、Objective-C、Objective-C++をサポートしている。
欠点としては、大規模なプロジェクトではClangをコード・モデルとして使うと、組み込みのコード・モデルを使うよりも遅くなる。Clangはオブジェクト・ファイルを生成する必要はありませんが、ソース・ファイルを解析して分析する必要があります。STLだけを使う小さなプロジェクトでは、これは比較的速いです。しかし、複数のファイルを含む大きなプロジェクトでは、1つのファイルと含まれる全てのファイルを処理するのに時間がかかることがあります。
Clangコード・モデル・プラグインは、組み込みのC/C++コード・モデルと同じサービスをいくつか提供するようになりました:
- コード補完
- 構文と意味のハイライト
- 診断
- シンボルのアウトライン
- ツールチップ
- 記号のフォロー
- 記号の名前を変更する
- 記号の出現箇所の検索
代わりに組み込みのコードモデルを使うには、Preferences>C++ >clangd を選択し、Use clangd をクリアします。この設定はプロジェクト・レベルにもあるので、Clangベースのサービスを通常は有効にして、特定のプロジェクトではオフにしたり、その逆もできます。
Clangの診断は以下のように設定できます:
- Clang コードモデル(グローバルまたはプロジェクトレベル)
- Clangツール(グローバルまたはプロジェクトレベル)
Clangdインデックス
clangdインデックスは、複雑なコンストラクトであっても、参照の検索、カーソル下のシンボルの追跡、ロケータの使用などのサービスに対して、正確で完全な結果を提供します。プロジェクトを開くと、clangd はインデックスを生成するためにソースファイルをスキャンします。大きなプロジェクトの場合、これには時間がかかることがありますが、インデックスは永続的で、再スキャンはインクリメンタルなので、Qt Creator を終了して再スタートしても何も失われません。
グローバル・インデックスを一時的に無効にするには、Toggle Progress Details (1)を選択し、プログレス・バーでX を選択します。

デフォルトでは、Qt Creator はプロジェクトごとに1つの clangd プロセスを実行します。関連するプロジェクトを持つセッションを作成した場合、そのセッションのプロジェクトを1つの clangd プロセスで管理するように指定することができます。
アウトラインビューのドキュメントアウトラインはclangdのドキュメントシンボルサポートに支えられており、以前よりも信頼性の高い結果を得ることができます。
C++ コードモデルの設定,clangd の設定の指定,Clang ツールの設定の指定,コンパイルデータベースの使用,コードモデル,Clangdも参照してください 。
Copyright © The Qt Company Ltd. and other contributors. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.