paint-brush
কাস্টম সুইফ্টলিন্ট নিয়মের ক্ষমতা আলিঙ্গন করুন এবং Regex কে বিদায় বলুনদ্বারা@micci
1,998 পড়া
1,998 পড়া

কাস্টম সুইফ্টলিন্ট নিয়মের ক্ষমতা আলিঙ্গন করুন এবং Regex কে বিদায় বলুন

দ্বারা Misha K.3m2023/05/31
Read on Terminal Reader
Read this story w/o Javascript

অতিদীর্ঘ; পড়তে

কোডিং মান এবং সর্বোত্তম অনুশীলন প্রয়োগ করার জন্য SwiftLint হল সেরা টুল। এটি প্রাক-সংজ্ঞায়িত নিয়মগুলির সাথে আসে যা পৃথক প্রকল্পের প্রয়োজন অনুসারে কাস্টমাইজ করা যেতে পারে। সুইফটলিন্টের সাহায্যে আমরা জটিল নিয়ম তৈরি করতে নিয়মিত এক্সপ্রেশন ব্যবহার করতে পারি। নিয়মগুলি সুইফটে লেখা, দক্ষ, এবং রেজেক্সের তুলনায় আরও লঙ্ঘন ধরতে পারে।
featured image - কাস্টম সুইফ্টলিন্ট নিয়মের ক্ষমতা আলিঙ্গন করুন এবং Regex কে বিদায় বলুন
Misha K. HackerNoon profile picture

কোডিং মান এবং সর্বোত্তম অনুশীলনগুলি প্রয়োগ করার জন্য সুইফ্টলিন্ট হল সেরা হাতিয়ার। এটি প্রাক-সংজ্ঞায়িত নিয়মগুলির সাথে আসে যা পৃথক প্রকল্পের প্রয়োজন অনুসারে কাস্টমাইজ করা যেতে পারে। যাইহোক, কখনও কখনও অন্তর্নির্মিত নিয়ম প্রকল্পের প্রয়োজনীয়তা কম পড়ে। এই ধরনের ক্ষেত্রে, আমরা শূন্যস্থান পূরণ করতে নিয়মিত অভিব্যক্তি লিখি।


যদিও 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 ব্যবহার করে আপনার সুইফট প্রকল্পে একত্রিত করেছেন। এই সেটআপের সাহায্যে, আপনি আপনার প্রয়োজন অনুযায়ী অনেকগুলি কাস্টম নিয়ম তৈরি করতে এবং পরীক্ষা করতে পারেন, আপনার কোডটি সামঞ্জস্যপূর্ণ থাকে এবং আপনার দলের কোডিং মানগুলির সাথে সামঞ্জস্যপূর্ণ থাকে তা নিশ্চিত করতে সহায়তা করে৷


শুভ লিন্টিং!