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

Reply via email to