summaryrefslogtreecommitdiff
path: root/clang/lib/Format/Format.cpp
AgeCommit message (Collapse)Author
2025-11-07[clang-format] Add option to separate comment alignment between ... (#165033)Björn Schäpers
normal lines and PP directives. Handling PP directives differently can be desired, like in #161848. Changing the default is not an option, there are tests for exactly the current behaviour.
2025-10-30[clang-format] Add BreakAfterOpenBracket* and BreakBeforeCloseBracket* (#108332)Gedare Bloom
Replace the `AlwaysBreak` and `BlockIndent` suboptions of `AlignAfterOpenBracket` with new style options `BreakAfterOpenBracket*` and `BreakBeforeCloseBracket*` for `*` in `BracedList` for braced list initializers, `if` for if conditional statements, `Loop` for loop control statements (for/while), `Switch` for switch statements, and `Function` for function calls/declarations/definitions. Deprecates `AlwaysBreak` and `BlockIndent`. Fixes #67738 Fixes #79176 Fixes #80123 Fixes #151844
2025-10-18[clang-format] Remove special handling of comments after brace/paren (#71672)Björn Schäpers
Fixes http://llvm.org/PR55487 (#55487) The code did not match the documentation about Cpp11BracedListStyle. Changed handling of comments after opening braces, which are supposedly function call like to behave exactly like their parenthesis counter part.
2025-10-16[clang-format] Fix an assertion failure on comment-only config files (#163111)owenca
2025-10-03[clang-format] Keep the ObjC selector name and `@selector` together (#160739)sstwcw
Fixes #36459. after ```Objective-C - (void)test { if ([object respondsToSelector:@selector( selectorNameThatIsReallyLong:param1:param2:)]) return; } ``` before ```Objective-C - (void)test { if ([object respondsToSelector:@selector (selectorNameThatIsReallyLong:param1:param2:)]) return; } ``` Before this patch, the `ObjCMethodExpr` type was assigned to many kinds of tokens. The rule for allowing breaking the line before the colon on line TokenAnnotator.cpp:6289 was intended for method declarations and calls. It matched the parenthesis following `@selector` by mistake. To fix the problem, this patch adds a new type for `@selector`. Most of the special things in the code related to the old type is intended for other constructs. So most of the code related to the old type is not changed in this patch.
2025-10-02[clang-format][NFC] Introduce isNoneOf (#161021)Björn Schäpers
And apply throughout the code base.
2025-09-25[clang-format] Correctly handle backward compatibility of C headers (#159908)owenca
This in effect reverts 05fb8408de23c3ccb6125b6886742177755bd757 and 7e1a88b9d1431e263258e3ff0f729c1fdce342d3, the latter of which erroneously changed the behavior of formatting `ObjC` header files when both the default and `ObjC` styles were absent. Now the previous behavior of treating that as an error is restored. Fixes #158704
2025-09-22[clang-format] Add AllowBreakBeforeQtProperty option (#159909)owenca
The test cases are adapted from #131605.
2025-09-19[clang-format][NFC] Add is_sorted() assertion for binary_search()Owen Pan
2025-09-14[clang-format] Handle C digit separators (#158418)owenca
Fixes #158413
2025-09-14[clang-format] Add IndentPPDirectives Leave option (#139750)Gedare Bloom
Allow an option to leave preprocessor directive indenting as-is. This simplifies handling mixed styles of CPP directive indentation. Fixes #38511
2025-09-12[clang-format] Add an option to format numeric literal case (#151590)Andy MacGregor
Some languages have the flexibility to use upper or lower case characters interchangeably in integer and float literal definitions. I'd like to be able to enforce a consistent case style in one of my projects, so I added this clang-format style option to control it. With this .clang-format configuration: ```yaml NumericLiteralCaseStyle: UpperCasePrefix: Never UpperCaseHexDigit: Always UpperCaseSuffix: Never ``` This line of code: ```C unsigned long long 0XdEaDbEeFUll; ``` gets reformatted into this line of code: ```C unsigned long long 0xDEAFBEEFull; ``` ----- I'm new to this project, so please let me know if I missed something in the process. I modeled this PR from [IntegerLiteralSeparatorFixer](https://reviews.llvm.org/D140543)
2025-08-17[clang-format] Add SpaceInEmptyBraces option (#153765)owenca
Also set it to SIEB_Always for WebKit style. Closes #85525. Closes #93635.
2025-07-28[clang-format] Fix a bug in `DerivePointerAlignment: true` (#150744)Owen Pan
This effectively reverts a4d4859dc70c046ad928805ddeaf8fa101793394 which didn't fix the problem that `int*,` was not counted as "Left" alignment. Fixes #150327
2025-07-25[clang-format] Google Style: disable DerivePointerAlignment. (#149602)James Y Knight
The [Google C++ Style Guide](https://google.github.io/styleguide/cppguide.html#Pointer_and_Reference_Expressions) is being changed to specify that spaces should go after the asterisk/ampersand, rather than permitting either before or after on a file-by-file basis. The new requirement is: > When referring to a pointer or reference (variable declarations or > definitions, arguments, return types, template parameters, etc.), > you must not place a space before the asterisk/ampersand. Use a > space to separate the type from the declared name (if present). The [Google ObjC style](https://google.github.io/styleguide/objcguide.html) is silent on this matter, but the de-facto style is not being modified at this time. So, keep DerivePointerAlignment enabled for ObjC language mode.
2025-07-24[clang-format] Fix a bug in `DerivePointerAlignment: true` (#150387)Owen Pan
Fixes #150327
2025-07-24[clang-format] Add AfterNot to SpaceBeforeParensOptions (#150367)Owen Pan
Closes #149971
2025-07-17[clang-format] Add IgnoreExtension to SortIncludes (#137840)Daan De Meyer
Sorting by stem gives nicer results when various header file names are substrings of other header file names. For example, a CLI application with a main header named analyze.h and an analyze-xxx.h header for each subcommand currently will always put analyze.h last after all the analyze-xxx.h headers, but putting analyze.h first instead is arguably nicer to read. TLDR; Instead of ``` #include "analyze-blame.h" #include "analyze.h" ``` You'd get ``` #include "analyze.h" #include "analyze-blame.h" ``` Let's allow sorting by stem instead of full path by adding IgnoreExtension to SortIncludes.
2025-07-13[clang-format] Add MacrosSkippedByRemoveParentheses option (#148345)Owen Pan
This allows RemoveParentheses to skip the invocations of function-like macros. Fixes #68354. Fixes #147780.
2025-07-11Follow up on #147623Owen Pan
2025-07-09Address a handful of C4146 compiler warnings where literals can be replaced ↵Alex Sepkowski
with std::numeric_limits (#147623) This PR addresses instances of compiler warning C4146 that can be replaced with std::numeric_limits. Specifically, these are cases where a literal such as '-1ULL' was used to assign a value to a uint64_t variable. The intent is much cleaner if we use the appropriate std::numeric_limits value<Type>::max() for these cases. Addresses #147439
2025-07-06[clang-format][NFC] Replace size() with empty() (#147164)Owen Pan
2025-05-28[clang-format] Handle .h files for LK_C and LK_ObjC (#141714)Owen Pan
Fix #137792
2025-05-20[clang-format] Handle raw string literals containing JSON code (#140666)Owen Pan
Fix #65400
2025-05-19[clang-format][NFC] Upgrade SortIncludes option to a struct (#140497)Owen Pan
This allows adding other suboptions e.g. IgnoreExtension in #137840.
2025-05-16[clang] Use llvm::binary_search (NFC) (#140216)Kazu Hirata
2025-05-07[clang-format] Add SpaceAfterOperatorKeyword option (#137610)Filip Milosevic
Add SpaceAfterOperatorKeyword option to clang-format
2025-04-30Reland [clang-format] Add OneLineFormatOffRegex option (#137577)Owen Pan
2025-04-30Revert "[clang-format] Add OneLineFormatOffRegex option (#137577)"Owen Pan
This reverts commit b8bb1ccb4f9126d1bc9817be24e17f186a75a08b which triggered an assertion failure in CodeGenTest.TestNonAlterTest.
2025-04-29[clang-format] Add OneLineFormatOffRegex option (#137577)Owen Pan
Close #54334
2025-04-19[clang] Use llvm::unique (NFC) (#136469)Kazu Hirata
2025-04-18[clang-format] Fix a crash in EnumTrailingComma (#135903)Owen Pan
Fix #135819
2025-04-12[clang-format] Wrap and indent lambda braces in GNU style (#135479)Owen Pan
Fix #133135
2025-04-12[clang-format][NFC] Add isJava() and isTextProto() in FormatStyle (#135466)Owen Pan
Also remove redundant name qualifiers format::, FormatStyle::, and LanguageKind::.
2025-04-10Treat ipynb as json (#135137)Tim Clephas
Fixes #110727
2025-04-09[clang-format][NFC] Add FormatToken::is(tok::ObjCKeywordKind) (#134973)Owen Pan
This allows simplification of code that checks if a token is an Objective-C keyword. Also, delete the following in UnwrappedLineParser::parseStructuralElement(): - an else-after-break in the tok::at case - the copypasted code in the tok::objc_autoreleasepool case
2025-04-05[clang-format] Set C11 instead of C17 for LK_C (#134472)Owen Pan
Fix #134453
2025-03-30[clang-format] Add an option for editing enum trailing commas (#133576)Owen Pan
Also refactor the code that removes/replaces a token.
2025-03-27[clang-format] Allow `Language: Cpp` for C files (#133033)Owen Pan
Fix #132832
2025-03-14[clang-format] Add support for absl nullability macros (#130346)Jan Voung
Add support for formatting w/ absl nullability macros (https://github.com/abseil/abseil-cpp/blob/c52afac4f87ef76e6293b84874e5126a62be1f15/absl/base/nullability.h#L237). Example at https://godbolt.org/z/PYv19M1Gj input: ``` std::vector<int* _Nonnull> x; std::vector<int* absl_nonnull> y; ``` orig output: ``` std::vector<int* _Nonnull> x; std::vector<int * absl_nonnull> y; ``` new output: ``` std::vector<int* _Nonnull> x; std::vector<int* absl_nonnull> y; ``` credit to @ymand for the original patch
2025-03-03[clang-format] Lex C++ only keywords as identifiers in C (#129426)Owen Pan
Fix #128847
2025-03-03[clang-format] Don't sort includes for C# (#129369)Owen Pan
Fixes #106194
2025-02-27[clang-format] Change BracedInitializerIndentWidth to int (#128988)Owen Pan
Fixes #108526
2025-02-23[clang-format] Add the C language instead of treating it like C++ (#128287)Owen Pan
Closes #128120
2025-02-21[clang-format] Allow specifying the language for `.h` files (#128122)Owen Pan
Closes #128119
2025-02-07[clang-format] Add BinPackLongBracedList style option (#112482)Gedare Bloom
The use of Cpp11BracedListStyle with BinPackArguments=False avoids bin packing until reaching a hard-coded limit of 20 items. This is an arbitrary choice. Introduce a new style option to allow disabling this limit.
2025-02-06[clang-format] Add BreakBeforeTemplateCloser option (#118046)leijurv
In clang-format, multiline templates have the `>` on the same line as the last parameter: ```c++ template < typename Foo, typename Bar> void foo() { ``` I would like to add an option to put the `>` on the next line, like this: ```c++ template < typename Foo, typename Bar > void foo() { ``` An example of a large project that uses this style is NVIDIA's CUTLASS, here is an example: https://github.com/NVIDIA/cutlass/blob/main/include/cutlass/epilogue/dispatch_policy.hpp#L149-L156 My reasoning is that it reminds me of this style of braces: ```c++ if (foo()) { bar(); baz();} ``` Most people agree this is better: ```c++ if (foo()) { bar(); baz(); } ``` --------- Co-authored-by: Owen Pan <owenpiano@gmail.com>
2025-01-27[clang-format] Add style option `PenaltyBreakBeforeMemberAccess` (#118409)Gedare Bloom
The penalty for breaking before a member access is hard-coded to 150. Add a configuration option to allow setting it. --------- Co-authored-by: Owen Pan <owenpiano@gmail.com>
2025-01-21[clang-format] Rename ExportBlockIndentation -> IndentExportBlock (#123493)Sirraide
This renames the `ExportBlockIndentation` option and adds a config parse test, as requested in #110381.
2025-01-19[clang-format] Improve brace wrapping and add an option to control ↵Sirraide
indentation of `export { ... }` (#110381) `export { ... }` blocks can get a bit long, so I thought it would make sense to have an option that makes it so their contents are not indented (basically the same argument as for namespaces). This is based on the `NamespaceIndentation` option, except that there is no option to control the behaviour of `export` blocks when nested because nesting them doesn’t really make sense. Additionally, brace wrapping of short `export { ... }` blocks is now controlled by the `AllowShortBlocksOnASingleLine` option. There is no separate option just for `export` blocks because you can just write e.g. `export int x;` instead of `export { int x; }`. This closes #121723.