피드로 돌아가기
include-tidy: A Tool to Enforce Include-What-You-Use
Dev.toDev.to
DevOps

Libclang C API 기반의 고정밀 Include-What-You-Use 정적 분석 도구 구현

include-tidy: A Tool to Enforce Include-What-You-Use

Paul J. Lucas2026년 5월 22일15advanced

Context

C/C++ 언어의 명시적 모듈 포함 강제 기제 부재로 인한 빌드 시간 증가 및 플랫폼 간 빌드 파편화 발생. 기존 도구인 IWYU의 불안정한 LLVM API 의존성과 느린 업데이트 주기, 그리고 구현 세부 사항을 노출하는 잘못된 헤더 추천 방식의 한계 노출.

Technical Solution

  • Libclang C API 채택을 통한 Stable API 확보 및 C++ 파서 구현 복잡도 해결
  • 표준 헤더를 Proxy로 설정하여 내부 구현 헤더로의 직접 참조를 방지하는 매핑 로직 설계
  • TOML 기반의 외부 설정 파일 구조를 도입하여 소스 코드 내 특수 주석 의존성 제거
  • __include_tidy__ 매크로 정의를 통한 전처리기 ## 연산자 기반 심볼 인식 공백 해결
  • 더미 코드 삽입 방식을 통한 Libclang AST 분석 한계 극복 및 심볼 참조 무결성 확보

- AST 분석 도구 설계 시 unstable API 대신 stable C Wrapper API 검토 - 전처리기 매크로 확장을 통한 심볼 생성 시 정적 분석기가 인식 가능한 더미 참조 경로 확보 - 라이브러리 구현 세부 사항(Implementation Detail)을 감추기 위한 Proxy 헤더 전략 적용 - 설정 파일 포맷 선정 시 가독성과 파싱 편의성을 고려한 TOML 도입 검토

원문 읽기