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/Format.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/Format.cpp')
-rw-r--r-- | clang/lib/Format/Format.cpp | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/clang/lib/Format/Format.cpp b/clang/lib/Format/Format.cpp index 26a320b05a0..60d323d2a9d 100644 --- a/clang/lib/Format/Format.cpp +++ b/clang/lib/Format/Format.cpp @@ -90,6 +90,24 @@ struct ScalarEnumerationTraits< } }; +template <> +struct ScalarEnumerationTraits< + clang::format::FormatStyle::SpaceBeforeParensOptions> { + static void + enumeration(IO &IO, + clang::format::FormatStyle::SpaceBeforeParensOptions &Value) { + IO.enumCase(Value, "Never", clang::format::FormatStyle::SBPO_Never); + IO.enumCase(Value, "ControlStatements", + clang::format::FormatStyle::SBPO_ControlStatements); + IO.enumCase(Value, "Always", clang::format::FormatStyle::SBPO_Always); + + // For backward compatibility. + IO.enumCase(Value, "false", clang::format::FormatStyle::SBPO_Never); + IO.enumCase(Value, "true", + clang::format::FormatStyle::SBPO_ControlStatements); + } +}; + template <> struct MappingTraits<clang::format::FormatStyle> { static void mapping(llvm::yaml::IO &IO, clang::format::FormatStyle &Style) { if (IO.outputting()) { @@ -179,11 +197,16 @@ template <> struct MappingTraits<clang::format::FormatStyle> { IO.mapOptional("SpaceInEmptyParentheses", Style.SpaceInEmptyParentheses); IO.mapOptional("SpacesInCStyleCastParentheses", Style.SpacesInCStyleCastParentheses); - IO.mapOptional("SpaceAfterControlStatementKeyword", - Style.SpaceAfterControlStatementKeyword); IO.mapOptional("SpaceBeforeAssignmentOperators", Style.SpaceBeforeAssignmentOperators); IO.mapOptional("ContinuationIndentWidth", Style.ContinuationIndentWidth); + + // For backward compatibility. + if (!IO.outputting()) { + IO.mapOptional("SpaceAfterControlStatementKeyword", + Style.SpaceBeforeParens); + } + IO.mapOptional("SpaceBeforeParens", Style.SpaceBeforeParens); } }; @@ -266,7 +289,7 @@ FormatStyle getLLVMStyle() { LLVMStyle.SpacesInParentheses = false; LLVMStyle.SpaceInEmptyParentheses = false; LLVMStyle.SpacesInCStyleCastParentheses = false; - LLVMStyle.SpaceAfterControlStatementKeyword = true; + LLVMStyle.SpaceBeforeParens = FormatStyle::SBPO_ControlStatements; LLVMStyle.SpaceBeforeAssignmentOperators = true; LLVMStyle.ContinuationIndentWidth = 4; LLVMStyle.SpacesInAngles = false; @@ -315,7 +338,7 @@ FormatStyle getGoogleStyle() { GoogleStyle.SpacesInParentheses = false; GoogleStyle.SpaceInEmptyParentheses = false; GoogleStyle.SpacesInCStyleCastParentheses = false; - GoogleStyle.SpaceAfterControlStatementKeyword = true; + GoogleStyle.SpaceBeforeParens = FormatStyle::SBPO_ControlStatements; GoogleStyle.SpaceBeforeAssignmentOperators = true; GoogleStyle.ContinuationIndentWidth = 4; GoogleStyle.SpacesInAngles = false; |