Sourcery Swift: कोड जनरेशन की पूरी गाइड
1. यह क्या है और क्यों ज़रूरी है?
Sourcery Swift भाषा के लिए एक शक्तिशाली कोड जनरेशन टूल है, जिसे Krzysztof Zabłocki और उनकी टीम ने बनाया है। यह आपके सोर्स फ़ाइलों की संरचना और एनोटेशन के आधार पर स्वचालित रूप से boilerplate code जनरेट करता है। प्रोटोकॉल, Equatable, Hashable, Codable, टेस्टिंग के लिए मॉक ऑब्जेक्ट या Auto Layout कोड को बार-बार मैन्युअल लिखने के बजाय, आप एक बार जनरेशन नियम सेट करते हैं और Sourcery बाकी काम करता है।
यह क्यों ज़रूरी है? Swift प्रोजेक्ट्स में बहुत सारा कोड मैकेनिकल और दोहराव वाला होता है। इससे न सिर्फ डेवलपर का समय बर्बाद होता है, बल्कि गलतियाँ भी होती हैं: Equatable में नया फ़ील्ड जोड़ना भूल गए — बग आ गया। Sourcery यह रूटीन संभालकर इस समस्या को हल करता है। यह आपके कोड (AST — Abstract Syntax Tree) का विश्लेषण करता है और टेम्पलेट्स (Stencil या Swift-based) के आधार पर नई फ़ाइलें जनरेट करता है। यह बड़े प्रोजेक्ट्स में विशेष रूप से उपयोगी है जहाँ दर्जनों या सैकड़ों मॉडल, ViewController या सर्विसेज़ हों।
Sourcery runtime लाइब्रेरी नहीं है — यह कंपाइल-टाइम टूल है। आप इसे बिल्ड प्रोसेस के हिस्से के रूप में चलाते हैं (Xcode में Build Phase या SPM/Tuist के ज़रिए), यह फ़ाइलें जनरेट करता है, और फिर ये फ़ाइलें बाकी कोड के साथ कंपाइल होती हैं। इस दृष्टिकोण से runtime में कोई overhead नहीं होता और पूरी पूर्वानुमानशीलता मिलती है।
2. इंस्टॉलेशन
Sourcery को इंस्टॉल करने के कई तरीके हैं। सबसे आसान और अनुशंसित तरीका Homebrew है:
brew install sourcery
Swift Package Manager (SPM) का उपयोग करने वाले प्रोजेक्ट्स के लिए, Sourcery को प्लगइन के रूप में जोड़ा जा सकता है। लेकिन इसे अक्सर बिल्ड स्क्रिप्ट से कॉल किए जाने वाले अलग बाइनरी के रूप में उपयोग किया जाता है। Mint (Swift टूल्स के लिए पैकेज मैनेजर) के ज़रिए इंस्टॉल करने के लिए:
mint install krzysztofzablocki/Sourcery
आप GitHub Releases से तैयार बाइनरी डाउनलोड करके प्रोजेक्ट फ़ोल्डर में रख सकते हैं। इंस्टॉल करने के बाद, कमांड उपलब्ध है या नहीं, यह जाँचें:
sourcery --version
3. त्वरित शुरुआत — न्यूनतम कार्यशील उदाहरण
एक सरल उदाहरण बनाते हैं: एक स्ट्रक्चर के लिए Equatable प्रोटोकॉल का ऑटोमैटिक जनरेशन।
चरण 1: सोर्स कोड फ़ाइल बनाएँ (जैसे, Sources/Models/User.swift):
import Foundation
// sourcery: AutoEquatable
struct User {
let id: Int
let name: String
let email: String
}
ध्यान दें कि कमेंट // sourcery: AutoEquatable — यह एनोटेशन Sourcery को बताता है कि इस स्ट्रक्चर के लिए Equatable इम्प्लीमेंटेशन जनरेट करना है।
चरण 2: टेम्पलेट बनाएँ (जैसे, Templates/AutoEquatable.stencil):
// Generated by Sourcery
// swiftlint:disable all
{% for type in types.all where type.annotations.AutoEquatable %}
extension {{ type.name }}: Equatable {
static func == (lhs: {{ type.name }}, rhs: {{ type.name }}) -> Bool {
{% for variable in type.storedVariables %}
{% if not forloop.first %} && {% endif %}lhs.{{ variable.name }} == rhs.{{ variable.name }}
{% endfor %}
}
}
{% endfor %}
चरण 3: Sourcery चलाएँ:
sourcery --sources Sources/Models --templates Templates --output Generated
चरण 4: परिणाम — Generated फ़ोल्डर में AutoEquatable.generated.swift फ़ाइल दिखाई देगी:
// Generated by Sourcery
// swiftlint:disable all
extension User: Equatable पुस्तकालय में भी
TypeScript के लिए Swagger/OpenAPI जनरेशन: सर्वश्रेष्ठ टूल्स
PHP में Event Bus और Observer पैटर्न: कार्यान्वयन और उदाहरण
जावा में रेट लिमिटिंग: लाइब्रेरीज़, एल्गोरिदम और कार्यान्वयन
Kotlin में प्राधिकरण और प्रमाणीकरण: Ktor, JWT और Spring Security
Swift के लिए WebSocket लाइब्रेरी: iOS/macOS के लिए Starscream