Qt Creator 12: C++ コードモデル更新

前回の投稿では、当時新しく導入されたclangdのサポートを紹介しましたので、それ以降にその領域で起こったことから始めましょう。

Clangd

Qt Creator 7では、clangdがclangコードモデルのデフォルトバックエンドになり、Qt Creator 8では、元のlibclangベースのバックエンドが削除されました。

この取り組みを始めた当初、clangdにはQt対応に必要ないくつかの機能が欠けていました。重要な機能を失わないために、一時的なクライアント側の回避策を追加しましたが、同時にアップストリームで問題を修正するように努めました。これらの回避策のいくつかは、コンピューティングリソースをかなり消費するものでした。特に、セマンティックハイライトは顕著に遅くなりました。なぜなら、テンプレート内の角かっこの可視化などの機能に必要な情報を抽出するために、clangdからドキュメントのASTを取得し、それを調査する必要があったからです。

しかし、現在のclangdを使用すると、関連するすべての機能が正常にアップストリームに取り込まれているため、これ以上回避策を使用する必要はありません。その結果、セマンティックハイライトの大幅な高速化を含むさまざまな改善が実現しました。そのため、まだ行っていない場合は、clangd 17に切り替えることを強くお勧めします。このバージョンはQt Creator 12と一緒に提供されていますので、当社のインストーラーを使用している場合は何もする必要はありません(設定を手動で変更していない場合)。それ以外の場合、ホストOSがまだLLVM 17にアップグレードされていない場合は、こちらから独立したclangdバイナリを入手できます。古いclangdバージョンのサポートをまもなく終了します。

その他のQt Creator 12でのclangd関連の改善点:

  • ヘッダーファイルの変更は、保存後でなく、即座に反映されます
  • シンボルインデックスが同期しなくなるいくつかのシナリオを特定し、修正しました
  • ユーザーは、補完エンジンの選択肢を選ぶことができます

リファクタリング改善

  • シンボルの名前変更は、コメントの内容も考慮されるようになりました
  • 関数のドキュメントコメントは、宣言から実装へ、またはその逆に移動することができます
  • コメントブロックは、CとC++スタイルの切り替えができます
  • ユーザーは、ファイル内のすべてのコメントブロックを一度に折りたたんだり展開したりすることができます
  • クイックフィックスによって挿入されたコードは、自動的にフォーマットされます(ClangFormatが有効で、完全なフォーマットに設定されている場合)

上記の一覧からもわかるように、コメントに関連する機能にはかなりの力を注いできました。以下のビデオでは、それらが実際に動作している様子をご覧いただけます。


comment-refactorings

その他のコードモデル改善

  • エディタのコンテキストメニューを再構築し、関連するアクションをグループ化しました。また、コンテキストメニューは ツール > C++ のメニューと同期しています
  • C++の設定にも、プロジェクトごとの設定が追加されました(具体的には「ドキュメントコメント」および「ファイル名」)

今後の展開

現在、clangdの「tweaks」インフラストラクチャを利用して、リファクタリング機能を強化するための調査を行っています。すでに非スコープ化された列挙型をスコープ化された列挙型に変換する機能を追加しました(clangd 18で利用可能)。また、より複雑なシナリオで信頼性の高い結果を得るために、「関数定義の作成」クイックフィックスを将来的にclangdに基づいて開発する予定です。


Blog Topics:

Comments