[Rust] clippy 커스텀하기

clippy는 Rust 도구 집합에 내장된 유용한 lint 도구다.
초기에는 서드파티였지만, 어느 시점부터 표준 도구에 포함되었다.




기본 사용법

기본적인 사용법은 별게 없다.
그냥 cargo clippy 치면 현재 기준으로 검색되는 모든 코드에 대해서 검사를 수행한다.

그럼 이렇게 잔뜩 잔소리를 뿌려주는 것이다.




lint 허용/비허용 처리

clippy가 lint를 활성화시키고 비활성화시키는건 기본적으로 코드 레벨에서 이루어진다.
매니페스트 형식이 있긴 한데, 기능 범위가 현재로서는 제한적이다.

만약 특정 clippy 잔소리를 무시하게 하고 싶다면, warning과 비슷하게 allow 처리를 하기만 해도 된다.

이러면 저 특정 린트에 대해서만 잔소리를 하지 않는다.

이건 CLI flag로 설정할 수도 있다.

이건 위의 #![allow(clippy::single_match)]와 동등하다.

모든 린트를 끄고, 특정 린트만 활성화시키고 싶을 수도 있다.
그런 경우에는 모든걸 allow해서 해제한 다음에 필요한 것만 선별적으로 워닝을 날리게 만들면 된다.

이렇게 말이다.

CI나 기타 이유로, clippy 보고를 warning이 아니라 에러로 되길 원할 수도 있다.
그럴때는 deny를 사용하면 된다.

이제는 에러로 터진다.




clippy 매니페스트로 린트 커스텀하기

근데 기본 clippy 설정만으로는 뭔가 부족할 수도 있다.
추가적으로 규칙을 정의해서 제약하고 싶을 수도 있다면 clippy 파일을 정의해서 써야한다.

clippy 매니페스트 파일은 루트 경로에 ".clippy.toml"이나, "clippy.toml"를 두면 자동으로 인식한다.

전체 린트 옵션 목록은 아래 문서에서 확인 가능하다.
https://rust-lang.github.io/rust-clippy/master/index.html

예를 들어, 허용하지 않는 변수 이름을 정의하고 싶다면, 이런 식으로 할 수 있다.
disallowed-names라는 사전 정의된 린트 옵션을 사용하는 것이다.

이러면 블랙리스트에 포함된 텍스트와 동일한 변수가 있을때, 그걸 린트 경고로 던진다.

그 외에도 정말 다양한 린트 옵션들이 잔뜩 제공된다. 필요한 것들을 골라서 갖다쓰면 된다.




workspace 단위의 린트 규칙 정의

단일 crate만 쓴다면 이런 고민을 할 필요가 없지만, 단일 워스크페이스에 여러개의 crate를 두고 관리할 경우에는 워크스페이스 단위의 설정으로 하위 crate에 공통적인 lint 규칙을 정의할 수 있다.

이 경우에는 workspace의 최상위 Cargo.toml에 먼저 규칙을 정의해줘야 한다.
내 경우에는 공통적인 허용 규칙, ingnore 규칙을 정의했다.

그리고 워크스페이스에 속한 하위 crate들에 저 린트를 적용하려면, 이렇게 한줄만 추가해주면 된다.

그럼 설정값을 상속받아서 적용하게 될 것이다.



참조
https://doc.rust-lang.org/clippy/configuration.html
https://doc.rust-lang.org/clippy/lint_configuration.html