clang의 코드 완성 메커니즘을 사용하는 동안 잠재적 인 코드 완성 속도 향상을 조사하고 있습니다. 아래에 설명 된 흐름은 Anders Bakken의 rtags 에서 찾은 것입니다 .
변환 단위는 변경 사항을 모니터링하는 데몬 파일에 의해 구문 분석됩니다. 이것은 호출 clang_parseTranslationUnit
및 관련 함수 ( reparse*
, dispose*
)에 의해 수행됩니다 . 사용자가 소스 파일의 지정된 행과 열에서 완료를 요청하면 데몬은 마지막으로 저장된 소스 파일 버전과 현재 소스 파일에 대해 캐시 된 변환 단위를 clang_codeCompleteAt
. ( Clang CodeComplete 문서 ).
clang_parseTranslationUnit
( CompletionThread :: process, 271 행 에서) 전달 된 플래그 는 CXTranslationUnit_PrecompiledPreamble|CXTranslationUnit_CacheCompletionResults|CXTranslationUnit_SkipFunctionBodes
. clang_codeCompleteAt
( CompletionThread :: process, line 305에서 ) 전달 된 플래그 는 CXCodeComplete_IncludeMacros|CXCodeComplete_IncludeCodePatterns
.
에 대한 호출 clang_codeCompleteAt
은 매우 느립니다. 완료 위치가의 문서에 언급 된 의도 된 사용 사례의 하위 집합 인 합법적 인 구성원 액세스 코드 인 경우에도 완료하는 데 약 3-5 초가 걸립니다 clang_codeCompleteAt
. 이것은 IDE 코드 완성 표준에 의해 너무 느리게 보입니다. 속도를 높이는 방법이 있습니까?
CXTranslationUnit_SkipFunctionBodies
, CXCodeComplete_IncludeMacros
, CXCodeComplete_IncludeCodePatterns
내가 작업하고있는 코드베이스에 유의 한 차이를 보이지 않았다. 모두 완료 당 평균 약 4 초입니다. TU의 크기 때문이라고 생각합니다. CXTranslationUnit_PrecompiledPreamble
보장하지만이 reparseTU
매우 빠릅니다. 그러나,와 CXTranslationUnit_CacheCompletionResults
, clang_codeCompleteAt
고통스럽게 내 사용-경우에 느립니다.