Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

रुबोकॉप के साथ लाइनिंग और ऑटो-फॉर्मेटिंग रूबी कोड

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

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

रूबोकॉप इंस्टॉल करना

RubyGems के माध्यम से RuboCop को स्थापित करना आसान है:

$ gem install rubocop

इंस्टॉल किए गए संस्करण की जांच करें:

$ rubocop --version
1.18.3

यदि आप बंडलर का उपयोग करना चाहते हैं, तो नीचे दिए गए स्निपेट को अपने Gemfile . में रखें और फिर bundle install run चलाएं . require: false भाग बताता है Bundler.require आपके कोड में उस विशिष्ट रत्न की आवश्यकता नहीं है क्योंकि इसका उपयोग केवल कमांड लाइन से किया जाएगा।

gem 'rubocop', require: false

इंस्टॉल किए गए संस्करण की जांच करें:

$ bundle exec rubocop --version
1.18.3

RuboCop चल रहा है

आप rubocop . लिखकर अपने प्रोजेक्ट पर इसकी डिफ़ॉल्ट सेटिंग्स का उपयोग करके रूबोकॉप चला सकते हैं (या bundle exec rubocop अगर बंडलर के साथ स्थापित है)। यदि आप कमांड को कोई तर्क नहीं देते हैं, तो यह वर्तमान निर्देशिका में सभी रूबी स्रोत फ़ाइलों के साथ-साथ सभी उप निर्देशिकाओं की जांच करेगा। वैकल्पिक रूप से, आप उन फ़ाइलों और निर्देशिकाओं की सूची पास कर सकते हैं जिनका विश्लेषण किया जाना चाहिए।

$ bundle exec rubocop
$ bundle exec rubocop src/lib

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

रुबोकॉप के साथ लाइनिंग और ऑटो-फॉर्मेटिंग रूबी कोड

रिपोर्ट के निचले भाग में, आपको निरीक्षण की गई फ़ाइलों की संख्या, अपराधों की कुल संख्या, और कितने अपराधों को स्वचालित रूप से ठीक किया जा सकता है, का वर्णन करने वाली एक पंक्ति दिखाई देगी। यदि आप -a जोड़ते हैं या --auto-correct तर्क, रूबोकॉप आपकी स्रोत फ़ाइलों में पाई गई समस्याओं को स्वचालित रूप से ठीक करने का प्रयास करेगा (जो [Correctable] के साथ उपसर्ग करते हैं) )।

$ bundle exec rubocop -A

रुबोकॉप के साथ लाइनिंग और ऑटो-फॉर्मेटिंग रूबी कोड

ध्यान दें कि कैसे प्रत्येक सुधारा गया अपराध अब [Corrected] . से पहले लगा दिया गया है . रिपोर्ट के निचले भाग में सुधारे गए अपराधों की संख्या का सारांश भी प्रस्तुत किया गया है। उपरोक्त उदाहरण में, एक और सुधार योग्य अपराध है जिसे -a जोड़ने के बाद भी स्वतः ठीक नहीं किया गया था झंडा। ऐसा इसलिए है क्योंकि कुछ स्वचालित सुधार कोड के शब्दार्थ को थोड़ा बदल सकते हैं, इसलिए रूबोकॉप इसे असुरक्षित मानता है। यदि आप इन अपराधों को स्वत:सुधारना चाहते हैं, तो -A . का उपयोग करें या --auto-correct-all झंडा।

$ bundle exec rubocop -A

रुबोकॉप के साथ लाइनिंग और ऑटो-फॉर्मेटिंग रूबी कोड

पालन ​​​​करने के लिए अंगूठे का एक अच्छा नियम यह सुनिश्चित करने के लिए स्वत:सुधार कार्यक्षमता का उपयोग करने के बाद अपना परीक्षण सूट चलाना है कि आपके कोड का व्यवहार अप्रत्याशित रूप से नहीं बदला है।

RuboCop को कॉन्फ़िगर करना

रूबोकॉप को .rubocop.yml . के माध्यम से कॉन्फ़िगर किया जा सकता है फ़ाइल आपके प्रोजेक्ट की जड़ में रखी गई है। यदि आप सभी परियोजनाओं के लिए समान जांच का उपयोग करना चाहते हैं, तो आप अपनी होम निर्देशिका में एक वैश्विक कॉन्फ़िगरेशन फ़ाइल रख सकते हैं (~/.rubocop.yml ) या XDG कॉन्फ़िगरेशन निर्देशिका (~/.config/rubocop/config.yml ) इस वैश्विक कॉन्फ़िगरेशन फ़ाइल का उपयोग किया जाएगा यदि स्थानीय रूप से स्कोप की गई प्रोजेक्ट कॉन्फ़िगरेशन फ़ाइल वर्तमान निर्देशिका या क्रमिक मूल निर्देशिका में नहीं मिलती है।

रूबोकॉप के लिए डिफ़ॉल्ट कॉन्फ़िगरेशन को इसकी कॉन्फ़िगरेशन होम निर्देशिका (~/.config/rubocop/default.yml में रखा गया है। ), और अन्य सभी कॉन्फ़िगरेशन फ़ाइलें इससे प्राप्त होती हैं। इसका मतलब है कि अपना प्रोजेक्ट कॉन्फ़िगरेशन सेट करते समय, आपको केवल वही बदलाव करने होंगे जो डिफ़ॉल्ट से भिन्न हों। इसका मतलब यह हो सकता है कि कुछ जांचों को सक्षम या अक्षम करना या यदि वे कोई पैरामीटर स्वीकार करते हैं तो उनके व्यवहार में बदलाव करना।

रूबोकॉप प्रत्येक व्यक्तिगत जांच को पुलिस के रूप में संदर्भित करता है, और प्रत्येक एक विशिष्ट अपराध का पता लगाने के लिए जिम्मेदार है। उपलब्ध पुलिस को भी निम्नलिखित विभागों में बांटा गया है:

  • स्टाइल पुलिस ज्यादातर उपरोक्त रूबी स्टाइल गाइड पर आधारित होती है, और वे आपके कोड की निरंतरता की जांच करती हैं।
  • लेआउट पुलिस फ़ॉर्मेटिंग से जुड़ी समस्याओं को पकड़ती है, जैसे कि सफ़ेद जगह का इस्तेमाल.
  • लिंट पुलिस आपके कोड में संभावित त्रुटियों का पता लगाती है, जैसे ruby -w , लेकिन कई अतिरिक्त जांचों के साथ।
  • मीट्रिक पुलिस स्रोत कोड मापन से संबंधित मुद्दों जैसे वर्ग की लंबाई और विधि की लंबाई से संबंधित है।
  • नामकरण पुलिस नामकरण परंपराओं से संबंधित है।
  • सुरक्षा पुलिस संभावित सुरक्षा मुद्दों को पकड़ने में मदद करती है।
  • बंडलर पुलिस बंडलर फ़ाइलों (जैसे Gemfile) में खराब व्यवहारों की जांच करती है )।
  • Gemspec पुलिस .gemspec . में बुरे व्यवहार की जांच करती है फ़ाइलें.

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

रुबोकॉप के साथ लाइनिंग और ऑटो-फॉर्मेटिंग रूबी कोड

जब आप पहली बार अपनी कॉन्फ़िगरेशन फ़ाइल बनाते हैं, तो आपको नए पुलिस की उपस्थिति के बारे में चेतावनी देने वाले संदेशों का एक समूह मिलेगा जो जोड़े गए थे लेकिन कॉन्फ़िगर नहीं किए गए थे। ऐसा इसलिए है क्योंकि रूबोकॉप प्रत्येक रिलीज पर नई पुलिस जोड़ता है, और ये तब तक एक विशेष लंबित स्थिति पर सेट होते हैं जब तक कि वे उपयोगकर्ता कॉन्फ़िगरेशन में स्पष्ट रूप से सक्षम या अक्षम न हों। आप संदेश में सूचीबद्ध प्रत्येक पुलिस को अलग-अलग सक्षम या अक्षम कर सकते हैं या सभी नए पुलिस को सक्षम करने के लिए नीचे दिए गए स्निपेट का उपयोग कर सकते हैं (अनुशंसित)। बाद में, संदेशों को दबा दिया जाएगा।

# .rubocop.yml
AllCops:
  NewCops: enable

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

आप अपने Gemfile . में निम्न पंक्ति जोड़कर इसे स्थापित कर सकते हैं और फिर bundle install run चलाएं ।

# Gemfile
gem "standard", group: [:development, :test]

बाद में, आप कमांड लाइन से मानक को निम्नानुसार निष्पादित कर सकते हैं:

$ bundle exec standardrb

रूबोकॉप को किसी मौजूदा प्रोजेक्ट में जोड़ना

अधिकांश रूबीवादियों के पास ग्रीनफील्ड परियोजनाओं पर काम करने की विलासिता नहीं है। हमारे विकास का अधिकांश समय विरासत कोडबेस में व्यतीत होता है जो भारी मात्रा में लाइनिंग अपराध उत्पन्न कर सकते हैं जिन्हें तुरंत निपटाया नहीं जा सकता है। सौभाग्य से, रूबोकॉप में एक उपयोगी विशेषता है जो मौजूदा अपराधों की एक अनुमत सूची तैयार करती है, जिसे समय के साथ धीरे-धीरे संबोधित किया जा सकता है। इसका लाभ यह है कि यह आपको आगे बढ़ने वाले किसी भी नए उल्लंघन को फ़्लैग करते हुए असहनीय लाइनिंग त्रुटियों के पहाड़ के साथ बमबारी किए बिना अपने मौजूदा प्रोजेक्ट में लाइनिंग पेश करने की अनुमति देता है।

$ bundle exec rubocop

523 files inspected, 1018 offenses detected

अनुमति सूची कॉन्फ़िग फ़ाइल बनाना नीचे दिए गए कमांड के माध्यम से किया जा सकता है:

$ bundle exec rubocop --auto-gen-config
Added inheritance from `.rubocop_todo.yml` in `.rubocop.yml`.
Created .rubocop_todo.yml.

--auto-gen-config विकल्प सभी अपराधों और उनकी गिनती एकत्र करता है और एक .rubocop_todo.yml उत्पन्न करता है वर्तमान निर्देशिका में फ़ाइल करें जहाँ सभी मौजूदा अपराधों को नज़रअंदाज़ किया जाता है। अंत में, यह .rubocop.yml . का कारण बनता है .rubocop_todo.yml . से इनहेरिट करने के लिए फ़ाइल ताकि रूबोकॉप को कोडबेस पर चलाने से एक बार फिर कोई अपराध न हो।

$ bundle exec rubocop
523 files inspected, no offenses detected

अनुमति सूची फ़ाइल बनाते समय, उल्लंघनों की संख्या एक निश्चित सीमा (डिफ़ॉल्ट रूप से 15) से अधिक होने पर रूबोकॉप एक पुलिस वाले को पूरी तरह से बंद कर देगा। यह आम तौर पर वह नहीं है जो आप चाहते हैं क्योंकि यह मौजूदा उल्लंघनों की संख्या के कारण उस पुलिस वाले के खिलाफ नए कोड की जांच करने से रोकता है। सौभाग्य से, सीमा को बढ़ाना संभव है ताकि उल्लंघनों की संख्या अधिक होने पर भी पुलिस अक्षम न हो।

$ bundle exec rubocop --auto-gen-config --auto-gen-only-exclude --exclude-limit 10000

--auto-gen-only-exclude विकल्प सुनिश्चित करता है कि अनुमति सूची में प्रत्येक पुलिस वाले के पास एक Exclude है ब्लॉक करें जो Max . के बजाय उन सभी फाइलों को सूचीबद्ध करता है जहां उल्लंघन हुआ है , जो एक पुलिस वाले के लिए बहिष्कृत फ़ाइलों की अधिकतम संख्या निर्धारित करता है। --exclude-limit सेट करना Exclude में जोड़ी जा सकने वाली फ़ाइलों की अधिकतम संख्या को भी बदलता है प्रत्येक पुलिस वाले के लिए ब्लॉक। जांच की जा रही फाइलों की कुल संख्या से बड़ी एक मनमानी संख्या निर्दिष्ट करना सुनिश्चित करता है कि कोई भी पुलिस एकमुश्त अक्षम नहीं होगी, और मौजूदा या नई फाइलों में जोड़े गए किसी भी नए कोड की तदनुसार जांच की जाएगी।

मौजूदा उल्लंघनों को ठीक करना

.rubocop_todo.yml . जनरेट करने के बाद फ़ाइल, मौजूदा उल्लंघनों को भूलना नहीं, बल्कि धीरे-धीरे उन्हें एक के बाद एक संबोधित करना महत्वपूर्ण है। आप Exclude . से किसी फ़ाइल को निकाल कर ऐसा कर सकते हैं एक पुलिस वाले को ब्लॉक करें, फिर रिपोर्ट किए गए उल्लंघनों को ठीक करें, बग पेश करने से बचने के लिए अपना परीक्षण सूट चलाएं, और प्रतिबद्ध करें। एक बार जब आप एक पुलिस वाले से सभी फाइलों को हटा देते हैं, तो आप पुलिस वाले को फाइल से मैन्युअल रूप से हटा सकते हैं, या एक बार फिर से अनुमति सूची फ़ाइल को पुन:उत्पन्न कर सकते हैं। --auto-correct का उपयोग करना न भूलें विकल्प जहां संभव हो प्रक्रिया को बहुत तेज बनाने के लिए।

शैली मार्गदर्शिका अपनाना

रूबोकॉप बहुत विन्यास योग्य है, जो इसे किसी भी प्रकार की परियोजना के लिए व्यवहार्य बनाता है। हालांकि, नियमों को आपकी आवश्यकताओं के लिए कॉन्फ़िगर करने में लंबा समय लग सकता है, खासकर यदि आप कई डिफ़ॉल्ट नियमों से असहमत हैं। ऐसी परिस्थितियों में, मौजूदा स्टाइल गाइड को अपनाना फायदेमंद हो सकता है। कई कंपनियों ने सार्वजनिक उपभोग के लिए अपने रूबी स्टाइल गाइड पहले ही जारी कर दिए हैं, जैसे कि Shopify और Airbnb। अपने Gemfile में प्रासंगिक रत्न जोड़कर RuboCop में अपने पसंदीदा स्टाइल गाइड का उपयोग किया जा सकता है। :

# Gemfile
gem "rubocop-shopify", require: false

फिर, अपने प्रोजेक्ट कॉन्फ़िगरेशन में इसकी आवश्यकता है:

# .rubocop.yml
inherit_gem:
  rubocop-shopify: rubocop.yml

लिनिंग त्रुटियों को दबाना

हालांकि रूबोकॉप एक महान उपकरण है, यह समय-समय पर झूठी सकारात्मकता उत्पन्न कर सकता है या कोड को इस तरह से ठीक करने का सुझाव दे सकता है जो प्रोग्रामर के इरादे के लिए हानिकारक हो। जब ऐसी स्थितियां उत्पन्न होती हैं, तो आप स्रोत कोड में एक टिप्पणी के साथ उल्लंघन को अनदेखा कर सकते हैं। आप अलग-अलग पुलिस या विभागों को अक्षम करने का उल्लेख कर सकते हैं, जैसा कि नीचे दिखाया गया है:

# rubocop:disable Layout/LineLength, Style
[..]
# rubocop:enable Layout/LineLength, Style

या आप एक ही बार में कोड के एक हिस्से के लिए सभी पुलिस को निष्क्रिय कर सकते हैं:

# rubocop:disable all
[..]
# rubocop:enable all

यदि आप एंड ऑफ़ लाइन कमेंट का उपयोग करते हैं, तो निर्दिष्ट पुलिस केवल उसी लाइन पर अक्षम हो जाएगी।

for x in (0..10) # rubocop:disable Style/For

संपादक एकीकरण

रूबोकॉप द्वारा उत्पन्न चेतावनियों और त्रुटियों को देखना आसान है क्योंकि आप हर बार कमांड लाइन के माध्यम से चेक चलाने के बजाय संपादक में कोड टाइप करते हैं। शुक्र है, रूबोकॉप एकीकरण अधिकांश लोकप्रिय कोड संपादकों और आईडीई में उपलब्ध है, ज्यादातर तीसरे पक्ष के प्लगइन्स के माध्यम से। विजुअल स्टूडियो कोड में, आपको बस इस रूबी एक्सटेंशन को इंस्टॉल करना है और निम्नलिखित को अपने उपयोगकर्ता settings.json में रखना है। फ़ाइल:

{
  "ruby.lint": {
    "rubocop": true
  }
}

यदि आप विम या नियोविम का उपयोग करते हैं, तो आप रूबोकॉप के निदान को coc.nvim के माध्यम से प्रदर्शित कर सकते हैं। आपको सोलरग्राफ भाषा सर्वर स्थापित करने की आवश्यकता है (gem install solargraph ), उसके बाद coc-solargraph एक्सटेंशन (:CocInstall coc-solargraph ) बाद में, अपना coc-settings.json कॉन्फ़िगर करें फ़ाइल जैसा कि नीचे दिखाया गया है:

{
  "coc.preferences.formatOnSaveFiletypes": ["ruby"],
  "solargraph.autoformat": true,
  "solargraph.diagnostics": true,
  "solargraph.formatting": true
}

रुबोकॉप के साथ लाइनिंग और ऑटो-फॉर्मेटिंग रूबी कोड

एक पूर्व-प्रतिबद्ध हुक सेट करना

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

सबसे पहले, रूबीगेम्स के माध्यम से ओवरकमिट स्थापित करें और फिर इसे अपने प्रोजेक्ट में स्थापित करें:

$ gem install overcommit
$ overcommit --install # at the root of your project

ऊपर दिया गया दूसरा कमांड रेपो-विशिष्ट सेटिंग्स फ़ाइल (.overcommit.yml . बनाएगा ) वर्तमान निर्देशिका में और किसी भी मौजूदा हुक का बैकअप लें। यह फ़ाइल डिफ़ॉल्ट कॉन्फ़िगरेशन का विस्तार करती है, इसलिए आपको केवल डिफ़ॉल्ट के संबंध में अपना कॉन्फ़िगरेशन निर्दिष्ट करने की आवश्यकता है। उदाहरण के लिए, आप निम्नलिखित स्निपेट के माध्यम से रूबोकॉप प्री-कमिट हुक को सक्षम कर सकते हैं:

# .overcommit.yml
PreCommit:
  RuboCop:
    enabled: true
    on_warn: fail
    problem_on_unmodified_line: ignore
    command: ['bundle', 'exec', 'rubocop']

on_warn: fail सेटिंग ओवरकमिट को चेतावनियों को विफलताओं के रूप में मानने का कारण बनती है, जबकि problem_on_unmodified_line: ignore उन पंक्तियों पर चेतावनियों और त्रुटियों का कारण बनता है जिन्हें अनदेखा करने के लिए मंचित नहीं किया गया था। आप प्रोजेक्ट के GitHub पेज पर सभी उपलब्ध हुक विकल्प और उनके स्वीकार्य मानों की श्रेणी ब्राउज़ कर सकते हैं। आपको overcommit --sign चलाने की आवश्यकता हो सकती है परिवर्तनों को प्रभावी करने के लिए अपनी कॉन्फ़िगरेशन फ़ाइल बदलने के बाद।

रुबोकॉप के साथ लाइनिंग और ऑटो-फॉर्मेटिंग रूबी कोड

कभी-कभी, यदि आप ऐसी फ़ाइल करना चाहते हैं जो सभी जाँचों को पास नहीं करती है (जैसे कि कार्य-प्रगति), तो आप अलग-अलग जाँचों को केस-दर-मामला आधार पर छोड़ सकते हैं:

$ SKIP=RuboCop git commit -m "WIP: Unfinished work"

RuboCop को अपने CI वर्कफ़्लो में जोड़ना

प्रत्येक पुल अनुरोध पर रूबोकॉप जांच चलाना बुरी तरह से स्वरूपित कोड को आपके प्रोजेक्ट में विलय होने से रोकने का एक और तरीका है। हालाँकि आप इसे किसी भी CI टूल के साथ सेट कर सकते हैं, लेकिन यह लेख केवल इस बात पर चर्चा करेगा कि GitHub Actions के माध्यम से RuboCop को कैसे चलाया जाए।

पहला कदम .github/workflows . बनाना है आपकी परियोजना के मूल में निर्देशिका और एक rubocop.yml नई निर्देशिका के भीतर फ़ाइल। फ़ाइल को अपने संपादक में खोलें और इसे इस प्रकार अपडेट करें:

# .github/workflows/rubocop.yml
name: Lint code with RuboCop

on: [push, pull_request]

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [macos-latest, ubuntu-latest, windows-latest]

    steps:
    - uses: actions/checkout@v2

    - name: Setup Ruby
      uses: ruby/setup-ruby@v1
      with:
        ruby-version: '3.0'
        bundler-cache: true

    - name: Run RuboCop
      run: bundle exec rubocop

उपरोक्त वर्कफ़्लो फ़ाइल एक एकल कार्य का वर्णन करती है जिसे तब निष्पादित किया जाएगा जब कोड को GitHub पर धकेला जाएगा या जब किसी शाखा के विरुद्ध पुल अनुरोध किया जाएगा। एक job क्रमिक रूप से चलने वाले चरणों का एक क्रम है। यह विशेष कार्य एक बार नवीनतम उबंटू, मैकओएस, और गिटहब क्रियाओं द्वारा प्रदान किए गए विंडोज संस्करणों पर चलेगा (जैसा कि runs-on द्वारा परिभाषित किया गया है) और strategy.matrix ) पहला चरण रिपॉजिटरी में कोड की जांच करता है, जबकि अगला रूबी टूल चेन और निर्भरता को सेट करता है, और आखिरी वाला रूबोकॉप को निष्पादित करता है।

एक बार जब आप फ़ाइल को संपादित कर लेते हैं, तो इसे सहेजें, प्रतिबद्ध करें और GitHub पर पुश करें। बाद में, आपको बाद के चेक-इन और पुल अनुरोधों पर किसी भी रिपोर्ट की गई समस्याओं का इनलाइन प्रदर्शन मिलेगा।

रुबोकॉप के साथ लाइनिंग और ऑटो-फॉर्मेटिंग रूबी कोड

वैकल्पिक Auto-formatters

हालांकि रूबोकॉप व्यापक ऑटो-फ़ॉर्मेटिंग क्षमताएं प्रदान करता है, लेकिन अगर यह आपकी ज़रूरतों को पर्याप्त रूप से पूरा नहीं करता है तो वैकल्पिक टूल से अवगत होना भी महत्वपूर्ण है।

सुंदर

प्रीटियर ने जावास्क्रिप्ट के लिए एक राय कोड फॉर्मेटर के रूप में शुरुआत की, लेकिन अब यह रूबी सहित कई अन्य भाषाओं का समर्थन करता है। इसके रूबी प्लगइन को स्थापित करना सीधे आगे है:prettier जोड़ें आपके Gemfile . पर रत्न और फिर bundleचलाएं ।

# Gemfile
gem 'prettier'

इस बिंदु पर, आप निम्न आदेश के माध्यम से अपने रूबी कोड को Prettier के साथ प्रारूपित कर सकते हैं:

$ bundle exec rbprettier --write '**/*.rb'

Prettier के कुछ नियम RuboCop के साथ विरोध करते हैं, इसलिए बाद वाले के स्वरूपण जांच को अक्षम करना आवश्यक है ताकि यह Prettier के साथ हस्तक्षेप न करे। सौभाग्य से, रूबोकॉप जांच को बंद करना आसान है कि प्रीटियर के साथ संघर्ष या अनावश्यक हैं। आपको बस अपने प्रोजेक्ट के .rubocop.yml के शीर्ष पर Prettier के RuboCop कॉन्फ़िगरेशन को इनहेरिट करना है। फ़ाइल:

# .rubocop.yml
inherit_gem:
  prettier: rubocop.yml

जब आप रूबोकॉप चलाते हैं (bundle exec rubocop ) अब से, यह किसी भी लेआउट संबंधी अपराधों की रिपोर्ट नहीं करेगा, जिससे Prettier के लिए अपने स्वयं के नियमों के अनुसार उन्हें ठीक करने का मार्ग प्रशस्त होगा। आप Prettier के आउटपुट को उसकी कॉन्फ़िगरेशन फ़ाइल के माध्यम से भी कॉन्फ़िगर कर सकते हैं, जिसे एक ही प्रोजेक्ट में JavaScript और Ruby कोड के बीच साझा किया जा सकता है।

RubyFmt

RubyFmt एक नया कोड फॉर्मेटर है जो Rust में लिखा गया है और वर्तमान में सक्रिय विकास के अधीन है। Prettier की तरह, इसका उद्देश्य एक फ़ॉर्मेटर होना है, न कि एक कोड विश्लेषण उपकरण। इसने अभी तक एक स्थिर रिलीज़ नहीं देखा है, इसलिए आपको शायद इसे अभी अपनाने से बचना चाहिए, लेकिन यह निश्चित रूप से नज़र रखने वाला एक है।

निष्कर्ष

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

यह भी महत्वपूर्ण है कि लिंटर के आउटपुट को सुसमाचार के रूप में न मानें, इसलिए इसे इस तरह से कॉन्फ़िगर करने का प्रयास करें जो आपके मुख्य उद्देश्यों से विचलित हुए बिना आपको सबसे अधिक लाभ प्रदान करे। रूबोकॉप की व्यापक कॉन्फ़िगरेशन सेटिंग्स के साथ, यह कोई समस्या नहीं होनी चाहिए। हालाँकि, यदि आप पाते हैं कि रूबोकॉप को कॉन्फ़िगर करने में आपके समय का बहुत अधिक समय लग रहा है, तो आप एक पूर्वनिर्धारित शैली मार्गदर्शिका का उपयोग कर सकते हैं, जैसा कि पहले चर्चा की गई है, या बिना किसी कॉन्फ़िगरेशन विकल्प के लिए मानक अपना सकते हैं, जिसका उपयोग हर कोई छोटे विवरणों के बारे में चिंता करने के बजाय बस उपयोग कर सकता है। ।

पढ़ने और कोडिंग के लिए धन्यवाद!


  1. मौलिक OOP सिद्धांतों के साथ अपने रूबी कोड को नाटकीय रूप से कैसे सुधारें

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

  1. रूबी में स्थैतिक विश्लेषण

    मान लें कि आप अपने सभी तरीकों को खोजने के लिए अपने स्रोत कोड को पार्स करना चाहते हैं, जहां वे परिभाषित हैं और वे कौन से तर्क लेते हैं। आप यह कैसे कर सकते हैं? आपका पहला विचार इसके लिए एक रेगेक्सपी लिखना हो सकता है... लेकिन क्या कोई बेहतर तरीका है? हाँ! स्थिर विश्लेषण एक ऐसी तकनीक है जिसका उपय

  1. अपने iPad और iPhone से QR कोड कैसे स्कैन करें?

    2018 की शुरुआत में, तकनीकी दिग्गज Apple ने iOS 12 के शानदार फीचर्स पेश किए। iPad और फोन पर स्कैन QR कोड एक ऐसी विशेषता थी जिसे Apple उपयोगकर्ताओं के अनुभव को अगले स्तर पर लाने के लिए जोड़ा गया था। यह सुविधा न केवल आपके जीवन को आसान बनाने में सक्षम है बल्कि टिकट, कूपन, उत्पाद सामग्री इत्यादि के बारे