ক্ল্যাংয়ের কোড-সমাপ্তির প্রক্রিয়াটি ব্যবহার করার সময় আমি সম্ভাব্য কোড-সমাপ্তির গতিপথগুলি তদন্ত করছি। নীচে বর্ণিত প্রবাহটি আমি অ্যান্ডারস বেকেনের, আরটি্যাগগুলিতে পেয়েছি ।
অনুবাদ ইউনিটগুলি পরিবর্তনের জন্য ডেমন মনিটরিং ফাইলগুলি পার্স করে। এটি কল clang_parseTranslationUnit
এবং সম্পর্কিত ফাংশন ( reparse*
, dispose*
) দ্বারা সম্পন্ন হয় । যখন ব্যবহারকারী কোনও উত্স ফাইলে প্রদত্ত লাইন এবং কলামে একটি সমাপ্তির জন্য অনুরোধ করে, ডেমন সোর্স ফাইলের সর্বশেষ সংরক্ষিত সংস্করণ এবং বর্তমান উত্স ফাইলটিতে ক্যাশেড অনুবাদ ইউনিটটি পাস করে clang_codeCompleteAt
। ( ঝুঁকির কোড কমপ্লিট ডক্স )।
clang_parseTranslationUnit
( কমপ্লিটথ্রেড :: প্রক্রিয়া, লাইন 271 ) থেকে পাস হওয়া পতাকাগুলি রয়েছে CXTranslationUnit_PrecompiledPreamble|CXTranslationUnit_CacheCompletionResults|CXTranslationUnit_SkipFunctionBodes
। পতাকাগুলি clang_codeCompleteAt
( কমপ্লিটথ্রেড :: প্রক্রিয়া, লাইন 305 থেকে ) এ পাস হয়েছে CXCodeComplete_IncludeMacros|CXCodeComplete_IncludeCodePatterns
।
কলটি clang_codeCompleteAt
খুব ধীর - এটি সমাপ্তির অবস্থান বৈধ সদস্যের অ্যাক্সেস কোড, এর ডকুমেন্টেশনে উল্লিখিত উদ্দেশ্যযুক্ত ব্যবহারের মামলার একটি উপসেট এমনকি এমন ক্ষেত্রেও সম্পূর্ণতা পেতে প্রায় 3-5 সেকেন্ড সময় নেয় clang_codeCompleteAt
। আইডিই কোড-সমাপ্তির মানদণ্ড দ্বারা এটি বেশ ধীর বলে মনে হচ্ছে। এটি দ্রুত করার কোনও উপায় আছে?
CXTranslationUnit_SkipFunctionBodies
, CXCodeComplete_IncludeMacros
, CXCodeComplete_IncludeCodePatterns
এবং কোডবেস আমি কাজ করছি উপর উল্লেখযোগ্য পার্থক্য দেখতে পাইনি। এগুলির সবকটি সম্পূর্ণরূপে গড়ে প্রায় 4 সেকেন্ড। আমি অনুমান করি এটি কেবল টিইউগুলির আকারের কারণে। CXTranslationUnit_PrecompiledPreamble
নিশ্চিত reparseTU
খুব দ্রুত। যাইহোক, এমনকি সঙ্গে CXTranslationUnit_CacheCompletionResults
, clang_codeCompleteAt
আমার ব্যবহারের ক্ষেত্রে যন্ত্রণাদায়কভাবে ধীর হয়।