14#ifndef LLVM_CLANG_FORMAT_FORMAT_H
15#define LLVM_CLANG_FORMAT_FORMAT_H
20#include "llvm/ADT/ArrayRef.h"
21#include "llvm/Support/Regex.h"
22#include "llvm/Support/SourceMgr.h"
24#include <system_error>
47 const char *
name()
const noexcept override;
48 std::string
message(
int EV)
const override;
59 bool InheritsParentConfig;
63 int AccessModifierOffset;
86 bool AlignAfterOpenBracket;
89 enum ArrayInitializerAlignmentStyle : int8_t {
122 ArrayInitializerAlignmentStyle AlignArrayOfStructures;
144 struct AlignConsecutiveStyle {
182 bool AcrossEmptyLines;
221 bool AlignFunctionDeclarations;
237 bool AlignFunctionPointers;
257 bool operator==(
const AlignConsecutiveStyle &R)
const {
258 return Enabled == R.Enabled && AcrossEmptyLines == R.AcrossEmptyLines &&
259 AcrossComments == R.AcrossComments &&
260 AlignCompound == R.AlignCompound &&
261 AlignFunctionDeclarations == R.AlignFunctionDeclarations &&
262 AlignFunctionPointers == R.AlignFunctionPointers &&
263 PadOperators == R.PadOperators;
265 bool operator!=(
const AlignConsecutiveStyle &R)
const {
266 return !(*
this == R);
281 AlignConsecutiveStyle AlignConsecutiveMacros;
291 AlignConsecutiveStyle AlignConsecutiveAssignments;
302 AlignConsecutiveStyle AlignConsecutiveBitFields;
313 AlignConsecutiveStyle AlignConsecutiveDeclarations;
317 struct ShortCaseStatementsAlignmentStyle {
353 bool AcrossEmptyLines;
389 bool AlignCaseArrows;
407 bool AlignCaseColons;
408 bool operator==(
const ShortCaseStatementsAlignmentStyle &R)
const {
409 return Enabled == R.Enabled && AcrossEmptyLines == R.AcrossEmptyLines &&
410 AcrossComments == R.AcrossComments &&
411 AlignCaseArrows == R.AlignCaseArrows &&
412 AlignCaseColons == R.AlignCaseColons;
429 ShortCaseStatementsAlignmentStyle AlignConsecutiveShortCaseStatements;
444 AlignConsecutiveStyle AlignConsecutiveTableGenBreakingDAGArgColons;
454 AlignConsecutiveStyle AlignConsecutiveTableGenCondOperatorColons;
464 AlignConsecutiveStyle AlignConsecutiveTableGenDefinitionColons;
467 enum EscapedNewlineAlignmentStyle : int8_t {
492 ENAS_LeftWithLastLine,
505 EscapedNewlineAlignmentStyle AlignEscapedNewlines;
508 enum OperandAlignmentStyle : int8_t {
538 OAS_AlignAfterOperator,
544 OperandAlignmentStyle AlignOperands;
547 enum TrailingCommentsAlignmentKinds : int8_t {
578 struct TrailingCommentsAlignmentStyle {
580 TrailingCommentsAlignmentKinds
Kind;
603 unsigned OverEmptyLines;
612 bool AlignPPAndNotPP;
614 bool operator==(
const TrailingCommentsAlignmentStyle &R)
const {
615 return Kind == R.Kind && OverEmptyLines == R.OverEmptyLines &&
616 AlignPPAndNotPP == R.AlignPPAndNotPP;
618 bool operator!=(
const TrailingCommentsAlignmentStyle &R)
const {
619 return !(*
this == R);
641 TrailingCommentsAlignmentStyle AlignTrailingComments;
658 bool AllowAllArgumentsOnNextLine;
681 bool AllowAllParametersOfDeclarationOnNextLine;
684 enum BreakBeforeNoexceptSpecifierStyle : int8_t {
722 BreakBeforeNoexceptSpecifierStyle AllowBreakBeforeNoexceptSpecifier;
728 bool AllowBreakBeforeQtProperty;
732 enum ShortBlockStyle : int8_t {
761 ShortBlockStyle AllowShortBlocksOnASingleLine;
774 bool AllowShortCaseExpressionOnASingleLine;
788 bool AllowShortCaseLabelsOnASingleLine;
807 bool AllowShortCompoundRequirementOnASingleLine;
821 bool AllowShortEnumsOnASingleLine;
825 enum ShortFunctionStyle : int8_t {
874 ShortFunctionStyle AllowShortFunctionsOnASingleLine;
877 enum ShortIfStyle : int8_t {
945 ShortIfStyle AllowShortIfStatementsOnASingleLine;
949 enum ShortLambdaStyle : int8_t {
979 ShortLambdaStyle AllowShortLambdasOnASingleLine;
984 bool AllowShortLoopsOnASingleLine;
988 bool AllowShortNamespacesOnASingleLine;
992 enum DefinitionReturnTypeBreakingStyle : int8_t {
1004 enum ReturnTypeBreakingStyle : int8_t {
1029 RTBS_ExceptShortType,
1079 RTBS_AllDefinitions,
1093 RTBS_TopLevelDefinitions,
1099 DefinitionReturnTypeBreakingStyle AlwaysBreakAfterDefinitionReturnType;
1119 bool AlwaysBreakBeforeMultilineStrings;
1122 enum BreakTemplateDeclarationsStyle : int8_t {
1189 std::vector<std::string> AttributeMacros;
1208 bool BinPackArguments;
1224 bool BinPackLongBracedList;
1227 enum BinPackParametersStyle : int8_t {
1250 BPPS_AlwaysOnePerLine,
1255 BinPackParametersStyle BinPackParameters;
1258 enum BitFieldColonSpacingStyle : int8_t {
1284 BitFieldColonSpacingStyle BitFieldColonSpacing;
1317 int BracedInitializerIndentWidth;
1320 enum BraceWrappingAfterControlStatementStyle : int8_t {
1360 struct BraceWrappingFlags {
1376 bool AfterCaseLabel;
1389 BraceWrappingAfterControlStatementStyle AfterControlStatement;
1433 bool AfterNamespace;
1439 bool AfterObjCDeclaration;
1481 bool AfterExternBlock;
1528 bool BeforeLambdaBody;
1558 bool SplitEmptyFunction;
1570 bool SplitEmptyRecord;
1582 bool SplitEmptyNamespace;
1598 BraceWrappingFlags BraceWrapping;
1611 bool BreakAdjacentStringLiterals;
1614 enum AttributeBreakingStyle : int8_t {
1698 AttributeBreakingStyle BreakAfterAttributes;
1709 bool BreakAfterOpenBracketBracedList;
1719 bool BreakAfterOpenBracketFunction;
1729 bool BreakAfterOpenBracketIf;
1739 bool BreakAfterOpenBracketLoop;
1749 bool BreakAfterOpenBracketSwitch;
1753 ReturnTypeBreakingStyle BreakAfterReturnType;
1776 enum BinPackStyle : int8_t {
1786 enum BinaryOperatorStyle : int8_t {
1827 BinaryOperatorStyle BreakBeforeBinaryOperators;
1830 enum BraceBreakingStyle : int8_t {
2262 BraceBreakingStyle BreakBeforeBraces;
2275 bool BreakBeforeCloseBracketBracedList;
2286 bool BreakBeforeCloseBracketFunction;
2299 bool BreakBeforeCloseBracketIf;
2312 bool BreakBeforeCloseBracketLoop;
2325 bool BreakBeforeCloseBracketSwitch;
2328 enum BreakBeforeConceptDeclarationsStyle : int8_t {
2349 BreakBeforeConceptDeclarationsStyle BreakBeforeConceptDeclarations;
2352 enum BreakBeforeInlineASMColonStyle : int8_t {
2366 BBIAS_OnlyMultiline,
2378 BreakBeforeInlineASMColonStyle BreakBeforeInlineASMColon;
2405 bool BreakBeforeTemplateCloser;
2420 bool BreakBeforeTernaryOperators;
2423 enum BreakBinaryOperationsStyle : int8_t {
2450 BBO_RespectPrecedence
2455 BreakBinaryOperationsStyle BreakBinaryOperations;
2458 enum BreakConstructorInitializersStyle : int8_t {
2485 BreakConstructorInitializersStyle BreakConstructorInitializers;
2499 bool BreakFunctionDefinitionParameters;
2509 bool BreakAfterJavaFieldAnnotations;
2552 bool BreakStringLiterals;
2560 unsigned ColumnLimit;
2570 std::string CommentPragmas;
2573 enum BreakInheritanceListStyle : int8_t {
2610 BreakInheritanceListStyle BreakInheritanceList;
2614 BreakTemplateDeclarationsStyle BreakTemplateDeclarations;
2638 bool CompactNamespaces;
2648 unsigned ConstructorInitializerIndentWidth;
2659 unsigned ContinuationIndentWidth;
2662 enum BracedListStyle : int8_t {
2716 BLS_AlignFirstComment,
2721 BracedListStyle Cpp11BracedListStyle;
2734 bool DerivePointerAlignment;
2743 enum EmptyLineAfterAccessModifierStyle : int8_t {
2789 EmptyLineAfterAccessModifierStyle EmptyLineAfterAccessModifier;
2792 enum EmptyLineBeforeAccessModifierStyle : int8_t {
2827 ELBAMS_LogicalBlock,
2852 EmptyLineBeforeAccessModifierStyle EmptyLineBeforeAccessModifier;
2855 enum EnumTrailingCommaStyle : int8_t {
2885 EnumTrailingCommaStyle EnumTrailingComma;
2900 bool ExperimentalAutoDetectBinPacking;
2916 bool FixNamespaceComments;
2934 std::vector<std::string> ForEachMacros;
2936 tooling::IncludeStyle IncludeStyle;
2957 std::vector<std::string> IfMacros;
2984 bool IndentAccessModifiers;
3007 bool IndentCaseBlocks;
3026 bool IndentCaseLabels;
3039 bool IndentExportBlock;
3042 enum IndentExternBlockStyle : int8_t {
3060 IEBS_AfterExternBlock,
3079 IndentExternBlockStyle IndentExternBlock;
3096 bool IndentGotoLabels;
3099 enum PPDirectiveIndentStyle : int8_t {
3143 PPDirectiveIndentStyle IndentPPDirectives;
3166 bool IndentRequiresClause;
3180 unsigned IndentWidth;
3194 bool IndentWrappedFunctionNames;
3230 bool InsertNewlineAtEOF;
3233 enum TrailingCommaStyle : int8_t {
3260 TrailingCommaStyle InsertTrailingCommas;
3281 struct IntegerLiteralSeparatorStyle {
3297 int8_t BinaryMinDigits;
3312 int8_t DecimalMinDigits;
3328 int8_t HexMinDigits;
3329 bool operator==(
const IntegerLiteralSeparatorStyle &R)
const {
3330 return Binary == R.Binary && BinaryMinDigits == R.BinaryMinDigits &&
3331 Decimal == R.Decimal && DecimalMinDigits == R.DecimalMinDigits &&
3332 Hex == R.Hex && HexMinDigits == R.HexMinDigits;
3779 return !(*
this == R);
4628 return !(*
this == R);
4996 Other.AfterFunctionDeclarationName &&
5299 return !(*
this == R);
5585 return AccessModifierOffset == R.AccessModifierOffset &&
5586 AlignAfterOpenBracket == R.AlignAfterOpenBracket &&
5587 AlignArrayOfStructures == R.AlignArrayOfStructures &&
5588 AlignConsecutiveAssignments == R.AlignConsecutiveAssignments &&
5589 AlignConsecutiveBitFields == R.AlignConsecutiveBitFields &&
5590 AlignConsecutiveDeclarations == R.AlignConsecutiveDeclarations &&
5591 AlignConsecutiveMacros == R.AlignConsecutiveMacros &&
5592 AlignConsecutiveShortCaseStatements ==
5593 R.AlignConsecutiveShortCaseStatements &&
5594 AlignConsecutiveTableGenBreakingDAGArgColons ==
5595 R.AlignConsecutiveTableGenBreakingDAGArgColons &&
5596 AlignConsecutiveTableGenCondOperatorColons ==
5597 R.AlignConsecutiveTableGenCondOperatorColons &&
5598 AlignConsecutiveTableGenDefinitionColons ==
5599 R.AlignConsecutiveTableGenDefinitionColons &&
5600 AlignEscapedNewlines == R.AlignEscapedNewlines &&
5601 AlignOperands == R.AlignOperands &&
5602 AlignTrailingComments == R.AlignTrailingComments &&
5603 AllowAllArgumentsOnNextLine == R.AllowAllArgumentsOnNextLine &&
5604 AllowAllParametersOfDeclarationOnNextLine ==
5605 R.AllowAllParametersOfDeclarationOnNextLine &&
5606 AllowBreakBeforeNoexceptSpecifier ==
5607 R.AllowBreakBeforeNoexceptSpecifier &&
5608 AllowBreakBeforeQtProperty == R.AllowBreakBeforeQtProperty &&
5609 AllowShortBlocksOnASingleLine == R.AllowShortBlocksOnASingleLine &&
5610 AllowShortCaseExpressionOnASingleLine ==
5611 R.AllowShortCaseExpressionOnASingleLine &&
5612 AllowShortCaseLabelsOnASingleLine ==
5613 R.AllowShortCaseLabelsOnASingleLine &&
5614 AllowShortCompoundRequirementOnASingleLine ==
5615 R.AllowShortCompoundRequirementOnASingleLine &&
5616 AllowShortEnumsOnASingleLine == R.AllowShortEnumsOnASingleLine &&
5617 AllowShortFunctionsOnASingleLine ==
5618 R.AllowShortFunctionsOnASingleLine &&
5619 AllowShortIfStatementsOnASingleLine ==
5620 R.AllowShortIfStatementsOnASingleLine &&
5621 AllowShortLambdasOnASingleLine == R.AllowShortLambdasOnASingleLine &&
5622 AllowShortLoopsOnASingleLine == R.AllowShortLoopsOnASingleLine &&
5623 AllowShortNamespacesOnASingleLine ==
5624 R.AllowShortNamespacesOnASingleLine &&
5625 AlwaysBreakBeforeMultilineStrings ==
5626 R.AlwaysBreakBeforeMultilineStrings &&
5627 AttributeMacros == R.AttributeMacros &&
5628 BinPackArguments == R.BinPackArguments &&
5629 BinPackLongBracedList == R.BinPackLongBracedList &&
5630 BinPackParameters == R.BinPackParameters &&
5631 BitFieldColonSpacing == R.BitFieldColonSpacing &&
5632 BracedInitializerIndentWidth == R.BracedInitializerIndentWidth &&
5633 BreakAdjacentStringLiterals == R.BreakAdjacentStringLiterals &&
5634 BreakAfterAttributes == R.BreakAfterAttributes &&
5635 BreakAfterJavaFieldAnnotations == R.BreakAfterJavaFieldAnnotations &&
5636 BreakAfterOpenBracketBracedList ==
5637 R.BreakAfterOpenBracketBracedList &&
5638 BreakAfterOpenBracketFunction == R.BreakAfterOpenBracketFunction &&
5639 BreakAfterOpenBracketIf == R.BreakAfterOpenBracketIf &&
5640 BreakAfterOpenBracketLoop == R.BreakAfterOpenBracketLoop &&
5641 BreakAfterOpenBracketSwitch == R.BreakAfterOpenBracketSwitch &&
5642 BreakAfterReturnType == R.BreakAfterReturnType &&
5643 BreakArrays == R.BreakArrays &&
5644 BreakBeforeBinaryOperators == R.BreakBeforeBinaryOperators &&
5645 BreakBeforeBraces == R.BreakBeforeBraces &&
5646 BreakBeforeCloseBracketBracedList ==
5647 R.BreakBeforeCloseBracketBracedList &&
5648 BreakBeforeCloseBracketFunction ==
5649 R.BreakBeforeCloseBracketFunction &&
5650 BreakBeforeCloseBracketIf == R.BreakBeforeCloseBracketIf &&
5651 BreakBeforeCloseBracketLoop == R.BreakBeforeCloseBracketLoop &&
5652 BreakBeforeCloseBracketSwitch == R.BreakBeforeCloseBracketSwitch &&
5653 BreakBeforeConceptDeclarations == R.BreakBeforeConceptDeclarations &&
5654 BreakBeforeInlineASMColon == R.BreakBeforeInlineASMColon &&
5655 BreakBeforeTemplateCloser == R.BreakBeforeTemplateCloser &&
5656 BreakBeforeTernaryOperators == R.BreakBeforeTernaryOperators &&
5657 BreakBinaryOperations == R.BreakBinaryOperations &&
5658 BreakConstructorInitializers == R.BreakConstructorInitializers &&
5659 BreakFunctionDefinitionParameters ==
5660 R.BreakFunctionDefinitionParameters &&
5661 BreakInheritanceList == R.BreakInheritanceList &&
5662 BreakStringLiterals == R.BreakStringLiterals &&
5663 BreakTemplateDeclarations == R.BreakTemplateDeclarations &&
5664 ColumnLimit == R.ColumnLimit && CommentPragmas == R.CommentPragmas &&
5665 CompactNamespaces == R.CompactNamespaces &&
5666 ConstructorInitializerIndentWidth ==
5667 R.ConstructorInitializerIndentWidth &&
5668 ContinuationIndentWidth == R.ContinuationIndentWidth &&
5669 Cpp11BracedListStyle == R.Cpp11BracedListStyle &&
5670 DerivePointerAlignment == R.DerivePointerAlignment &&
5671 DisableFormat == R.DisableFormat &&
5672 EmptyLineAfterAccessModifier == R.EmptyLineAfterAccessModifier &&
5673 EmptyLineBeforeAccessModifier == R.EmptyLineBeforeAccessModifier &&
5674 EnumTrailingComma == R.EnumTrailingComma &&
5675 ExperimentalAutoDetectBinPacking ==
5676 R.ExperimentalAutoDetectBinPacking &&
5677 FixNamespaceComments == R.FixNamespaceComments &&
5678 ForEachMacros == R.ForEachMacros &&
5680 IncludeStyle.IncludeCategories == R.IncludeStyle.IncludeCategories &&
5682 R.IncludeStyle.IncludeIsMainRegex &&
5684 R.IncludeStyle.IncludeIsMainSourceRegex &&
5685 IncludeStyle.MainIncludeChar == R.IncludeStyle.MainIncludeChar &&
5686 IndentAccessModifiers == R.IndentAccessModifiers &&
5687 IndentCaseBlocks == R.IndentCaseBlocks &&
5688 IndentCaseLabels == R.IndentCaseLabels &&
5689 IndentExportBlock == R.IndentExportBlock &&
5690 IndentExternBlock == R.IndentExternBlock &&
5691 IndentGotoLabels == R.IndentGotoLabels &&
5692 IndentPPDirectives == R.IndentPPDirectives &&
5693 IndentRequiresClause == R.IndentRequiresClause &&
5694 IndentWidth == R.IndentWidth &&
5695 IndentWrappedFunctionNames == R.IndentWrappedFunctionNames &&
5696 InsertBraces == R.InsertBraces &&
5697 InsertNewlineAtEOF == R.InsertNewlineAtEOF &&
5708 R.MacrosSkippedByRemoveParentheses &&
5716 R.ObjCBreakBeforeNestedBlockParam &&
5724 R.PenaltyBreakBeforeFirstCallParameter &&
5732 R.PenaltyBreakTemplateDeclaration &&
5742 R.RemoveEmptyLinesInUnwrappedLines &&
5760 R.SpaceBeforeCtorInitializerColon &&
5767 R.SpaceBeforeRangeBasedForLoopColon &&
5774 R.SpacesInLineCommentPrefix.Minimum &&
5776 R.SpacesInLineCommentPrefix.Maximum &&
5784 R.TableGenBreakingDAGArgOperators &&
5790 R.VerilogBreakBetweenInstancePorts &&
5805 typedef std::map<LanguageKind, FormatStyle>
MapType;
5820 std::shared_ptr<MapType> Styles;
5824 const FormatStyle &MainStyle,
5825 const std::vector<FormatStyle> &ConfigurationStyles);
5830 friend std::error_code
5832 bool AllowUnknownOptions,
5833 llvm::SourceMgr::DiagHandlerTy DiagHandler,
5834 void *DiagHandlerCtxt,
bool IsDotHFile);
5880 FormatStyle *Style);
5898 bool AllowUnknownOptions =
false,
5899 llvm::SourceMgr::DiagHandlerTy DiagHandler =
nullptr,
5900 void *DiagHandlerCtx =
nullptr,
bool IsDotHFile =
false);
5904 bool AllowUnknownOptions =
false,
5905 bool IsDotHFile =
false) {
5907 AllowUnknownOptions,
nullptr,
5908 nullptr, IsDotHFile);
5916tooling::Replacements
sortIncludes(
const FormatStyle &Style, StringRef Code,
5919 unsigned *Cursor =
nullptr);
5926 const FormatStyle &Style);
5943 const FormatStyle &Style);
5968tooling::Replacements
reformat(
const FormatStyle &Style, StringRef Code,
5976tooling::Replacements
reformat(
const FormatStyle &Style, StringRef Code,
5978 StringRef
FileName,
bool *IncompleteFormat);
5984tooling::Replacements
cleanup(
const FormatStyle &Style, StringRef Code,
6067 StringRef Code =
"", llvm::vfs::FileSystem *FS =
nullptr,
6068 bool AllowUnknownOptions =
false,
6069 llvm::SourceMgr::DiagHandlerTy DiagHandler =
nullptr);
6078 case FormatStyle::LK_C:
6080 case FormatStyle::LK_Cpp:
6082 case FormatStyle::LK_CSharp:
6084 case FormatStyle::LK_ObjC:
6085 return "Objective-C";
6086 case FormatStyle::LK_Java:
6088 case FormatStyle::LK_JavaScript:
6089 return "JavaScript";
6090 case FormatStyle::LK_Json:
6092 case FormatStyle::LK_Proto:
6094 case FormatStyle::LK_TableGen:
6096 case FormatStyle::LK_TextProto:
6098 case FormatStyle::LK_Verilog:
6112struct std::is_error_code_enum<
clang::format::ParseError> : std::true_type {};
Defines the clang::LangOptions interface.
bool operator!=(const CommonEntityInfo &LHS, const CommonEntityInfo &RHS)
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.
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++ 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