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_parseTranslationUnit
funzioni 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_IncludeCodePatterns
e 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_PrecompiledPreamble
assicura reparseTU
è molto veloce. Tuttavia, anche con CXTranslationUnit_CacheCompletionResults
, clang_codeCompleteAt
è dolorosamente lento per il mio caso d'uso.