Я изучаю потенциальные ускорения завершения кода при использовании механизма завершения кода clang. Ниже описан поток, который я нашел в rtags Андерсом Баккеном.
Единицы перевода анализируются файлами мониторинга демонов для изменений. Это делается с помощью clang_parseTranslationUnit
и связанных функций (reparse*
, dispose*
). Когда пользователь запрашивает завершение в заданной строке и столбце в исходном файле, демон передает кешированный блок перевода для последней сохраненной версии исходного файла и текущего исходного файла в clang_codeCompleteAt
. (Clang CodeComplete docs).
Флаги, переданные в 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. Есть ли способ ускорить это?