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 std::string InheritConfig;
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;
893 struct ShortFunctionStyle {
926 bool operator==(
const ShortFunctionStyle &R)
const {
927 return Empty ==
R.Empty && Inline ==
R.Inline &&
Other ==
R.Other;
929 bool operator!=(
const ShortFunctionStyle &R)
const {
return !(*
this ==
R); }
931 ShortFunctionStyle(
bool Empty,
bool Inline,
bool Other)
933 bool isAll()
const {
return Empty && Inline &&
Other; }
934 static ShortFunctionStyle setEmptyOnly() {
935 return ShortFunctionStyle(
true,
false,
false);
937 static ShortFunctionStyle setEmptyAndInline() {
938 return ShortFunctionStyle(
true,
true,
false);
940 static ShortFunctionStyle setInlineOnly() {
941 return ShortFunctionStyle(
false,
true,
false);
943 static ShortFunctionStyle setAll() {
944 return ShortFunctionStyle(
true,
true,
true);
951 ShortFunctionStyle AllowShortFunctionsOnASingleLine;
954 enum ShortIfStyle : int8_t {
1022 ShortIfStyle AllowShortIfStatementsOnASingleLine;
1026 enum ShortLambdaStyle : int8_t {
1056 ShortLambdaStyle AllowShortLambdasOnASingleLine;
1061 bool AllowShortLoopsOnASingleLine;
1065 bool AllowShortNamespacesOnASingleLine;
1069 enum ShortRecordStyle : int8_t {
1074 SRS_EmptyAndAttached,
1095 ShortRecordStyle AllowShortRecordOnASingleLine;
1099 enum DefinitionReturnTypeBreakingStyle : int8_t {
1111 enum ReturnTypeBreakingStyle : int8_t {
1136 RTBS_ExceptShortType,
1186 RTBS_AllDefinitions,
1200 RTBS_TopLevelDefinitions,
1206 DefinitionReturnTypeBreakingStyle AlwaysBreakAfterDefinitionReturnType;
1226 bool AlwaysBreakBeforeMultilineStrings;
1229 enum BreakTemplateDeclarationsStyle : int8_t {
1296 std::vector<std::string> AttributeMacros;
1315 bool BinPackArguments;
1331 bool BinPackLongBracedList;
1334 enum BinPackParametersStyle : int8_t {
1357 BPPS_AlwaysOnePerLine,
1362 BinPackParametersStyle BinPackParameters;
1365 enum BitFieldColonSpacingStyle : int8_t {
1391 BitFieldColonSpacingStyle BitFieldColonSpacing;
1424 int BracedInitializerIndentWidth;
1427 enum BraceWrappingAfterControlStatementStyle : int8_t {
1467 struct BraceWrappingFlags {
1483 bool AfterCaseLabel;
1496 BraceWrappingAfterControlStatementStyle AfterControlStatement;
1540 bool AfterNamespace;
1546 bool AfterObjCDeclaration;
1588 bool AfterExternBlock;
1635 bool BeforeLambdaBody;
1665 bool SplitEmptyFunction;
1677 bool SplitEmptyRecord;
1689 bool SplitEmptyNamespace;
1705 BraceWrappingFlags BraceWrapping;
1718 bool BreakAdjacentStringLiterals;
1721 enum AttributeBreakingStyle : int8_t {
1805 AttributeBreakingStyle BreakAfterAttributes;
1816 bool BreakAfterOpenBracketBracedList;
1826 bool BreakAfterOpenBracketFunction;
1836 bool BreakAfterOpenBracketIf;
1846 bool BreakAfterOpenBracketLoop;
1856 bool BreakAfterOpenBracketSwitch;
1860 ReturnTypeBreakingStyle BreakAfterReturnType;
1883 enum BinPackStyle : int8_t {
1893 enum BinaryOperatorStyle : int8_t {
1934 BinaryOperatorStyle BreakBeforeBinaryOperators;
1937 enum BraceBreakingStyle : int8_t {
2369 BraceBreakingStyle BreakBeforeBraces;
2382 bool BreakBeforeCloseBracketBracedList;
2393 bool BreakBeforeCloseBracketFunction;
2406 bool BreakBeforeCloseBracketIf;
2419 bool BreakBeforeCloseBracketLoop;
2432 bool BreakBeforeCloseBracketSwitch;
2435 enum BreakBeforeConceptDeclarationsStyle : int8_t {
2456 BreakBeforeConceptDeclarationsStyle BreakBeforeConceptDeclarations;
2459 enum BreakBeforeInlineASMColonStyle : int8_t {
2473 BBIAS_OnlyMultiline,
2485 BreakBeforeInlineASMColonStyle BreakBeforeInlineASMColon;
2512 bool BreakBeforeTemplateCloser;
2527 bool BreakBeforeTernaryOperators;
2530 enum BreakBinaryOperationsStyle : int8_t {
2557 BBO_RespectPrecedence
2562 struct BinaryOperationBreakRule {
2565 std::vector<tok::TokenKind> Operators;
2567 BreakBinaryOperationsStyle Style;
2571 unsigned MinChainLength;
2572 bool operator==(
const BinaryOperationBreakRule &R)
const {
2573 return Operators ==
R.Operators && Style ==
R.Style &&
2574 MinChainLength ==
R.MinChainLength;
2576 bool operator!=(
const BinaryOperationBreakRule &R)
const {
2577 return !(*
this ==
R);
2596 struct BreakBinaryOperationsOptions {
2598 BreakBinaryOperationsStyle
Default;
2600 std::vector<BinaryOperationBreakRule> PerOperator;
2601 const BinaryOperationBreakRule *
2602 findRuleForOperator(tok::TokenKind Kind)
const {
2603 for (
const auto &Rule : PerOperator) {
2604 if (llvm::find(
Rule.Operators, Kind) !=
Rule.Operators.end())
2609 if (Kind == tok::greater &&
2610 llvm::find(
Rule.Operators, tok::greatergreater) !=
2611 Rule.Operators.end()) {
2617 BreakBinaryOperationsStyle getStyleForOperator(tok::TokenKind Kind)
const {
2618 if (
const auto *Rule = findRuleForOperator(Kind))
2622 unsigned getMinChainLengthForOperator(tok::TokenKind Kind)
const {
2623 if (
const auto *Rule = findRuleForOperator(Kind))
2624 return Rule->MinChainLength;
2627 bool operator==(
const BreakBinaryOperationsOptions &R)
const {
2628 return Default ==
R.Default && PerOperator ==
R.PerOperator;
2630 bool operator!=(
const BreakBinaryOperationsOptions &R)
const {
2631 return !(*
this ==
R);
2637 BreakBinaryOperationsOptions BreakBinaryOperations;
2640 enum BreakConstructorInitializersStyle : int8_t {
2673 BreakConstructorInitializersStyle BreakConstructorInitializers;
2687 bool BreakFunctionDefinitionParameters;
2697 bool BreakAfterJavaFieldAnnotations;
2740 bool BreakStringLiterals;
2748 unsigned ColumnLimit;
2758 std::string CommentPragmas;
2761 enum BreakInheritanceListStyle : int8_t {
2798 BreakInheritanceListStyle BreakInheritanceList;
2802 BreakTemplateDeclarationsStyle BreakTemplateDeclarations;
2826 bool CompactNamespaces;
2836 unsigned ConstructorInitializerIndentWidth;
2847 unsigned ContinuationIndentWidth;
2850 enum BracedListStyle : int8_t {
2904 BLS_AlignFirstComment,
2909 BracedListStyle Cpp11BracedListStyle;
2922 bool DerivePointerAlignment;
2931 enum EmptyLineAfterAccessModifierStyle : int8_t {
2977 EmptyLineAfterAccessModifierStyle EmptyLineAfterAccessModifier;
2980 enum EmptyLineBeforeAccessModifierStyle : int8_t {
3015 ELBAMS_LogicalBlock,
3040 EmptyLineBeforeAccessModifierStyle EmptyLineBeforeAccessModifier;
3043 enum EnumTrailingCommaStyle : int8_t {
3073 EnumTrailingCommaStyle EnumTrailingComma;
3088 bool ExperimentalAutoDetectBinPacking;
3104 bool FixNamespaceComments;
3122 std::vector<std::string> ForEachMacros;
3124 tooling::IncludeStyle IncludeStyle;
3145 std::vector<std::string> IfMacros;
3172 bool IndentAccessModifiers;
3195 bool IndentCaseBlocks;
3214 bool IndentCaseLabels;
3227 bool IndentExportBlock;
3230 enum IndentExternBlockStyle : int8_t {
3248 IEBS_AfterExternBlock,
3267 IndentExternBlockStyle IndentExternBlock;
3270 enum IndentGotoLabelStyle : int8_t {
3325 IndentGotoLabelStyle IndentGotoLabels;
3328 enum PPDirectiveIndentStyle : int8_t {
3372 PPDirectiveIndentStyle IndentPPDirectives;
3395 bool IndentRequiresClause;
3409 unsigned IndentWidth;
3423 bool IndentWrappedFunctionNames;
3459 bool InsertNewlineAtEOF;
3462 enum TrailingCommaStyle : int8_t {
3489 TrailingCommaStyle InsertTrailingCommas;
3521 struct IntegerLiteralSeparatorStyle {
3537 int8_t BinaryMinDigitsInsert;
3549 int8_t BinaryMaxDigitsRemove;
3564 int8_t DecimalMinDigitsInsert;
3576 int8_t DecimalMaxDigitsRemove;
3592 int8_t HexMinDigitsInsert;
3605 int8_t HexMaxDigitsRemove;
3606 bool operator==(
const IntegerLiteralSeparatorStyle &R)
const {
3608 BinaryMinDigitsInsert ==
R.BinaryMinDigitsInsert &&
3609 BinaryMaxDigitsRemove ==
R.BinaryMaxDigitsRemove &&
3611 DecimalMinDigitsInsert ==
R.DecimalMinDigitsInsert &&
3612 DecimalMaxDigitsRemove ==
R.DecimalMaxDigitsRemove &&
3613 Hex ==
R.Hex && HexMinDigitsInsert ==
R.HexMinDigitsInsert &&
3614 HexMaxDigitsRemove ==
R.HexMaxDigitsRemove;
3616 bool operator!=(
const IntegerLiteralSeparatorStyle &R)
const {
4065 return !(*
this == R);
4924 return !(*
this == R);
5292 Other.AfterFunctionDeclarationName &&
5595 return !(*
this == R);
5881 return AccessModifierOffset == R.AccessModifierOffset &&
5882 AlignAfterOpenBracket == R.AlignAfterOpenBracket &&
5883 AlignArrayOfStructures == R.AlignArrayOfStructures &&
5884 AlignConsecutiveAssignments == R.AlignConsecutiveAssignments &&
5885 AlignConsecutiveBitFields == R.AlignConsecutiveBitFields &&
5886 AlignConsecutiveDeclarations == R.AlignConsecutiveDeclarations &&
5887 AlignConsecutiveMacros == R.AlignConsecutiveMacros &&
5888 AlignConsecutiveShortCaseStatements ==
5889 R.AlignConsecutiveShortCaseStatements &&
5890 AlignConsecutiveTableGenBreakingDAGArgColons ==
5891 R.AlignConsecutiveTableGenBreakingDAGArgColons &&
5892 AlignConsecutiveTableGenCondOperatorColons ==
5893 R.AlignConsecutiveTableGenCondOperatorColons &&
5894 AlignConsecutiveTableGenDefinitionColons ==
5895 R.AlignConsecutiveTableGenDefinitionColons &&
5896 AlignEscapedNewlines == R.AlignEscapedNewlines &&
5897 AlignOperands == R.AlignOperands &&
5898 AlignTrailingComments == R.AlignTrailingComments &&
5899 AllowAllArgumentsOnNextLine == R.AllowAllArgumentsOnNextLine &&
5900 AllowAllParametersOfDeclarationOnNextLine ==
5901 R.AllowAllParametersOfDeclarationOnNextLine &&
5902 AllowBreakBeforeNoexceptSpecifier ==
5903 R.AllowBreakBeforeNoexceptSpecifier &&
5904 AllowBreakBeforeQtProperty == R.AllowBreakBeforeQtProperty &&
5905 AllowShortBlocksOnASingleLine == R.AllowShortBlocksOnASingleLine &&
5906 AllowShortCaseExpressionOnASingleLine ==
5907 R.AllowShortCaseExpressionOnASingleLine &&
5908 AllowShortCaseLabelsOnASingleLine ==
5909 R.AllowShortCaseLabelsOnASingleLine &&
5910 AllowShortCompoundRequirementOnASingleLine ==
5911 R.AllowShortCompoundRequirementOnASingleLine &&
5912 AllowShortEnumsOnASingleLine == R.AllowShortEnumsOnASingleLine &&
5913 AllowShortFunctionsOnASingleLine ==
5914 R.AllowShortFunctionsOnASingleLine &&
5915 AllowShortIfStatementsOnASingleLine ==
5916 R.AllowShortIfStatementsOnASingleLine &&
5917 AllowShortLambdasOnASingleLine == R.AllowShortLambdasOnASingleLine &&
5918 AllowShortLoopsOnASingleLine == R.AllowShortLoopsOnASingleLine &&
5919 AllowShortNamespacesOnASingleLine ==
5920 R.AllowShortNamespacesOnASingleLine &&
5921 AllowShortRecordOnASingleLine == R.AllowShortRecordOnASingleLine &&
5922 AlwaysBreakBeforeMultilineStrings ==
5923 R.AlwaysBreakBeforeMultilineStrings &&
5924 AttributeMacros == R.AttributeMacros &&
5925 BinPackArguments == R.BinPackArguments &&
5926 BinPackLongBracedList == R.BinPackLongBracedList &&
5927 BinPackParameters == R.BinPackParameters &&
5928 BitFieldColonSpacing == R.BitFieldColonSpacing &&
5929 BracedInitializerIndentWidth == R.BracedInitializerIndentWidth &&
5930 BreakAdjacentStringLiterals == R.BreakAdjacentStringLiterals &&
5931 BreakAfterAttributes == R.BreakAfterAttributes &&
5932 BreakAfterJavaFieldAnnotations == R.BreakAfterJavaFieldAnnotations &&
5933 BreakAfterOpenBracketBracedList ==
5934 R.BreakAfterOpenBracketBracedList &&
5935 BreakAfterOpenBracketFunction == R.BreakAfterOpenBracketFunction &&
5936 BreakAfterOpenBracketIf == R.BreakAfterOpenBracketIf &&
5937 BreakAfterOpenBracketLoop == R.BreakAfterOpenBracketLoop &&
5938 BreakAfterOpenBracketSwitch == R.BreakAfterOpenBracketSwitch &&
5939 BreakAfterReturnType == R.BreakAfterReturnType &&
5940 BreakArrays == R.BreakArrays &&
5941 BreakBeforeBinaryOperators == R.BreakBeforeBinaryOperators &&
5942 BreakBeforeBraces == R.BreakBeforeBraces &&
5943 BreakBeforeCloseBracketBracedList ==
5944 R.BreakBeforeCloseBracketBracedList &&
5945 BreakBeforeCloseBracketFunction ==
5946 R.BreakBeforeCloseBracketFunction &&
5947 BreakBeforeCloseBracketIf == R.BreakBeforeCloseBracketIf &&
5948 BreakBeforeCloseBracketLoop == R.BreakBeforeCloseBracketLoop &&
5949 BreakBeforeCloseBracketSwitch == R.BreakBeforeCloseBracketSwitch &&
5950 BreakBeforeConceptDeclarations == R.BreakBeforeConceptDeclarations &&
5951 BreakBeforeInlineASMColon == R.BreakBeforeInlineASMColon &&
5952 BreakBeforeTemplateCloser == R.BreakBeforeTemplateCloser &&
5953 BreakBeforeTernaryOperators == R.BreakBeforeTernaryOperators &&
5954 BreakBinaryOperations == R.BreakBinaryOperations &&
5955 BreakConstructorInitializers == R.BreakConstructorInitializers &&
5956 BreakFunctionDefinitionParameters ==
5957 R.BreakFunctionDefinitionParameters &&
5958 BreakInheritanceList == R.BreakInheritanceList &&
5959 BreakStringLiterals == R.BreakStringLiterals &&
5960 BreakTemplateDeclarations == R.BreakTemplateDeclarations &&
5961 ColumnLimit == R.ColumnLimit && CommentPragmas == R.CommentPragmas &&
5962 CompactNamespaces == R.CompactNamespaces &&
5963 ConstructorInitializerIndentWidth ==
5964 R.ConstructorInitializerIndentWidth &&
5965 ContinuationIndentWidth == R.ContinuationIndentWidth &&
5966 Cpp11BracedListStyle == R.Cpp11BracedListStyle &&
5967 DerivePointerAlignment == R.DerivePointerAlignment &&
5968 DisableFormat == R.DisableFormat &&
5969 EmptyLineAfterAccessModifier == R.EmptyLineAfterAccessModifier &&
5970 EmptyLineBeforeAccessModifier == R.EmptyLineBeforeAccessModifier &&
5971 EnumTrailingComma == R.EnumTrailingComma &&
5972 ExperimentalAutoDetectBinPacking ==
5973 R.ExperimentalAutoDetectBinPacking &&
5974 FixNamespaceComments == R.FixNamespaceComments &&
5975 ForEachMacros == R.ForEachMacros &&
5977 IncludeStyle.IncludeCategories == R.IncludeStyle.IncludeCategories &&
5979 R.IncludeStyle.IncludeIsMainRegex &&
5981 R.IncludeStyle.IncludeIsMainSourceRegex &&
5982 IncludeStyle.MainIncludeChar == R.IncludeStyle.MainIncludeChar &&
5983 IndentAccessModifiers == R.IndentAccessModifiers &&
5984 IndentCaseBlocks == R.IndentCaseBlocks &&
5985 IndentCaseLabels == R.IndentCaseLabels &&
5986 IndentExportBlock == R.IndentExportBlock &&
5987 IndentExternBlock == R.IndentExternBlock &&
5988 IndentGotoLabels == R.IndentGotoLabels &&
5989 IndentPPDirectives == R.IndentPPDirectives &&
5990 IndentRequiresClause == R.IndentRequiresClause &&
5991 IndentWidth == R.IndentWidth &&
5992 IndentWrappedFunctionNames == R.IndentWrappedFunctionNames &&
5993 InsertBraces == R.InsertBraces &&
5994 InsertNewlineAtEOF == R.InsertNewlineAtEOF &&
6005 R.MacrosSkippedByRemoveParentheses &&
6013 R.ObjCBreakBeforeNestedBlockParam &&
6016 R.ObjCSpaceAfterMethodDeclarationPrefix &&
6023 R.PenaltyBreakBeforeFirstCallParameter &&
6031 R.PenaltyBreakTemplateDeclaration &&
6041 R.RemoveEmptyLinesInUnwrappedLines &&
6059 R.SpaceBeforeCtorInitializerColon &&
6066 R.SpaceBeforeRangeBasedForLoopColon &&
6073 R.SpacesInLineCommentPrefix.Minimum &&
6075 R.SpacesInLineCommentPrefix.Maximum &&
6083 R.TableGenBreakingDAGArgOperators &&
6089 R.VerilogBreakBetweenInstancePorts &&
6104 typedef std::map<LanguageKind, FormatStyle>
MapType;
6119 std::shared_ptr<MapType> Styles;
6123 const FormatStyle &MainStyle,
6124 const std::vector<FormatStyle> &ConfigurationStyles);
6129 friend std::error_code
6131 bool AllowUnknownOptions,
6132 llvm::SourceMgr::DiagHandlerTy DiagHandler,
6133 void *DiagHandlerCtxt,
bool IsDotHFile);
6179 FormatStyle *Style);
6197 bool AllowUnknownOptions =
false,
6198 llvm::SourceMgr::DiagHandlerTy DiagHandler =
nullptr,
6199 void *DiagHandlerCtx =
nullptr,
bool IsDotHFile =
false);
6203 bool AllowUnknownOptions =
false,
6204 bool IsDotHFile =
false) {
6206 AllowUnknownOptions,
nullptr,
6207 nullptr, IsDotHFile);
6215tooling::Replacements
sortIncludes(
const FormatStyle &Style, StringRef Code,
6218 unsigned *Cursor =
nullptr);
6225 const FormatStyle &Style);
6242 const FormatStyle &Style);
6267tooling::Replacements
reformat(
const FormatStyle &Style, StringRef Code,
6275tooling::Replacements
reformat(
const FormatStyle &Style, StringRef Code,
6277 StringRef
FileName,
bool *IncompleteFormat);
6283tooling::Replacements
cleanup(
const FormatStyle &Style, StringRef Code,
6366 StringRef Code =
"", llvm::vfs::FileSystem *FS =
nullptr,
6367 bool AllowUnknownOptions =
false,
6368 llvm::SourceMgr::DiagHandlerTy DiagHandler =
nullptr);
6377 case FormatStyle::LK_C:
6379 case FormatStyle::LK_Cpp:
6381 case FormatStyle::LK_CSharp:
6383 case FormatStyle::LK_ObjC:
6384 return "Objective-C";
6385 case FormatStyle::LK_Java:
6387 case FormatStyle::LK_JavaScript:
6388 return "JavaScript";
6389 case FormatStyle::LK_Json:
6391 case FormatStyle::LK_Proto:
6393 case FormatStyle::LK_TableGen:
6395 case FormatStyle::LK_TextProto:
6397 case FormatStyle::LK_Verilog:
6411struct 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