कोडिंग मानकों और सर्वोत्तम प्रथाओं को लागू करने के लिए स्विफ्टलिंट सबसे अच्छा उपकरण है। यह पूर्व-निर्धारित नियमों के साथ आता है जिन्हें व्यक्तिगत परियोजना आवश्यकताओं के अनुरूप अनुकूलित किया जा सकता है। हालांकि, कभी-कभी अंतर्निहित नियम परियोजना आवश्यकताओं से कम हो जाते हैं। ऐसे मामलों में, हम अंतराल को भरने के लिए रेगुलर एक्सप्रेशन लिखते हैं।
जबकि रेगेक्स एक शक्तिशाली उपकरण है, जटिल नियम बनाना कठिन या असंभव भी हो सकता है। यह वह जगह है जहां देशी स्विफ्टलिंट नियम आते हैं। वे बिल्कुल उन नियमों की तरह हैं जो स्विफ्टलिंट के साथ आते हैं - वे स्विफ्ट में लिखे गए हैं, कुशल हैं, और रेगेक्स की तुलना में अधिक उल्लंघन पकड़ सकते हैं।
अंतिम परियोजना 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 बनाने में सक्षम होना चाहिए।
आपके कस्टम नियमों को विकसित करना आसान बनाने के लिए हमने अपने प्रोजेक्ट में rules_xcodeproj
निर्भरता जोड़ी है। तो, चलिए अपना प्रोजेक्ट बनाते हैं:
bazel run swiftlint_xcodeproj && open SwiftLint.xcodeproj -a Xcode
अब, हम swiftlint
स्कीम बना और डिबग कर सकते हैं। होमब्रू से स्थापित स्विफ्टलिंट बाइनरी के साथ आप हमेशा की तरह इस ऐप का उपयोग कर सकते हैं।
इसे अपने प्रोजेक्ट पर चलाने का प्रयास करें: अपनी प्रोजेक्ट विंडो के टूलबार में स्कीम के नाम पर क्लिक करें, "एडिट स्कीम..." पर क्लिक करें, और "विकल्प" टैब में "वर्किंग डायरेक्टरी" को उस पथ पर सेट करें जहां आप स्विफ्टलिंट को निष्पादित करना चाहते हैं।
देशी स्विफ्टलिंट नियम विकसित करने के बारे में अधिक जानकारी के लिए, स्विफ्टलिंट के CONTRIBUTING.md को देखें
इस उदाहरण में, हम "निषिद्ध संस्करण नियम" बना रहे हैं, जैसा कि https://vimeo.com/819268038 पर वीडियो ट्यूटोरियल में दिखाया गया है।
इस कोड को 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) } } } }
और बस! आपने एक कस्टम SwiftLint नियम बना लिया है और Bazel का उपयोग करके इसे अपने Swift प्रोजेक्ट में एकीकृत कर लिया है। इस सेटअप के साथ, आप जितने चाहें उतने कस्टम नियम बना और परीक्षण कर सकते हैं, जिससे यह सुनिश्चित करने में मदद मिलती है कि आपका कोड सुसंगत रहता है और आपकी टीम के कोडिंग मानकों के अनुरूप है।
हैप्पी लाइनिंग!