[clang-format] Use NestedBlockIndent as a 0 column in formatted raw strings

Summary:
This makes the formatter of raw string literals use NestedBlockIndent for
determining the 0 column of the content inside. This makes the formatting use
less horizonal space and fixes a case where two newlines before and after the
raw string prefix were selected instead of a single newline after it:

Before:
```
aaaa = ffff(
    R"pb(
      key: value)pb");
```

After:
```
aaaa = ffff(R"pb(
    key: value)pb");
```

Reviewers: djasper, sammccall

Reviewed By: sammccall

Subscribers: klimek, cfe-commits

Differential Revision: https://reviews.llvm.org/D44141

llvm-svn: 326996
This commit is contained in:
Krasimir Georgiev 2018-03-08 11:29:27 +00:00
parent 667026297d
commit a71f626eac
2 changed files with 10 additions and 10 deletions

View File

@ -1385,9 +1385,10 @@ unsigned ContinuationIndenter::reformatRawStringLiteral(
// violate the rectangle rule and visually flows within the surrounding
// source.
bool ContentStartsOnNewline = Current.TokenText[OldPrefixSize] == '\n';
unsigned NextStartColumn = ContentStartsOnNewline
? State.Stack.back().Indent + Style.IndentWidth
: FirstStartColumn;
unsigned NextStartColumn =
ContentStartsOnNewline
? State.Stack.back().NestedBlockIndent + Style.IndentWidth
: FirstStartColumn;
// The last start column is the column the raw string suffix starts if it is
// put on a newline.
@ -1399,7 +1400,7 @@ unsigned ContinuationIndenter::reformatRawStringLiteral(
// indent.
unsigned LastStartColumn = Current.NewlinesBefore
? FirstStartColumn - NewPrefixSize
: State.Stack.back().Indent;
: State.Stack.back().NestedBlockIndent;
std::pair<tooling::Replacements, unsigned> Fixes = internal::reformat(
RawStringStyle, RawText, {tooling::Range(0, RawText.size())},

View File

@ -681,15 +681,14 @@ int s() {
})test",
getRawStringPbStyleWithColumns(20)));
// Align the suffix with the surrounding FirstIndent if the prefix is not on
// Align the suffix with the surrounding indent if the prefix is not on
// a line of its own.
expect_eq(R"test(
int s() {
auto S = PTP(
R"pb(
item_1: 1,
item_2: 2
)pb");
auto S = PTP(R"pb(
item_1: 1,
item_2: 2
)pb");
})test",
format(R"test(
int s() {