Skip to main content

C++ 코드에 clang-tidy 사용하기

clang-tidy는 C/C++/Objective-C 코드를 자동으로 검사하여 스타일 위반, 프로그래밍 오류, 그리고 모범 사례를 확인하는 도구이다.

Electron의 clang-tidy 통합은 npm run lint:clang-tidy로 실행할 수 있는 린터 스크립트로 제공된다. clang-tidy는 디스크 상의 파일을 검사하지만, Electron을 빌드해야 어떤 컴파일러 플래그가 사용되었는지 알 수 있다. 스크립트에는 필수 옵션인 --output-dir이 있으며, 이 옵션은 스크립트에 어떤 빌드 디렉토리에서 컴파일 정보를 가져올지 알려준다. 일반적인 사용법은 다음과 같다: npm run lint:clang-tidy --out-dir ../out/Testing

파일명을 제공하지 않으면 모든 C/C++/Objective-C 파일이 검사된다. 특정 파일만 검사하려면 옵션 뒤에 파일명을 전달하면 된다: npm run lint:clang-tidy --out-dir ../out/Testing shell/browser/api/electron_api_app.cc

clang-tidy긴 목록의 가능한 검사 항목을 가지고 있지만, Electron에서는 기본적으로 몇 가지만 활성화되어 있다. 현재 Electron은 .clang-tidy 설정 파일을 가지고 있지 않으므로, clang-tidysrc/.clang-tidy에서 Chromium의 설정 파일을 찾아 Chromium이 활성화한 검사 항목을 사용한다. --checks= 옵션을 사용해 어떤 검사 항목을 실행할지 변경할 수 있다. 이 옵션은 clang-tidy에 직접 전달되므로, 자세한 내용은 clang-tidy 문서를 참고한다. 와일드카드를 사용할 수 있으며, 검사 항목을 비활성화하려면 -를 접두사로 붙이면 된다. 기본적으로 나열된 검사 항목은 .clang-tidy에 있는 항목에 추가되므로, 특정 검사 항목만 제한하려면 먼저 모든 검사 항목을 제외한 후 원하는 항목을 다시 추가해야 한다. 예를 들어 --checks=-*,performance*와 같이 사용할 수 있다.

clang-tidy를 실행하는 것은 상당히 느리다. 내부적으로 각 파일을 컴파일한 후 검사를 실행하므로, 항상 컴파일보다 몇 배 더 느리다. --jobs|-j 옵션을 사용해 병렬 실행으로 속도를 높일 수 있지만, clang-tidy는 검사 중 많은 메모리를 사용하므로 메모리 부족 오류가 쉽게 발생할 수 있다. 따라서 기본 작업 수는 하나로 설정되어 있다.