私は、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 のコード補完基準では遅すぎるようです。これを高速化する方法はありますか?