HazardyKnusperkeks added a comment.

In D93844#2472352 <https://reviews.llvm.org/D93844#2472352>, @njames93 wrote:
> In D93844#2472346 <https://reviews.llvm.org/D93844#2472346>, @MyDeveloperDay 
> wrote:
>
>> I'm a little confused why this is needed as clang-format always read up the 
>> directory tree until it see a .clang-format file, perhaps I don't quite 
>> understand the use case. Can't you just have a different .clang-format in 
>> the subdirectory?
>
> It's my understanding this is akin to the `InheritParentConfig` option found 
> in `.clang-tidy`.
> The idea is you can put a `.clang-format` file in your project root, then for 
> specific directories you can add another `.clang-format` file that modifies 
> that root `.clang-format`
> The example here is a test folder that needs extended lines but want the rest 
> of the formatting to match the root folder without having to copy the 
> contents of the root and make the small edit.
>
> We have it quite lucky here at LLVM where for tests we can just use:
>
>   BasedOnStyle: LLVM
>   ColumnLimit: 0
>
> However for other projects with their own style they could then use:
>
>   # Copy the root directory clang.format config
>   BasedOnStyle: file
>   ColumnLimit: 0
>
> This would also make modifying the formatting style of a project much easier 
> as you would only need to touch the root directory `.clang-format` file in 
> most cases.

Exactly.

> With this implementation I'm not too sure on the specifics though. 
> `.clang-format` files are more complex to parse than `.clang-tidy` files so 
> there's more edge cases to consider.
> Also it appears this wouldn't handle the case of invoking clang-format with 
> the style set inline on the command line.
> `clang-format <file> --style='{BasedOnStyle: File, ColumnLimit: 80}'`
> Should this then check the directory for `.clang-format` files?

Initially I thought it shouldn't. But now I think maybe it should.



================
Comment at: clang/lib/Format/Format.cpp:2962
+                                    llvm::sys::path::filename(FileName));
+            if (auto OuterStyle = getStyle(DefaultFormatStyle, FileForLanguage,
+                                           FallbackStyleName, Code, FS,
----------------
njames93 wrote:
> This seems a very inefficient way of doing this, getStyle does a lot of 
> things we simple don't need to worry about. Maybe the file loading part 
> should be extracted out into its own function, that can then recursively call 
> itself. Or use the clang-tidy approach of storing configurations in a stack 
> (will have to be unparsed cause how clang-format works) and then parse them 
> on top of each other.
Yeah I know that this is double work, but I thought it only affects the case 
`BasedOnStyle: File` and keeps the "normal" way untouched.

If I do build a stack I would actually parse all `.clang-format` files up to 
the root directory and in the not `BasedOnStyle: File` case throw away the 
results, wouldn't I? The question is how often someone has a `.clang-fomrat` in 
one of his parent directories which is not used because it got overwritten.

But I can do that.

Or is there an easy way to just check the `BasedOnStyle` value? As far as I 
understood the yaml code it parses the whole file into an internal structure 
and we only query this structure, right?


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D93844

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

Reply via email to