[iOS] SwiftLint Default Rules
기본 룰
Block Based KVO (key-value observing)
- KVO 사용 시 새로운 block-based로 사용하는 것을 권장
Class Delegate Protocol
- delegate protocol은 클래스 only여야만 함. → 약한참조를 보장하기 위해
- 조금 효과 있을 것 같은데 빼도 될듯
Closing Brace Spacing
Closure Parameter Position
Colon, Comma
Compiler Protocol Init
- 컴파일러 프로토콜에 정의된 생성자는 직접 호출 금지
- 쓸만한 것 같음
Computed Accessors Order
Control Statement
- if, for, guard, switch, while, catch 에 대한 조건들이 굳이 괄호로 안감싸져있어도 괜찮음
- 상황마다 다를 수도 있을듯. 넣을지 말지 생각해보기
Custom Rules
Cyclomatic Complexity
Deployment Target
Discouraged Direct Initialization
Duplicate Enum Case
Duplicate Imports
Duplicated Key in Dictionary Literal
Dynamic Inline
- dynamic과 @inline 동시에 사용 불가능
- 잘 모르겠음... 쓰는게 좋을듯?
Empty Enum Arguments
Empty parameters
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
Function Body Length
Function Parameter Count
- 5개 warning
- 8개 error
- ignores_default_parameters: true -> 디폴트
Generic Type Name
Identifier Name
- 각종 이름과 관련한 룰
- 소문자로 시작하는 알파벳, 숫자, 대문자는 포함하는.
- static과 immutable로 선언되는 곳에는 예외적으로 대문자로 시작 가능
- 너무 짧거나 길면 안됨
Inplicit Getter
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를 선언 시 좌우로 한칸씩 띄워야 함
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
Returning Whitespace
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
Syntactic Sugar
- 문법상 sugar 사용하기 (
Array
대신 [Int]
사용 등)
Todo
- TODOs, FIXMEs 들 warning 띄우기
Trailing Comma
- 배열, dictionary에서 trailing comma 쓰지 말기
Trailing Newline
- 파일은 trailing new line 한 줄을 가져야함
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
Unused Capture List
Unused Closure Parameter
- closure에서 사용되지 않는 parameter는 underscore로 작성하기
Unused Control Flow Label
- 사용되지 않는 control flow는 삭제하기
Unused Enumerated
- index 또는 item이 사용되지 않으면
.enumerated()
삭제하기
Unused Option Binding
Unused Setter Value
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
Void Function in Ternary
- void function을 호출하는 ternary 사용 금지
Void Return
XCTFail Message
- An XCTFail call should include a description of the assertion.
Reference
SwiftLint Rules