Badam potencjalne przyspieszenia uzupełniania kodu podczas korzystania z mechanizmu uzupełniania kodu Clang. Przepływ opisany poniżej jest tym, co znalazłem w rtagach autorstwa Andersa Bakkena .
Jednostki tłumaczeniowe są analizowane przez demona monitorujące pliki pod kątem zmian. Robią to wywołane clang_parseTranslationUnit
i powiązane funkcje ( reparse*
, dispose*
). Gdy użytkownik zażąda uzupełnienia w danej linii i kolumnie w pliku źródłowym, demon przekazuje buforowaną jednostkę tłumaczeniową dla ostatnio zapisanej wersji pliku źródłowego i bieżącego pliku źródłowego do clang_codeCompleteAt
. ( Dokumenty Clang CodeComplete ).
Flagi przekazywane do clang_parseTranslationUnit
(z CompletionThread :: process, wiersz 271 ) to CXTranslationUnit_PrecompiledPreamble|CXTranslationUnit_CacheCompletionResults|CXTranslationUnit_SkipFunctionBodes
. Flagi przekazane do clang_codeCompleteAt
(z CompletionThread :: process, wiersz 305 ) to CXCodeComplete_IncludeMacros|CXCodeComplete_IncludeCodePatterns
.
Wywołanie clang_codeCompleteAt
jest bardzo powolne - uzyskanie zakończenia zajmuje około 3-5 sekund, nawet w przypadkach, gdy lokalizacją zakończenia jest prawidłowy kod dostępu członka, podzbiór zamierzonego przypadku użycia wymieniony w dokumentacji clang_codeCompleteAt
. Wydaje się to zbyt wolne w świetle standardów uzupełniania kodu IDE. Czy jest sposób, aby to przyspieszyć?
CXTranslationUnit_SkipFunctionBodies
, CXCodeComplete_IncludeMacros
, CXCodeComplete_IncludeCodePatterns
i nie zobaczyć znaczną różnicę w kodzie pracuję z. Wszystkie z nich mają średnio około 4 sekund na ukończenie. Wydaje mi się, że dzieje się tak tylko z powodu rozmiaru jednostek tłumaczeniowych. CXTranslationUnit_PrecompiledPreamble
zapewnia, że reparseTU
jest bardzo szybki. Jednak nawet z CXTranslationUnit_CacheCompletionResults
, clang_codeCompleteAt
jest boleśnie powolny w moim przypadku użycia.