paint-brush
사용자 정의 SwiftLint 규칙의 강력한 기능을 활용하고 Regex에 작별을 고하세요.~에 의해@micci
2,004 판독값
2,004 판독값

사용자 정의 SwiftLint 규칙의 강력한 기능을 활용하고 Regex에 작별을 고하세요.

~에 의해 Misha K.3m2023/05/31
Read on Terminal Reader
Read this story w/o Javascript

너무 오래; 읽다

SwiftLint는 코딩 표준과 모범 사례를 시행하는 최고의 도구입니다. 개별 프로젝트 요구 사항에 맞게 사용자 정의할 수 있는 사전 정의된 규칙이 함께 제공됩니다. SwiftLint를 사용하면 정규식을 사용하여 복잡한 규칙을 만들 수 있습니다. 규칙은 효율적이고 Swift로 작성되었으며 정규식에 비해 더 많은 위반을 포착할 수 있습니다.
featured image - 사용자 정의 SwiftLint 규칙의 강력한 기능을 활용하고 Regex에 작별을 고하세요.
Misha K. HackerNoon profile picture

SwiftLint는 코딩 표준과 모범 사례를 시행하는 최고의 도구입니다. 개별 프로젝트 요구 사항에 맞게 사용자 정의할 수 있는 사전 정의된 규칙이 함께 제공됩니다. 그러나 기본 제공 규칙이 프로젝트 요구 사항에 미치지 못하는 경우도 있습니다. 이러한 경우 공백을 메우기 위해 정규식을 작성합니다.


정규식은 강력한 도구이지만 복잡한 규칙을 만드는 것은 어렵거나 불가능할 수도 있습니다. 이것이 기본 SwiftLint 규칙이 들어오는 곳입니다. 이는 SwiftLint와 함께 제공되는 규칙과 같습니다. Swift로 작성되어 효율적이며 정규식에 비해 더 많은 위반을 포착할 수 있습니다.

최종 프로젝트는 https://github.com/jpsim/swiftlint-bazel-example 에서 확인할 수 있습니다.

프로젝트 설정

Bazel이 설치되어 있지 않다면 설치하세요.

 brew list --formula | grep -q "bazel" || brew install bazel


새 디렉터리를 만드는 것부터 시작하세요.

 mkdir MySwiftLintRules && cd MySwiftLintRules


다음으로, 새로운 Bazel 작업공간을 설정하세요. 여기에는 여러 파일을 생성하고 bzlmod를 활성화하는 작업이 포함됩니다.

 touch .bazelrc WORKSPACE MODULE.bazel BUILD && echo "common --enable_bzlmod" > .bazelrc


MODULE.bazel 에 상용구 코드를 추가합니다.

 module( name = "swiftlint-bazel-example", version = "0.0.0", compatibility_level = 1 ) bazel_dep(name = "swiftlint", version = "0.51.0", repo_name = "SwiftLint") extra_rules = use_extension("@SwiftLint//bazel:extensions.bzl", "extra_rules") extra_rules.setup(srcs = "@swiftlint-bazel-example//swiftlint_extra_rules:extra_rules") bazel_dep(name = "rules_xcodeproj", version = "1.4.0")


BUILD 파일에 상용구 코드를 추가합니다. 그러면 Bazel 프로젝트에 대한 Xcode 지원이 추가됩니다.

 load("@rules_xcodeproj//xcodeproj:defs.bzl", "xcodeproj") xcodeproj( name = "swiftlint_xcodeproj", project_name = "SwiftLint", tags = ["manual"], top_level_targets = [ "@SwiftLint//:swiftlint", "@SwiftLint//Tests:ExtraRulesTests", ], )


규칙의 소스 코드를 저장할 디렉터리를 만듭니다.

 mkdir swiftlint_extra_rules && touch swiftlint_extra_rules/Rules.swift && touch swiftlint_extra_rules/BUILD


마지막으로 상용구 코드를 swiftlint_extra_rules/BUILD 파일에 붙여넣으세요.

 filegroup( name = "extra_rules", srcs = glob(["**/*.swift"]), visibility = ["//visibility:public"], )


이 시점에서 bazel build 명령을 사용하여 SwiftLint를 빌드할 수 있어야 합니다.

Xcode를 사용하여 규칙 개발

사용자 정의 규칙을 더 쉽게 개발할 수 있도록 프로젝트에 rules_xcodeproj 종속성을 추가했습니다. 이제 프로젝트를 생성해 보겠습니다.

 bazel run swiftlint_xcodeproj && open SwiftLint.xcodeproj -a Xcode


이제 swiftlint 구성표를 빌드하고 디버깅할 수 있습니다. 홈브류에서 설치된 Swiftlint 바이너리를 사용하여 평소처럼 이 앱을 사용할 수 있습니다.


프로젝트에서 실행해 보세요: 프로젝트 창의 도구 모음 에서 구성표 이름을 클릭하고 "Edit Scheme…"을 클릭한 다음 "옵션" 탭의 "작업 디렉터리"를 SwiftLint를 실행하려는 경로로 설정하세요.

기본 SwiftLint 규칙 개발에 대한 자세한 내용은 SwiftLint의 CONTRIBUTING.md를 확인하세요.

사용자 정의 규칙 추가

이 예에서는 https://vimeo.com/819268038 의 비디오 튜토리얼에 표시된 대로 "forbidden var rule"을 생성합니다.


이 코드를 복사하여 Rules.swift 파일에 붙여넣은 다음 Xcode에서 swiftlint 구성표를 실행하세요.

 import SwiftSyntax // This function should return an array containing all of your custom rules func extraRules() -> [Rule.Type] { [ForbiddenVarRule.self] } struct ForbiddenVarRule: ConfigurationProviderRule, SwiftSyntaxRule { var configuration = SeverityConfiguration(.error) init() {} static let description = RuleDescription( identifier: "forbidden_var", name: "Forbidden Var", description: "Variables should not be called 'forbidden'", kind: .idiomatic, nonTriggeringExamples: [ Example("let notForbidden = 0") ], triggeringExamples: [ Example("let ↓forbidden = 0") ] ) func makeVisitor(file: SwiftLintFile) -> ViolationsSyntaxVisitor { Visitor(viewMode: .sourceAccurate) } } private extension ForbiddenVarRule { final class Visitor: ViolationsSyntaxVisitor { override func visitPost(_ node: IdentifierPatternSyntax) { if node.identifier.text == "forbidden" { violations.append(node.identifier.positionAfterSkippingLeadingTrivia) } } } }


그리고 그게 다야! Bazel을 사용하여 사용자 정의 SwiftLint 규칙을 생성하고 이를 Swift 프로젝트에 통합했습니다. 이 설정을 사용하면 필요한 만큼 사용자 정의 규칙을 만들고 테스트할 수 있으므로 코드가 일관성을 유지하고 팀의 코딩 표준을 준수하는지 확인할 수 있습니다.


린팅 행복하세요!