paint-brush
Nắm bắt sức mạnh của các quy tắc SwiftLint tùy chỉnh và nói lời tạm biệt với Regextừ tác giả@micci
2,028 lượt đọc
2,028 lượt đọc

Nắm bắt sức mạnh của các quy tắc SwiftLint tùy chỉnh và nói lời tạm biệt với Regex

từ tác giả Misha K.3m2023/05/31
Read on Terminal Reader

dài quá đọc không nổi

SwiftLint là công cụ tốt nhất để thực thi các tiêu chuẩn mã hóa và các phương pháp hay nhất. Nó đi kèm với các quy tắc được xác định trước có thể được tùy chỉnh để phù hợp với nhu cầu của từng dự án. Với SwiftLint, chúng ta có thể sử dụng các biểu thức chính quy để tạo các quy tắc phức tạp. Các quy tắc được viết bằng Swift, hiệu quả và có thể bắt được nhiều vi phạm hơn so với regex.
featured image - Nắm bắt sức mạnh của các quy tắc SwiftLint tùy chỉnh và nói lời tạm biệt với Regex
Misha K. HackerNoon profile picture

SwiftLint là công cụ tốt nhất để thực thi các tiêu chuẩn mã hóa và các phương pháp hay nhất. Nó đi kèm với các quy tắc được xác định trước có thể được tùy chỉnh để phù hợp với nhu cầu của từng dự án. Tuy nhiên, đôi khi các quy tắc tích hợp không đáp ứng được các yêu cầu của dự án. Trong những trường hợp như vậy, chúng tôi viết các biểu thức chính quy để lấp đầy khoảng trống.


Mặc dù regex là một công cụ mạnh mẽ, nhưng việc tạo các quy tắc phức tạp có thể khó khăn hoặc thậm chí là không thể. Đây là lúc các quy tắc SwiftLint gốc xuất hiện. Chúng giống như các quy tắc đi kèm với SwiftLint - chúng được viết bằng Swift, hiệu quả và có thể phát hiện nhiều vi phạm hơn so với regex.

Dự án cuối cùng có thể được tìm thấy tại https://github.com/jpsim/swiftlint-bazel-example

Thiết lập dự án

Cài Bazel nếu chưa cài.

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


Bắt đầu bằng cách tạo một thư mục mới.

 mkdir MySwiftLintRules && cd MySwiftLintRules


Tiếp theo, thiết lập một không gian làm việc Bazel mới. Điều này liên quan đến việc tạo một số tệp và bật bzlmod:

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


Thêm mã soạn sẵn vào 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")


Thêm mã soạn sẵn vào tệp BUILD . Điều này sẽ thêm hỗ trợ Xcode cho dự án Bazel của chúng tôi.

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


Tạo một thư mục để lưu trữ mã nguồn cho các quy tắc của bạn.

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


Và lần cuối cùng, dán mã soạn sẵn vào tệp swiftlint_extra_rules/BUILD

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


Tại thời điểm này, bạn sẽ có thể xây dựng SwiftLint bằng cách sử dụng lệnh bazel build .

Phát triển quy tắc với Xcode

Chúng tôi đã thêm phần phụ thuộc rules_xcodeproj vào dự án của mình để giúp việc phát triển các quy tắc tùy chỉnh của bạn dễ dàng hơn. Vì vậy, hãy tạo dự án của chúng tôi:

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


Bây giờ, chúng ta có thể xây dựng và gỡ lỗi lược đồ swiftlint . Bạn có thể sử dụng ứng dụng này như bình thường với nhị phân swiftlint được cài đặt từ homebrew.


Hãy thử chạy nó trên dự án của bạn: Nhấp vào tên lược đồ trên thanh công cụ của cửa sổ dự án của bạn , nhấp vào “Chỉnh sửa lược đồ…“, và đặt "Working Directory" trong tab "Tùy chọn" thành đường dẫn mà bạn muốn thực thi SwiftLint.

Để biết thêm thông tin về cách phát triển các quy tắc SwiftLint gốc, hãy xem CONTRIBUTING.md của SwiftLint

Thêm một quy tắc tùy chỉnh

Trong ví dụ này, chúng tôi đang tạo "quy tắc var bị cấm", như được hiển thị trong video hướng dẫn tại https://vimeo.com/819268038 .


Sao chép và dán mã này vào tệp Rules.swift , sau đó chạy lược đồ swiftlint trong Xcode.

 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) } } } }


Và thế là xong! Bạn đã tạo một quy tắc SwiftLint tùy chỉnh và tích hợp nó vào dự án Swift của mình bằng Bazel. Với thiết lập này, bạn có thể tạo và thử nghiệm bao nhiêu quy tắc tùy chỉnh tùy ý, giúp đảm bảo rằng mã của bạn luôn nhất quán và tuân thủ các tiêu chuẩn viết mã của nhóm bạn.


Chúc mừng lint!

L O A D I N G
. . . comments & more!

About Author

Misha K. HackerNoon profile picture
Misha K.@micci
With a strong work ethic and a lifelong love of technology, I strive to make a positive impact through my work

chuyên mục

BÀI VIẾT NÀY CŨNG CÓ MẶT TẠI...