LuckVII_2(Swiftlint)

봄이아빠·4일 전
1

Sparta Project

목록 보기
9/10

Swiftlint

이번 프로젝트를 진행하며 밤을 새던 새벽에 문득 코드 컨벤션이 하나도 안 지켜지고 있단 생각이 들었다.
그러나 이번 프로젝트의 swift파일은 약 50개,,

일일이 수정하지 않으면서 가독성과 코드 일관성을 높이고 과도하게 긴 객체나 메서드를 찾고자 수업시간에 배운 swiftlint를 활용해보고자 했다.

swiftlint란 코드 스타일 가이드와 규칙을 기반으로 문제가 되는 코드를 탐지하고 경고해주며 수정가능한 간단한 사항들은 자동으로 수정까지 해주는 linting툴이다.

주로 띄어쓰기, 네이밍 규칙, 줄 길이 제한, 들여쓰기 등에 대해 검사한다.
또 빌드 과정에 스크립트로 통합시킬 수 있어 자동으로 규칙 위반을 감지할 수도 있다.
어떤 분은 TODO주석으로 할 일들을 기록해두어 놓치지 않기 위해 TODO주석에 대해 경고를 남기도록 설정해두시기도 한다고.

그외에도 강제 언래핑을 막거나 치명적인 에러가 발생할 수 있는 코드 등도 지적해주는 편리한 도구이다.

유명한 스타일 가이드는 Airbnb, RayWenderlich가 있고 팀의 스타일에 따라 .yaml파일을 만들어 규칙을 커스텀할 수도 있다.
특정파일을 제외하거나 규칙을 비활성화하거나 한 줄의 최대 길이를 지정하는 등.

그리고 이러한 과정을 통해 얻을 수 있는 장점은 코드 품질을 자동으로 관리해주어 리뷰 시간을 단축해주고 프로젝트 코드 스타일의 일관성을 유지하니 협업에도 도움이 된다.
아니면 강제언래핑을 막는 것처럼 실수나 에러 발생 가능성을 감소시키는 데도 도움이 된다. 또 상속하지 않는다면 final을 붙이도록 하는 등 성능 최적화에도 도움을 받을 수 있다.

Install

swiftlint는 홈브루로 설치하거나 xcode에서 스냅킷을 추가하듯 추가할 수 있다.
근데 난 스냅킷처럼 엑스코드 파일에 포함시켰을 때 엄청난 에러를 보고 그냥 얌전히 홈브루로 설치했다.

brew install swiftlint

혹시나 xcode에 통합하고 싶다면 build Phases에서 New Run Script Pahse를 선택하고 아래 스크립트를 입력하면 규칙 위반 사항을 표시해줄 수 있다.

if which swiftlint >/dev/null; then
  swiftlint
else
  echo "warning: SwiftLint not installed. Install using Homebrew: brew install swiftlint"
fi

난 그냥 터미널로 siwftlint를 실행한 뒤 새로 나온 gpt의 기능을 이용해 로그를 요약해서 전달받고 처리했다.

마지막으로 린팅을 한지 좀 지났더니 더 생겼다.
여기에 다음과 같이 자동 수정처리를 하면 자동처리한 것과 수동처리가 필요한 부분을 알려준다.

swiftlint --fix

만약 특정 파일만 하고 싶다면

swiftlint fix --path 파일경로/파일 이름.swift

위 코드로 처리할 수 있다.
파일이 아니라 경로로 끝낸다면 해당 경로에 존재하는 파일만 수정할 것이다.

또 바로 수정을 원하는 것이 아니라 원본은 유지하되 별도의 형식으로 수정된 파일을 출력받고 싶다면

swiftlint fix --format

위 코드를 사용하면 된다.

경고 규칙

기본적인 경고 규칙을 요약하면 다음과 같다.

  • Trailing Whitespace Violation: 줄 끝에 불필요한 공백이 있으면 경고
  • Vertical Whitespace Violation: 연속된 빈 줄이 1줄을 초과하면 경고
  • Line Length Violation: 한 줄의 길이가 120자를 초과하면 경고
  • Function Body Length Violation: 함수 본문이 50줄을 초과하면 경고
  • Type Body Length Violation: 클래스나 구조체 본문이 350줄을 초과하면 경고
  • Colon Spacing Violation: 콜론 주변에 적절한 공백이 없으면 경고
  • Self in Property Initialization Violation: 속성 초기화 시 self 사용이 부적절하면 경고
  • Force Cast Violation: 강제 캐스팅 as! 을 사용하면 경고
  • File Length Violation: 파일 길이가 400줄을 초과하면 경고
  • Comment Spacing Violation: 주석 // 이후 공백이 없으면 경고

이중 자동 수정 가능한 규칙은

  • Trailing Whitespace: 줄 끝의 불필 요한 공백 삭제
  • Vertical Whitespace: 연속된 빈 줄 삭제
  • Line Length: 한 줄의 길이가 길 때 가능하다면 처리
  • Colon Spacing: 콜론 주변에 공백 없을 경우 추가
  • Opening Brace Spacing: 중괄호 시작({) 앞뒤에 공백이 적절하지 않다면 처리
  • Comment Spacing: 주석처리(//) 이후에 공백이 없다면 공백 추가

즉 웬만하면 코드에 직접적인 영향을 끼치는 자동수정은 없다고 보면 된다.

다음 프로젝트에서는 팀 코드 컨벤션을 적극적으로 추진하고 swiftlint의 사용도 권장해봐야겠다.

2개의 댓글

comment-user-thumbnail
3일 전

와 경고규칙.. 저런게 있었구나... 심지어 강제 캐스팅도.. 재밌네요

1개의 답글