Я изучаю потенциальные ускорения завершения кода при использовании механизма завершения кода 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. Есть ли способ ускорить это?