[iOS] SwiftLint Opt-in Rules

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

옵션 룰

Accessibility Label for Image

  • 모든 이미지는 accessibility label을 가져야 한다.

Accessibility Trait for Button

  • Tap gesture가 있는 모든 View들은 .isButton accessibility trait를 포함해야한다.

Anonymous Argument in Multiline Closure

  • 여러 줄의 closure에서 이름 있는 arguments 사용하기

AnyObject Protocol

  • class-only protocol에서는 클래스보다 AnyObject 사용하기

Array Init

  • Array(seq)를 seq.map { $0 }를 통해 array로 변환하는 것 보다 선호

Attributes

  • attribues는 함수, 타입에서는 따로, 변수, import에서는 같은 줄에 사용

Balanced XCTest life-cycle

  • Test 클래스는 균형잡힌 setUp, tearDown 메소드를 반드시 구현해야한다.

Capture Variable

  • 상수가 아닌 변수가 closure에서 capture되면 안된다.

Closure Body Length

  • 클로저는 너무 길면 안된다.
  • 20줄 warning, 100줄 error

Closure End Indentation

  • 클로저 닫을 때는 처음과 같은 indent여야함.

Closure Spacing

  • 클로저를 열고 닫을 때에는 한 칸씩 띄우기

Collection Element Alignment

  • collection의 요소들은 vertical 정렬되어야함

Comma Inheritance Rule

  • 상속받는 리스트 작성 시 comma 사용

Conditional Retruns on Newline

  • 조건문은 항상 다음 줄에서 return되어야함

Contains Over Filter Count

  • containsfilter(where: ).count 보다 선호

Contains Over Filter Is Empty

  • containsfilter(where: ).isEmpty 보다 선호

Contains over first not nil

  • containsfirst(where: ) != nil, firstIndex(where: ) != nil 보다

Contains over range(of:) comparison to nil

  • containsrange(of:) != nil, range(of: ) == nil보다 선호

Convenience Type

  • 하나의 static member를 위해서는 caseless enum을 사용하기

Discarded Notification Center Observer

  • When registering for a notification using a block, the opaque observer that is returned should be stored so it can be removed later.

Discouraged Assert

  • assertionFailure(), preconditionFailure()assert(false)보다 선호

Discouraged None Name

  • case나 static 멤버 이름으로 none 사용하지 말기

Discouraged Object Literal

  • initializer를 object literal 보다 선호

Discouraged Optional Boolean

  • bool에서는 optional보다 non optional 선호

Discouraged Optional Collection

  • 빈 cillection을 optional collection보다 선호

Empty Collection Literal

  • collection에서 ==, != 사용보다 isEmpty 사용하기

Empty Count

  • count == 0 말고 isEmpty 사용하기

Empty String

  • string에서 isEmpty 사용하기

Empty XCTest Method

  • 빈 XCTest 메소드는 지양

Enum Case Associated Values Count

  • enum case에서 연관값은 적어야함
  • 5개 warning, 6개 error

Expiring Todo

  • TODOs, FIXMEs는 기한 내에 expire 되어야함.

Explicit ACL

  • 명시적으로 접근지정자 작성해야함

Explicit Enum Raw Value

  • 명시적으로 enum의 raw value 작성해야함

Explicit Init

  • 명시적으로 .init()을 호출하는 것은 지양

Explicit Self

  • 인스턴스 변수와 함수는 명시적으로 self를 쓴 후에 접근

Explicit Top Level ACL

  • top-level 선언에서는 ACL 무조건 작성하기

Explicit Type Interface

  • 프로퍼티들은 타입 인터페이스를 가져야함

Extension Access Modifier

  • Prefer to use extension access modifiers

Fallthrough

  • Fallthrough 지양 (switch)

Fatal Error Message

  • fatal error는 메시지를 가져야함

File Header

  • 헤더 comments는 프로젝트 패턴과 동일해야함

File Name

  • 파일 이름은 파일에 선언된 타입이나 extension과 같아야함

File Name No Space

  • 파일 이름에는 빈 칸이 있으면 안됨

File Types Order

  • 파일에 있는 타입들의 순서를 정해줌

First Where

  • collection에서 .first(where: ).filter { }.first보다 선호

FlatMap over map and reduce

  • map하고 reduce하지말고 flatMap 사용하기

Force Unwrapping

  • 강제 언래핑은 지양

Function Default Parameter at End

  • Prefer to locate parameters with defaults toward the end of the parameter list.

IBInspectable in Extension

  • extension에는 @IBInspectable 프로퍼티를 추가하면 안됨

Identical Operands

  • 같은거는 비교할 필요 없음

If-let Shadowing

  • 옵셔널 바인딩할 때 shorthand syntax 사용하기

Implicit Return

  • closure, functions, getter에서 implicit return 선호

Implicitly Unwrapped Optional

  • 암시적으로 unwrapped optionals는 지양 (IBOutlet들은 예외)

Indentation Width

  • 첫째줄은 indent 금지, 기본 4칸의 indent

Joined Default Paramter

  • 기본 seperator를 사용한 joined는 할 필요 없음

Last Where

  • collection에서 .last(where:).filter { }.last보다 선호

Legacy Multiple

  • isMultiple(of:)%연산보다 선호

Legacy Objective-C Reference Type

  • Prefer Swift value types to bridged Objective-C reference types

Variable Declaration Whitespace

  • let, var들은 다른 statements와 한 칸 띄워야 함

Literal Expression End Indentation

  • 배열, dictionary의 마지막 indentation은 처음과 같아야함

Lower ACL than parent

  • parent보다 낮은 접근지정자 보장

Missing Docs

  • 선언은 documented 되어야 함

Modifier Order

  • Modifier의 순서는 일정해야함 (override, acl, setterACL, dynamic, mutators, lazy, final, required, convenience, typeMethods, owned 순서)

Multiline Arguments

  • arguments들은 한 줄에 있거나 한 줄에 하나씩 있어야함

Multiline Arguments Brackets

  • multiline일 때 brackets들은 다른 줄에 적기

Multiline Function Chains

  • function들을 chain할 때 한 줄에 다 쓰거나 한줄에 하나씩 쓰기

Multiline Literal Brackets

  • Multiline literals들은 다른 줄에 brackets들로 감싸져야함

Multiline Parameters

  • 함수, 메소드들의 parameters들은 한 줄에 있거나 한 줄에 하나씩 있어야함

Multiline Parameters Brackets

  • Multiline parameters들은 다른 줄에 brackets들로 감싸져야함

Nimble Operator

  • Prefer Nimble operator overloads over free matcher functions.

No Extension Access Modifier

  • extension에서는 access modifier 사용 금지

No Grouping Extension

  • extension은 같은 source file내의 코드를 group하는데 사용하면 안된다.

NSLocalizedString Key

  • Static strings should be used as key/comment in NSLocalizedString in order for genstrings to work.

NSLocalizedString Require Bundle

  • Calls to NSLocalizedString should specify the bundle which contains the strings file.

Number Separator

  • 큰 정수에는 0 3개마다 underscore로 구분하기

Object Literal

  • object literals를 image, color init보다 선호

Operator Usage Whitespace

  • 연산자는 한 칸씩 띄어쓰기

Optional Enum Case Match

  • Matching an enum case against an optional enum without ‘?’ is supported on Swift 5.1 and above.

Overridden methods call super

  • overridden methods들은 항상 super를 호출해야함

Override in Extension

  • extension은 선언을 override하면 안됨

Pattern Matching Keywords

  • tuple 밖으로 keyword를 빼서 한번에 매칭하기

Prefer Nimble

  • Prefer Nimble matchers over XCTAssert functions.

Prefer Self in Static References

  • static reference는 클래스 이름보다 self를 이용해서 prefixed되어야함

Prefer Self Type Over Type of Self

  • Selftype(of: self)보다 선호

Prefer Zero Over Explicit Init

  • .zeroCGPoint(x: 0, y: 0)와 같은 것들보다 선호

Prefixed Top-Level Constant

  • top-level의 constants들은 k로 시작해야함

Private Actions

  • IBActions는 private이어야 함

Private Outlets

  • IBOutlets는 private이어야 함

Private Combine Subject

  • Combine Subject는 private이어야 함

Prohibited Interface Builder

  • Interface Builder를 통해 view를 생성하는 것은 지양

Prohibited calls to super

  • 어떤 methods들은 super를 호출하면 안됨

Quick Discouraged Call

  • Discouraged call inside ‘describe’ and/or ‘context’ block.

Quick Discouraged Focused Test

  • Discouraged focused test. Other tests won’t run while this one is focused.

Quick Discouraged Pending Test

  • Discouraged pending test. This test won’t run while it’s marked as pending.

Raw Value For Camel Cased Codable Enum

  • camel cased의 case들은 raw value를 가져야함

Reduce Into

  • reduce(into:_:)reduce(_:_:)보다 선호

Redundant Nil Coalescing

  • nil coalescing operator is only evaluated if the lhs is nil, coalescing operator with nil as rhs is redundant

Redundant Type Annotation

  • 변수들은 필요없는 type annotation을 가질 필요 없음

Required Deinit

  • 클래스는 명시적인 deinit을 가져야함

Required Enum Case

  • 특정한 protocol을 채택하는 enum은 특정 case를 필수적으로 구현해야함

Return Value from Void Function

  • void function에서 value return하지 말기

Self Binding

  • self binding 시 같은 이름 사용하기

Single Test Class

  • Test files should contain a single QuickSpec or XCTestCase class.

Min or Max over Sorted First or Last

  • min(), max()sorted().first, sorted().last보다 선호

Sorted Imports

  • import 순서 정렬

Static Operator

  • operators는 static으로 선언되어야 함

Strict fileprivate

  • fileprivate은 지양

Strong IBOutlet

  • @IBOutlets는 weak로 선언되면 안됨

Swtich Case on Newline

  • case후 statements들은 항상 새로운 줄에 작성

Test case accessibility

  • Test cases should only contain private non-test members.

Toggle Bool

  • someBool.toggle()someBool = !someBool 보다 선호

Trailing Closure

  • 가능한 trailing closure 사용하기

Type Contents Order

  • subtypes, properties, methods 등등의 순서 정의하고 따르기

Type-safe Array Init

  • Array init과 같은거 아닌가?

Unavailable Function

  • Unimplemented functions should be marked as unavailable.

Unneeded Parentheses in Closure Argument

  • closure의 arguments들에 대해서는 parentheses를 사용할 필요 없음

Unowned Variable Capture

  • capture 시 weak 선호

Untyped Error in Catch

  • catch에서 error는 타입캐스팅 없이 선언하면 안됨

Unused Declaration

  • 선언된 것은 최소 한번은 사용되어야 함

Unused Import

  • 필요없는 import 사용하지 말기

Vertical Parameter Alignment On Call

  • 함수 parameters들은 한 줄, 또는 vertical 정렬되어서 호출되어야 함

Vertical Whitespace Between Cases

  • case 사이에 한 줄 띄우기

Vertical Whitespace before Closing Braces

  • closing brace 전에 빈 줄 없이 하기

Vertical Whitespace after Opening Braces

  • opening brace 후에 빈 줄 없이 하기

Weak Delegate

  • delegate은 weak으로 선언하여 순환 참조 피하기

XCTest Specific Matcher

  • Prefer specific XCTest matchers over XCTAssertEqual and XCTAssertNotEqual

Yoda conditaion rule

  • constant literal은 비교 연산자의 오른쪽에 위치하도록 하기

Reference

SwiftLint Rules

profile
Hello
post-custom-banner

0개의 댓글