paint-brush
Özel SwiftLint Kurallarının Gücünü Kucaklayın ve Regex'e Elveda Deyinile@micci
2,028 okumalar
2,028 okumalar

Özel SwiftLint Kurallarının Gücünü Kucaklayın ve Regex'e Elveda Deyin

ile Misha K.3m2023/05/31
Read on Terminal Reader
Read this story w/o Javascript

Çok uzun; Okumak

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. SwiftLint ile karmaşık kurallar oluşturmak için düzenli ifadeler kullanabiliriz. Kurallar Swift dilinde yazılmıştır, etkilidir ve regex'e kıyasla daha fazla ihlali tespit edebilir.
featured image - Özel SwiftLint Kurallarının Gücünü Kucaklayın ve Regex'e Elveda Deyin
Misha K. HackerNoon profile picture

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.

Projenin Kurulumu

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.

Xcode ile Kural Geliştirme

Ö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.

Özel Kural Ekleme

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!