clang-format: Keep more trailing annotations on the same line.

More precisely keep all short annotations (<10 characters) on the same
line if possible. Previously, clang-format would only prefer to do so
for "const", "override" and "final". However, it seems to be generally
preferable, especially because some codebases have to wrap those in
macros for backwards compatibility.

Before:
  void someLongFunction(int someLongParameter)
      OVERRIDE {}

After:
  void someLongFunction(
      int someLongParameter) OVERRIDE {}

This fixes llvm.org/PR19363.

llvm-svn: 205845
This commit is contained in:
Daniel Jasper 2014-04-09 10:01:49 +00:00
parent b282f1fec5
commit b48d3afcd5
2 changed files with 8 additions and 4 deletions

View File

@ -1279,11 +1279,9 @@ unsigned TokenAnnotator::splitPenalty(const AnnotatedLine &Line,
// annotations (i.e. "const", "final" and "override") on the same line.
// Use a slightly higher penalty after ")" so that annotations like
// "const override" are kept together.
bool is_standard_annotation = Right.is(tok::kw_const) ||
Right.TokenText == "override" ||
Right.TokenText == "final";
bool is_short_annotation = Right.TokenText.size() < 10;
return (Left.is(tok::r_paren) ? 100 : 120) +
(is_standard_annotation ? 50 : 0);
(is_short_annotation ? 50 : 0);
}
// In for-loops, prefer breaking at ',' and ';'.

View File

@ -3269,9 +3269,15 @@ TEST_F(FormatTest, BreaksFunctionDeclarationsWithTrailingTokens) {
verifyFormat("void someLongFunction(\n"
" int someLongParameter) override {}",
Style);
verifyFormat("void someLongFunction(\n"
" int someLongParameter) OVERRIDE {}",
Style);
verifyFormat("void someLongFunction(\n"
" int someLongParameter) final {}",
Style);
verifyFormat("void someLongFunction(\n"
" int someLongParameter) FINAL {}",
Style);
verifyFormat("void someLongFunction(\n"
" int parameter) const override {}",
Style);