13 पॉइंट द्वारा beenzinozino 2024-11-14 | 2 टिप्पणियां | WhatsApp पर शेयर करें

नमस्कार, मैंने Node.js environment में Clang का उपयोग करके C, C++, Java formatter विकसित किया है। यह प्रोजेक्ट अब मेंटेन न किए जा रहे (deprecated) Angular के clang-format package पर आधारित एक नया प्रोजेक्ट है।

करीब एक-दो महीने पहले भी मैंने इसी विषय पर एक पोस्ट की थी, लेकिन package की stability और बेहतर हो गई है और इसमें नए features भी जुड़े हैं, इसलिए फिर से यह लेख लिख रहा हूँ।

फिलहाल बहुत से लोगों ने इसमें रुचि दिखाई है, और कई पुराने legacy users भी इस पर migrate हुए हैं, जिसकी बदौलत साप्ताहिक downloads की संख्या 10,000 से ऊपर पहुँच गई है। इसके लिए मैं सचमुच आभारी हूँ।

इसके अलावा, this package ने full test coverage हासिल कर ली है, और Node.js core में भी पुराने Angular clang-format project की जगह this package का उपयोग करने के लिए एक PR खुला हुआ है, इसलिए मुझे लगता है कि इसकी stability पर भरोसा करके इसका उपयोग किया जा सकता है। (हालाँकि, अभी भी कुछ चीज़ें हो सकती हैं जो मेरी नज़र से छूट गई हों...)


यह package LLVM के C compiler के रूप में प्रसिद्ध Clang के clang-format पर आधारित है, और C, C++, Java भाषाओं के code formatting को संभालता है। इसे Node.js ecosystem के सबसे प्रसिद्ध packages में से एक Prettier जैसा ही समझा जा सकता है।

लेकिन Prettier package C, C++, Java भाषाओं की formatting को support नहीं करता, इसलिए इन भाषाओं में formatting के लिए अक्सर clang-format का उपयोग किया जाता है।

Node.js environment में clang-format खास तौर पर तब उपयोगी होता है, जब Node.js core development की तरह JavaScript code और C/C++ code साथ में लिखने पड़ते हैं। पहले के clang-format में this package का उपयोग करने के लिए additional dependencies install करनी पड़ती थीं, लेकिन this package के साथ अब इसकी ज़रूरत नहीं है।

इसके अलावा, पुराना clang-format package CI आदि में Node.js और npm आधारित workflows में integrate करना काफी कठिन था, लेकिन this package के साथ बस npm से download करना और script configuration करना ही पर्याप्त है, इसलिए CI environment में इसके कई फायदे हैं।


इसके अतिरिक्त, 1.2.0 version में upgrade होने के साथ कुछ नए features जोड़े गए हैं। सबसे महत्वपूर्ण बदलाव यह है कि इसमें git-clang-format package जोड़ा गया है।

मान लीजिए कि आप किसी C/C++ project पर काम कर रहे हैं और code formatting की ज़रूरत महसूस होने पर clang-format जैसे packages को अपनाना चाहते हैं।

छोटे पैमाने के projects में code formatting को एक बार में पूरी तरह ठीक करके एक साथ commit कर देना history tracking के लिए बहुत समस्या पैदा नहीं कर सकता। लेकिन बड़े projects में code formatting अपनाने का मतलब अक्सर पूरे existing codebase की formatting को एक साथ बदलना होता है, जिससे commit history को ट्रैक करना बिखरा हुआ और कठिन हो सकता है।

ऐसी स्थिति में, यदि developer ने 1000 lines में से केवल 100 lines बदली हों, और commit करते समय सिर्फ उन्हीं 100 lines पर formatting check किया जाए, तो क्या होगा? पहला, केवल बदली हुई 100 lines पर formatting लागू करनी पड़ेगी, इसलिए 1000 lines के पूरे code को छेड़ने की ज़रूरत नहीं होगी और commit history को ट्रैक करना आसान हो जाएगा। दूसरा, development process के दौरान हर commit के साथ formatting लागू किए गए code की मात्रा धीरे-धीरे बढ़ती जाएगी, इसलिए समय के साथ code formatting अधिक consistent होती जाएगी।

इसी उद्देश्य से git-clang-format package का उपयोग किया जाता है। जैसे lint-staged staged files पर ही check चलाकर CI की speed बढ़ाता है, उसी से एक कदम आगे बढ़ते हुए यह changed files में भी केवल changed code lines पर formatting check लागू कर सकता है। यह भी LLVM द्वारा मूल रूप से उपलब्ध कराया गया है, इसलिए इसे wrap करके package के रूप में publish किया गया है।

आधिकारिक documentation में इसका सटीक उपयोग लिख दिया गया है, इसलिए कृपया इसमें रुचि दिखाएँ। (हालाँकि official documentation अंग्रेज़ी में है) यदि आपके कोई प्रश्न हों या कोई अलग राय हो, तो कृपया बताइए। लंबा लेख पढ़ने के लिए धन्यवाद।

आधिकारिक दस्तावेज़: https://clang-format-node.lumir.page
Repository: https://github.com/lumirlumir/npm-clang-format-node

2 टिप्पणियां

 
rumbarum 2024-11-18

ओपन सोर्स डेवलपमेंट के लिए शुभकामनाएँ!

 
beenzinozino 2024-11-18

धन्यवाद!!🙇‍♂️