Estou investigando possíveis acelerações de conclusão de código ao usar o mecanismo de conclusão de código do clang. O fluxo descrito abaixo é o que encontrei no rtags , de Anders Bakken.
As unidades de tradução são analisadas por um daemon que monitora arquivos para alterações. Isso é feito por clang_parseTranslationUnitfunções chamadas e relacionadas ( reparse*, dispose*). Quando o usuário solicita o preenchimento de uma determinada linha e coluna em um arquivo de origem, o daemon passa a unidade de tradução em cache da última versão salva do arquivo de origem e do arquivo de origem atual para clang_codeCompleteAt. ( Documentos do Clang CodeComplete ).
Os sinalizadores passados para clang_parseTranslationUnit(de CompletionThread :: process, linha 271 ) são CXTranslationUnit_PrecompiledPreamble|CXTranslationUnit_CacheCompletionResults|CXTranslationUnit_SkipFunctionBodes. Os sinalizadores passados para clang_codeCompleteAt(de CompletionThread :: process, linha 305 ) são CXCodeComplete_IncludeMacros|CXCodeComplete_IncludeCodePatterns.
A chamada para clang_codeCompleteAté muito lenta - leva cerca de 3-5 segundos para obter uma conclusão, mesmo nos casos em que o local de conclusão é um código de acesso de membro legítimo, um subconjunto do caso de uso pretendido mencionado na documentação de clang_codeCompleteAt. Isso parece muito lento para os padrões de conclusão de código IDE. Existe uma maneira de acelerar isso?
CXTranslationUnit_SkipFunctionBodies, CXCodeComplete_IncludeMacros, CXCodeComplete_IncludeCodePatternse não viu uma diferença significativa na base de código que eu estou trabalhando. Todos eles em média cerca de 4 segundos por completo. Acho que isso se deve ao tamanho das TUs. CXTranslationUnit_PrecompiledPreamblegarante reparseTUé muito rápido. No entanto, mesmo com CXTranslationUnit_CacheCompletionResults, clang_codeCompleteAté dolorosamente lento para meu caso de uso.