我正在研究使用 clang 的代码完成机制时潜在的代码完成加速。下面描述的流程是我在 AndersBakken 的 标签中发现的。
翻译单元由守护进程监视文件解析以进行更改。这是由所谓的 clang_parseTranslationUnit
和相关函数(reparse*
,dispose*
)完成的。当用户在源文件的给定行和列请求完成时,守护进程将源文件的最后一个保存版本和当前源文件的缓存翻译单元传递给 clang_codeCompleteAt
。(Clang CodeComplete 文档).
传递给 clang_parseTranslationUnit
(来自 Process,第271行)的标志是 CXTranslationUnit_PrecompiledPreamble|CXTranslationUnit_CacheCompletionResults|CXTranslationUnit_SkipFunctionBodes
。传递给 clang_codeCompleteAt
(来自 Process,第305行)的标志是 CXCodeComplete_IncludeMacros|CXCodeComplete_IncludeCodePatterns
。
对 clang_codeCompleteAt
的调用非常慢——即使在完成位置是合法的成员访问代码(clang_codeCompleteAt
文档中提到的预期用例的子集)的情况下,也需要大约3-5秒才能完成。按照 IDE 代码完成标准,这似乎太慢了。有什么办法能加快进度吗?