[PATCH] D45719: [clang-Format] Fix indentation of member call after block
Manuel Klimek via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 25 08:54:09 PDT 2018
klimek added inline comments.
================
Comment at: unittests/Format/FormatTest.cpp:4359
+ " return 3;\n"
+ " }).as("");\n"
+ "}");
----------------
ank wrote:
> klimek wrote:
> > ank wrote:
> > > klimek wrote:
> > > > What would be interesting is tests that:
> > > > a) have another value after the closing }; doesn't really make sense in this test, but usually these are in calls
> > > > f([]() { ... }, foo, bar).call(...)
> > > >
> > > > b) make .as("") have paramters that go beyond the limit
> > > >
> > > > c) add another chained call behind .as("").
> > > Hello, sorry for the late follow up on this!
> > >
> > > Indeed an interesting thing to test, and so I did, the patterns you describe seems to give strange indentation as far back as release_36 and probably has always done so. The case I'm testing here worked in release_40 but stopped working somewhere before release_50
> > >
> > > maybe fixing those other cases can be done in another patch
> > >
> > > cheers,
> > > Anders
> > I meant: please add these tests :)
> I need to clarify, those tests will not be correctly indented by this commit, I could add those tests but then they would verify a faulty behaviour, this is how they will be indented even with this patch applied:
>
>
> ```
> // Dont break if only closing statements before member call
> verifyFormat("test() {\n"
> " ([]() -> {\n"
> " int b = 32;\n"
> " return 3;\n"
> " }).foo();\n"
> "}");
> verifyFormat("test() {\n"
> " (\n"
> " []() -> {\n"
> " int b = 32;\n"
> " return 3;\n"
> " },\n"
> " foo, bar)\n"
> " .foo();\n"
> "}");
> verifyFormat("test() {\n"
> " ([]() -> {\n"
> " int b = 32;\n"
> " return 3;\n"
> " })\n"
> " .foo()\n"
> " .bar();\n"
> "}");
> verifyFormat("test() {\n"
> " ([]() -> {\n"
> " int b = 32;\n"
> " return 3;\n"
> " })\n"
> " .foo(\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"\n"
> " \"bbbbbbbbbbbbbbbbbbbbbb\");\n"
> "}");
>
> verifyFormat("test() {\n"
> " foo([]() -> {\n"
> " int b = 32;\n"
> " return 3;\n"
> " }).foo();\n"
> "}");
> verifyFormat("test() {\n"
> " foo(\n"
> " []() -> {\n"
> " int b = 32;\n"
> " return 3;\n"
> " },\n"
> " foo, bar)\n"
> " .as();\n"
> "}");
> verifyFormat("test() {\n"
> " foo([]() -> {\n"
> " int b = 32;\n"
> " return 3;\n"
> " })\n"
> " .foo()\n"
> " .bar();\n"
> "}");
> verifyFormat("test() {\n"
> " foo([]() -> {\n"
> " int b = 32;\n"
> " return 3;\n"
> " })\n"
> " .as(\"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa\"\n"
> " \"bbbbbbbbbbbbbbbbbbbbbb\");\n"
> "}");
> ```
I'm not sure we agree that the behavior is "faulty" - I do believe it was an intentional change :)
This is an indent of 4 from the start of the expression that call belongs to.
For example, in example (2), having the .foo() at the end of line after a potentially complex parameter strongly de-emphasizes the parameter.
In example (3), how would you want to layout a chain of calls?
Repository:
rC Clang
https://reviews.llvm.org/D45719
More information about the cfe-commits
mailing list