# ============================================================
# 基于 GC1387_FT.c 风格生成的 clang-format 配置
# 适用语言: C / C++
# 行宽策略: 不限制(原代码有大量长行, 强制换行会破坏可读性)
# ============================================================

Language: Cpp

# ---------- 基础风格 ----------
# 以 LLVM 为基础再逐项覆盖, 保证字段最全
BasedOnStyle: LLVM

# ---------- 缩进 ----------
# 每级缩进使用 1 个 Tab, Tab 显示宽度为 4
# UseTab: Always   -> 全部用 Tab(含对齐部分)
# UseTab: ForIndentation -> 仅缩进用 Tab, 对齐用空格(更稳妥)
UseTab: Always
TabWidth: 4
IndentWidth: 4

# 续行(换行后下一行)缩进宽度
ContinuationIndentWidth: 4

# ---------- 行宽 ----------
# 0 = 不限制, 不强制换行
# 如需限制可改为 120 / 160
ColumnLimit: 0

# ---------- 大括号风格 (K&R / 1TBS) ----------
# 大括号位置: 单独一行 (Allman 风格, 原代码风格)
BreakBeforeBraces: Allman

# case 标签缩进: false = 与 switch 大括号同列(原代码风格)
IndentCaseLabels: false

# case 内语句块额外缩进: false(已由 case 自身控制)
IndentCaseBlocks: false

# 单行 if/for/while 是否合并: 不合并
AllowShortIfStatementsOnASingleLine: Never
AllowShortLoopsOnASingleLine: false
AllowShortBlocksOnASingleLine: Empty
AllowShortFunctionsOnASingleLine: Empty
AllowShortLambdasOnASingleLine: Empty
AllowShortEnumsOnASingleLine: true

# 不自动给单语句体补花括号(保留原代码不加括号的习惯)
InsertBraces: false

# ---------- 指针与引用 ----------
# 指针 * 贴变量名(右对齐): uint8_t *p
# 注: clang-format 中 Left=贴类型(uint8_t* p), Right=贴变量名(uint8_t *p)
PointerAlignment: Right
DerivePointerAlignment: false

# ---------- 空格 ----------
# 控制关键字后加空格: if ( / for ( / while ( / switch (
SpaceBeforeParens: ControlStatements

# if/for/while 条件前括号后不加空格: if(x) 不允许
SpaceAfterCStyleCast: false

# 赋值/比较/位运算符两侧留空格(默认)
SpaceBeforeAssignmentOperators: true

# 花括号列表(C++11 风格): {0} 内无空格
Cpp11BracedListStyle: true

# 容器字面量空格: 不适用 C, 保持默认
SpacesInContainerLiterals: false

# ---------- 对齐 ----------
# 连续宏定义对齐
AlignConsecutiveMacros: Consecutive

# 连续赋值 = 对齐 (原代码 Gate0~Gate10 等)
# AlignConsecutiveAssignments: Consecutive
AlignConsecutiveAssignments: None

# 连续声明中的变量名对齐: 关闭 (原代码不补空格, 类型与变量名紧贴)
AlignConsecutiveDeclarations: None

# 行尾注释对齐 (原代码大量使用)
AlignTrailingComments: true

# 转义换行反斜杠对齐
AlignEscapedNewlines: Right

# 函数参数对齐: 跟在 ( 后对齐
AlignAfterOpenBracket: Align

# 二元运算操作数对齐
AlignOperands: Align

# ---------- Include ----------
# 不自动排序 include (原代码无固定顺序, 含大小写混排)
SortIncludes: Never

# include 块之间空行数
IncludeBlocks: Preserve

# ---------- 其它 ----------
# 单行注释前空格数: 1
SpacesBeforeTrailingComments: 1

# 最多连续空行: 2
MaxEmptyLinesToKeep: 2

# 宏-like 函数换行: NULL

# 自动检测行尾换行符: 关闭
UseCRLF: false
