2016-01-31 5 views
6

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

rubocop --only LineLength 

मैं 1,714 त्रुटियों, जहां लाइन की लंबाई से अधिक 80 अक्षर था मिल गया। इसके अलावा, रूबोकॉप द्वारा कई अन्य त्रुटियों का पता चला है जिन्हें मैं अभी अनदेखा करना चाहता हूं।

मैं सी और रूबी दोनों में 80 वर्ण सीमा को पूरा करने के लिए सभी लाइन लंबाई उल्लंघन केवल को स्वत: सुधारने का सबसे आसान तरीका ढूंढ रहा हूं।

+1

मेरा सुझाव है कि आप पहले सबसे सामान्य कारणों को निर्धारित करने के लिए कोड स्कैन करें जो लाइन 80 वर्णों से अधिक है। अगर कोई मुख्य अपराधी लंबे परिवर्तनीय और विधि नाम है तो मुझे आश्चर्य नहीं होगा। यदि ऐसा है, तो आप केवल उन तारों को छोटा करके "लंबी" रेखाओं (> 80 वर्ण) की संख्या को कम करने में सक्षम हो सकते हैं। "मीरली" शायद सही शब्द नहीं है, क्योंकि यह कोई आसान काम नहीं है। आपको रूबी के अंतर्निर्मित तरीकों के साथ-साथ कुछ उद्धृत तारों के नामों को छोटा करने से बचने की आवश्यकता है। (मैं "कुछ" कहता हूं क्योंकि आप एक विधि 'डीआईटी' परिभाषित कर सकते हैं और फिर इसे स्ट्रिंग के रूप में संदर्भित कर सकते हैं: 'एस्ेंड ("डॉट") '।) ... –

+1

... आप अपने कोड स्कैनिन से शुरू कर सकते हैं स्ट्रिंग्स के लिए जिन्हें आप सरणी 'arr' में डाल देंगे, फिर 'arr.uniq! .ॉर्ट!'। इसके बाद आगे बढ़ें और स्ट्रिंग को हटा दें जो स्पष्ट रूप से छोटा नहीं किया जा सकता है।फिर एक हैश बनाएं जो प्रत्येक स्ट्रिंग को स्वयं ही मैप करें, फिर मैन्युअल रूप से प्रत्येक मान को कुछ छोटे लेकिन अभी भी सार्थक में संशोधित करें। पुष्टि करने के बाद हैश में कोई डुप्लिकेट मान नहीं है, कोड में स्ट्रिंग को छोटा करने के लिए हैश का उपयोग करें ... –

+1

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

उत्तर

1

कृपया लाइन की लंबाई स्वचालित रूप से न बदलें।

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

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

मेट्रिक्स कोड में समस्याएं भी इंगित कर सकता है। उदाहरण के लिए, बहुत अधिक एबीसी-आकार इंगित करता है कि एक विधि बहुत अधिक हो सकती है।

इसके अलावा, यह बहुत मुश्किल होगा, अगर असंभव नहीं है, तो कोड की सभी पंक्तियों को स्वचालित रूप से छोटा करने के लिए, क्योंकि रूबी एक बहुत ही जटिल भाषा है।

इसके बजाय स्वचालित रूप से linelength को कम करने के

, यहाँ कुछ विकल्प है:

  • यदि आप AllowHeredoc और AllowURI विकल्प को सक्षम करने से उल्लंघन की संख्या को कम कर सकते हैं। उनके बारे में यहां पढ़ें https://rubocop.readthedocs.io/en/latest/cops_metrics/#metricslinelength
  • रन rubocop --only LineLength --auto-gen-config और linelength की जांच रोकने के लिए rubocops कॉन्फ़िगरेशन का उपयोग करें।
  • खुद से पूछें: मुझे लिनलेथेंथ को कम करके क्या मूल्य प्राप्त होता है?
  • स्टाइल उल्लंघन के रूप में बहुत लंबी लाइनों के बारे में नहीं सोचें, बल्कि अंतर्निहित समस्या के संभावित संकेतक के रूप में। उस समस्या को खोजने का प्रयास करें, और इसे हल करें।
संबंधित मुद्दे