c++ - कैसे एक सीपीपी परियोजना फ़ोल्डर पर क्लैंग-प्रारूप को कॉल करने के लिए?




clang clang-format (4)

Windows उपयोगकर्ताओं के लिए: यदि आपके पास Powershell 3.0 का समर्थन है, तो आप कर सकते हैं:

Get-ChildItem -Path . -Directory -Recurse |
    foreach {
        cd $_.FullName
        &clang-format -i -style=WebKit *.cpp
    }

नोट 1: pushd . उपयोग करें pushd . और यदि आप स्क्रिप्ट के पहले और बाद में एक ही वर्तमान निर्देशिका करना चाहते हैं तो popd

नोट 2: स्क्रिप्ट वर्तमान कार्यशील निर्देशिका में चल रही है

नोट 3: यह शायद एक ही पंक्ति में लिखा जा सकता है यदि यह वास्तव में आपके लिए महत्वपूर्ण था

क्या प्रत्येक फ़ाइल के लिए अलग से चलाने के बजाय, एक संपूर्ण cpp प्रोजेक्ट फ़ोल्डर के लिए clang-format --style=Webkit जैसे कुछ को कॉल करने का एक तरीका है?

मैं ऐसा करने के लिए clang-format.py और vim का उपयोग कर रहा हूं, लेकिन मुझे लगता है कि इसे एक बार लागू करने का एक तरीका है।


दुर्भाग्य से, क्लैंग-प्रारूप को पुनरावर्ती रूप से लागू करने का कोई तरीका नहीं है। *.cpp केवल वर्तमान निर्देशिका में फ़ाइलों से मेल खाएगा, उपनिर्देशिकाओं से नहीं। यहां तक ​​कि **/* काम नहीं करता है।

सौभाग्य से, एक समाधान है: सभी फ़ाइल नामों को find कमांड के साथ पकड़ें और उन्हें पाइप करें। उदाहरण के लिए, यदि आप सभी को प्रारूपित करना चाहते हैं .h निर्देशिका foo/bar/ recursively में .h और .cpp फ़ाइलों को आप कर सकते हैं।

find foo/bar/ -iname *.h -o -iname *.cpp | xargs clang-format -i

अतिरिक्त चर्चा के लिए here देखें।


मैं वर्तमान फोल्डर के अंतर्गत सभी ऑब्जेक्टिव-सी फ़ाइलों को पुनरावर्ती रूप से प्रारूपित करने के लिए निम्न कमांड का उपयोग कर रहा हूं:

$ find . -name "*.m" -o -name "*.h" | sed 's| |\\ |g' | xargs clang-format -i

मैंने चीजों को आसान बनाने के लिए अपने .bash_profile में निम्नलिखित .bash_profile को परिभाषित किया है:

# Format objC files (*.h and *.m) under the current folder, recursively
alias clang-format-all="find . -name \"*.m\" -o -name \"*.h\" | sed 's| |\\ |g' | xargs clang-format -i"

यदि यह मौजूद नहीं है तो पहले .clang-format फ़ाइल बनाएँ:

clang-format -style=WebKit -dump-config > .clang-format

आपको जो भी पसंद हो, पूर्वनिर्धारित शैली चुनें, या परिणामित .clang-format फ़ाइल को संपादित करें।

तो भागो:

find . -regex '.*\.\(cpp\|hpp\|cc\|cxx\)' -exec clang-format -style=file -i {} \;

hpp , hpp , cc और cxx अलावा अन्य फ़ाइल एक्सटेंशन का उपयोग नियमित अभिव्यक्ति में किया जा सकता है, बस उन्हें अलग करने के लिए सुनिश्चित करें \|





clang-format