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_parseTranslationUnit
fungsi 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_codeCompleteAt
sangat 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_IncludeCodePatterns
dan 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_PrecompiledPreamble
memastikan reparseTU
sangat cepat. Namun, bahkan dengan CXTranslationUnit_CacheCompletionResults
, clang_codeCompleteAt
sangat lambat untuk kasus penggunaan saya.