2017-03-15 8 views
20

मैं अपने प्रोजेक्ट के रूट निर्देशिका में अगले .clang प्रारूप फ़ाइल मिल गया:क्लैंग-प्रारूप का उपयोग कर 4 रिक्त स्थान के साथ एक सी ++ कक्षा को इंडेंट कैसे करें?

--- 
AlignTrailingComments: true 
AllowShortFunctionsOnASingleLine: false 
AllowShortIfStatementsOnASingleLine: true 
AllowShortLoopsOnASingleLine: true 
BreakBeforeBinaryOperators: false 
IndentWidth: 4 
SortIncludes: false 
NamespaceIndentation: All 
... 

समस्या आता है जब मैं इस तरह autoindented बन कक्षाएं मेरी C++ हेडर, पर बजना प्रारूप चलाएँ:

enter image description here

जैसा कि आप देख सकते हैं, लेबल & निजी केवल 2 रिक्त स्थान के साथ इंडेंट किए जाते हैं। लेकिन क्या मैं प्राप्त करने के लिए कोशिश कर रहा हूँ नीचे निर्गम (खरोज मैन्युअल बदलाव किया गया था) है:

enter image description here

इस तरह कोड-गिर वास्तव में कुछ करने के लिए सुखद हो जाता है।

इस प्रभाव को प्राप्त करने के लिए मैं अपने .clang प्रारूप को कैसे बदल सकता हूं?

संपादित करें:

मैं unsuccesfully AccessModifierOffset, मैं का उपयोग किया है मानों का उपयोग कर की कोशिश की है {} -2,0,2,4 नीचे exampe:

enter image description here

आप देख सकते हैं सार्वजनिक ब्लॉक के अंदर बयान ठीक से इंडेंट नहीं किया जाएगा।

EDIT2:

मैं @Henrique जंग समाधान की कोशिश की है और कहा कि निश्चित रूप से मैं क्या के लिए पूछ रहा हूँ, परिणाम है कि संयोजन का उपयोग कर इस एक की तरह कुछ होगा नहीं है:

enter image description here

और जैसा कि आप देख सकते हैं, फ़ंक्शंस के अंदर की सामग्री को 8 जगहों के बजाय 8 स्पेस इंडेंट किया गया है, जो अच्छा नहीं है।

EDIT3:

मैं एक इनाम दे दिया है कुछ महीने पहले तो मैं जा रहा हूँ के रूप में यह एक निश्चित रूप से दिलचस्प है फिर कोशिश करें। अगर मुझे क्लैंग-फॉर्मेट सोर्स कोड के बारे में पर्याप्त जानकारी मिली तो मैं इसे एक शॉट दूंगा, दुर्भाग्य से मैं नहीं करता ... मुझे आशा है कि कुछ क्लैंग देव इस पर एक नज़र डालेंगे और कुछ सुझाव देंगे।

+0

"AccessModifierOffset" आज़माएं। यह एक और एसओ प्रश्न का एक संभावित डुप्लिकेशंस है: http://stackoverflow.com/questions/29198963/how-can-i-tell-clang-format-to-indent-visibility-modifiers – caoanan

+0

@caoanan वास्तव में नहीं, मैं पहले से ही था कुछ दिनों पहले AccessModifierOffset की कोशिश की और किसी कारण से यह कक्षाओं को सही ढंग से इंडेंट नहीं कर रहा है। हालांकि यह सच है कि यह सार्वजनिक/निजी/संरक्षित इंडेंट करेगा, यह उनके नीचे दिए गए बयान को इंडेंट नहीं कर रहा है। कृपया मेरे प्रश्न पर एक नज़र डालें, मैंने आपको एक उदाहरण दिया है – BPL

+0

एह, अगर मैं केवल एक स्क्रीनशॉट पेस्ट कर सकता हूं [http://clang-format.me/)। ऐसा लगता है कि आपको वेबकिट स्टाइल सेटिंग्स पसंद हैं। –

उत्तर

0

मैं IndentWidth के साथ दोनों AccessModifierOffset बदलकर प्रभाव आप चाहते हैं को प्राप्त करने में कामयाब रहे। मूल रूप से, पहली बार एक दूसरे की भरपाई के रूप में प्रयोग किया जाता है, इसलिए यदि आप इस तरह अपने .clang प्रारूप बनाते हैं तो आप आप क्या चाहते हैं पाने:

AccessModifierOffset: -4 
IndentWidth:  8 

तो AccessModifierOffset 0 है, public कीवर्ड पर होगा सदस्यों के रूप में इंडेंटेशन का एक ही स्तर। हालांकि, IndentWidth बदलना 8 रिक्त स्थान से सभी कोड को इंडेंट करेगा, यहां तक ​​कि कक्षा घोषणा के बाहर भी।

class Foo { 
    public: 
     Foo(); 
     virtual ~Foo(); }; 

int main(int argc, char *argv[]) { 
     std::cout << "Hello world" << std::endl; 
     return 0; 
} 
+0

उत्तर के लिए धन्यवाद, लेकिन यह निश्चित रूप से नहीं है कि मैं क्या पूछ रहा हूं, मैंने यह बताने के लिए अपना जवाब संपादित कर दिया है कि क्यों ... std :: cout देखें और 0 कथन लौटाएं, वे 8 जगहों के बजाय 8 रिक्त स्थान पर हैं, मैं चाहते हैं 4. – BPL

+0

हाँ मुझे पता था कि एक दुष्प्रभाव था, हालांकि मुझे सदस्यों के लिए एक विशिष्ट इंडेंट चर नहीं मिला। –

1

के रूप में पास के रूप में मैं बता सकता हूँ, बजना प्रारूप गैर पहुँच-संशोधक वर्ग सामग्री से अलग ढंग से समारोह सामग्री इंडेंट के लिए कोई विकल्प प्रदान करता है: यह एक नमूना कोड है।यही कारण है कि है, निम्नलिखित कोड पर विचार करें:

class A { 
    public: 
    void foo() {} 
} 

void bar() { 
    int a; 
} 

इस कोड में, लाइन "शून्य foo() {}" हमेशा की तरह एक ही राशि इंडेंट किया जाएगा "int a," क्लैंग प्रारूप द्वारा।

शैली के निकटतम बात आपको लगता है कि उपलब्ध है पहुँच संशोधक, जैसे इंडेंट नहीं से आएगा चाहते करने लगते हैं:,,

class A { 
public: 
    void foo() {} 
} 

void bar() { 
    int a; 
} 

यह किया जाता है वेबकिट, मोज़िला, और LLVM द्वारा उदाहरण के लिए शैलियों। यह सेटिंग द्वारा हासिल किया जाता है:

IndentWidth: 4 
AccessModifierOffset: -4 
संबंधित मुद्दे