이전글: https://velog.io/@whitehyun/iOS-Swiftlint를-적용하여-코드-컨벤션-유지하기
지난 시간에서는 Swiftlint 적용법을 알아봤었다. 이번에는 Swiftlint의 룰을 자신의 입맛에 맞게 설정하는 방법을 알아보자!!!
Swiftlint는 75가지 이상의 다양한 룰이 존재한다. 해당 링크를 들어가보자.
들어가면 Rule이 Default Rules
, Opt-in Rules
두 가지로 나뉘게 되는데 차이점은 다음과 같다.
즉, Opt-in Rules는 사용자 설정으로 켤 수 있는 룰이다~ 라고 생각하면 된다.
룰에 대한 설명을 보고싶다면, 클릭시 세부사항을 보여준다. colon
룰을 한 번 클릭하여 살펴보자.
들어가보면, 해당 룰이 어떠한 사항을 갖고 있는지, 언제 트리거가 발동되고, 어떨 때 트리거 작동이 되지 않는지 면밀하게 살펴볼 수 있다.
세부 사항은 다음과 같다.
swiftlint autocorrect
명령어를 먹게 하는지룰을 커스터마이징하기 위해 Empty 파일을 추가해보자.
이름은 .swiftlint.yml
로 고정하여 넣어야 swiftlint 룰 수정이 가능하다!
파일명이 .
으로 시작하기 때문에 경고문구가 뜨겠지만 가뿐히 무시하고 Use "."를 눌러주자.
이제 커스텀 룰을 설정할 준비가 완료되었다. 여러 설정옵션을 지정할 수 있지만 가장 많이 사용되는 네 가지 옵션을 가지고 진행하겠다.
disabled_rules: # 기본 활성화된 룰 중에 비활성화할 룰을 지정
- comma
opt_in_rules: # 기본(default) 룰이 아닌 룰들을 활성화
- empty_count
included: # swiftlint 과정에 포함할 파일 경로
- Source
excluded: # swiftlint를 적용하지 않게 설정할 파일 경로
- Pods
- Carthage
이런 코드가 있다고 해보자
enum ResponseError {
case decoding ,encoding
}
실제로 문제가 없는 코드이지만, 쉼표의 위치가 거슬린다. 이런 경우 swiftlint의 default rule인 comma가 warning을 띄워 사용자에게 고칠것을 요구한다.
하지만 여기서 .swiftlint.yml
에 다음의 코드를 작성하면
disabled_rules:
- comma
오류가 뜨지 않는다..!
이처럼 기본으로 적용되는 룰 중에서 지키고 싶지 않은 룰이 있다면 disabled_rules를 사용해서 제외시키도록 할 수 있다.
let numbers = [Int](1...10)
// codes..
// 배열에 값이 없을 경우
if numbers.count == 0 {
// codes..
}
정상적으로 작동 되는 코드지만 opt_in_rules의 empty_count
를 적용하면 Error가 발생한다(default configuration이 error이기 때문!).
opt_in_rules:
- empty_count
이런 식으로 isEmpty를 의도시켜 코드 컨벤션을 유지할 수 있다. 하지만 count를 이용하는 것도 틀린 것은 아니기에 팀원과 협의해서 정하는 편이 좋다.
included는 swiftlint를 적용시키고 싶은 코드 또는 폴더 경로를, excluded는 swiftlint를 제외하고 싶은 코드 또는 폴더 경로를 작성하여 넣으면 된다. 예를 들어 cocoapods로 추가한 라이브러리를 굳이 swiftlint로 포맷팅할 필요는 없기에 excluded에 경로를 넣는 식으로 활용할 수 있다.