klimek added a comment. In D37813#1512317 <https://reviews.llvm.org/D37813#1512317>, @Typz wrote:
> The patch goal is indeed to indent the content of namespace-macro blocks like > the content of any 'regular' namespace. So it should look like the content of > a namespace, possibly depending on the choose style options. To sumarize, > here is a detailed summary of the observable differences between macros vs > normal namespace. > > **Without this patch**, clang-format does not understand the macro call > actually defines a namespace, thus: > > - the content of the namespace-macro block is indented, even when > `Style.NamespaceIndentation = FormatStyle::NI_None` ``` lang=cpp TESTSUITE(A) > { int i; // <--- should not be indented } namespace B { int > j; } ``` > - similarly for nested namespaces, when `Style.NamespaceIndentation = > FormatStyle::NI_Inner` : ``` lang=cpp TESTSUITE(A) { TESTSUITE(B) { int i; > // <--- should be indented 2-chars only } } namespace C { > namespace D { int j; } } ``` > - There is no automatic fix of namespace end comment when > `Style.FixNamespaceComments = true` ``` lang=cpp TESTSUITE(A) { int i; } > // <--- should have a namespace end comment namespace B { > int j; } // namespace B ``` > - Multiple nested namespaces are not compacted when `Style.CompactNamespaces > = true` ``` lang=cpp TESTSUITE(A) { TESTSUITE(B) { //<--- should > be merged with previous line int i; } } // <--- > should be merged with previous line (and have a "combined" namespace end > comment) namespace A { namespace B { int j; } // namespace A::B ``` > > --- > > **This patch fixes all these points**, which hopefully leads to the exact > same formatting when using the namespace keyword or the namespace-macros: ``` > lang=cpp // Style.NamespaceIndentation = FormatStyle::NI_None TESTSUITE(A) { > int i; } namespace B { int j; } > > // Style.NamespaceIndentation = FormatStyle::NI_Inner TESTSUITE(A) { > TESTSUITE(B) { int i; } } namespace C { namespace D { int j; } } > > // Style.FixNamespaceComments = true TESTSUITE(A) { int i; } // > TESTSUITE(A) namespace B { int j; } // namespace B > > // Style.CompactNamespaces = true TESTSUITE(A) { TESTSUITE(B) { int i; }} > // TESTSUITE(A::B) namespace A { namespace B { int j; }} // namespace A::B ``` > > I did not see any issue in my testing or reviewing the code, but if you see > a place in the tests where it does not match this, please point it out ! Ah, wow, I see what confused me now: In the fixNamespaceEndComment tests you use an indent that clang-format would not produce. Can you please fix that, otherwise I find this super confusing :) Repository: rC Clang CHANGES SINCE LAST ACTION https://reviews.llvm.org/D37813/new/ https://reviews.llvm.org/D37813 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits