콘텐츠로 이동

Lint

문제

새 lint 규칙을 추가했습니다. 실행하니 초록이 떴습니다. 이 규칙이 실제로 무엇인가를 잡고 있는지, 아니면 처음부터 아무것도 걸리지 않는 채로 통과하고 있는지 확신할 수 없습니다.

추천

새 게이트는 고치기 전에 먼저 실패시켜 exit 1이 나오는지부터 확인합니다. 정규식 하나만 어긋나도 검사는 조용히 전부 통과하고, 그 축은 죽은 채로 초록이 됩니다.

이유

반복해서 낡는 문서 항목을 lint 규칙으로 승격해도, 정규식이 실제 대상을 정확히 매칭하지 못하면 낡은 내용이 그대로 통과합니다. 사람만 읽는 표나 설명일수록 이런 경우를 아무도 눈치채지 못합니다.

원인은 lint가 “실패를 낼 수 있는지” 자체를 확인하지 않고 “통과했는지”만 확인하기 때문입니다. 새 규칙을 넣고 곧장 초록을 봤다면, 그 초록이 “검사를 통과했다”인지 “검사가 애초에 아무것도 안 본다”인지 구별할 수 없습니다.

lint에서 소스를 직접 import해 값을 검사하는 방법도 있습니다. 하지만 import하면 의존 그래프가 딸려 와 런타임 API 변경에 걸려 죽습니다. 필요한 것은 값이 아니라 표기이므로, 텍스트 대조가 더 싸고 런타임 버전에 무관합니다.

예시

순서를 고정합니다.

1. 검사 추가
2. 일부러 어긋나게 만들어 실패 확인 (exit 1)
3. 수정
4. 초록 확인

2번을 건너뛰면 3번과 4번은 아무 의미가 없습니다. 통과한 이유가 “고쳐서”인지 “애초에 안 봐서”인지 알 수 없기 때문입니다.

하지 말 것

새 규칙을 넣고 바로 초록만 확인하고 끝내기. 실패를 먼저 보지 않으면 그 규칙이 살아 있는지조차 알 수 없습니다.

lint에서 소스를 import해 런타임 의존을 만들기. 표기 대조로 충분한 자리에 실행 가능한 코드를 끌어들이면 버전이 바뀔 때마다 lint가 먼저 죽습니다.