---
Language:        Cpp
# BasedOnStyle:  LLVM
# 访问说明符(public、private等)的偏移
AccessModifierOffset: -4
# 开括号(开圆括号、开尖括号、开方括号)后的对齐: Align, DontAlign, AlwaysBreak(总是在开括号后换行)
AlignAfterOpenBracket: Align
# 当结构体数组的列数相等时，会对齐每行的文本
# AlignArrayOfStructures: Left
# 连续宏定义对齐
AlignConsecutiveMacros: false
# 连续赋值时，对齐所有等号
AlignConsecutiveAssignments: false
# 可以对齐变量等连续声明的语句
AlignConsecutiveDeclarations: false
# 左对齐转义换行(使用反斜杠换行)的反斜杠
AlignEscapedNewlines: Right
# 水平对齐二元和三元表达式的操作数
AlignOperands:   true
# 对齐连续的尾随的注释
AlignTrailingComments: true
# 允许函数声明的所有参数在放在下一行
AllowAllArgumentsOnNextLine: false
# 允许构造函数初始化列表的所有参数放在下一行
AllowAllConstructorInitializersOnNextLine: true
# 函数声明的参数无法放在一行上，允许将所有的变量放在下一行上
AllowAllParametersOfDeclarationOnNextLine: false
# 合并短语法块在单行上
AllowShortBlocksOnASingleLine: Never
# 合并短的case标签放在同一行
AllowShortCaseLabelsOnASingleLine: false
# 合并短函数在单行上
AllowShortFunctionsOnASingleLine: None
# 合并短匿Lambda函数在单行上
AllowShortLambdasOnASingleLine: None
# 合并if块在单行上
AllowShortIfStatementsOnASingleLine: Never
# 合并短循环到单行上
AllowShortLoopsOnASingleLine: false
# 函数定义返回类型换行风格,该选项已经弃用.
AlwaysBreakAfterDefinitionReturnType: None
# 函数声明的返回类型换行风格
AlwaysBreakAfterReturnType: None
# 在多行字符串字面量时之前断行
AlwaysBreakBeforeMultilineStrings: false
# 模板声明断行;MultiLine仅在接下来的函数/类声明参数需要跨行时才断行;Yes总是在模板声明之后进行断行
AlwaysBreakTemplateDeclarations: Yes
# 如果为false，函数调用变量要么都在同一行上，要么每个变量都独自在一行;如果true，则会把变量合理打包放在一行上，显得更紧凑
# BinPackArguments: false
# 如果false，函数声明的参数或者函数定义的参数要么在同一行上，要么每个变量都独自在一行;如果true，则会把变量合理打包放在一行上，显得更紧凑
# BinPackParameters: 
# 位段列的空白风格  both在:号每边都增加一个空白
# BitFieldColonSpacing: Both
# BraceWrapping 大括号换行风格  
BreakBeforeBraces: Custom
#如果breakbeforebrace设置为BS_Custom，则使用它来指定应该如何处理每个独立的大括号情况。否则，它将被忽略
BraceWrapping:
  AfterCaseLabel:  true
  AfterClass:      true
  AfterControlStatement: Always
  AfterEnum:       true
  AfterFunction:   true
  AfterNamespace:  true
  AfterObjCDeclaration: true
  AfterStruct:     true
  AfterUnion:      true
  AfterExternBlock: true
  BeforeCatch:     true
  BeforeElse:      true
#  BeforeLambdaBody: false
#  BeforeWhile:     false
  IndentBraces:    false
  SplitEmptyFunction: true
  SplitEmptyRecord: true
  SplitEmptyNamespace: true
# 二元操作符断行  None在操作符之后断行
BreakBeforeBinaryOperators: None
# Always永远在concept之前断行，并且将该行放在模板声明之前
# BreakBeforeConceptDeclarations: Always
# 如果为true，三元操作符将放在换行符之后
BreakBeforeTernaryOperators: true
# 在继承冒号前断行
BreakBeforeInheritanceComma: false
# 构造函数初始化列表断行风格：AfterColon在冒号和逗号后面断行构造函数初始化式
# BeforeComma在冒号和逗号之前断行构造函数的初始化式，并将逗号与冒号对齐
BreakConstructorInitializers: BeforeComma
# 继承链断行风格: AfterComma仅在逗号之后进行断行
# BreakInheritanceList: AfterComma
# BreakConstructorInitializersBeforeComma: true
# 允许对字符串字面量进行断行
BreakStringLiterals: true
# 每行的最大长度
ColumnLimit:     200
CommentPragmas:  '^ IWYU pragma:'
# 紧凑命名空间: 如果为true，则连续的名称空间声明将在同一行上。如果为false，则每个名称空间都在新行中声明
CompactNamespaces: false
# 构造初始化断行风格, 选项已弃用， See CurrentLine of PackConstructorInitializers
ConstructorInitializerAllOnOneLineOrOnePerLine: false
# 用于构造函数初始化列表和继承列表缩进的字符数
ConstructorInitializerIndentWidth: 4
# 延续下一行的缩进宽度，只原来一行放不下时，换行后，新行缩进的字符数
ContinuationIndentWidth: 4
# c++ 11的大括号列表的格式
Cpp11BracedListStyle: false
# 提取行结尾
DeriveLineEnding: true
# 提取指针对齐
DerivePointerAlignment: false
# 完全禁用格式化
DisableFormat:   false
# 访问修饰符后空行
# EmptyLineAfterAccessModifier: Leave
# Always总是在访问修饰符之前添加空行，除非访问修饰符位于结构或类定义的开头
# EmptyLineBeforeAccessModifier: Always
# 如果为true, clang-format将检测函数调用和定义是否使用每行一个参数进行格式化
ExperimentalAutoDetectBinPacking: false
# 修复命名空间描述
FixNamespaceComments: true
# 应该被解释为foreach循环而不是函数调用的宏向量
ForEachMacros:
  - foreach
  - Q_FOREACH
  - FOREACH
# IfMacros:
#   - IF
# include块风格 根据该值，多个#include块可以被排序为一个，并根据类别进行划分;Preserve，每个#include块单独排序
IncludeBlocks:   Preserve
IncludeCategories:
  - Regex:           '^"(llvm|llvm-c|clang|clang-c)/'
    Priority:        2
    SortPriority:    0
  - Regex:           '^(<|"(gtest|gmock|isl|json)/)'
    Priority:        3
    SortPriority:    0
  - Regex:           '.*'
    Priority:        1
    SortPriority:    0
IncludeIsMainRegex: '(Test)?$'
IncludeIsMainSourceRegex: ''
# 访问修饰符缩进
# IndentAccessModifiers: false
# case块缩进
IndentCaseLabels: false
# 缩进Goto跳转符号
IndentGotoLabels: true
# 预处理指令缩进: None不缩进任何预处理器指示符;AfterHash缩进散列之后的指令;BeforeHash缩进散列之前的指令
IndentPPDirectives: None
# 缩进宽度
IndentWidth:     4
# 函数名缩进
IndentWrappedFunctionNames: false
# Java引号风格
JavaScriptQuotes: Leave
# import/export语句换行
JavaScriptWrapImports: true
# 在语法块开始留空行
KeepEmptyLinesAtTheStartOfBlocks: false
MacroBlockBegin: ''
MacroBlockEnd:   ''
# 最大持续空行
MaxEmptyLinesToKeep: 1
# 命名空间缩进: All缩进所有的命名空间
NamespaceIndentation: All
ObjCBinPackProtocolList: Auto
ObjCBlockIndentWidth: 4
ObjCSpaceAfterProperty: false
ObjCSpaceBeforeProtocolList: true
PenaltyBreakAssignment: 4
# 在call(后对函数调用换行的penalty
PenaltyBreakBeforeFirstCallParameter: 19
# 在一个注释中引入换行的penalty
PenaltyBreakComment: 300
# 第一次在<<前换行的penalty
PenaltyBreakFirstLessLess: 120
# 在一个字符串字面量中引入换行的penalty
PenaltyBreakString: 1000
PenaltyBreakTemplateDeclaration: 10
# 对于每个在行字符数限制之外的字符的penalty
PenaltyExcessCharacter: 1000000
# 将函数的返回类型放到它自己的行的penalty
PenaltyReturnTypeOnItsOwnLine: 60
# 指针对齐风格
PointerAlignment: Right
# 限定符对齐: Leave保持原状，不强制左或右对齐
# QualifierAlignment: Leave
# 用于预处理器语句缩进的列数
# PPIndentWidth: 1
# 引用对齐格式
# ReferenceAlignment: Right
# 重排版注释
ReflowComments:  false
# 分离定义语句块
# SeparateDefinitionBlocks: Always
# 对inclue排序
SortIncludes:    false
# 对using声明排序
SortUsingDeclarations: false
# 在C风格类型转换后添加空格
SpaceAfterCStyleCast: false
# 是否在逻辑!操作符后面插入空白符
SpaceAfterLogicalNot: false
# 是否在模板关键字template之后插入空格
SpaceAfterTemplateKeyword: false
# 赋值操作符空格
SpaceBeforeAssignmentOperators: true
# 如果为true，则在用于初始化对象的c++ 11大括号列表(前面的标识符或类型之后)之前插入一个空格
SpaceBeforeCpp11BracedList: false
# 构造器初始化冒号空格
SpaceBeforeCtorInitializerColon: true
# 继承冒号空格
SpaceBeforeInheritanceColon: true
# 圆括号空格 : ControlStatement只在控制语句关键字(for/if/while…)之后的开括号前加空格
SpaceBeforeParens: ControlStatements
# 循环范围里的冒号 : for (var : vars)
SpaceBeforeRangeBasedForLoopColon: true
# 空块中的空格
SpaceInEmptyBlock: false
# 空圆括号之间的空格
SpaceInEmptyParentheses: false
# 尾部注释之前的空格数，如： // xxx
SpacesBeforeTrailingComments: 1
# 角括号空白
SpacesInAngles:  false
# 条件表达式中的空白
SpacesInConditionalStatement: false
# 容器中空格
SpacesInContainerLiterals: true
# cast类型转换里的空格
SpacesInCStyleCastParentheses: false
# 在圆括号里面的空格
SpacesInParentheses: false
# 方括号之中的空白
SpacesInSquareBrackets: false
# 方括号之前的空白
SpaceBeforeSquareBrackets: false
# C++标准 : Latest，解析和格式化为最新的支持版本。
Standard:        Latest
# 应该被解释为完整语句的宏向量
StatementMacros:
  - Q_UNUSED
  - QT_REQUIRE_VERSION
# Tab的宽度，替换为空白字符
TabWidth:        4
# 换行符种类 : 换行时使用\r\n而不是\n
UseCRLF:         false
# Tab的使用
UseTab:          Never
