কোডিং মান এবং সর্বোত্তম অনুশীলনগুলি প্রয়োগ করার জন্য সুইফ্টলিন্ট হল সেরা হাতিয়ার। এটি প্রাক-সংজ্ঞায়িত নিয়মগুলির সাথে আসে যা পৃথক প্রকল্পের প্রয়োজন অনুসারে কাস্টমাইজ করা যেতে পারে। যাইহোক, কখনও কখনও অন্তর্নির্মিত নিয়ম প্রকল্পের প্রয়োজনীয়তা কম পড়ে। এই ধরনের ক্ষেত্রে, আমরা শূন্যস্থান পূরণ করতে নিয়মিত অভিব্যক্তি লিখি।
যদিও regex একটি শক্তিশালী টুল, জটিল নিয়ম তৈরি করা কঠিন বা এমনকি অসম্ভবও হতে পারে। এখানেই স্থানীয় সুইফ্টলিন্ট নিয়মগুলি আসে৷ এগুলি সুইফটলিন্টের সাথে আসা নিয়মগুলির মতোই - এগুলি সুইফটে লেখা, দক্ষ, এবং রেজেক্সের তুলনায় আরও লঙ্ঘন ধরতে পারে৷
চূড়ান্ত প্রকল্প 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
কমান্ড ব্যবহার করে সুইফটলিন্ট তৈরি করতে সক্ষম হবেন।
আপনার কাস্টম নিয়মগুলিকে আরও সহজ করার জন্য আমরা আমাদের প্রকল্পে rules_xcodeproj
নির্ভরতা যুক্ত করেছি৷ সুতরাং, আসুন আমাদের প্রকল্প তৈরি করি:
bazel run swiftlint_xcodeproj && open SwiftLint.xcodeproj -a Xcode
এখন, আমরা swiftlint
স্কিম তৈরি এবং ডিবাগ করতে পারি। হোমব্রু থেকে ইনস্টল করা সুইফটলিন্ট বাইনারি সহ আপনি যথারীতি এই অ্যাপটি ব্যবহার করতে পারেন।
আপনার প্রজেক্টে এটি চালানোর চেষ্টা করুন: আপনার প্রোজেক্ট উইন্ডোর টুলবারে স্কিমের নামে ক্লিক করুন, "স্কিম সম্পাদনা করুন..." ক্লিক করুন, এবং "বিকল্প" ট্যাবে "ওয়ার্কিং ডিরেক্টরি" সেট করুন যেখানে আপনি সুইফটলিন্ট চালাতে চান।
নেটিভ সুইফটলিন্টের নিয়ম তৈরির বিষয়ে আরও তথ্যের জন্য, SwiftLint-এর CONTRIBUTING.md দেখুন
এই উদাহরণে, আমরা https://vimeo.com/819268038 এ ভিডিও টিউটোরিয়ালটিতে দেখানো হিসাবে "নিষিদ্ধ var নিয়ম" তৈরি করছি।
এই কোডটি 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) } } } }
এবং এটাই! আপনি একটি কাস্টম সুইফটলিন্ট নিয়ম তৈরি করেছেন এবং এটিকে Bazel ব্যবহার করে আপনার সুইফট প্রকল্পে একত্রিত করেছেন। এই সেটআপের সাহায্যে, আপনি আপনার প্রয়োজন অনুযায়ী অনেকগুলি কাস্টম নিয়ম তৈরি করতে এবং পরীক্ষা করতে পারেন, আপনার কোডটি সামঞ্জস্যপূর্ণ থাকে এবং আপনার দলের কোডিং মানগুলির সাথে সামঞ্জস্যপূর্ণ থাকে তা নিশ্চিত করতে সহায়তা করে৷
শুভ লিন্টিং!