Node.js environment में Clang का उपयोग करके C, C++, Java, JavaScript formatter विकसित किया है.
(github.com/lumirlumir)- GitHub repository: https://github.com/lumirlumir/npm-clang-format-node
- आधिकारिक दस्तावेज़ वेबसाइट: https://clang-format-node.lumir.page/
नमस्ते!
मैंने Node.js environment में Clang का उपयोग करके C, C++, Java, JavaScript formatter विकसित किया है। यह प्रोजेक्ट Angular के अब maintain न किए जा रहे clang-format पैकेज पर आधारित एक नया प्रोजेक्ट है.
करीब दो-तीन महीने पहले मैंने इसी तरह की सामग्री साझा की थी, और इस बार v1.3.0 version जारी करते हुए users के लिए इसे और आसान व सुविधाजनक बनाने हेतु एक विस्तृत documentation site भी जोड़ी है। documentation site को यहाँ देखा जा सकता है। इसमें basic installation method से लेकर इस पैकेज का उपयोग क्यों करना चाहिए, ऐसे कई विषय शामिल हैं, इसलिए रुचि रखने वाले लोग इसे देख सकते हैं।
इस update में कई tests जोड़कर पैकेज की stability को और बेहतर किया गया है, और नए features भी जोड़े गए हैं।
यह पैकेज MIT license के अंतर्गत है, और आप इसे स्वतंत्र रूप से उपयोग कर सकते हैं।
clang-format-node किस तरह का प्रोजेक्ट है?
यह पैकेज LLVM के प्रसिद्ध C compiler Clang के clang-format पर आधारित एक Node.js पैकेज है, जो C, C++, Java भाषाओं के code formatting को support करता है। सरल शब्दों में, यह Node.js environment में Prettier जैसी भूमिका निभाता है, लेकिन इसकी खास बात यह है कि यह उन C, C++, Java भाषाओं का formatting प्रदान करता है जिन्हें Prettier support नहीं करता।
खासकर Node.js core या Electron development जैसे मामलों में, जहाँ JavaScript code और C/C++ code साथ में लिखना पड़ता है, clang-format-node उपयोगी है।
मौजूदा clang-format पैकेज में Ubuntu जैसे operating system environment पर निर्भर अतिरिक्त dependencies install करनी पड़ती थीं, जिससे असुविधा होती थी। लेकिन इस पैकेज के साथ बिना किसी अलग installation के इसे तुरंत इस्तेमाल किया जा सकता है। साथ ही, जहाँ पुराना पैकेज CI environment में Node.js और npm आधारित workflow में integrate करना कठिन बनाता था, वहीं clang-format-node को सिर्फ npm से install करके और script set करके आसानी से उपयोग किया जा सकता है, इसलिए CI environment में इसके कई फायदे हैं।
तो clang-format-node पैकेज की विशेषताएँ क्या हैं?
1. Angular के clang-format का स्थान लेने वाला Drop-in Replacement
clang-format-node एक ऐसा Drop-in Replacement है जो Angular/clang-format पैकेज की जगह आसानी से ले सकता है।
मौजूदा पैकेज से clang-format-node पर स्विच करना बहुत सरल है, और बिना किसी जटिल प्रक्रिया के इसे तुरंत उपयोग किया जा सकता है।
2. Clang उपयोग करने के लिए अतिरिक्त dependencies की ज़रूरत नहीं, सिर्फ Node.js काफ़ी है
Python या C++ जैसी किसी भी अतिरिक्त dependency की बिल्कुल आवश्यकता नहीं है। सिर्फ Node.js होने पर इसे आसानी से चलाया जा सकता है।
3. व्यापक support range
यह कई operating systems और architectures, Node.js versions, GitHub Actions runner images, Docker build images आदि को व्यापक रूप से support करता है।
4. आसान CI setup
बिना किसी जटिल configuration के, clang-format-node को अन्य Node.js packages की तरह ही उपयोग किया जा सकता है।
5. automated build और release
हर बार clang-format update होने पर नया npm version अपने आप release हो जाता है। GitHub Actions समय-समय पर update detect करता है, पैकेज build करता है, और फिर Pull Request बनाता है।
clang-format और git-clang-format से code formatting करना
(नीचे का लेख उस सामग्री का हिस्सा है जिसे मैंने https://clang-format-node.lumir.page/docs/get-started/introduction section में अंग्रेज़ी में लिखा था और बाद में आंशिक रूप से कोरियाई में अनुवाद किया था।)
code formatting का महत्व
code को हमेशा format करें
code formatting, code quality बेहतर बनाने का एक बहुत महत्वपूर्ण काम है। formatting का मूल उद्देश्य code formatting को लगातार एक जैसा बनाए रखना है, ताकि readability और समझ दोनों बेहतर हों।
clang-format क्या है?
clang-format एक tool है जो C और C++ जैसी भाषाओं की source files को अपने आप format करता है, और इसे LLVM Clang open source project के हिस्से के रूप में विकसित किया गया है।
यह कैसे काम करता है
- configuration file बनाना
formatting style को define करने वाली configuration file (.clang-format) बनाई जाती है। - command चलाना
clang-formatcommand चलाने पर source code style rules के अनुसार अपने आप फिर से व्यवस्थित हो जाता है।
मुख्य विशेषताएँ
- कई भाषाओं का support
C, C++, Java, JavaScript, Objective-C, Protobuf, C# जैसी कई भाषाओं को support करता है। - formatting command का उदाहरण
ऊपर का command चलाने परclang-format -i my_source.cppmy_source.cppfile आपके द्वारा तय की गई style के अनुसार अपने आप format हो जाएगी।
code formatting उदाहरण
// Before formatting
void test(QString&data, bool extraString) {
int i=0;
for (i=0;i<3;i++) {
data+="reallylongstringtoproducealonglineasanexample" + QString::number(i * 1000) + "/filetoload.html";
if (extraString)
{
data += "some-extra";
}
}
}
// After formatting
void test(QString &data, bool extraString)
{
int i = 0;
for (i = 0; i < 3; i++) {
data += "reallylongstringtoproducealonglineasanexample" + QString::number(i * 1000)
+ "/filetoload.html";
if (extraString) {
data += "some-extra";
}
}
}
ऊपर का उदाहरण दिखाता है कि clang-format code को कैसे format करता है। formatting rules को टीम की style के अनुसार स्वतंत्र रूप से सेट किया जा सकता है।
clang-format की समस्याएँ
clang-format एक शानदार tool है, लेकिन यह मौजूदा code और commit history से जुड़ी समस्याएँ पैदा कर सकता है।
मुख्य समस्याएँ
- मौजूदा code के साथ टकराव
पूरे file को format करने पर formatting से असंबंधित हिस्से भी बदल जाते हैं, जिससे अनावश्यक changes पैदा होते हैं। - commit history में उलझन
बड़े पैमाने पर formatting changes commit history को जटिल बना देते हैं, जिससे branch merge, code review और code analysis मुश्किल हो सकते हैं। - नए code और मौजूदा code के बीच असंगति
पहले से format किए गए code में नया code जोड़ते समय formatting को बनाए रखना कठिन हो सकता है।
समाधान: git-clang-format
git-clang-format एक Git extension tool है जो सिर्फ बदले गए code पर formatting लागू करने में मदद करता है। इसका उपयोग करने पर निम्नलिखित फायदे मिलते हैं।
- formatting scope को न्यूनतम रखना: सिर्फ बदले गए code पर formatting लागू
- review को सरल बनाना: formatting changes और development changes को अलग-अलग review किया जा सकता है
git-clang-format का उपयोग कैसे करें
installation
git-clang-format को clang-format-node पैकेज के साथ उपलब्ध कराया जाता है। आप clang-format-git npm पैकेज install करके इसका उपयोग कर सकते हैं।
basic workflow
- code लिखें।
- changes को staging में जोड़ें (
git add)। git-clang-formatचलाएँ।
उदाहरण
# नई file जोड़ना और changes को stage करना
$ git diff --staged
diff --git a/x.cpp b/x.cpp
new file mode 100644
index 0000000..af14ed5
--- /dev/null
+++ b/x.cpp
@@ -0,0 +1,3 @@
+int main() {
+
+}
# git-clang-format चलाना
$ git-clang-format
changed files:
x.cpp
# formatting के बाद status देखना
$ git status
On branch master
Changes to be committed:
new file: x.cpp
Changes not staged for commit:
modified: x.cpp
इस workflow के ज़रिए formatting changes और development changes की स्वतंत्र रूप से समीक्षा की जा सकती है। अगर formatting changes पसंद न आएँ, तो उन्हें git checkout से वापस भी किया जा सकता है।
style तय करना
formatting style सेट करने के लिए --style option का उपयोग किया जा सकता है।
$ git-clang-format --style=WebKit
$ git-clang-format --style=file # `.clang-format` file का उपयोग
निष्कर्ष
clang-format एक शक्तिशाली tool है, लेकिन वास्तविक कामकाजी माहौल में सिर्फ clang-format -i command से काम नहीं चलता। अगर आप git-clang-format का उपयोग करते हैं, जो सिर्फ बदले हुए हिस्सों पर formatting लागू करता है, तो code को अधिक प्रभावी ढंग से manage किया जा सकता है और review process को सरल बनाया जा सकता है।
चूँकि git-clang-format सिर्फ changes को format करता है, इसलिए यह एक साफ़-सुथरा और professional codebase बनाए रखते हुए भी लचीला development environment प्रदान करता है। यदि आप working commit या पूरी branch को format करना चाहते हैं, तो कुछ अतिरिक्त Git commands के साथ formatting समस्याओं को आसानी से हल किया जा सकता है।
इतना लंबा लेख पढ़ने के लिए धन्यवाद! GeekNews के सभी पाठकों को नए साल की हार्दिक शुभकामनाएँ 🙇♂️
- GitHub repository: https://github.com/lumirlumir/npm-clang-format-node
- आधिकारिक दस्तावेज़ वेबसाइट: https://clang-format-node.lumir.page/
2 टिप्पणियां
लाइक देकर जा रहा हूँ
धन्यवाद!!