diff options
| author | Alexander Kornienko <alexfh@google.com> | 2013-12-10 10:18:34 +0000 |
|---|---|---|
| committer | Alexander Kornienko <alexfh@google.com> | 2013-12-10 10:18:34 +0000 |
| commit | fdca83d487e9916b56a26fdd5eadd7979c34496b (patch) | |
| tree | 2c7f88fd09b45201504bc3317320c7bfdbba814e /clang/lib/Format/TokenAnnotator.cpp | |
| parent | b2eb3d3177ecc878fc440d912f4e74a4184c44c7 (diff) | |
| download | bcm5719-llvm-fdca83d487e9916b56a26fdd5eadd7979c34496b.tar.gz bcm5719-llvm-fdca83d487e9916b56a26fdd5eadd7979c34496b.zip | |
Support GNU style rule to put a space before opening parenthesis.
Summary:
The rule from the GNU style states:
"We find it easier to read a program when it has spaces before the open-parentheses and after the commas."
http://www.gnu.org/prep/standards/standards.html#index-spaces-before-open_002dparen
This patch makes clang-format adds an option to put spaces before almost all open parentheses, except the cases, where different behavior is dictated by the style rules or language syntax:
* preprocessor:
** function-like macro definitions can't have a space between the macro name and the parenthesis;
** `#if defined(...)` can have a space, but it seems, that it's more frequently used without a space in GCC, for example;
* never add spaces after unary operators;
* adding spaces between two opening parentheses is controlled with the `SpacesInParentheses` option;
* never add spaces between `[` and `(` (there's no option yet).
Reviewers: djasper
Reviewed By: djasper
CC: cfe-commits, klimek
Differential Revision: http://llvm-reviews.chandlerc.com/D2326
llvm-svn: 196901
Diffstat (limited to 'clang/lib/Format/TokenAnnotator.cpp')
| -rw-r--r-- | clang/lib/Format/TokenAnnotator.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/clang/lib/Format/TokenAnnotator.cpp b/clang/lib/Format/TokenAnnotator.cpp index d22facb9220..b8905a9bfd3 100644 --- a/clang/lib/Format/TokenAnnotator.cpp +++ b/clang/lib/Format/TokenAnnotator.cpp @@ -1293,9 +1293,12 @@ bool TokenAnnotator::spaceRequiredBetween(const AnnotatedLine &Line, return Line.Type == LT_ObjCDecl || Left.isOneOf(tok::kw_return, tok::kw_new, tok::kw_delete, tok::semi) || - (Style.SpaceAfterControlStatementKeyword && + (Style.SpaceBeforeParens != FormatStyle::SBPO_Never && Left.isOneOf(tok::kw_if, tok::kw_for, tok::kw_while, tok::kw_switch, - tok::kw_catch)); + tok::kw_catch)) || + (Style.SpaceBeforeParens == FormatStyle::SBPO_Always && + Left.isOneOf(tok::identifier, tok::kw___attribute) && + Line.Type != LT_PreprocessorDirective); } if (Left.is(tok::at) && Right.Tok.getObjCKeywordID() != tok::objc_not_keyword) return false; |

