Fix formatting of compound-type variable declarations in macros (#6997)

By default clang-format interprets function-like macro invocations as
function calls. E.g. the argument of `CARBON_KIND(llvm::ListSeparator*
sep)` is interpreted as an expression, meaning the `*` is an infix
binary operator, so it inserts a space before the `*`. This change
teaches clang-format that `CARBON_KIND(x)` and
`CARBON_ASSIGN_OR_RETURN(x)` rewrite to `x`, which is close enough to
the truth to enable it to format them correctly. See the [clang-format
docs](https://clang.llvm.org/docs/ClangFormatStyleOptions.html#macros)
for details.
This commit is contained in:
Geoff Romer
2026-03-31 19:41:26 +00:00
committed by GitHub
parent 2e0d9dc709
commit aec2534e9d
3 changed files with 8 additions and 3 deletions
+5
View File
@@ -27,3 +27,8 @@ StatementMacros: ['ABSTRACT']
QualifierAlignment: Custom
QualifierOrder:
[inline, static, friend, constexpr, const, volatile, restrict, type]
Macros:
# These macros can contain variable declarations, so clang-format needs to
# "see through" them in order to format them correctly.
- CARBON_ASSIGN_OR_RETURN(x)=x
- CARBON_KIND(x)=x
+2 -2
View File
@@ -1111,14 +1111,14 @@ auto Lexer::LexNumericLiteral(llvm::StringRef source_text, ssize_t& position)
position += token_size;
CARBON_KIND_SWITCH(literal->ComputeValue(emitter_)) {
case CARBON_KIND(NumericLiteral::IntValue && value): {
case CARBON_KIND(NumericLiteral::IntValue&& value): {
return LexTokenWithPayload(TokenKind::IntLiteral,
buffer_.value_stores_->ints()
.AddUnsigned(std::move(value.value))
.AsTokenPayload(),
byte_offset);
}
case CARBON_KIND(NumericLiteral::RealValue && value): {
case CARBON_KIND(NumericLiteral::RealValue&& value): {
auto real_id = buffer_.value_stores_->reals().Add(
Real{.mantissa = value.mantissa,
.exponent = value.exponent,
+1 -1
View File
@@ -176,7 +176,7 @@ class StepStack {
PushSpecificNamedConstraint(specific_named_constraint);
break;
}
case CARBON_KIND(llvm::ListSeparator * sep): {
case CARBON_KIND(llvm::ListSeparator* sep): {
PushString(*sep);
break;
}