---
Language: Cpp
Standard: c++17

# Indentation
IndentWidth: 4
TabWidth: 4
UseTab: Never
IndentCaseLabels: false
IndentPPDirectives: None
IndentWrappedFunctionNames: false
NamespaceIndentation: None
AccessModifierOffset: -4
ContinuationIndentWidth: 4

# Line width
ColumnLimit: 120

# Braces
BreakBeforeBraces: Custom
BraceWrapping:
  AfterCaseLabel: false
  AfterClass: true
  AfterControlStatement: Never
  AfterEnum: false
  AfterFunction: true
  AfterNamespace: false
  AfterStruct: true
  AfterUnion: true
  AfterExternBlock: false
  BeforeCatch: false
  BeforeElse: false
  BeforeLambdaBody: false
  BeforeWhile: false
  IndentBraces: false
  SplitEmptyFunction: true
  SplitEmptyRecord: true
  SplitEmptyNamespace: true
InsertBraces: true

# Pointer/reference alignment
PointerAlignment: Right
ReferenceAlignment: Pointer
DerivePointerAlignment: false

# Qualifiers
QualifierAlignment: Left

# Constructor initializers
BreakConstructorInitializers: BeforeComma
ConstructorInitializerIndentWidth: 4
PackConstructorInitializers: Never

# Inheritance
BreakInheritanceList: BeforeComma

# Arguments and parameters
AlignAfterOpenBracket: Align
AllowAllArgumentsOnNextLine: true
AllowAllParametersOfDeclarationOnNextLine: true
BinPackArguments: false
BinPackParameters: false

# Lambdas
AllowShortLambdasOnASingleLine: Empty
LambdaBodyIndentation: OuterScope

# Short forms
AllowShortBlocksOnASingleLine: Never
AllowShortCaseLabelsOnASingleLine: false
AllowShortEnumsOnASingleLine: false
AllowShortFunctionsOnASingleLine: InlineOnly
AllowShortIfStatementsOnASingleLine: Never
AllowShortLoopsOnASingleLine: false

# Spaces
SpaceAfterCStyleCast: false
SpaceAfterLogicalNot: false
SpaceAfterTemplateKeyword: false
SpaceBeforeAssignmentOperators: true
SpaceBeforeCaseColon: false
SpaceBeforeCtorInitializerColon: true
SpaceBeforeInheritanceColon: true
SpaceBeforeParens: ControlStatements
SpaceBeforeRangeBasedForLoopColon: true
SpaceInEmptyBlock: false
SpacesInAngles: Never
SpacesInCStyleCastParentheses: false
SpacesInConditionalStatement: false
SpacesInContainerLiterals: false
SpacesInParentheses: false
SpacesInSquareBrackets: false

# Blank lines
EmptyLineAfterAccessModifier: Never
EmptyLineBeforeAccessModifier: LogicalBlock
KeepEmptyLinesAtTheStartOfBlocks: false
MaxEmptyLinesToKeep: 1
SeparateDefinitionBlocks: Always

# Includes
SortIncludes: CaseSensitive
IncludeBlocks: Regroup
IncludeCategories:
  # Generated UI headers and private headers (keep next to main header).
  - Regex: '^"(ui_|.*_p\.h)'
    Priority: 0
  # Local "quoted" headers.
  - Regex: '^"'
    Priority: 1
  # Project library headers.
  - Regex: '<(browser|core|registry|sidebar|ui|util|qxtglobalshortcut)/'
    Priority: 2
  # Qt headers.
  - Regex: '<Q'
    Priority: 3
  # C-style headers (.h).
  - Regex: '<.*\.h>'
    Priority: 4
  # C++ STL headers.
  - Regex: '<'
    Priority: 5

# Alignment
AlignConsecutiveAssignments: None
AlignConsecutiveDeclarations: None
AlignConsecutiveMacros: None
AlignEscapedNewlines: Left
AlignOperands: AlignAfterOperator
AlignTrailingComments: true

# Line breaking
PenaltyBreakAssignment: 1000
PenaltyBreakBeforeFirstCallParameter: 1000
PenaltyReturnTypeOnItsOwnLine: 1000
AlwaysBreakTemplateDeclarations: Yes
BreakBeforeBinaryOperators: NonAssignment
BreakBeforeTernaryOperators: true
BreakStringLiterals: true

# Namespaces
CompactNamespaces: false
FixNamespaceComments: true
ShortNamespaceLines: 0

# Macros
StatementMacros:
  - Q_LOGGING_CATEGORY

# Other
Cpp11BracedListStyle: true
InsertNewlineAtEOF: true
LineEnding: LF
ReflowComments: true
SortUsingDeclarations: true
