[iOS] Swiftlint 룰 적용하기

홍승현·2022년 8월 21일
2

SwiftLint

목록 보기
2/2

이전글: https://velog.io/@whitehyun/iOS-Swiftlint를-적용하여-코드-컨벤션-유지하기

지난 시간에서는 Swiftlint 적용법을 알아봤었다. 이번에는 Swiftlint의 룰을 자신의 입맛에 맞게 설정하는 방법을 알아보자!!!

Swiftlint Rule

Swiftlint는 75가지 이상의 다양한 룰이 존재한다. 해당 링크를 들어가보자.

들어가면 Rule이 Default Rules, Opt-in Rules 두 가지로 나뉘게 되는데 차이점은 다음과 같다.

  1. Default Rules: 기본적으로 적용되는 룰
  2. Opt-in Rules: 기본적으로 적용되지 않고 비활성화되어있는 룰

즉, Opt-in Rules는 사용자 설정으로 켤 수 있는 룰이다~ 라고 생각하면 된다.

Rule Info

룰에 대한 설명을 보고싶다면, 클릭시 세부사항을 보여준다. colon 룰을 한 번 클릭하여 살펴보자.

들어가보면, 해당 룰이 어떠한 사항을 갖고 있는지, 언제 트리거가 발동되고, 어떨 때 트리거 작동이 되지 않는지 면밀하게 살펴볼 수 있다.

세부 사항은 다음과 같다.

  • Identifier: 룰의 고유 id
  • Enabled by default: swiftlint 기본 포맷팅으로 작동하는지
  • Supports autocorrection: swiftlint autocorrect 명령어를 먹게 하는지
  • Kind: 룰의 종류
  • Analyzer rule: 이건 잘 모르겠다.
  • Minimum Swift compiler version: Swift 컴파일러 최소 지원버전
  • Default configuration: warning 혹은 error로 알림

룰 커스텀

룰을 커스터마이징하기 위해 Empty 파일을 추가해보자.


이름은 .swiftlint.yml로 고정하여 넣어야 swiftlint 룰 수정이 가능하다!

파일명이 .으로 시작하기 때문에 경고문구가 뜨겠지만 가뿐히 무시하고 Use "."를 눌러주자.


이제 커스텀 룰을 설정할 준비가 완료되었다. 여러 설정옵션을 지정할 수 있지만 가장 많이 사용되는 네 가지 옵션을 가지고 진행하겠다.

disabled_rules: # 기본 활성화된 룰 중에 비활성화할 룰을 지정
	- comma

opt_in_rules: # 기본(default) 룰이 아닌 룰들을 활성화
	- empty_count
    
included: # swiftlint 과정에 포함할 파일 경로
	- Source
    
excluded: # swiftlint를 적용하지 않게 설정할 파일 경로
	- Pods
    - Carthage

1. disabled_rules

이런 코드가 있다고 해보자

enum ResponseError {
  case decoding ,encoding
}

실제로 문제가 없는 코드이지만, 쉼표의 위치가 거슬린다. 이런 경우 swiftlint의 default rule인 comma가 warning을 띄워 사용자에게 고칠것을 요구한다.

하지만 여기서 .swiftlint.yml에 다음의 코드를 작성하면

disabled_rules:
	- comma

오류가 뜨지 않는다..!
이처럼 기본으로 적용되는 룰 중에서 지키고 싶지 않은 룰이 있다면 disabled_rules를 사용해서 제외시키도록 할 수 있다.

2. opt_in_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와 excluded

included는 swiftlint를 적용시키고 싶은 코드 또는 폴더 경로를, excluded는 swiftlint를 제외하고 싶은 코드 또는 폴더 경로를 작성하여 넣으면 된다. 예를 들어 cocoapods로 추가한 라이브러리를 굳이 swiftlint로 포맷팅할 필요는 없기에 excluded에 경로를 넣는 식으로 활용할 수 있다.

profile
블로그 이전: https://www.whitehyun.com

0개의 댓글