forked from OSchip/llvm-project
[clang-format] Add an option to add a space between operator overloading and opening parentheses
This change adds an option AfterOverloadedOperator in SpaceBeforeParensOptions to add a space between overloaded operator and opening parentheses in clang-format. Reviewed By: MyDeveloperDay, curdeius, HazardyKnusperkeks Differential Revision: https://reviews.llvm.org/D116283
This commit is contained in:
parent
64e56f8356
commit
da6b0d0b76
|
@ -3818,6 +3818,15 @@ the configuration (without a prefix: ``Auto``).
|
||||||
IF (...) vs. IF(...)
|
IF (...) vs. IF(...)
|
||||||
<conditional-body> <conditional-body>
|
<conditional-body> <conditional-body>
|
||||||
|
|
||||||
|
* ``bool AfterOverloadedOperator`` If ``true``, put a space between operator overloading and opening
|
||||||
|
parentheses.
|
||||||
|
|
||||||
|
.. code-block:: c++
|
||||||
|
|
||||||
|
true: false:
|
||||||
|
void operator++ (int a); vs. void operator++(int a);
|
||||||
|
object.operator++ (10); object.operator++(10);
|
||||||
|
|
||||||
* ``bool BeforeNonEmptyParentheses`` If ``true``, put a space before opening parentheses only if the
|
* ``bool BeforeNonEmptyParentheses`` If ``true``, put a space before opening parentheses only if the
|
||||||
parentheses are not empty.
|
parentheses are not empty.
|
||||||
|
|
||||||
|
|
|
@ -311,6 +311,9 @@ clang-format
|
||||||
|
|
||||||
- Improved C++20 Modules and Coroutines support.
|
- Improved C++20 Modules and Coroutines support.
|
||||||
|
|
||||||
|
- Option ``AfterOverloadedOperator`` has been added in ``SpaceBeforeParensOptions``
|
||||||
|
to allow space between overloaded operator and opening parentheses.
|
||||||
|
|
||||||
libclang
|
libclang
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
|
|
@ -3429,6 +3429,14 @@ struct FormatStyle {
|
||||||
/// <conditional-body> <conditional-body>
|
/// <conditional-body> <conditional-body>
|
||||||
/// \endcode
|
/// \endcode
|
||||||
bool AfterIfMacros;
|
bool AfterIfMacros;
|
||||||
|
/// If ``true``, put a space between operator overloading and opening
|
||||||
|
/// parentheses.
|
||||||
|
/// \code
|
||||||
|
/// true: false:
|
||||||
|
/// void operator++ (int a); vs. void operator++(int a);
|
||||||
|
/// object.operator++ (10); object.operator++(10);
|
||||||
|
/// \endcode
|
||||||
|
bool AfterOverloadedOperator;
|
||||||
/// If ``true``, put a space before opening parentheses only if the
|
/// If ``true``, put a space before opening parentheses only if the
|
||||||
/// parentheses are not empty.
|
/// parentheses are not empty.
|
||||||
/// \code
|
/// \code
|
||||||
|
@ -3442,7 +3450,7 @@ struct FormatStyle {
|
||||||
: AfterControlStatements(false), AfterForeachMacros(false),
|
: AfterControlStatements(false), AfterForeachMacros(false),
|
||||||
AfterFunctionDeclarationName(false),
|
AfterFunctionDeclarationName(false),
|
||||||
AfterFunctionDefinitionName(false), AfterIfMacros(false),
|
AfterFunctionDefinitionName(false), AfterIfMacros(false),
|
||||||
BeforeNonEmptyParentheses(false) {}
|
AfterOverloadedOperator(false), BeforeNonEmptyParentheses(false) {}
|
||||||
|
|
||||||
bool operator==(const SpaceBeforeParensCustom &Other) const {
|
bool operator==(const SpaceBeforeParensCustom &Other) const {
|
||||||
return AfterControlStatements == Other.AfterControlStatements &&
|
return AfterControlStatements == Other.AfterControlStatements &&
|
||||||
|
@ -3451,6 +3459,7 @@ struct FormatStyle {
|
||||||
Other.AfterFunctionDeclarationName &&
|
Other.AfterFunctionDeclarationName &&
|
||||||
AfterFunctionDefinitionName == Other.AfterFunctionDefinitionName &&
|
AfterFunctionDefinitionName == Other.AfterFunctionDefinitionName &&
|
||||||
AfterIfMacros == Other.AfterIfMacros &&
|
AfterIfMacros == Other.AfterIfMacros &&
|
||||||
|
AfterOverloadedOperator == Other.AfterOverloadedOperator &&
|
||||||
BeforeNonEmptyParentheses == Other.BeforeNonEmptyParentheses;
|
BeforeNonEmptyParentheses == Other.BeforeNonEmptyParentheses;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -868,6 +868,7 @@ template <> struct MappingTraits<FormatStyle::SpaceBeforeParensCustom> {
|
||||||
IO.mapOptional("AfterFunctionDeclarationName",
|
IO.mapOptional("AfterFunctionDeclarationName",
|
||||||
Spacing.AfterFunctionDeclarationName);
|
Spacing.AfterFunctionDeclarationName);
|
||||||
IO.mapOptional("AfterIfMacros", Spacing.AfterIfMacros);
|
IO.mapOptional("AfterIfMacros", Spacing.AfterIfMacros);
|
||||||
|
IO.mapOptional("AfterOverloadedOperator", Spacing.AfterOverloadedOperator);
|
||||||
IO.mapOptional("BeforeNonEmptyParentheses",
|
IO.mapOptional("BeforeNonEmptyParentheses",
|
||||||
Spacing.BeforeNonEmptyParentheses);
|
Spacing.BeforeNonEmptyParentheses);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2923,9 +2923,15 @@ unsigned TokenAnnotator::splitPenalty(const AnnotatedLine &Line,
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TokenAnnotator::spaceRequiredBeforeParens(const FormatToken &Right) const {
|
bool TokenAnnotator::spaceRequiredBeforeParens(const FormatToken &Right) const {
|
||||||
return Style.SpaceBeforeParens == FormatStyle::SBPO_Always ||
|
if (Style.SpaceBeforeParens == FormatStyle::SBPO_Always)
|
||||||
(Style.SpaceBeforeParensOptions.BeforeNonEmptyParentheses &&
|
return true;
|
||||||
Right.ParameterCount > 0);
|
if (Right.is(TT_OverloadedOperatorLParen) &&
|
||||||
|
Style.SpaceBeforeParensOptions.AfterOverloadedOperator)
|
||||||
|
return true;
|
||||||
|
if (Style.SpaceBeforeParensOptions.BeforeNonEmptyParentheses &&
|
||||||
|
Right.ParameterCount > 0)
|
||||||
|
return true;
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TokenAnnotator::spaceRequiredBetween(const AnnotatedLine &Line,
|
bool TokenAnnotator::spaceRequiredBetween(const AnnotatedLine &Line,
|
||||||
|
|
|
@ -14536,6 +14536,24 @@ TEST_F(FormatTest, ConfigurableSpaceBeforeParens) {
|
||||||
// verifyFormat("X A::operator++ (T);", SomeSpace2);
|
// verifyFormat("X A::operator++ (T);", SomeSpace2);
|
||||||
verifyFormat("int x = int (y);", SomeSpace2);
|
verifyFormat("int x = int (y);", SomeSpace2);
|
||||||
verifyFormat("auto lambda = []() { return 0; };", SomeSpace2);
|
verifyFormat("auto lambda = []() { return 0; };", SomeSpace2);
|
||||||
|
|
||||||
|
FormatStyle SpaceAfterOverloadedOperator = getLLVMStyle();
|
||||||
|
SpaceAfterOverloadedOperator.SpaceBeforeParens = FormatStyle::SBPO_Custom;
|
||||||
|
SpaceAfterOverloadedOperator.SpaceBeforeParensOptions
|
||||||
|
.AfterOverloadedOperator = true;
|
||||||
|
|
||||||
|
verifyFormat("auto operator++ () -> int;", SpaceAfterOverloadedOperator);
|
||||||
|
verifyFormat("X A::operator++ ();", SpaceAfterOverloadedOperator);
|
||||||
|
verifyFormat("some_object.operator++ ();", SpaceAfterOverloadedOperator);
|
||||||
|
verifyFormat("auto func() -> int;", SpaceAfterOverloadedOperator);
|
||||||
|
|
||||||
|
SpaceAfterOverloadedOperator.SpaceBeforeParensOptions
|
||||||
|
.AfterOverloadedOperator = false;
|
||||||
|
|
||||||
|
verifyFormat("auto operator++() -> int;", SpaceAfterOverloadedOperator);
|
||||||
|
verifyFormat("X A::operator++();", SpaceAfterOverloadedOperator);
|
||||||
|
verifyFormat("some_object.operator++();", SpaceAfterOverloadedOperator);
|
||||||
|
verifyFormat("auto func() -> int;", SpaceAfterOverloadedOperator);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_F(FormatTest, SpaceAfterLogicalNot) {
|
TEST_F(FormatTest, SpaceAfterLogicalNot) {
|
||||||
|
@ -18771,6 +18789,15 @@ TEST_F(FormatTest, ParsesConfigurationBools) {
|
||||||
CHECK_PARSE_NESTED_BOOL(BraceWrapping, SplitEmptyFunction);
|
CHECK_PARSE_NESTED_BOOL(BraceWrapping, SplitEmptyFunction);
|
||||||
CHECK_PARSE_NESTED_BOOL(BraceWrapping, SplitEmptyRecord);
|
CHECK_PARSE_NESTED_BOOL(BraceWrapping, SplitEmptyRecord);
|
||||||
CHECK_PARSE_NESTED_BOOL(BraceWrapping, SplitEmptyNamespace);
|
CHECK_PARSE_NESTED_BOOL(BraceWrapping, SplitEmptyNamespace);
|
||||||
|
CHECK_PARSE_NESTED_BOOL(SpaceBeforeParensOptions, AfterControlStatements);
|
||||||
|
CHECK_PARSE_NESTED_BOOL(SpaceBeforeParensOptions, AfterForeachMacros);
|
||||||
|
CHECK_PARSE_NESTED_BOOL(SpaceBeforeParensOptions,
|
||||||
|
AfterFunctionDeclarationName);
|
||||||
|
CHECK_PARSE_NESTED_BOOL(SpaceBeforeParensOptions,
|
||||||
|
AfterFunctionDefinitionName);
|
||||||
|
CHECK_PARSE_NESTED_BOOL(SpaceBeforeParensOptions, AfterIfMacros);
|
||||||
|
CHECK_PARSE_NESTED_BOOL(SpaceBeforeParensOptions, AfterOverloadedOperator);
|
||||||
|
CHECK_PARSE_NESTED_BOOL(SpaceBeforeParensOptions, BeforeNonEmptyParentheses);
|
||||||
}
|
}
|
||||||
|
|
||||||
#undef CHECK_PARSE_BOOL
|
#undef CHECK_PARSE_BOOL
|
||||||
|
|
Loading…
Reference in New Issue