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_parseTranslationUniti 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_codeCompleteAtjest 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_IncludeCodePatternsi 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_PrecompiledPreamblezapewnia, że reparseTUjest bardzo szybki. Jednak nawet z CXTranslationUnit_CacheCompletionResults, clang_codeCompleteAtjest boleśnie powolny w moim przypadku użycia.