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

एक साल पहले, स्काईेंग की एक टीम को लगभग हर समीक्षा में ऐसे होलीवर का सामना करना पड़ा। लेकिन तब सबसे अधिक दर्द वाले व्यक्ति ने कहा: "अब हम प्रिटियर पर रहते हैं, क्या आप सहमत हैं?" अगले महीनों में, लोगों ने कभी भी प्रारूपण का सवाल नहीं उठाया, और अब यह बात पूरे मोर्चे पर मोनो-रिपॉजिटरी पर है - और हर टीम इसका उपयोग करती है जो वहाँ बुलाता है।
प्रिटियर क्या है
प्रेटियर एक कोड ऑटो-फ़ॉर्मेटिंग टूल है, जिसमें हमारे पसंदीदा कोणीय और टाइपस्क्रिप्ट सहित उपकरणों के एक समूह का समर्थन है। यह कोड को संशोधित नहीं करता है, टर्नरी ऑपरेटरों को इफ़्स के साथ प्रतिस्थापित नहीं करता है, और लंबे समय के तार को कई संगीनों में नहीं तोड़ता है (डेवलपर को पहले से ही इस बारे में सोचना चाहिए), लेकिन बस यह दर्शाता है कि आवश्यक स्वरूपण के साथ क्या है।
जैसा पहले था
उस समय, स्काईेंग में पहले से ही दर्जनों डेवलपर्स थे, और हर महीने 10-20 नए लोग आ सकते थे। छोटी टीमों में सभी ने काम किया (और काम करता है) - प्रत्येक, वास्तव में, अपने कार्यों और समझ के साथ एक स्वतंत्र "मुकाबला इकाई" माना जाता है।
आइए एक ऐसी कल्पना करें - निश्चित रूप से सभी संयोग यादृच्छिक हैं - कमांड:
बोरिस वह मध्य है जो एक और बड़ी कंपनी से हमारे पास आया था। उनकी अपनी शैली मार्गदर्शिका थी, लेकिन वह हमारे प्रति भरोसा रखने की कोशिश करता है: कुल मिलाकर, वह ऐसा करता है, लेकिन समय-समय पर वह प्रारूपण के संबंध में कुछ करता है और केवल कोड समीक्षा में इसके बारे में नहीं जानता है। एक तिपहिया, लेकिन अप्रिय।
Pavel अधिक अनुभवी डेवलपर है। वह अपनी नौकरी जानता है, हमेशा कुशलतापूर्वक और समय पर कार्य करता है, लेकिन कभी-कभी पूरी तरह से समझौते के बारे में भूल जाता है और अपने तरीके से लिखता है। नतीजतन, इसका कोड एक बड़ी परियोजना में फिट नहीं होता है, हालांकि यह उच्च गुणवत्ता और स्वादिष्ट के साथ लिखा गया है।
आर्थर "स्वच्छ कोड - समझने योग्य कोड" के दर्शन के साथ एक पूर्णतावादी हैं: वह हमेशा कोड शैली के बारे में चिंता करता है। बेशक, वह सहयोगियों के कोड को अस्वीकार कर देगा "टिप्पणियों का एक समूह" यहां, अगली पंक्ति पर घुंघराले गले लगाओ "- और बोरिस संपादन पर समय बिताएंगे, और स्तर" आप इसे पसंद नहीं करते हैं, परिवर्तन "के तर्कों पर Pavel।

कैसे किया
प्रेटियर का लक्ष्य डेवलपर को प्रारूपण के बारे में नहीं सोचना है: इसमें न्यूनतम सेटिंग्स हैं। पावेल ने इस रिश्वत का भंडाफोड़ किया जब आर्थर ने परियोजना की चैट का लिंक दिया:
- सेट प्रीटीयर खुद,
- प्री-कमिट हुक (
अधिक ) सेट करें,
- चैट में कुछ टिप्पणियों को छोड़ दिया है कि कोड-शैली वहाँ है (उदाहरण के लिए, यदि लाइन में अंत में लॉजिकल ऑपरेशंस को रखा गया है, और शुरुआत में नहीं)।
यह बात है, इसलिए टीम ने प्रीटीयर पर स्विच किया। यहां पहले और बाद के उद्योग कोड के उदाहरण दिए गए हैं। इस उपकरण की क्षमताओं को दिखाने के लिए इसे थोड़ा सुधार दिया गया है।
करने के लिए:public listenDndForFocusEvents(channel: string): Observable<boolean> { return this.drag .pipe( filter( event => event.channel === channel ), filter( event => event instanceof DndDragStartEvent || event instanceof DndDragEndEvent ), map( event => event instanceof DndDragStartEvent ) ) }
के बाद: public listenDndForFocusEvents(channel: string): Observable<boolean> { return this.drag.pipe( filter(event => event.channel === channel), filter(event => event instanceof DndDragStartEvent || event instanceof DndDragEndEvent), map(event => event instanceof DndDragStartEvent), ); }
यहां तक कि अगर यह एक पंक्ति में लिखा गया था, तब भी इसे फिर से सुधार दिया जाएगा:
public listenDndForFocusEvents(channel: string): Observable<boolean> { return this.drag.pipe(filter(event => event.channel === channel), filter(event => event instanceof DndDragStartEvent || event instanceof DndDragEndEvent), map(event => event instanceof DndDragStartEvent),); }
कोड
का एक और टुकड़ा , पहले से ही अर्धविराम के बिना।
करने के लिए: const lessonCount$ = this.studentLessonsCounterService .getCounter().pipe(map(featureInfo => featureInfo.lessonCount)) const isItTimeForNotification$ = lessonCount$.pipe(map(lessonCount => lessonCount % REAL_TALK_NOTIFICATION_LESSON_INTERVAL === 0))
के बाद: const lessonCount$ = this.studentLessonsCounterService .getCounter() .pipe(map(featureInfo => featureInfo.lessonCount)); const isItTimeForNotification$ = lessonCount$.pipe( map(lessonCount => lessonCount % REAL_TALK_NOTIFICATION_LESSON_INTERVAL === 0), );
अब कोड की समीक्षा तेज है, बोरिस पहले से ही लिखित कोड को फॉर्मेट करने में बहुत समय व्यतीत नहीं करता है, पावेल ने लिखा है कि वह लिखना जारी रखे (लेकिन अब कोई भी उसके साथ गाली नहीं दे रहा है), और आर्थर आखिरकार संतुष्ट हो गए, रिपीटरी में जा रहे हैं और मुस्कुरा रहे हैं सौंदर्य कोड। फरवरी 2019 से एक सरल उपकरण का उपयोग करते हुए, लोगों ने प्रारूपण पर बहस रोककर एक टन समय बचाया। और फिर उन्होंने बाकी टीमों को भी ऐसा करने के लिए मना लिया।