J'étudie les accélérations potentielles de complétion de code tout en utilisant le mécanisme de complétion de code de clang. Le flux décrit ci-dessous est ce que j'ai trouvé dans rtags , par Anders Bakken.
Les unités de traduction sont analysées par un démon surveillant les fichiers pour les changements. Ceci est fait par clang_parseTranslationUnit
les fonctions appelées et associées ( reparse*
, dispose*
). Lorsque l'utilisateur demande une complétion à une ligne et une colonne données dans un fichier source, le démon transmet l'unité de traduction mise en cache pour la dernière version enregistrée du fichier source et le fichier source actuel à clang_codeCompleteAt
. ( Clang CodeComplete docs ).
Les indicateurs passés à clang_parseTranslationUnit
(de CompletionThread :: process, ligne 271 ) sont CXTranslationUnit_PrecompiledPreamble|CXTranslationUnit_CacheCompletionResults|CXTranslationUnit_SkipFunctionBodes
. Les indicateurs passés à clang_codeCompleteAt
(de CompletionThread :: process, ligne 305 ) sont CXCodeComplete_IncludeMacros|CXCodeComplete_IncludeCodePatterns
.
L'appel à clang_codeCompleteAt
est très lent - il faut environ 3 à 5 secondes pour obtenir un achèvement, même dans les cas où l'emplacement d'achèvement est un code d'accès membre légitime, un sous-ensemble du cas d'utilisation prévu mentionné dans la documentation de clang_codeCompleteAt
. Cela semble bien trop lent par rapport aux normes de complétion de code IDE. Y a-t-il un moyen d'accélérer cela?
CXTranslationUnit_SkipFunctionBodies
, CXCodeComplete_IncludeMacros
, CXCodeComplete_IncludeCodePatterns
et ne voit pas de différence significative sur la base de code , je travaille avec. Tous en moyenne environ 4 secondes par complet. Je suppose que c'est juste à cause de la taille des UT. CXTranslationUnit_PrecompiledPreamble
assure reparseTU
est très rapide. Cependant, même avec CXTranslationUnit_CacheCompletionResults
, clang_codeCompleteAt
c'est douloureusement lent pour mon cas d'utilisation.