[PATCH] D45719: [clang-Format] Fix indentation of member call after block
Anders Karlsson via Phabricator via cfe-commits
cfe-commits at lists.llvm.org
Mon Jun 25 23:35:37 PDT 2018
ank added inline comments.
================
Comment at: unittests/Format/FormatTest.cpp:4359
+ " return 3;\n"
+ " }).as("");\n"
+ "}");
----------------
klimek wrote:
> 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?
I see! I think your argument makes perfect sense, I think example 3 should be as is, considering that it is consistent with the other behaviour :) thanks for taking the time to explain!
Repository:
rC Clang
https://reviews.llvm.org/D45719
More information about the cfe-commits
mailing list