paint-brush
कस्टम स्विफ्टलिंट नियमों की शक्ति को अपनाएं और रेगेक्स को अलविदा कहेंद्वारा@micci
1,998 रीडिंग
1,998 रीडिंग

कस्टम स्विफ्टलिंट नियमों की शक्ति को अपनाएं और रेगेक्स को अलविदा कहें

द्वारा Misha K.3m2023/05/31
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

कोडिंग मानकों और सर्वोत्तम प्रथाओं को लागू करने के लिए स्विफ्टलिंट सबसे अच्छा उपकरण है। यह पूर्व-निर्धारित नियमों के साथ आता है जिन्हें व्यक्तिगत परियोजना आवश्यकताओं के अनुरूप अनुकूलित किया जा सकता है। SwiftLint के साथ, हम जटिल नियम बनाने के लिए रेगुलर एक्सप्रेशन का उपयोग कर सकते हैं। नियम स्विफ्ट, कुशल में लिखे गए हैं, और रेगेक्स की तुलना में अधिक उल्लंघनों को पकड़ सकते हैं।
featured image - कस्टम स्विफ्टलिंट नियमों की शक्ति को अपनाएं और रेगेक्स को अलविदा कहें
Misha K. HackerNoon profile picture

कोडिंग मानकों और सर्वोत्तम प्रथाओं को लागू करने के लिए स्विफ्टलिंट सबसे अच्छा उपकरण है। यह पूर्व-निर्धारित नियमों के साथ आता है जिन्हें व्यक्तिगत परियोजना आवश्यकताओं के अनुरूप अनुकूलित किया जा सकता है। हालांकि, कभी-कभी अंतर्निहित नियम परियोजना आवश्यकताओं से कम हो जाते हैं। ऐसे मामलों में, हम अंतराल को भरने के लिए रेगुलर एक्सप्रेशन लिखते हैं।


जबकि रेगेक्स एक शक्तिशाली उपकरण है, जटिल नियम बनाना कठिन या असंभव भी हो सकता है। यह वह जगह है जहां देशी स्विफ्टलिंट नियम आते हैं। वे बिल्कुल उन नियमों की तरह हैं जो स्विफ्टलिंट के साथ आते हैं - वे स्विफ्ट में लिखे गए हैं, कुशल हैं, और रेगेक्स की तुलना में अधिक उल्लंघन पकड़ सकते हैं।

अंतिम परियोजना 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 स्कीम बना और डिबग कर सकते हैं। होमब्रू से स्थापित स्विफ्टलिंट बाइनरी के साथ आप हमेशा की तरह इस ऐप का उपयोग कर सकते हैं।


इसे अपने प्रोजेक्ट पर चलाने का प्रयास करें: अपनी प्रोजेक्ट विंडो के टूलबार में स्कीम के नाम पर क्लिक करें, "एडिट स्कीम..." पर क्लिक करें, और "विकल्प" टैब में "वर्किंग डायरेक्टरी" को उस पथ पर सेट करें जहां आप स्विफ्टलिंट को निष्पादित करना चाहते हैं।

देशी स्विफ्टलिंट नियम विकसित करने के बारे में अधिक जानकारी के लिए, स्विफ्टलिंट के 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 प्रोजेक्ट में एकीकृत कर लिया है। इस सेटअप के साथ, आप जितने चाहें उतने कस्टम नियम बना और परीक्षण कर सकते हैं, जिससे यह सुनिश्चित करने में मदद मिलती है कि आपका कोड सुसंगत रहता है और आपकी टीम के कोडिंग मानकों के अनुरूप है।


हैप्पी लाइनिंग!