HazardyKnusperkeks added a comment.

In D69764#2938973 <https://reviews.llvm.org/D69764#2938973>, @MyDeveloperDay 
wrote:

> With the introduction of `CVQualifierOrder` the need for 
> `CVQualifierAlignment:` doesn't make so much sense
>
>   CVQualifierAlignment: Left
>   CVQualifierOrder: [ "inline", "static", "volatile", "const" ]
>
> I'm leaning toward introducing <type> into the `CVQualifierOrder` allowing 
> for some qualifiers to be Left of the type and some to be Right (this is not 
> dissimilar to what was discussed some time ago, and similar to the concept of 
> the resharper image above)
>
> So we would be able to have:
>
>   CVQualifierOrder: [ "inline", "static", "volatile", "<type>", "const", 
> "restrict" ]
>
> By doing so `inline,static,and volatile` are Left and `const,restrict` are 
> Right and so a single setting of Left and Right isn't applicable.
>
> The whole feature could then be determined ONLY using the `CVQualifierOrder` 
> however it doesn't feel like there is a good way to say "Don't change order" 
> (unless of course I use an empty `CVQualifierOrder` list), but this doesn't 
> feel very off by default enough, I like the explicitness of `Leave`.
>
> My gut feeling is to make `Left` and `Right` options define a predetermined 
> CVQualifierOrder, and introduce `Custom` as a new CVQualifierAlignment 
> setting which would require you to define the Order, this has the advantage 
> of driving a sort of semi standard as to what we mean by `Left` and `Right`
>
> Left would by default define:
>
>   CVQualifierOrder: [ "inline", "static", "volatile", "const", "restrict", 
> "<type>"]    
>
> Right would define:
>
>   CVQualifierOrder: [ "inline", "static", "<type>", "volatile", "const", 
> "restrict" ]
>
> (we might want to discuss what these defaults should be, I'm not a language 
> lawyer!)
>
> I realise "inline" and "static" are to the left in the Right alignment, but 
> I'm not sure them being to the right is even legal (its certainly not common) 
> or what is most likely wanted.
>
> I also think if a `CVQualifierOrder` is defined and the 
> `CVQualifierAlignment` is not `Custom` that should be a configuration error 
> to ensure there isn't any ambiguity
>
> Does anyone have any thoughts on this approach?

Seems reasonable. I would like to remove the `CV`, only `QualifierOrder`. And 
please take attributes into account, C++ attributes like `[[noreturn]]`, but 
also compiler attributes like `__attribute__((noreturn))` or 
`__declspec(noreturn)`, I think it should be possible to add `<attributes>` to 
your list.



================
Comment at: clang/lib/Format/Format.cpp:1494
+  // If its empty then it means don't do anything.
+  if (Style->CVQualifierOrder.empty()) {
+    return true;
----------------
Braces :)


================
Comment at: clang/lib/Format/QualifierAlignmentFixer.cpp:32
+  if (Err) {
+    llvm::errs() << "Error while rearranging const : "
+                 << llvm::toString(std::move(Err)) << "\n";
----------------
Qualifier?


================
Comment at: clang/lib/Format/QualifierAlignmentFixer.cpp:140
+  // We only need to think about streams that begin with const.
+  if (!Tok->is(CVQualifierType)) {
+    return Tok;
----------------
More Braces (follow)


================
Comment at: clang/lib/Format/QualifierAlignmentFixer.h:24
+class QualifierAlignmentFixer : public TokenAnalyzer {
+  std::string CVQualifier;
+
----------------
I would go for only Qualifier.


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D69764/new/

https://reviews.llvm.org/D69764

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to