Skip to content

5. 원티드 프로젝트의 SwiftLint 설정파일 상세 설명

gookhee edited this page Dec 9, 2021 · 1 revision

중첩 구성

프로젝트의 root directory와 wantedTests디렉토리내에 동일한 이름의 .swiftlint.yml이 있습니다.

wantedTests내의 파일만 별도의 설정파일로 규칙을 체크합니다.

wantedTests에서만 비활성화하는 규칙이 있습니다.

중첩 구성에 대해 궁금하다면..

비활성화한 원티드 가이드의 규칙

원티드 swift style guide의 규칙이지만 비활성화한 이유입니다.

trailing_closure

규칙 위반이 아닌 케이스를 위반으로 잡고 있습니다.

onNext를 없애면 다른 오버로딩된 method가 호출됩니다.

    viewModel.shouldGoToReasonsViewController.asObservable().subscribe(onNext: { [weak self] _ in
        self?.performSegue(withIdentifier: "showReasons", sender: nil)
    }).disposed(by: disposeBag)

끝에 completion이라는 매개변수가 있는데 워닝이 발생합니다.

    UIView.animateKeyframes(
        withDuration: duration,
        delay: 0.0,
        options: UIView.KeyframeAnimationOptions(rawValue: curve),
        animations: {
            self.view.frame.size.height = self.defaultViewHeight - keyboardHeight
            self.confirmButton.bottomConstraint.constant = 15
        }
    )

수정해도 되는 규칙 위반 코드만 수정하고 나머지는 그대로 두고 규칙을 비활성화 시켰습니다.

swiftformat의 trailingClosures가 어느정도 자동 수정하고 있고, 나머지는 코드 리뷰 시 수동 체크가 필요합니다.

redundant_string_enum_value

Codable를 준수하는 타입의 경우 case 이름과 동일한 rawValue를 명시하고 있습니다.

다른 경우도 기존 코드는 그대로 두고 규칙을 비활성화 했습니다.

코드리뷰에서 굳이 값을 명시할 필요가 없는 경우를 수동으로 체크하면 좋을 것 같습니다.

multiline_arguments_brackets, multiline_parameters_brackets

두 규칙 위반을 체크하면 953개의 많은 경고가 발생합니다.

아래 규칙 위반 코드의 예를 보면 외부 함수의 매개변수가 하나이고, 매개변수가 함수인 경우입니다.

SwiftFormat의 wrap 및 wrapArguments 규칙이 자동 수정하고 있지만 이런 케이스는 수정하지 않고 있습니다.

해당 코드는 모두 수정하지 않고 두 규칙을 비활성화했습니다.

    alert.addAction(UIAlertAction(
        title: NSLocalizedString("word_cancel", comment: "취소"),
        style: .cancel,
        handler: nil
    ))
    resumeManager?.isModelChanged.asObservable().subscribe(onNext: { [weak self] _ in
        self?.convertDataAndReloadCollectionView()
    }).disposed(by: disposeBag)
    items.map { WantedCompany(
        id: $0.id,
        name: $0.value ?? "" ,
        titleImg: nil,
        logoImg: nil,
        website: nil,
        location: nil,
        foundedYear: nil,
        companySize: nil,
        industryName: nil,
        info: nil,
        jobCount: nil,
        followCount: nil,
        follow: nil
    ) }
    self.toastHelper?.show(NSLocalizedString(
        "failed_to_update_profile",
        comment: "프로필 업데이트에 실패했습니다"
    ))
    googleAnalyticsHelper?.logEvent("click_bookmark", parameters: [
        "screen": "JOB_DETAIL",
        "position": positionId
    ])

line_length

규칙은 활성화 했지만, 주석과 url은 규칙을 적용을 하지 않도록 옵션을 설정했습니다.

line_length:
  warning: 110
  error: 110
  ignores_urls: true
  ignores_comments: true

테스트 코드에서만 비활성화 규칙

implicitly_unwrapped_optional

개발 편의상 테스트 코드에서 !를 자유롭게 사용할 수 있도록 했습니다.

line_length

url이나 테스트 문장이 긴 경우가 많아서 규칙을 비활성화 했습니다.

코드에서 일부 규칙 비활성화

아래 규칙들은 수정 범위가 넓거나 리팩토링이 필요한 경우가 많이 발생했습니다.

  • large_tuple
  • implicitly_unwrapped_optional
  • identifier_name
  • line_length

그런 경우에 특정 파일에서 아래처럼 규칙을 비활성화 시켰습니다.

// swiftlint:disable implicitly_unwrapped_optional