Skip to content

프로젝트 SwiftLint

miniOS edited this page Nov 10, 2022 · 4 revisions

목차

업데이트 날짜

2022년 11월 10일 목요일

SwiftLint 적용을 위한 컨벤션

얼죽아 Swift 컨벤션

적용

각자 HomeBrew로 설치한다.

프로젝트 설정

파일 보기
export PATH="$PATH:/opt/homebrew/bin"
if which swiftlint > /dev/null; then
  swiftlint --fix --config ".swiftlint.auto.yml" && swiftlint
else
  echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi

설정 파일

.swiftlint.yml

파일 보기
disabled_rules:
    
opt_in_rules:
  - empty_count
  - empty_string
  - empty_xctest_method
  - file_name_no_space
  - file_types_order
  - force_unwrapping
  - multiline_arguments
  - multiline_function_chains
  - multiline_parameters_brackets
  - unused_import
  - sorted_imports
  - vertical_parameter_alignment_on_call
  - vertical_whitespace_closing_braces
  - weak_delegate
      
excluded:
  - Pods
  - AppDelegate.swift 
  - SceneDelegate.swift
    
line_length: 100
    
file_length:
  warning: 700
  error: 700
    
identifier_name:
  excluded:
    - id
    - URL

.swiftlint.auto.yml

자동으로 수정되어야 하는 옵션의 경우 아래 파일에 추가한다.

파일 보기
whitelist_rules:
  - leading_whitespace
  - trailing_whitespace
  - vertical_whitespace
  - vertical_whitespace_closing_braces

예외의 경우

아래와 같이 주석을 추가하면 lint 대상에서 제외된다.

단, 예외사항에 대해서 설명할 수 있어야 한다.

// swiftlint:disable:next force_unwrapping
let url = URL(string: urlString)!

Lint Default Configuration

  • 타입 바디
    • warning: 250, error: 350
  • 파일 길이
    • warning: 400, error: 1000
  • 함수 길이
    • warning: 50, error: 100
  • 타입(클래스, 구조체, 익스텐션) 이름
    • min - warning:3, error:0
    • max - warning:40, error:1000
  • 프로퍼티 (=identifier) 이름
    • min - warning:3, error:2
    • max - warning:40, error:60
    • 예외: id, URL, url

프로젝트 Configuration

아래 Excluded 외에는 Lint 기본 값을 사용한다.

  • Lint 적용 제외 파일
    • AppDelegate.swift
    • SceneDelegate.swift
  • identifier_name:
    • id
    • URL
  • 길이
    • 줄 길이 (line_length) : 100
    • 파일 길이 (file_length) : 700

Disabled Rules

없음

Opt in Rules

프로젝트를 위해 추가한 기능들

  • empty_count

    count == 0 대신 isEmpty 를 사용한다

  • empty_string

    String.count == 0 대신 isEmpty 를 사용한다

  • empty_xctest_method

    test 메소드 블럭 안에 아무 것도 없다면 오류. 주석만 있어도 오류남

  • file_name_no_space

    파일 이름에 공백 있으면 오류

  • file_types_order

    파일 안에서 type의 순서

    1. Supporting

    2. Main

      2.1 Type Aliases

      2.2 Subtypes

      2.3 Stored Type Properties

      2.4 Stored Instance Properties

      2.5 Computed Instance Properties

      2.6 IBOutlet

      2.7 Initializers

      2.8 Type Methods

      2.9 Life-Cycle Methods

      2.10 IBActions

      2.11 Other Methods

      2.12 Subscripts

    3. Extensions

    4. Preview Provider

    5. Library Content Provider

  • force_unwrapping

    강제 언래핑 금지

  • multiline_arguments

    함수 인자는 한 줄에 다 있거나 같은 라인 선 상에 있어야 한다.

  • multiline_function_chains

    메소드를 체이닝한 함수는 한 줄에 다 있거나 같은 라인 선상에 있어야 한다.

  • multiline_parameters_brackets

    여러 개의 인자를 가지는 함수의 Brackets은 줄바꿈을 해야한다.

  • unused_import

    안 사용하는 import 감지

  • sorted_imports

    모듈 임포트를 알파벳 순으로 정렬. 내장 프레임워크를 먼저 임포트하고, 빈 줄로 구분하여 서드파티 프레임워크를 임포트합니다.

  • vertical_parameter_alignment_on_call

    함수에 인자가 여러 개인 경우 수직 라인을 맞춰야 한다.

  • vertical_whitespace_closing_braces

    braces },) 앞에 공백 줄 불가

  • weak_delegate

    delegate 사용시 weak로 선언해줘야 함

출처

Clone this wiki locally