HazardyKnusperkeks added inline comments.

================
Comment at: clang/lib/Format/Format.cpp:1379
   LLVMStyle.IncludeStyle.IncludeCategories = {
-      {"^\"(llvm|llvm-c|clang|clang-c)/", 2, 0, false},
-      {"^(<|\"(gtest|gmock|isl|json)/)", 3, 0, false},
-      {".*", 1, 0, false}};
+      {"^\"(llvm|llvm-c|clang|clang-c)/", 2, 2, false},
+      {"^(<|\"(gtest|gmock|isl|json)/)", 3, 3, false},
----------------
Febbe wrote:
> HazardyKnusperkeks wrote:
> > I don't follow why this is necessary. And I don't feel comfortable with it.
> This **was** required, but is not required necessarily, my last update of the 
> patch made this change most likely obsolete.
> 
> But the actual reason is, that `SortPriority` is described in the 
> documentation as "optional value which is defaulted to `Priority`, if 
> absent", but it is neither a (std::)optional value nor it was defaulted to 
> Priority if absent.
> It was indirectly updated from **0** to `Priority` in the algorithm.
> 
> Since I moved the buggy, re-initialization of `SortPriority` to the first 
> initialization:
> clang/lib/Tooling/Inclusions/IncludeStyle.cpp:L20 this change must also be 
> covered by the tests: All zero initializations must now be default to 
> `Priority` to not change the test behavior, which is what you want.
> 
> Either by creating a Constructor without `SortPriority`, which defaults to 
> Priority,
> creating a factory function, or by doing this for all tests manually.
> 
> 
> Imagine the tests would also test the interpretation of the JSON input. Then 
> the tests would not require an adjustment to be semantically equal.
> 
> But since I added Priority to the sorting after **this** change, this is kind 
> of irrelevant.
My main question is, does this change behavior? In either case, please add some 
tests to show the difference, or the lack thereof.


================
Comment at: clang/lib/Tooling/Inclusions/IncludeStyle.cpp:18
     IO &IO, IncludeStyle::IncludeCategory &Category) {
-  IO.mapOptional("Regex", Category.Regex);
-  IO.mapOptional("Priority", Category.Priority);
-  IO.mapOptional("SortPriority", Category.SortPriority);
+  IO.mapRequired("Regex", Category.Regex);
+  IO.mapRequired("Priority", Category.Priority);
----------------
Febbe wrote:
> HazardyKnusperkeks wrote:
> > A big no! You will break existing configurations.
> Can you elaborate?
> Do you mean the change from `mapOptional` to `mapRequired`?
> From what I thought, this change only affects clarity (improvement), not the 
> semantic:
>  - the parent JSON list/array entry is already optional.
>  - therefore any of them is required, but none is useful alone.
>    - an empty regex, just matches nothing `=>` regex required
>    - an empty Priority should default (documentation) to INT_MAX, but 
> actually did not (0). 
>  - Also, from the documentations view, omitting one of them was never 
> intended.
> 
> The only effect this change will have for old configurations, is, that it 
> breaks "wrong" configurations. It's like abusing undefined behav.: You can't 
> be sure it works after a compiler update.
> Can you elaborate?
> Do you mean the change from `mapOptional` to `mapRequired`?
> From what I thought, this change only affects clarity (improvement), not the 
> semantic:
>  - the parent JSON list/array entry is already optional.
>  - therefore any of them is required, but none is useful alone.
>    - an empty regex, just matches nothing `=>` regex required
While a configuration without a regex may be stupid, it currently is accepted.

>    - an empty Priority should default (documentation) to INT_MAX, but 
> actually did not (0). 
Here one has to decide if the documentation or the behavior has to be fixed. I 
have not a preference, @MyDeveloperDay 
may have.
>  - Also, from the documentations view, omitting one of them was never 
> intended.

Nevertheless it is accepted and thus there is most likely a configuration which 
uses it.

> The only effect this change will have for old configurations, is, that it 
> breaks "wrong" configurations. It's like abusing undefined behav.: You can't 
> be sure it works after a compiler update.

Changing what happens in such cases is one thing (but also not desired), just 
completely turning clang-format off, through erroring on the configuration 
parsing is in my view not acceptable.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D143691

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

Reply via email to