私は、clang のコード補完メカニズムを使用しているときに、潜在的なコード補完のスピードアップを調査しています。以下に説明するフローは、Anders Bakken によるrtagsで見つけたものです。
翻訳単位は、ファイルの変更を監視するデーモンによって解析されます。これは、呼び出されたclang_parseTranslationUnit
関連関数 ( reparse*
、dispose*
) によって行われます。ユーザーがソース ファイルの特定の行と列で補完を要求すると、デーモンはソース ファイルの最後に保存されたバージョンと現在のソース ファイルのキャッシュされた翻訳単位を に渡しますclang_codeCompleteAt
。( Clang CodeComplete ドキュメント)。
clang_parseTranslationUnit
( CompletionThread::process の 271 行目から)に渡されるフラグはCXTranslationUnit_PrecompiledPreamble|CXTranslationUnit_CacheCompletionResults|CXTranslationUnit_SkipFunctionBodes
. clang_codeCompleteAt
( CompletionThread::process の 305 行目から)に渡されるフラグはCXCodeComplete_IncludeMacros|CXCodeComplete_IncludeCodePatterns
.
の呼び出しclang_codeCompleteAt
は非常に遅いです。完了の場所が正当なメンバー アクセス コードである場合でも、完了を取得するのに約 3 ~ 5 秒かかりますclang_codeCompleteAt
。これは、IDE のコード補完基準では遅すぎるようです。これを高速化する方法はありますか?