Я досліджую потенційні скорочення заповнення коду, використовуючи механізм заповнення коду Кланг. Нижче описаний потік - це те, що я знайшов у rtags від Anders Bakken.
Одиниці перекладу аналізуються файлами моніторингу демонів щодо змін. Це робиться за допомогою викликаних 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. Чи є спосіб прискорити це?
CXTranslationUnit_SkipFunctionBodies
, CXCodeComplete_IncludeMacros
, CXCodeComplete_IncludeCodePatterns
і не бачу суттєву різницю на кодовому я працюю с. Усі вони в середньому становлять близько 4 секунд на повну. Я здогадуюсь це тільки через розмір TU. CXTranslationUnit_PrecompiledPreamble
забезпечує reparseTU
дуже швидко. Тим НЕ менше, навіть з CXTranslationUnit_CacheCompletionResults
, clang_codeCompleteAt
болісно повільно для мого сценарію використання.