Rust에는 다양한 warning 로그가 존재합니다.
물론, 모든 warning로그를 지우지 않아도 되지만, 사용하지 않는 코드가 남아있다거나, 불필요한 변수를 선언한 경우 등 다양한 케이스들에도 warning로그가 발생해, 저는 왠만하면 제거하고 있습니다.
그러던 중 [workspace.lints.rust]이라는 것을 알게 되었고, 이를 프로젝트에 적용한 후, cargo build --all-targets --all-features를 실행하게 되면, 숨겨진(?) warning 로그들을 찾아서 알려줍니다.
몇몇 lint들에 대하여 이야기 드리자면
버그 발견
unused_must_use = "warn"을 사용하게 되면 다음과 같은 케이스를 발견할 수 있습니다.
fn process() -> Result<(), Error> {
do_something();
Ok(())
}
process();
해당 경우에는 process()가 아닌 process()?을 사용해야지 맞는 방식입니다.
불필요한 import
unused_imports = "warn"을 사용하게 되면 다음과 같은 케이스를 발견할 수 있습니다.
use std::collections::{HashMap, HashSet};
이렇게 선언되어져 있는데, HashSet을 사용하지 않는 경우, 불필요한 import가 생겨 이런 케이스들은 지우는게 좋습니다.
스타일 통일
non_snake_case = "warn"
non_camel_case_types = "warn"
non_upper_case_globals = "warn"
다음과 같이 선언하고, 사용하게 된다면 여러 사람들이 사용하는 코드 스타일을 하나로 통합할 수 있습니다.
이번에 오픈소스에 기여하는 부분 중, 해당 내용과 관련된 하나의 pr이 merge 되었습니다.
unused_qualifications = "warn"이 내부 코드상으로 주석처리 되어 있었으나, 해당 주석을 해제하고 코드를 수정한 pr이였습니다.
import로 이미 선언되어 있는 부분들 중, 경로 접두사가 표기되어 있는 부분에 대하여 wanring로그를 띄우도록 하고, 이를 전부 수정하였습니다.
[workspace.lints.rust]와 관련 항목들은 rustc -W help를 입력하시면 확인해보실 수 있습니다.
'잡담 > 궁금증 해결' 카테고리의 다른 글
| Timing Attack 방지를 위한 Constant-Time 비교 (0) | 2026.05.25 |
|---|---|
| 죽은 라이브러리 교체부터 보안 이슈 해결까지 (0) | 2026.05.05 |
| PriorityQueue vs Collections.sort: 왜 sort가 더 효율적일까? (0) | 2026.04.27 |
| Rust Vec의 growth strategy (feat. Java) (0) | 2026.03.26 |
| divide zero (0) | 2024.10.27 |
댓글