Saya sedang menyelidiki percepatan penyelesaian kode potensial saat menggunakan mekanisme penyelesaian kode clang. Alur yang dijelaskan di bawah ini adalah yang saya temukan di rtags , oleh Anders Bakken.
Unit terjemahan diurai oleh file pemantauan daemon untuk perubahan. Ini dilakukan oleh clang_parseTranslationUnitfungsi yang dipanggil dan terkait ( reparse*, dispose*). Ketika pengguna meminta penyelesaian pada baris dan kolom tertentu dalam file sumber, daemon meneruskan unit terjemahan yang di-cache untuk versi terakhir yang disimpan dari file sumber dan file sumber saat ini ke clang_codeCompleteAt. ( Dokumen Clang CodeComplete ).
Bendera yang diteruskan ke clang_parseTranslationUnit(dari CompletionThread :: proses, baris 271 ) adalah CXTranslationUnit_PrecompiledPreamble|CXTranslationUnit_CacheCompletionResults|CXTranslationUnit_SkipFunctionBodes. Bendera yang diteruskan ke clang_codeCompleteAt(dari CompletionThread :: proses, baris 305 ) adalah CXCodeComplete_IncludeMacros|CXCodeComplete_IncludeCodePatterns.
Panggilan ke clang_codeCompleteAtsangat lambat - dibutuhkan sekitar 3-5 detik untuk menyelesaikan bahkan dalam kasus di mana lokasi penyelesaian adalah kode akses anggota yang sah, bagian dari kasus penggunaan yang dimaksud yang disebutkan dalam dokumentasi clang_codeCompleteAt. Ini tampaknya terlalu lambat menurut standar penyelesaian kode IDE. Apakah ada cara untuk mempercepatnya?
CXTranslationUnit_SkipFunctionBodies, CXCodeComplete_IncludeMacros, CXCodeComplete_IncludeCodePatternsdan tidak melihat perbedaan yang signifikan pada basis kode saya bekerja dengan. Semuanya rata-rata sekitar 4 detik per penyelesaian. Saya rasa ini hanya karena ukuran TU. CXTranslationUnit_PrecompiledPreamblememastikan reparseTUsangat cepat. Namun, bahkan dengan CXTranslationUnit_CacheCompletionResults, clang_codeCompleteAtsangat lambat untuk kasus penggunaan saya.