SwiftLint, kodlama standartlarını ve en iyi uygulamaları uygulamak için en iyi araçtır. Bireysel proje ihtiyaçlarına uyacak şekilde özelleştirilebilen önceden tanımlanmış kurallarla birlikte gelir. Ancak bazen yerleşik kurallar proje gereksinimlerini karşılayamaz. Bu gibi durumlarda boşluğu doldurmak için düzenli ifadeler yazarız.
Regex güçlü bir araç olsa da karmaşık kurallar oluşturmak zor, hatta imkansız olabilir. Yerel SwiftLint kuralları burada devreye giriyor. Bunlar tıpkı SwiftLint ile gelen kurallar gibidir; Swift'de yazılmıştır, verimlidir ve regex'e kıyasla daha fazla ihlali yakalayabilir.
Nihai projeyi https://github.com/jpsim/swiftlint-bazel-example adresinde bulabilirsiniz.
Kurulu değilse Bazel'i yükleyin.
brew list --formula | grep -q "bazel" || brew install bazel
Yeni bir dizin oluşturarak başlayın.
mkdir MySwiftLintRules && cd MySwiftLintRules
Ardından yeni bir Bazel çalışma alanı kurun. Bu, birkaç dosya oluşturmayı ve bzlmod'u etkinleştirmeyi içerir:
touch .bazelrc WORKSPACE MODULE.bazel BUILD && echo "common --enable_bzlmod" > .bazelrc
Standart kodu MODULE.bazel
ekleyin
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")
Standart kodu BUILD
dosyasına ekleyin. Bu, Bazel projemize Xcode desteği ekleyecektir.
load("@rules_xcodeproj//xcodeproj:defs.bzl", "xcodeproj") xcodeproj( name = "swiftlint_xcodeproj", project_name = "SwiftLint", tags = ["manual"], top_level_targets = [ "@SwiftLint//:swiftlint", "@SwiftLint//Tests:ExtraRulesTests", ], )
Kurallarınızın kaynak kodunu depolamak için bir dizin oluşturun.
mkdir swiftlint_extra_rules && touch swiftlint_extra_rules/Rules.swift && touch swiftlint_extra_rules/BUILD
Ve son kez standart kodu swiftlint_extra_rules/BUILD
dosyasına yapıştırın.
filegroup( name = "extra_rules", srcs = glob(["**/*.swift"]), visibility = ["//visibility:public"], )
Bu noktada bazel build
komutunu kullanarak SwiftLint'i derleyebilmelisiniz.
Özel kurallarınızı geliştirmeyi kolaylaştırmak için projemize rules_xcodeproj
bağımlılığını ekledik. O halde projemizi oluşturalım:
bazel run swiftlint_xcodeproj && open SwiftLint.xcodeproj -a Xcode
Artık swiftlint
şemasını oluşturup hatalarını ayıklayabiliriz. Bu uygulamayı, homebrew'dan yüklenen Swiftlint ikili dosyasıyla her zamanki gibi kullanabilirsiniz.
Projenizde çalıştırmayı deneyin: Proje pencerenizin araç çubuğundaki şema adına tıklayın, “Şemayı Düzenle…”ye tıklayın ve "Seçenekler" sekmesindeki "Çalışma Dizini"ni SwiftLint'i çalıştırmak istediğiniz yola ayarlayın.
Yerel SwiftLint kuralları geliştirme hakkında daha fazla bilgi için SwiftLint'in CONTRIBUTING.md sayfasına göz atın.
Bu örnekte, https://vimeo.com/819268038 adresindeki video eğitiminde gösterildiği gibi "yasak var kuralı"nı oluşturuyoruz.
Bu kodu kopyalayıp Rules.swift
dosyasına yapıştırın, ardından swiftlint
şemasını Xcode'da çalıştırın.
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) } } } }
Ve bu kadar! Özel bir SwiftLint kuralı oluşturdunuz ve bunu Bazel kullanarak Swift projenize entegre ettiniz. Bu kurulumla, ihtiyaç duyduğunuz sayıda özel kural oluşturup test edebilir, kodunuzun tutarlı kalmasını ve ekibinizin kodlama standartlarına uygun olmasını sağlamaya yardımcı olabilirsiniz.
Mutlu tüyler!