Я досліджую потенційні скорочення заповнення коду, використовуючи механізм заповнення коду Кланг. Нижче описаний потік - це те, що я знайшов у 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болісно повільно для мого сценарію використання.