Sto indagando su potenziali accelerazioni di completamento del codice durante l'utilizzo del meccanismo di completamento del codice di clang. Il flusso descritto di seguito è quello che ho trovato in rtags , di Anders Bakken.
Le unità di traduzione vengono analizzate da un demone che controlla i file per le modifiche. Questo viene fatto dalle clang_parseTranslationUnitfunzioni chiamate e correlate ( reparse*, dispose*). Quando l'utente richiede un completamento in una determinata riga e colonna in un file sorgente, il demone passa l'unità di traduzione memorizzata nella cache per l'ultima versione salvata del file sorgente e il file sorgente corrente a clang_codeCompleteAt. ( Documenti Clang CodeComplete ).
I flag passati a clang_parseTranslationUnit(da CompletionThread :: process, riga 271 ) sono CXTranslationUnit_PrecompiledPreamble|CXTranslationUnit_CacheCompletionResults|CXTranslationUnit_SkipFunctionBodes. I flag passati a clang_codeCompleteAt(da CompletionThread :: process, riga 305 ) sono CXCodeComplete_IncludeMacros|CXCodeComplete_IncludeCodePatterns.
La chiamata a clang_codeCompleteAtè molto lenta: occorrono circa 3-5 secondi per ottenere un completamento anche nei casi in cui la posizione di completamento è un codice di accesso membro legittimo, un sottoinsieme del caso d'uso previsto menzionato nella documentazione di clang_codeCompleteAt. Questo sembra troppo lento per gli standard di completamento del codice IDE. C'è un modo per accelerare questo processo?
CXTranslationUnit_SkipFunctionBodies, CXCodeComplete_IncludeMacros, CXCodeComplete_IncludeCodePatternse non ho visto una differenza significativa sulla base di codice con cui sto lavorando. Tutti hanno una media di circa 4 secondi per completamento. Immagino che questo sia solo a causa delle dimensioni delle TU. CXTranslationUnit_PrecompiledPreambleassicura reparseTUè molto veloce. Tuttavia, anche con CXTranslationUnit_CacheCompletionResults, clang_codeCompleteAtè dolorosamente lento per il mio caso d'uso.