14#ifndef LLVM_CLANG_FORMAT_FORMAT_H
15#define LLVM_CLANG_FORMAT_FORMAT_H
21#include "llvm/ADT/ArrayRef.h"
22#include "llvm/Support/Regex.h"
23#include "llvm/Support/SourceMgr.h"
25#include <system_error>
48 const char *
name()
const noexcept override;
49 std::string
message(
int EV)
const override;
60 bool InheritsParentConfig;
64 int AccessModifierOffset;
87 bool AlignAfterOpenBracket;
90 enum ArrayInitializerAlignmentStyle : int8_t {
123 ArrayInitializerAlignmentStyle AlignArrayOfStructures;
145 struct AlignConsecutiveStyle {
183 bool AcrossEmptyLines;
222 bool AlignFunctionDeclarations;
238 bool AlignFunctionPointers;
258 bool operator==(
const AlignConsecutiveStyle &R)
const {
259 return Enabled == R.Enabled && AcrossEmptyLines == R.AcrossEmptyLines &&
260 AcrossComments == R.AcrossComments &&
261 AlignCompound == R.AlignCompound &&
262 AlignFunctionDeclarations == R.AlignFunctionDeclarations &&
263 AlignFunctionPointers == R.AlignFunctionPointers &&
264 PadOperators == R.PadOperators;
266 bool operator!=(
const AlignConsecutiveStyle &R)
const {
267 return !(*
this == R);
282 AlignConsecutiveStyle AlignConsecutiveMacros;
292 AlignConsecutiveStyle AlignConsecutiveAssignments;
303 AlignConsecutiveStyle AlignConsecutiveBitFields;
314 AlignConsecutiveStyle AlignConsecutiveDeclarations;
318 struct ShortCaseStatementsAlignmentStyle {
354 bool AcrossEmptyLines;
390 bool AlignCaseArrows;
408 bool AlignCaseColons;
409 bool operator==(
const ShortCaseStatementsAlignmentStyle &R)
const {
410 return Enabled == R.Enabled && AcrossEmptyLines == R.AcrossEmptyLines &&
411 AcrossComments == R.AcrossComments &&
412 AlignCaseArrows == R.AlignCaseArrows &&
413 AlignCaseColons == R.AlignCaseColons;
430 ShortCaseStatementsAlignmentStyle AlignConsecutiveShortCaseStatements;
445 AlignConsecutiveStyle AlignConsecutiveTableGenBreakingDAGArgColons;
455 AlignConsecutiveStyle AlignConsecutiveTableGenCondOperatorColons;
465 AlignConsecutiveStyle AlignConsecutiveTableGenDefinitionColons;
468 enum EscapedNewlineAlignmentStyle : int8_t {
493 ENAS_LeftWithLastLine,
506 EscapedNewlineAlignmentStyle AlignEscapedNewlines;
509 enum OperandAlignmentStyle : int8_t {
539 OAS_AlignAfterOperator,
545 OperandAlignmentStyle AlignOperands;
548 enum TrailingCommentsAlignmentKinds : int8_t {
579 struct TrailingCommentsAlignmentStyle {
581 TrailingCommentsAlignmentKinds
Kind;
604 unsigned OverEmptyLines;
613 bool AlignPPAndNotPP;
615 bool operator==(
const TrailingCommentsAlignmentStyle &R)
const {
616 return Kind == R.Kind && OverEmptyLines == R.OverEmptyLines &&
617 AlignPPAndNotPP == R.AlignPPAndNotPP;
619 bool operator!=(
const TrailingCommentsAlignmentStyle &R)
const {
620 return !(*
this == R);
642 TrailingCommentsAlignmentStyle AlignTrailingComments;
659 bool AllowAllArgumentsOnNextLine;
682 bool AllowAllParametersOfDeclarationOnNextLine;
685 enum BreakBeforeNoexceptSpecifierStyle : int8_t {
723 BreakBeforeNoexceptSpecifierStyle AllowBreakBeforeNoexceptSpecifier;
729 bool AllowBreakBeforeQtProperty;
733 enum ShortBlockStyle : int8_t {
762 ShortBlockStyle AllowShortBlocksOnASingleLine;
775 bool AllowShortCaseExpressionOnASingleLine;
789 bool AllowShortCaseLabelsOnASingleLine;
808 bool AllowShortCompoundRequirementOnASingleLine;
822 bool AllowShortEnumsOnASingleLine;
826 enum ShortFunctionStyle : int8_t {
875 ShortFunctionStyle AllowShortFunctionsOnASingleLine;
878 enum ShortIfStyle : int8_t {
946 ShortIfStyle AllowShortIfStatementsOnASingleLine;
950 enum ShortLambdaStyle : int8_t {
980 ShortLambdaStyle AllowShortLambdasOnASingleLine;
985 bool AllowShortLoopsOnASingleLine;
989 bool AllowShortNamespacesOnASingleLine;
993 enum DefinitionReturnTypeBreakingStyle : int8_t {
1005 enum ReturnTypeBreakingStyle : int8_t {
1030 RTBS_ExceptShortType,
1080 RTBS_AllDefinitions,
1094 RTBS_TopLevelDefinitions,
1100 DefinitionReturnTypeBreakingStyle AlwaysBreakAfterDefinitionReturnType;
1120 bool AlwaysBreakBeforeMultilineStrings;
1123 enum BreakTemplateDeclarationsStyle : int8_t {
1190 std::vector<std::string> AttributeMacros;
1209 bool BinPackArguments;
1225 bool BinPackLongBracedList;
1228 enum BinPackParametersStyle : int8_t {
1251 BPPS_AlwaysOnePerLine,
1256 BinPackParametersStyle BinPackParameters;
1259 enum BitFieldColonSpacingStyle : int8_t {
1285 BitFieldColonSpacingStyle BitFieldColonSpacing;
1318 int BracedInitializerIndentWidth;
1321 enum BraceWrappingAfterControlStatementStyle : int8_t {
1361 struct BraceWrappingFlags {
1377 bool AfterCaseLabel;
1390 BraceWrappingAfterControlStatementStyle AfterControlStatement;
1434 bool AfterNamespace;
1440 bool AfterObjCDeclaration;
1482 bool AfterExternBlock;
1529 bool BeforeLambdaBody;
1559 bool SplitEmptyFunction;
1571 bool SplitEmptyRecord;
1583 bool SplitEmptyNamespace;
1599 BraceWrappingFlags BraceWrapping;
1612 bool BreakAdjacentStringLiterals;
1615 enum AttributeBreakingStyle : int8_t {
1699 AttributeBreakingStyle BreakAfterAttributes;
1710 bool BreakAfterOpenBracketBracedList;
1720 bool BreakAfterOpenBracketFunction;
1730 bool BreakAfterOpenBracketIf;
1740 bool BreakAfterOpenBracketLoop;
1750 bool BreakAfterOpenBracketSwitch;
1754 ReturnTypeBreakingStyle BreakAfterReturnType;
1777 enum BinPackStyle : int8_t {
1787 enum BinaryOperatorStyle : int8_t {
1828 BinaryOperatorStyle BreakBeforeBinaryOperators;
1831 enum BraceBreakingStyle : int8_t {
2263 BraceBreakingStyle BreakBeforeBraces;
2276 bool BreakBeforeCloseBracketBracedList;
2287 bool BreakBeforeCloseBracketFunction;
2300 bool BreakBeforeCloseBracketIf;
2313 bool BreakBeforeCloseBracketLoop;
2326 bool BreakBeforeCloseBracketSwitch;
2329 enum BreakBeforeConceptDeclarationsStyle : int8_t {
2350 BreakBeforeConceptDeclarationsStyle BreakBeforeConceptDeclarations;
2353 enum BreakBeforeInlineASMColonStyle : int8_t {
2367 BBIAS_OnlyMultiline,
2379 BreakBeforeInlineASMColonStyle BreakBeforeInlineASMColon;
2406 bool BreakBeforeTemplateCloser;
2421 bool BreakBeforeTernaryOperators;
2424 enum BreakBinaryOperationsStyle : int8_t {
2451 BBO_RespectPrecedence
2456 struct BinaryOperationBreakRule {
2459 std::vector<tok::TokenKind> Operators;
2461 BreakBinaryOperationsStyle Style;
2465 unsigned MinChainLength;
2466 bool operator==(
const BinaryOperationBreakRule &R)
const {
2467 return Operators == R.Operators && Style == R.Style &&
2468 MinChainLength == R.MinChainLength;
2470 bool operator!=(
const BinaryOperationBreakRule &R)
const {
2471 return !(*
this == R);
2490 struct BreakBinaryOperationsOptions {
2492 BreakBinaryOperationsStyle
Default;
2494 std::vector<BinaryOperationBreakRule> PerOperator;
2495 const BinaryOperationBreakRule *
2496 findRuleForOperator(tok::TokenKind Kind)
const {
2497 for (
const auto &Rule : PerOperator) {
2498 if (llvm::find(
Rule.Operators, Kind) !=
Rule.Operators.end())
2503 if (Kind == tok::greater &&
2504 llvm::find(
Rule.Operators, tok::greatergreater) !=
2505 Rule.Operators.end()) {
2511 BreakBinaryOperationsStyle getStyleForOperator(tok::TokenKind Kind)
const {
2512 if (
const auto *Rule = findRuleForOperator(Kind))
2516 unsigned getMinChainLengthForOperator(tok::TokenKind Kind)
const {
2517 if (
const auto *Rule = findRuleForOperator(Kind))
2518 return Rule->MinChainLength;
2521 bool operator==(
const BreakBinaryOperationsOptions &R)
const {
2522 return Default == R.Default && PerOperator == R.PerOperator;
2524 bool operator!=(
const BreakBinaryOperationsOptions &R)
const {
2525 return !(*
this == R);
2531 BreakBinaryOperationsOptions BreakBinaryOperations;
2534 enum BreakConstructorInitializersStyle : int8_t {
2567 BreakConstructorInitializersStyle BreakConstructorInitializers;
2581 bool BreakFunctionDefinitionParameters;
2591 bool BreakAfterJavaFieldAnnotations;
2634 bool BreakStringLiterals;
2642 unsigned ColumnLimit;
2652 std::string CommentPragmas;
2655 enum BreakInheritanceListStyle : int8_t {
2692 BreakInheritanceListStyle BreakInheritanceList;
2696 BreakTemplateDeclarationsStyle BreakTemplateDeclarations;
2720 bool CompactNamespaces;
2730 unsigned ConstructorInitializerIndentWidth;
2741 unsigned ContinuationIndentWidth;
2744 enum BracedListStyle : int8_t {
2798 BLS_AlignFirstComment,
2803 BracedListStyle Cpp11BracedListStyle;
2816 bool DerivePointerAlignment;
2825 enum EmptyLineAfterAccessModifierStyle : int8_t {
2871 EmptyLineAfterAccessModifierStyle EmptyLineAfterAccessModifier;
2874 enum EmptyLineBeforeAccessModifierStyle : int8_t {
2909 ELBAMS_LogicalBlock,
2934 EmptyLineBeforeAccessModifierStyle EmptyLineBeforeAccessModifier;
2937 enum EnumTrailingCommaStyle : int8_t {
2967 EnumTrailingCommaStyle EnumTrailingComma;
2982 bool ExperimentalAutoDetectBinPacking;
2998 bool FixNamespaceComments;
3016 std::vector<std::string> ForEachMacros;
3018 tooling::IncludeStyle IncludeStyle;
3039 std::vector<std::string> IfMacros;
3066 bool IndentAccessModifiers;
3089 bool IndentCaseBlocks;
3108 bool IndentCaseLabels;
3121 bool IndentExportBlock;
3124 enum IndentExternBlockStyle : int8_t {
3142 IEBS_AfterExternBlock,
3161 IndentExternBlockStyle IndentExternBlock;
3178 bool IndentGotoLabels;
3181 enum PPDirectiveIndentStyle : int8_t {
3225 PPDirectiveIndentStyle IndentPPDirectives;
3248 bool IndentRequiresClause;
3262 unsigned IndentWidth;
3276 bool IndentWrappedFunctionNames;
3312 bool InsertNewlineAtEOF;
3315 enum TrailingCommaStyle : int8_t {
3342 TrailingCommaStyle InsertTrailingCommas;
3374 struct IntegerLiteralSeparatorStyle {
3390 int8_t BinaryMinDigitsInsert;
3402 int8_t BinaryMaxDigitsRemove;
3417 int8_t DecimalMinDigitsInsert;
3429 int8_t DecimalMaxDigitsRemove;
3445 int8_t HexMinDigitsInsert;
3458 int8_t HexMaxDigitsRemove;
3459 bool operator==(
const IntegerLiteralSeparatorStyle &R)
const {
3460 return Binary == R.Binary &&
3461 BinaryMinDigitsInsert == R.BinaryMinDigitsInsert &&
3462 BinaryMaxDigitsRemove == R.BinaryMaxDigitsRemove &&
3464 DecimalMinDigitsInsert == R.DecimalMinDigitsInsert &&
3465 DecimalMaxDigitsRemove == R.DecimalMaxDigitsRemove &&
3466 Hex == R.Hex && HexMinDigitsInsert == R.HexMinDigitsInsert &&
3467 HexMaxDigitsRemove == R.HexMaxDigitsRemove;
3469 bool operator!=(
const IntegerLiteralSeparatorStyle &R)
const {
3918 return !(*
this == R);
4777 return !(*
this == R);
5145 Other.AfterFunctionDeclarationName &&
5448 return !(*
this == R);
5734 return AccessModifierOffset == R.AccessModifierOffset &&
5735 AlignAfterOpenBracket == R.AlignAfterOpenBracket &&
5736 AlignArrayOfStructures == R.AlignArrayOfStructures &&
5737 AlignConsecutiveAssignments == R.AlignConsecutiveAssignments &&
5738 AlignConsecutiveBitFields == R.AlignConsecutiveBitFields &&
5739 AlignConsecutiveDeclarations == R.AlignConsecutiveDeclarations &&
5740 AlignConsecutiveMacros == R.AlignConsecutiveMacros &&
5741 AlignConsecutiveShortCaseStatements ==
5742 R.AlignConsecutiveShortCaseStatements &&
5743 AlignConsecutiveTableGenBreakingDAGArgColons ==
5744 R.AlignConsecutiveTableGenBreakingDAGArgColons &&
5745 AlignConsecutiveTableGenCondOperatorColons ==
5746 R.AlignConsecutiveTableGenCondOperatorColons &&
5747 AlignConsecutiveTableGenDefinitionColons ==
5748 R.AlignConsecutiveTableGenDefinitionColons &&
5749 AlignEscapedNewlines == R.AlignEscapedNewlines &&
5750 AlignOperands == R.AlignOperands &&
5751 AlignTrailingComments == R.AlignTrailingComments &&
5752 AllowAllArgumentsOnNextLine == R.AllowAllArgumentsOnNextLine &&
5753 AllowAllParametersOfDeclarationOnNextLine ==
5754 R.AllowAllParametersOfDeclarationOnNextLine &&
5755 AllowBreakBeforeNoexceptSpecifier ==
5756 R.AllowBreakBeforeNoexceptSpecifier &&
5757 AllowBreakBeforeQtProperty == R.AllowBreakBeforeQtProperty &&
5758 AllowShortBlocksOnASingleLine == R.AllowShortBlocksOnASingleLine &&
5759 AllowShortCaseExpressionOnASingleLine ==
5760 R.AllowShortCaseExpressionOnASingleLine &&
5761 AllowShortCaseLabelsOnASingleLine ==
5762 R.AllowShortCaseLabelsOnASingleLine &&
5763 AllowShortCompoundRequirementOnASingleLine ==
5764 R.AllowShortCompoundRequirementOnASingleLine &&
5765 AllowShortEnumsOnASingleLine == R.AllowShortEnumsOnASingleLine &&
5766 AllowShortFunctionsOnASingleLine ==
5767 R.AllowShortFunctionsOnASingleLine &&
5768 AllowShortIfStatementsOnASingleLine ==
5769 R.AllowShortIfStatementsOnASingleLine &&
5770 AllowShortLambdasOnASingleLine == R.AllowShortLambdasOnASingleLine &&
5771 AllowShortLoopsOnASingleLine == R.AllowShortLoopsOnASingleLine &&
5772 AllowShortNamespacesOnASingleLine ==
5773 R.AllowShortNamespacesOnASingleLine &&
5774 AlwaysBreakBeforeMultilineStrings ==
5775 R.AlwaysBreakBeforeMultilineStrings &&
5776 AttributeMacros == R.AttributeMacros &&
5777 BinPackArguments == R.BinPackArguments &&
5778 BinPackLongBracedList == R.BinPackLongBracedList &&
5779 BinPackParameters == R.BinPackParameters &&
5780 BitFieldColonSpacing == R.BitFieldColonSpacing &&
5781 BracedInitializerIndentWidth == R.BracedInitializerIndentWidth &&
5782 BreakAdjacentStringLiterals == R.BreakAdjacentStringLiterals &&
5783 BreakAfterAttributes == R.BreakAfterAttributes &&
5784 BreakAfterJavaFieldAnnotations == R.BreakAfterJavaFieldAnnotations &&
5785 BreakAfterOpenBracketBracedList ==
5786 R.BreakAfterOpenBracketBracedList &&
5787 BreakAfterOpenBracketFunction == R.BreakAfterOpenBracketFunction &&
5788 BreakAfterOpenBracketIf == R.BreakAfterOpenBracketIf &&
5789 BreakAfterOpenBracketLoop == R.BreakAfterOpenBracketLoop &&
5790 BreakAfterOpenBracketSwitch == R.BreakAfterOpenBracketSwitch &&
5791 BreakAfterReturnType == R.BreakAfterReturnType &&
5792 BreakArrays == R.BreakArrays &&
5793 BreakBeforeBinaryOperators == R.BreakBeforeBinaryOperators &&
5794 BreakBeforeBraces == R.BreakBeforeBraces &&
5795 BreakBeforeCloseBracketBracedList ==
5796 R.BreakBeforeCloseBracketBracedList &&
5797 BreakBeforeCloseBracketFunction ==
5798 R.BreakBeforeCloseBracketFunction &&
5799 BreakBeforeCloseBracketIf == R.BreakBeforeCloseBracketIf &&
5800 BreakBeforeCloseBracketLoop == R.BreakBeforeCloseBracketLoop &&
5801 BreakBeforeCloseBracketSwitch == R.BreakBeforeCloseBracketSwitch &&
5802 BreakBeforeConceptDeclarations == R.BreakBeforeConceptDeclarations &&
5803 BreakBeforeInlineASMColon == R.BreakBeforeInlineASMColon &&
5804 BreakBeforeTemplateCloser == R.BreakBeforeTemplateCloser &&
5805 BreakBeforeTernaryOperators == R.BreakBeforeTernaryOperators &&
5806 BreakBinaryOperations == R.BreakBinaryOperations &&
5807 BreakConstructorInitializers == R.BreakConstructorInitializers &&
5808 BreakFunctionDefinitionParameters ==
5809 R.BreakFunctionDefinitionParameters &&
5810 BreakInheritanceList == R.BreakInheritanceList &&
5811 BreakStringLiterals == R.BreakStringLiterals &&
5812 BreakTemplateDeclarations == R.BreakTemplateDeclarations &&
5813 ColumnLimit == R.ColumnLimit && CommentPragmas == R.CommentPragmas &&
5814 CompactNamespaces == R.CompactNamespaces &&
5815 ConstructorInitializerIndentWidth ==
5816 R.ConstructorInitializerIndentWidth &&
5817 ContinuationIndentWidth == R.ContinuationIndentWidth &&
5818 Cpp11BracedListStyle == R.Cpp11BracedListStyle &&
5819 DerivePointerAlignment == R.DerivePointerAlignment &&
5820 DisableFormat == R.DisableFormat &&
5821 EmptyLineAfterAccessModifier == R.EmptyLineAfterAccessModifier &&
5822 EmptyLineBeforeAccessModifier == R.EmptyLineBeforeAccessModifier &&
5823 EnumTrailingComma == R.EnumTrailingComma &&
5824 ExperimentalAutoDetectBinPacking ==
5825 R.ExperimentalAutoDetectBinPacking &&
5826 FixNamespaceComments == R.FixNamespaceComments &&
5827 ForEachMacros == R.ForEachMacros &&
5829 IncludeStyle.IncludeCategories == R.IncludeStyle.IncludeCategories &&
5831 R.IncludeStyle.IncludeIsMainRegex &&
5833 R.IncludeStyle.IncludeIsMainSourceRegex &&
5834 IncludeStyle.MainIncludeChar == R.IncludeStyle.MainIncludeChar &&
5835 IndentAccessModifiers == R.IndentAccessModifiers &&
5836 IndentCaseBlocks == R.IndentCaseBlocks &&
5837 IndentCaseLabels == R.IndentCaseLabels &&
5838 IndentExportBlock == R.IndentExportBlock &&
5839 IndentExternBlock == R.IndentExternBlock &&
5840 IndentGotoLabels == R.IndentGotoLabels &&
5841 IndentPPDirectives == R.IndentPPDirectives &&
5842 IndentRequiresClause == R.IndentRequiresClause &&
5843 IndentWidth == R.IndentWidth &&
5844 IndentWrappedFunctionNames == R.IndentWrappedFunctionNames &&
5845 InsertBraces == R.InsertBraces &&
5846 InsertNewlineAtEOF == R.InsertNewlineAtEOF &&
5857 R.MacrosSkippedByRemoveParentheses &&
5865 R.ObjCBreakBeforeNestedBlockParam &&
5868 R.ObjCSpaceAfterMethodDeclarationPrefix &&
5875 R.PenaltyBreakBeforeFirstCallParameter &&
5883 R.PenaltyBreakTemplateDeclaration &&
5893 R.RemoveEmptyLinesInUnwrappedLines &&
5911 R.SpaceBeforeCtorInitializerColon &&
5918 R.SpaceBeforeRangeBasedForLoopColon &&
5925 R.SpacesInLineCommentPrefix.Minimum &&
5927 R.SpacesInLineCommentPrefix.Maximum &&
5935 R.TableGenBreakingDAGArgOperators &&
5941 R.VerilogBreakBetweenInstancePorts &&
5956 typedef std::map<LanguageKind, FormatStyle>
MapType;
5971 std::shared_ptr<MapType> Styles;
5975 const FormatStyle &MainStyle,
5976 const std::vector<FormatStyle> &ConfigurationStyles);
5981 friend std::error_code
5983 bool AllowUnknownOptions,
5984 llvm::SourceMgr::DiagHandlerTy DiagHandler,
5985 void *DiagHandlerCtxt,
bool IsDotHFile);
6031 FormatStyle *Style);
6049 bool AllowUnknownOptions =
false,
6050 llvm::SourceMgr::DiagHandlerTy DiagHandler =
nullptr,
6051 void *DiagHandlerCtx =
nullptr,
bool IsDotHFile =
false);
6055 bool AllowUnknownOptions =
false,
6056 bool IsDotHFile =
false) {
6058 AllowUnknownOptions,
nullptr,
6059 nullptr, IsDotHFile);
6067tooling::Replacements
sortIncludes(
const FormatStyle &Style, StringRef Code,
6070 unsigned *Cursor =
nullptr);
6077 const FormatStyle &Style);
6094 const FormatStyle &Style);
6119tooling::Replacements
reformat(
const FormatStyle &Style, StringRef Code,
6127tooling::Replacements
reformat(
const FormatStyle &Style, StringRef Code,
6129 StringRef
FileName,
bool *IncompleteFormat);
6135tooling::Replacements
cleanup(
const FormatStyle &Style, StringRef Code,
6218 StringRef Code =
"", llvm::vfs::FileSystem *FS =
nullptr,
6219 bool AllowUnknownOptions =
false,
6220 llvm::SourceMgr::DiagHandlerTy DiagHandler =
nullptr);
6229 case FormatStyle::LK_C:
6231 case FormatStyle::LK_Cpp:
6233 case FormatStyle::LK_CSharp:
6235 case FormatStyle::LK_ObjC:
6236 return "Objective-C";
6237 case FormatStyle::LK_Java:
6239 case FormatStyle::LK_JavaScript:
6240 return "JavaScript";
6241 case FormatStyle::LK_Json:
6243 case FormatStyle::LK_Proto:
6245 case FormatStyle::LK_TableGen:
6247 case FormatStyle::LK_TextProto:
6249 case FormatStyle::LK_Verilog:
6263struct std::is_error_code_enum<
clang::format::ParseError> : std::true_type {};
Defines the clang::LangOptions interface.
Defines the clang::TokenKind enum and support functions.
bool operator!=(const CommonEntityInfo &LHS, const CommonEntityInfo &RHS)
const Regex Rule("(.+)/(.+)\\.framework/")
bool operator==(const ValueType &a, const ValueType &b)
The JSON file list parser is used to communicate input to InstallAPI.
unsigned TabWidth
The number of columns used for tab stops.
unsigned ObjCBlockIndentWidth
The number of characters to use for indentation of ObjC blocks.
bool ObjCBreakBeforeNestedBlockParam
Break parameters list into lines when there is nested block parameters in a function call.
bool SpaceAfterTemplateKeyword
If true, a space will be inserted after the template keyword.
WrapNamespaceBodyWithEmptyLinesStyle WrapNamespaceBodyWithEmptyLines
Wrap namespace body with empty lines.
ReferenceAlignmentStyle ReferenceAlignment
Reference alignment style (overrides PointerAlignment for references).
ReflowCommentsStyle
Types of comment reflow style.
@ RCS_IndentOnly
Only apply indentation rules, moving comments left or right, without changing formatting inside the c...
@ RCS_Always
Apply indentation rules and reflow long comments into new lines, trying to obey the ColumnLimit.
@ RCS_Never
Leave comments untouched.
int PPIndentWidth
The number of columns to use for indentation of preprocessor statements. When set to -1 (default) Ind...
SeparateDefinitionStyle
The style if definition blocks should be separated.
@ SDS_Never
Remove any empty line between definition blocks.
@ SDS_Always
Insert an empty line between definition blocks.
@ SDS_Leave
Leave definition blocks as they are.
SpacesInParensStyle SpacesInParens
If true, spaces will be inserted after ( and before ). This option is deprecated. The previous behavi...
bool isJavaScript() const
DAGArgStyle
Different ways to control the format inside TableGen DAGArg.
@ DAS_BreakAll
Break inside DAGArg after the operator and the all elements.
@ DAS_DontBreak
Never break inside DAGArg.
@ DAS_BreakElements
Break inside DAGArg after each list element but for the last. This aligns to the first element.
bool VerilogBreakBetweenInstancePorts
For Verilog, put each port on its own line in module instantiations.
std::vector< std::string > JavaImportGroups
A vector of prefixes ordered by the desired groups for Java imports.
unsigned PenaltyBreakTemplateDeclaration
The penalty for breaking after template declaration.
SortJavaStaticImportOptions SortJavaStaticImport
When sorting Java imports, by default static imports are placed before non-static imports....
RequiresClausePositionStyle
The possible positions for the requires clause. The IndentRequires option is only used if the require...
@ RCPS_WithPreceding
Try to put the clause together with the preceding part of a declaration. For class templates: stick t...
@ RCPS_SingleLine
Try to put everything in the same line if possible. Otherwise normal line breaking rules take over.
@ RCPS_OwnLineWithBrace
As with OwnLine, except, unless otherwise prohibited, place a following open brace (of a function def...
@ RCPS_OwnLine
Always put the requires clause on its own line (possibly followed by a semicolon).
@ RCPS_WithFollowing
Try to put the requires clause together with the class or function declaration.
std::vector< RawStringFormat > RawStringFormats
Defines hints for detecting supported languages code blocks in raw strings.
UseTabStyle
This option is deprecated. See LF and CRLF of LineEnding.
@ UT_ForContinuationAndIndentation
Fill all leading whitespace with tabs, and use spaces for alignment that appears within a line (e....
@ UT_ForIndentation
Use tabs only for indentation.
@ UT_Always
Use tabs whenever we need to fill whitespace that spans at least from one tab stop to the next one.
@ UT_AlignWithSpaces
Use tabs for line continuation and indentation, and spaces for alignment.
bool ObjCSpaceAfterMethodDeclarationPrefix
Add or remove a space between the '-'/'+' and the return type in Objective-C method declarations....
LanguageStandard Standard
Parse and format C++ constructs compatible with this standard.
PointerAlignmentStyle
The &, && and * alignment style.
@ PAS_Right
Align pointer to the right.
@ PAS_Middle
Align pointer in the middle.
@ PAS_Left
Align pointer to the left.
SpaceBeforeParensCustom SpaceBeforeParensOptions
Control of individual space before parentheses.
std::vector< std::string > Macros
A list of macros of the form <definition>=<expansion> .
RequiresExpressionIndentationKind RequiresExpressionIndentation
The indentation used for requires expression bodies.
SpaceInEmptyBracesStyle SpaceInEmptyBraces
Specifies when to insert a space in empty braces.
SpacesInLineComment SpacesInLineCommentPrefix
How many spaces are allowed at the start of a line comment. To disable the maximum set it to -1,...
bool SkipMacroDefinitionBody
Do not format macro definition body.
PointerAlignmentStyle PointerAlignment
Pointer and reference alignment style.
std::optional< FormatStyle > GetLanguageStyle(LanguageKind Language) const
PackConstructorInitializersStyle
Different ways to try to fit all constructor initializers on a line.
@ PCIS_CurrentLine
Put all constructor initializers on the current line if they fit. Otherwise, put each one on its own ...
@ PCIS_Never
Always put each constructor initializer on its own line.
@ PCIS_BinPack
Bin-pack constructor initializers.
@ PCIS_NextLine
Same as PCIS_CurrentLine except that if all constructor initializers do not fit on the current line,...
@ PCIS_NextLineOnly
Put all constructor initializers on the next line if they fit. Otherwise, put each one on its own lin...
bool SpaceBeforeRangeBasedForLoopColon
If false, spaces will be removed before range-based for loop colon.
unsigned PenaltyReturnTypeOnItsOwnLine
Penalty for putting the return type of a function onto its own line.
bool SpaceBeforeCaseColon
If false, spaces will be removed before case colon.
std::vector< std::string > StatementAttributeLikeMacros
Macros which are ignored in front of a statement, as if they were an attribute. So that they are not ...
SpacesInParensStyle
Different ways to put a space before opening and closing parentheses.
@ SIPO_Never
Never put a space in parentheses.
@ SIPO_Custom
Configure each individual space in parentheses in SpacesInParensOptions.
bool operator==(const CallGraphNode::CallRecord &LHS, const CallGraphNode::CallRecord &RHS)
JavaScriptQuoteStyle JavaScriptQuotes
The JavaScriptQuoteStyle to use for JavaScript strings.
NumericLiteralComponentStyle
Control over each component in a numeric literal.
@ NLCS_Leave
Leave this component of the literal as is.
@ NLCS_Upper
Format this component with uppercase characters.
@ NLCS_Lower
Format this component with lowercase characters.
RequiresExpressionIndentationKind
Indentation logic for requires expression bodies.
@ REI_Keyword
Align requires expression body relative to the requires keyword.
@ REI_OuterScope
Align requires expression body relative to the indentation level of the outer scope the requires expr...
SpaceBeforeParensStyle
Different ways to put a space before opening parentheses.
@ SBPO_ControlStatementsExceptControlMacros
Same as SBPO_ControlStatements except this option doesn't apply to ForEach and If macros....
@ SBPO_ControlStatements
Put a space before opening parentheses only after control statement keywords (for/if/while....
@ SBPO_Always
Always put a space before opening parentheses, except when it's prohibited by the syntax rules (in fu...
@ SBPO_Never
This is deprecated and replaced by Custom below, with all SpaceBeforeParensOptions but AfterPlacement...
@ SBPO_Custom
Configure each individual space before parentheses in SpaceBeforeParensOptions.
@ SBPO_NonEmptyParentheses
Put a space before opening parentheses only if the parentheses are not empty.
std::vector< std::string > WhitespaceSensitiveMacros
A vector of macros which are whitespace-sensitive and should not be touched.
bool SpaceAfterOperatorKeyword
If true, a space will be inserted after the operator keyword.
bool ObjCSpaceAfterProperty
Add a space after @property in Objective-C, i.e. use @property (readonly) instead of @property(readon...
ReflowCommentsStyle ReflowComments
Comment reformatting style.
std::vector< std::string > TypeNames
A vector of non-keyword identifiers that should be interpreted as type names.
LineEndingStyle
Line ending style.
@ LE_DeriveCRLF
Use \r\n unless the input has more lines ending in \n.
@ LE_DeriveLF
Use \n unless the input has more lines ending in \r\n.
SpacesInAnglesStyle
Styles for adding spacing after < and before > in template argument lists.
@ SIAS_Always
Add spaces after < and before >.
@ SIAS_Never
Remove spaces after < and before >.
@ SIAS_Leave
Keep a single space after < and before > if any spaces were present. Option Standard: Cpp03 takes pre...
IntegerLiteralSeparatorStyle IntegerLiteralSeparator
Format integer literal separators (' for C/C++ and _ for C#, Java, and JavaScript).
std::vector< std::string > TableGenBreakingDAGArgOperators
Works only when TableGenBreakInsideDAGArg is not DontBreak. The string list needs to consist of ident...
bool SpaceBeforeCpp11BracedList
If true, a space will be inserted before a C++11 braced list used to initialize an object (after the ...
unsigned PenaltyExcessCharacter
The penalty for each character outside of the column limit.
SortJavaStaticImportOptions
Position for Java Static imports.
@ SJSIO_After
Static imports are placed after non-static imports.
@ SJSIO_Before
Static imports are placed before non-static imports.
NamespaceIndentationKind NamespaceIndentation
The indentation used for namespaces.
bool SpaceBeforeSquareBrackets
If true, spaces will be before [. Lambdas will not be affected. Only the first [ will get a space add...
bool RemoveSemicolon
Remove semicolons after the closing braces of functions and constructors/destructors.
Language
The language for the input, used to select and validate the language standard and possible actions.
bool SpaceBeforeAssignmentOperators
If false, spaces will be removed before assignment operators.
unsigned PenaltyBreakComment
The penalty for each line break introduced inside a comment.
QualifierAlignmentStyle
Different specifiers and qualifiers alignment styles.
@ QAS_Custom
Change specifiers/qualifiers to be aligned based on QualifierOrder. With:
@ QAS_Leave
Don't change specifiers/qualifiers to either Left or Right alignment (default).
@ QAS_Left
Change specifiers/qualifiers to be left-aligned.
@ QAS_Right
Change specifiers/qualifiers to be right-aligned.
SpacesInParensCustom SpacesInParensOptions
Control of individual spaces in parentheses.
SpacesInAnglesStyle SpacesInAngles
The SpacesInAnglesStyle to use for template argument lists.
BinPackStyle ObjCBinPackProtocolList
Controls bin-packing Objective-C protocol conformance list items into as few lines as possible when t...
bool ObjCSpaceBeforeProtocolList
Add a space in front of an Objective-C protocol list, i.e. use Foo <Protocol> instead of Foo<Protocol...
bool SpacesInContainerLiterals
If true, spaces will be inserted around if/for/switch/while conditions. This option is deprecated....
std::string OneLineFormatOffRegex
A regular expression that describes markers for turning formatting off for one line....
RemoveParenthesesStyle RemoveParentheses
Remove redundant parentheses.
UseTabStyle UseTab
The way to use tab characters in the resulting file.
std::vector< std::string > ObjCPropertyAttributeOrder
The order in which ObjC property attributes should appear.
std::string MacroBlockBegin
A regular expression matching macros that start a block.
unsigned PenaltyBreakString
The penalty for each line break introduced inside a string literal.
unsigned PenaltyBreakOpenParenthesis
The penalty for breaking after (.
WrapNamespaceBodyWithEmptyLinesStyle
Different styles for wrapping namespace body with empty lines.
@ WNBWELS_Never
Remove all empty lines at the beginning and the end of namespace body.
@ WNBWELS_Always
Always have at least one empty line at the beginning and the end of namespace body except that the nu...
@ WNBWELS_Leave
Keep existing newlines at the beginning and the end of namespace body. MaxEmptyLinesToKeep still appl...
unsigned PenaltyBreakBeforeFirstCallParameter
The penalty for breaking a function call after call(.
LambdaBodyIndentationKind
Indentation logic for lambda bodies.
@ LBI_Signature
Align lambda body relative to the lambda signature. This is the default.
@ LBI_OuterScope
For statements within block scope, align lambda body relative to the indentation level of the outer s...
unsigned PenaltyBreakFirstLessLess
The penalty for breaking before the first <<.
std::vector< std::string > MacrosSkippedByRemoveParentheses
A vector of function-like macros whose invocations should be skipped by RemoveParentheses.
RequiresClausePositionStyle RequiresClausePosition
The position of the requires clause.
bool SpaceBeforeJsonColon
If true, a space will be added before a JSON colon. For other languages, e.g. JavaScript,...
bool JavaScriptWrapImports
Whether to wrap JavaScript import/export statements.
bool SpaceBeforeInheritanceColon
If false, spaces will be removed before inheritance colon.
SpaceInEmptyBracesStyle
This option is deprecated. See Block of SpaceInEmptyBraces.
@ SIEB_Block
Only insert a space in empty blocks.
@ SIEB_Always
Always insert a space in empty braces.
@ SIEB_Never
Never insert a space in empty braces.
std::vector< std::string > TypenameMacros
A vector of macros that should be interpreted as type declarations instead of as function calls.
LanguageStandard
Supported language standards for parsing and formatting C++ constructs.
@ LS_Cpp03
Parse and format as C++03. Cpp03 is a deprecated alias for c++03
@ LS_Cpp14
Parse and format as C++14.
@ LS_Cpp17
Parse and format as C++17.
@ LS_Cpp11
Parse and format as C++11.
@ LS_Auto
Automatic detection based on the input.
@ LS_Latest
Parse and format using the latest supported language version. Cpp11 is a deprecated alias for Latest
@ LS_Cpp20
Parse and format as C++20.
KeepEmptyLinesStyle KeepEmptyLines
Which empty lines are kept. See MaxEmptyLinesToKeep for how many consecutive empty lines are kept.
SortUsingDeclarationsOptions
Using declaration sorting options.
@ SUD_LexicographicNumeric
Using declarations are sorted in the order defined as follows: Split the strings by :: and discard an...
@ SUD_Never
Using declarations are never sorted.
@ SUD_Lexicographic
Using declarations are sorted in the order defined as follows: Split the strings by :: and discard an...
unsigned PenaltyBreakScopeResolution
The penalty for breaking after ::.
DAGArgStyle TableGenBreakInsideDAGArg
The styles of the line break inside the DAGArg in TableGen.
LambdaBodyIndentationKind LambdaBodyIndentation
The indentation style of lambda bodies. Signature (the default) causes the lambda body to be indented...
NamespaceIndentationKind
Different ways to indent namespace contents.
@ NI_None
Don't indent in namespaces.
@ NI_All
Indent in all namespaces.
@ NI_Inner
Indent only in inner namespaces (nested in other namespaces).
SeparateDefinitionStyle SeparateDefinitionBlocks
Specifies the use of empty lines to separate definition blocks, including classes,...
bool SpaceAfterCStyleCast
If true, a space is inserted after C style casts.
SpaceAroundPointerQualifiersStyle SpaceAroundPointerQualifiers
Defines in which cases to put a space before or after pointer qualifiers.
SpaceAroundPointerQualifiersStyle
Different ways to put a space before opening parentheses.
@ SAPQ_Both
Ensure that there is a space both before and after pointer qualifiers.
@ SAPQ_Default
Don't ensure spaces around pointer qualifiers and use PointerAlignment instead.
@ SAPQ_Before
Ensure that there is a space before pointer qualifiers.
@ SAPQ_After
Ensure that there is a space after pointer qualifiers.
std::vector< std::string > TemplateNames
A vector of non-keyword identifiers that should be interpreted as template names.
bool SpacesInSquareBrackets
If true, spaces will be inserted after [ and before ]. Lambdas without arguments or unspecified size ...
std::vector< std::string > StatementMacros
A vector of macros that should be interpreted as complete statements.
RemoveParenthesesStyle
Types of redundant parentheses to remove.
@ RPS_ReturnStatement
Also remove parentheses enclosing the expression in a return/co_return statement.
@ RPS_MultipleParentheses
Replace multiple parentheses with single parentheses.
@ RPS_Leave
Do not remove parentheses.
std::vector< std::string > NamespaceMacros
A vector of macros which are used to open namespace blocks.
unsigned PenaltyBreakBeforeMemberAccess
The penalty for breaking before a member access operator (., ->).
LineEndingStyle LineEnding
Line ending style (\n or \r\n) to use.
unsigned SpacesBeforeTrailingComments
If true, spaces may be inserted into (). This option is deprecated. See InEmptyParentheses of SpacesI...
bool RemoveEmptyLinesInUnwrappedLines
Remove empty lines within unwrapped lines.
unsigned MaxEmptyLinesToKeep
The maximum number of consecutive empty lines to keep.
PackConstructorInitializersStyle PackConstructorInitializers
The pack constructor initializers style to use.
SortIncludesOptions SortIncludes
Controls if and how clang-format will sort #includes.
bool SpaceAfterLogicalNot
If true, a space is inserted after the logical not operator (!).
bool KeepFormFeed
This option is deprecated. See AtEndOfFile of KeepEmptyLines.
std::string MacroBlockEnd
A regular expression matching macros that end a block.
unsigned ShortNamespaceLines
The maximal number of unwrapped lines that a short namespace spans. Defaults to 1.
std::vector< std::string > QualifierOrder
The order in which the qualifiers appear. The order is an array that can contain any of the following...
bool RemoveBracesLLVM
Remove optional braces of control statements (if, else, for, and while) in C++ according to the LLVM ...
ReferenceAlignmentStyle
The & and && alignment style.
@ RAS_Middle
Align reference in the middle.
@ RAS_Right
Align reference to the right.
@ RAS_Pointer
Align reference like PointerAlignment.
@ RAS_Left
Align reference to the left.
bool SpaceBeforeCtorInitializerColon
If false, spaces will be removed before constructor initializer colon.
unsigned PenaltyBreakAssignment
The penalty for breaking around an assignment operator.
QualifierAlignmentStyle QualifierAlignment
Different ways to arrange specifiers and qualifiers (e.g. const/volatile).
LanguageKind
Supported languages.
@ LK_Java
Should be used for Java.
@ LK_Cpp
Should be used for C++.
@ LK_TableGen
Should be used for TableGen code.
@ LK_ObjC
Should be used for Objective-C, Objective-C++.
@ LK_CSharp
Should be used for C#.
@ LK_TextProto
Should be used for Protocol Buffer messages in text format (https://developers.google....
@ LK_Json
Should be used for JSON.
@ LK_JavaScript
Should be used for JavaScript.
@ LK_Verilog
Should be used for Verilog and SystemVerilog. https://standards.ieee.org/ieee/1800/6700/ https://sci-...
@ LK_C
Should be used for C.
@ LK_Proto
Should be used for Protocol Buffers (https://developers.google.com/protocol-buffers/).
@ Other
Other implicit parameter.
std::vector< std::string > VariableTemplates
A vector of non-keyword identifiers that should be interpreted as variable template names.
SortUsingDeclarationsOptions SortUsingDeclarations
Controls if and how clang-format will sort using declarations.
unsigned PenaltyIndentedWhitespace
Penalty for each character of whitespace indentation (counted relative to leading non-whitespace colu...
static FormatStyleSet BuildStyleSetFromConfiguration(const FormatStyle &MainStyle, const std::vector< FormatStyle > &ConfigurationStyles)
NumericLiteralCaseStyle NumericLiteralCase
Capitalization style for numeric literals.
JavaScriptQuoteStyle
Quotation styles for JavaScript strings. Does not affect template strings.
@ JSQS_Double
Always use double quotes.
@ JSQS_Leave
Leave string quotes as they are.
@ JSQS_Single
Always use single quotes.
SpaceBeforeParensStyle SpaceBeforeParens
Defines in which cases to put a space before opening parentheses.
Diagnostic wrappers for TextAPI types for error reporting.
Style for sorting and grouping C++ include directives.
IncludeBlocksStyle IncludeBlocks
Dependent on the value, multiple #include blocks can be sorted as one and divided based on category.
Options regarding which empty lines are kept.
bool AtStartOfBlock
Keep empty lines at start of a block.
bool AtStartOfFile
Keep empty lines at start of file.
bool AtEndOfFile
Keep empty lines at end of file.
bool operator==(const KeepEmptyLinesStyle &R) const
Separate control for each numeric literal component.
bool operator==(const NumericLiteralCaseStyle &R) const
bool operator!=(const NumericLiteralCaseStyle &R) const
NumericLiteralComponentStyle ExponentLetter
Format floating point exponent separator letter case.
NumericLiteralComponentStyle Suffix
Format suffix case. This option excludes case-sensitive reserved suffixes, such as min in C++.
NumericLiteralComponentStyle Prefix
Format integer prefix case.
NumericLiteralComponentStyle HexDigit
Format hexadecimal digit case.
Includes sorting options.
bool operator!=(const SortIncludesOptions &R) const
bool IgnoreCase
Whether or not includes are sorted in a case-insensitive fashion. (CaseSensitive and CaseInsensitive ...
bool IgnoreExtension
When sorting includes in each block, only take file extensions into account if two includes compare e...
bool operator==(const SortIncludesOptions &R) const
bool Enabled
If true, includes are sorted based on the other suboptions below. (Never is deprecated by Enabled: fa...
Precise control over the spacing before parentheses.
bool AfterFunctionDefinitionName
If true, put a space between function definition name and opening parentheses.
bool AfterIfMacros
If true, put space between if macros and opening parentheses.
bool AfterForeachMacros
If true, put space between foreach macros and opening parentheses.
bool AfterFunctionDeclarationName
If true, put a space between function declaration name and opening parentheses.
bool operator==(const SpaceBeforeParensCustom &Other) const
bool AfterControlStatements
If true, put space between control statement keywords (for/if/while...) and opening parentheses.
bool BeforeNonEmptyParentheses
If true, put a space before opening parentheses only if the parentheses are not empty.
bool AfterPlacementOperator
If true, put a space between operator new/delete and opening parenthesis.
bool AfterRequiresInExpression
If true, put space between requires keyword in a requires expression and opening parentheses.
bool AfterNot
If true, put a space between alternative operator not and the opening parenthesis.
bool AfterRequiresInClause
If true, put space between requires keyword in a requires clause and opening parentheses,...
SpaceBeforeParensCustom()
bool AfterOverloadedOperator
If true, put a space between operator overloading and opening parentheses.
Precise control over the spacing in parentheses.
bool Other
Put a space in parentheses not covered by preceding options.
bool InCStyleCasts
Put a space in C style casts.
bool operator!=(const SpacesInParensCustom &R) const
bool InConditionalStatements
Put a space in parentheses only inside conditional statements (for/if/while/switch....
bool InEmptyParentheses
Insert a space in empty parentheses, i.e. ().
bool ExceptDoubleParentheses
Override any of the following options to prevent addition of space when both opening and closing pare...
SpacesInParensCustom(bool ExceptDoubleParentheses, bool InConditionalStatements, bool InCStyleCasts, bool InEmptyParentheses, bool Other)
bool operator==(const SpacesInParensCustom &R) const