[iOS] SwiftLint Default Rules

Charlie·2022년 10월 8일
0
post-custom-banner

기본 룰

Block Based KVO (key-value observing)

  • KVO 사용 시 새로운 block-based로 사용하는 것을 권장

Class Delegate Protocol

  • delegate protocol은 클래스 only여야만 함. → 약한참조를 보장하기 위해
  • 조금 효과 있을 것 같은데 빼도 될듯

Closing Brace Spacing

  • 괄호 닫을 때 스페이스 금지
  • 넣자

Closure Parameter Position

  • 파라미터 띄어쓰기 보정
  • 넣자

Colon, Comma

  • 필수

Comment Spacing

  • 주석 후 한칸 띄우기
  • 넣자

Compiler Protocol Init

  • 컴파일러 프로토콜에 정의된 생성자는 직접 호출 금지
  • 쓸만한 것 같음

Computed Accessors Order

  • getter, setter 순서
  • 넣자

Control Statement

  • if, for, guard, switch, while, catch 에 대한 조건들이 굳이 괄호로 안감싸져있어도 괜찮음
  • 상황마다 다를 수도 있을듯. 넣을지 말지 생각해보기

Custom Rules

Cyclomatic Complexity

  • Cyclomatic Complexity란?
  • 기본으로 적용하면 10개때는 warning, 20개부터 에러.
  • 적용해보자

Deployment Target

  • 사용하기

Discouraged Direct Initialization

  • 위험할 수 있는 생성자 금지
  • 사용하기

Duplicate Enum Case

  • enum에서 같은 이름 사용 금지
  • 사용하기

Duplicate Imports

  • import 하나만
  • 사용하기

Duplicated Key in Dictionary Literal

  • 하나의 키만 가지게 하기
  • 사용하기

Dynamic Inline

  • dynamic과 @inline 동시에 사용 불가능
  • 잘 모르겠음... 쓰는게 좋을듯?

Empty Enum Arguments

  • 사용하기?

Empty parameters

  • 매개변수에 (Void) 대신 () 만 사용

Empty Parenthese with Trailing Closure

  • trailing closure 사용 시 empty parentheses 쓰지 말지
  • 쓰자

File Length

  • 400줄 이상은 warning
  • 1000줄 이상은 error
  • ignore_comment_only_lines: false -> 디폴트

For Where

  • for문 안에서 if 보다는 where를 사용하도록 하기
  • 안지키면 warning
  • 사용해도 좋을듯

Force Cast, Force Try

  • !
  • error

Function Body Length

  • 40줄 warning
  • 100줄 error

Function Parameter Count

  • 5개 warning
  • 8개 error
  • ignores_default_parameters: true -> 디폴트

Generic Type Name

  • 제네릭은 알파벳 대문자, 1~20글자 내로

Identifier Name

  • 각종 이름과 관련한 룰
  • 소문자로 시작하는 알파벳, 숫자, 대문자는 포함하는.
  • static과 immutable로 선언되는 곳에는 예외적으로 대문자로 시작 가능
  • 너무 짧거나 길면 안됨

Inplicit Getter

  • get 하나만 있을 시 안 써도 됨
  • 사용

Inclusive Language

  • ㅋㅋㅋㅋㅋㅋ 인종, 성별, 사회적 차별적인 단어 사용 금지!
  • 신기한 기능

Inert Defer

  • defer가 parent scope의 마지막에 위치할 때 warning

Is Disjoint

  • Set.intersection(_:).isEmpty 말고 Set.isDisjoint(with:) 사용하기
  • warning 뜸

Large Tuple

  • 튜플은 너무 크면 안됨. 크면 차라리 커스텀 타입으로 만들기
  • 2개는 warning, 3개는 error

Leading Whitespace

  • 앞에 whitespace가 있으면 warning
  • 지우는게 귀찮으면 빼는게 좋을 듯

Legacy CGGeometry Functions

  • Struct extension properties and methods are preffered over legacy functions 🤔

Legacy Constant

  • Struct-scoped constants are preffered over legacy global constants.

Legacy Constructor

  • Swift의 constructor가 legacy의 convenience functions보다 선호됨.

Legacy Hashing

  • hashValue보다 hash(into:) 메소드 사용하기

Legacy NSGeometry Functions

  • Struct extension properties and methods are preffered over legacy functions
  • 위에랑 비슷

Legacy Random

  • type.random(in:) 사용하는 것을 선호.

Line Length

  • 너무 길면 안됨.
  • 120자 warning
  • 200자 error
  • ignores urls: false
  • ignores function declarations: false
  • ignores comments: false
  • ignores interpolated strings: false
  • 가 디폴트

Mark

  • Mark는 '// MARK' 또는 '// MARK: - ' 형태만 가능
  • warning

Multiple Closures with Trailing Closure

  • parameter로 closure를 받는다면 trailing closure는 사용하면 안됨
  • warning

Nesting

  • type은 최대 1단계, function은 최대 2단계 좁힐 수 있음 🤔

No Fallthrough Only

  • fallthrough는 case가 최소 다른 하나의 statement를 가질 때만 사용이 가능해짐
  • warning

No Space in Method Call

  • 메소드와 parentheses 사이 space 금지

Notification Center Detachment

  • An object should only remove itself as an observer in deinit

NSObject Prefer isEqual

  • NSObject의 subclasses는 ==보다 isEqual을 구현해야 함
  • warning

Opening Brace Spacing

  • 중괄호 시작은 같은 줄에서 한칸 띄고 시작해야함

Operator Function Whitespace

  • Operator를 선언 시 좌우로 한칸씩 띄워야 함

Orphaned Doc Comment

  • doc comment는 선언에 붙어있어야 함

Private over fileprivate

  • fileprivate 보다 private 선언을 선호
  • validate_extension: false -> 디폴트

Private Unit Test

  • private으로 된 unit test는 건너뜀

Protocol Property Accessors Order

  • 프로토콜에서 프로퍼티 선언 시 get, set 순서 지키기

Reduce Boolean

  • reduce(true) 또는 reduce(false)보다 .allSatisfy() 또는 .contains() 사용하기

Redundant Discardable Let

  • let _ = foo() 처럼 쓸데없는 let 금지

Redundant @objc Attribute

  • @objc is redundant in declaration

Redundant Optional Initialization

  • nil로 초기화 하는 옵셔널 변수는 redundant함

Redundant Set Access Control Rule

  • 프로퍼티 setter의 접근지정자가 프로퍼티와 같다면 명시적으로 작성할 필요 업승ㅁ

Redundant String Enum Value

  • enum에서 String은 굳이 똑같이 쓸 필요 없음

Redundant Void Return

  • return이 void는 굳이 쓸 필요 없음

Returning Whitespace

  • return 화살표는 한 칸씩 띄워져야함

Self in Property Initialization

  • 변수 안에서 self 사용 시 변수는 lazy로.

Shorthand Operator

  • 증감연산자 등등은 연산 후 다시 대입하는 것보다 -=, +=, *=, /= 형식으로 줄여서 사용하기

Statement Position

  • else, catch 는 같은 줄에 한 칸 띄우고 적기

Superfluous Disable Command

  • SwiftLint ‘disable’ commands are superfluous when the disabled rule would not have triggered a violation in the disabled region. Use “ - ” if you wish to document a command.

Switch and Case Statement Alignment

  • switch, case 정렬

Syntactic Sugar

  • 문법상 sugar 사용하기 (Array 대신 [Int] 사용 등)

Todo

  • TODOs, FIXMEs 들 warning 띄우기

Trailing Comma

  • 배열, dictionary에서 trailing comma 쓰지 말기

Trailing Newline

  • 파일은 trailing new line 한 줄을 가져야함

Trailing Semicolon

  • trailing semicolon 사용 금지

Trailing Whitespace

  • trailing whitespace 사용 금지

Type Body Length

  • type body는 너무 길면 안됨.
  • 기본 200줄 warning, 350줄 error

Type Name

  • type 이름은 알파벳, 숫자로 이루어지고, 대문자로 시작, 3글자에서 40글자 사이.
  • private 타입은 underscore로 시작

Unavailable Condition

  • #available, #unavailable 사용 시 empty body 사용 금지

Unneeded Break in Switch

  • switch에서 필요없는 break 피하기

Unused Capture List

  • 사용되지 않는 capture는 없어야함

Unused Closure Parameter

  • closure에서 사용되지 않는 parameter는 underscore로 작성하기

Unused Control Flow Label

  • 사용되지 않는 control flow는 삭제하기

Unused Enumerated

  • index 또는 item이 사용되지 않으면 .enumerated() 삭제하기

Unused Option Binding

  • let _ = 보다 != nil 사용하기

Unused Setter Value

  • Setter value is not used

Valid IBInspectable

  • @IBInspectable should be applied to variables only, have its type explicit and be of a supported type

Vertical Parameter Alignment

  • 한 줄에 다 안적히면 parameter는 vertical로 정렬하기

Vertical Whitespace

  • 빈 줄 제한 (기본 1줄)

Void Function in Ternary

  • void function을 호출하는 ternary 사용 금지

Void Return

  • -> Void-> () 보다 선호

XCTFail Message

  • An XCTFail call should include a description of the assertion.

Reference

SwiftLint Rules

profile
Hello
post-custom-banner

0개의 댓글