[clang] [clang-format] unexpected break after binOp '<<' (PR #69859)

Tsarkov Maksim via cfe-commits cfe-commits at lists.llvm.org
Wed Jan 3 01:44:09 PST 2024


s1Sharp wrote:

> @s1Sharp are there any conclusions here? our code also incidentally relied on having new lines between string literals, mostly for the sake of having a line break after string literals that end with `\n`.
> 
> what do people think about restoring the functionality to break after string literals that end with `\n`? https://github.com/search?q=%2F%5C%5Cn%5C%22%5Cn%5Cs*%3C%3C%5C+%5C%22%2F+language%3AC%2B%2B+&type=code&ref=advsearch shows a lot of examples of such pattern, so i feel like having that without an option initially easy relatively easy and likely to preserve clang-format's behavior for a lot of existing code for the next release. afterwards we can discuss introducing more options again.

First, I want to show how this works with the current code.
As an example, here are a couple of output statements.

.clang-format:
```
Language: Cpp
BasedOnStyle: Google

IndentWidth: 4

ColumnLimit: 70
```

before clang-format:
```C++
  cout << "hello\n" << "World\n" << "HELLO" << "world" << "hello" << "World" << "HELLO" << "world" << "hello" << "World" << "HELLO" << "world";

  cout << "hello" << std::endl << "World" << "hello" << '\n' << "another hello" << "world";

  cout << "hello\n"
       << "World" << std::endl
       << "HELLO" << "world";
```

after clang-format:
```C++
    cout << "hello\n"
         << "World\n"
         << "HELLO" << "world" << "hello" << "World" << "HELLO"
         << "world" << "hello" << "World" << "HELLO" << "world";

    cout << "hello" << std::endl
         << "World" << "hello" << '\n'
         << "another hello" << "world";

    cout << "hello\n" << "World" << std::endl << "HELLO" << "world";

```

A bit unexpected results, right? Formatting applies to single-line expressions and breaks to another line after the \n and std::endl characters. And if the code has already been manually formatted (as in 3rd cout), then clang-format groups this code into a single-line expression.

I agree with your suggestion that to maintain compatibility with the old behavior of clang-format.


https://github.com/llvm/llvm-project/pull/69859


More information about the cfe-commits mailing list