-
Notifications
You must be signed in to change notification settings - Fork 4.5k
新增clang-format对代码进行格式管控 #341
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| @@ -0,0 +1,133 @@ | ||||||||||||||||||||||||||||||||||||||||||
| --- | ||||||||||||||||||||||||||||||||||||||||||
| Language: Cpp | ||||||||||||||||||||||||||||||||||||||||||
| BasedOnStyle: Google | ||||||||||||||||||||||||||||||||||||||||||
| AccessModifierOffset: -4 | ||||||||||||||||||||||||||||||||||||||||||
| AlignAfterOpenBracket: Align | ||||||||||||||||||||||||||||||||||||||||||
| AlignConsecutiveAssignments: false | ||||||||||||||||||||||||||||||||||||||||||
| AlignConsecutiveDeclarations: false | ||||||||||||||||||||||||||||||||||||||||||
| AlignEscapedNewlines: Left | ||||||||||||||||||||||||||||||||||||||||||
| AlignOperands: true | ||||||||||||||||||||||||||||||||||||||||||
| AlignTrailingComments: true | ||||||||||||||||||||||||||||||||||||||||||
| AllowAllParametersOfDeclarationOnNextLine: true | ||||||||||||||||||||||||||||||||||||||||||
| AllowShortBlocksOnASingleLine: false | ||||||||||||||||||||||||||||||||||||||||||
| AllowShortCaseLabelsOnASingleLine: false | ||||||||||||||||||||||||||||||||||||||||||
| AllowShortFunctionsOnASingleLine: All | ||||||||||||||||||||||||||||||||||||||||||
| AllowShortIfStatementsOnASingleLine: false | ||||||||||||||||||||||||||||||||||||||||||
| AllowShortLoopsOnASingleLine: false | ||||||||||||||||||||||||||||||||||||||||||
| AlwaysBreakAfterDefinitionReturnType: None | ||||||||||||||||||||||||||||||||||||||||||
| AlwaysBreakAfterReturnType: None | ||||||||||||||||||||||||||||||||||||||||||
| AlwaysBreakBeforeMultilineStrings: true | ||||||||||||||||||||||||||||||||||||||||||
| AlwaysBreakTemplateDeclarations: Yes | ||||||||||||||||||||||||||||||||||||||||||
| BinPackArguments: true | ||||||||||||||||||||||||||||||||||||||||||
| BinPackParameters: true | ||||||||||||||||||||||||||||||||||||||||||
| BraceWrapping: | ||||||||||||||||||||||||||||||||||||||||||
| AfterClass: false | ||||||||||||||||||||||||||||||||||||||||||
| AfterControlStatement: false | ||||||||||||||||||||||||||||||||||||||||||
| AfterEnum: false | ||||||||||||||||||||||||||||||||||||||||||
| AfterFunction: false | ||||||||||||||||||||||||||||||||||||||||||
| AfterNamespace: false | ||||||||||||||||||||||||||||||||||||||||||
| AfterObjCDeclaration: false | ||||||||||||||||||||||||||||||||||||||||||
| AfterStruct: false | ||||||||||||||||||||||||||||||||||||||||||
| AfterUnion: false | ||||||||||||||||||||||||||||||||||||||||||
| AfterExternBlock: false | ||||||||||||||||||||||||||||||||||||||||||
| BeforeCatch: false | ||||||||||||||||||||||||||||||||||||||||||
| BeforeElse: false | ||||||||||||||||||||||||||||||||||||||||||
| IndentBraces: false | ||||||||||||||||||||||||||||||||||||||||||
| SplitEmptyFunction: true | ||||||||||||||||||||||||||||||||||||||||||
| SplitEmptyRecord: true | ||||||||||||||||||||||||||||||||||||||||||
| SplitEmptyNamespace: true | ||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+36
to
+38
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 现有的代码似乎是 SplitEmpty*: false 为主? |
||||||||||||||||||||||||||||||||||||||||||
| BreakBeforeBinaryOperators: None | ||||||||||||||||||||||||||||||||||||||||||
| BreakBeforeBraces: Attach | ||||||||||||||||||||||||||||||||||||||||||
| BreakBeforeInheritanceComma: false | ||||||||||||||||||||||||||||||||||||||||||
| BreakInheritanceList: BeforeColon | ||||||||||||||||||||||||||||||||||||||||||
| BreakBeforeTernaryOperators: true | ||||||||||||||||||||||||||||||||||||||||||
| BreakConstructorInitializersBeforeComma: false | ||||||||||||||||||||||||||||||||||||||||||
| BreakConstructorInitializers: BeforeColon | ||||||||||||||||||||||||||||||||||||||||||
| BreakAfterJavaFieldAnnotations: false | ||||||||||||||||||||||||||||||||||||||||||
| BreakStringLiterals: true | ||||||||||||||||||||||||||||||||||||||||||
| ColumnLimit: 100 | ||||||||||||||||||||||||||||||||||||||||||
| CommentPragmas: '^ IWYU pragma:' | ||||||||||||||||||||||||||||||||||||||||||
| CompactNamespaces: false | ||||||||||||||||||||||||||||||||||||||||||
| ConstructorInitializerAllOnOneLineOrOnePerLine: true | ||||||||||||||||||||||||||||||||||||||||||
| ConstructorInitializerIndentWidth: 4 | ||||||||||||||||||||||||||||||||||||||||||
| ContinuationIndentWidth: 4 | ||||||||||||||||||||||||||||||||||||||||||
| Cpp11BracedListStyle: true | ||||||||||||||||||||||||||||||||||||||||||
| DerivePointerAlignment: true | ||||||||||||||||||||||||||||||||||||||||||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 和 https://clang.llvm.org/docs/ClangFormatStyleOptions.html#derivepointeralignment
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||
| DisableFormat: false | ||||||||||||||||||||||||||||||||||||||||||
| ExperimentalAutoDetectBinPacking: false | ||||||||||||||||||||||||||||||||||||||||||
| FixNamespaceComments: true | ||||||||||||||||||||||||||||||||||||||||||
| ForEachMacros: | ||||||||||||||||||||||||||||||||||||||||||
| - foreach | ||||||||||||||||||||||||||||||||||||||||||
| - Q_FOREACH | ||||||||||||||||||||||||||||||||||||||||||
| - BOOST_FOREACH | ||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+59
to
+62
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. xiaozhi 项目中没有
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||
| IncludeBlocks: Preserve | ||||||||||||||||||||||||||||||||||||||||||
| IncludeCategories: | ||||||||||||||||||||||||||||||||||||||||||
| - Regex: '^<ext/.*\.h>' | ||||||||||||||||||||||||||||||||||||||||||
| Priority: 2 | ||||||||||||||||||||||||||||||||||||||||||
| - Regex: '^<.*\.h>' | ||||||||||||||||||||||||||||||||||||||||||
| Priority: 1 | ||||||||||||||||||||||||||||||||||||||||||
| - Regex: '^<.*' | ||||||||||||||||||||||||||||||||||||||||||
| Priority: 2 | ||||||||||||||||||||||||||||||||||||||||||
| - Regex: '.*' | ||||||||||||||||||||||||||||||||||||||||||
| Priority: 3 | ||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+64
to
+72
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
这样是否更合适一些 |
||||||||||||||||||||||||||||||||||||||||||
| IncludeIsMainRegex: '([-_](test|unittest))?$' | ||||||||||||||||||||||||||||||||||||||||||
| IndentCaseLabels: true | ||||||||||||||||||||||||||||||||||||||||||
| IndentPPDirectives: None | ||||||||||||||||||||||||||||||||||||||||||
| IndentWidth: 4 | ||||||||||||||||||||||||||||||||||||||||||
| IndentWrappedFunctionNames: false | ||||||||||||||||||||||||||||||||||||||||||
| JavaScriptQuotes: Leave | ||||||||||||||||||||||||||||||||||||||||||
| JavaScriptWrapImports: true | ||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+78
to
+79
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 现阶段 clang-format 只对 C/C++ 代码启用
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||
| KeepEmptyLinesAtTheStartOfBlocks: false | ||||||||||||||||||||||||||||||||||||||||||
| MacroBlockBegin: '' | ||||||||||||||||||||||||||||||||||||||||||
| MacroBlockEnd: '' | ||||||||||||||||||||||||||||||||||||||||||
| MaxEmptyLinesToKeep: 1 | ||||||||||||||||||||||||||||||||||||||||||
| NamespaceIndentation: None | ||||||||||||||||||||||||||||||||||||||||||
| ObjCBinPackProtocolList: Never | ||||||||||||||||||||||||||||||||||||||||||
| ObjCBlockIndentWidth: 2 | ||||||||||||||||||||||||||||||||||||||||||
| ObjCSpaceAfterProperty: false | ||||||||||||||||||||||||||||||||||||||||||
| ObjCSpaceBeforeProtocolList: true | ||||||||||||||||||||||||||||||||||||||||||
|
Comment on lines
+85
to
+88
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 同上
Suggested change
|
||||||||||||||||||||||||||||||||||||||||||
| PenaltyBreakAssignment: 2 | ||||||||||||||||||||||||||||||||||||||||||
| PenaltyBreakBeforeFirstCallParameter: 1 | ||||||||||||||||||||||||||||||||||||||||||
| PenaltyBreakComment: 300 | ||||||||||||||||||||||||||||||||||||||||||
| PenaltyBreakFirstLessLess: 120 | ||||||||||||||||||||||||||||||||||||||||||
| PenaltyBreakString: 1000 | ||||||||||||||||||||||||||||||||||||||||||
| PenaltyBreakTemplateDeclaration: 10 | ||||||||||||||||||||||||||||||||||||||||||
| PenaltyExcessCharacter: 1000000 | ||||||||||||||||||||||||||||||||||||||||||
| PenaltyReturnTypeOnItsOwnLine: 200 | ||||||||||||||||||||||||||||||||||||||||||
| PointerAlignment: Left | ||||||||||||||||||||||||||||||||||||||||||
| RawStringFormats: | ||||||||||||||||||||||||||||||||||||||||||
| - Language: Cpp | ||||||||||||||||||||||||||||||||||||||||||
| Delimiters: | ||||||||||||||||||||||||||||||||||||||||||
| - cc | ||||||||||||||||||||||||||||||||||||||||||
| - CC | ||||||||||||||||||||||||||||||||||||||||||
| - cpp | ||||||||||||||||||||||||||||||||||||||||||
| - Cpp | ||||||||||||||||||||||||||||||||||||||||||
| - CPP | ||||||||||||||||||||||||||||||||||||||||||
| - 'c++' | ||||||||||||||||||||||||||||||||||||||||||
| - 'C++' | ||||||||||||||||||||||||||||||||||||||||||
| CanonicalDelimiter: '' | ||||||||||||||||||||||||||||||||||||||||||
| BasedOnStyle: google | ||||||||||||||||||||||||||||||||||||||||||
| ReflowComments: true | ||||||||||||||||||||||||||||||||||||||||||
| SortIncludes: true | ||||||||||||||||||||||||||||||||||||||||||
| SortUsingDeclarations: true | ||||||||||||||||||||||||||||||||||||||||||
| SpaceAfterCStyleCast: false | ||||||||||||||||||||||||||||||||||||||||||
| SpaceAfterTemplateKeyword: true | ||||||||||||||||||||||||||||||||||||||||||
| SpaceBeforeAssignmentOperators: true | ||||||||||||||||||||||||||||||||||||||||||
| SpaceBeforeCpp11BracedList: false | ||||||||||||||||||||||||||||||||||||||||||
| SpaceBeforeCtorInitializerColon: true | ||||||||||||||||||||||||||||||||||||||||||
| SpaceBeforeInheritanceColon: true | ||||||||||||||||||||||||||||||||||||||||||
| SpaceBeforeParens: ControlStatements | ||||||||||||||||||||||||||||||||||||||||||
| SpaceBeforeRangeBasedForLoopColon: true | ||||||||||||||||||||||||||||||||||||||||||
| SpaceInEmptyParentheses: false | ||||||||||||||||||||||||||||||||||||||||||
| SpacesBeforeTrailingComments: 2 | ||||||||||||||||||||||||||||||||||||||||||
| SpacesInAngles: false | ||||||||||||||||||||||||||||||||||||||||||
| SpacesInContainerLiterals: true | ||||||||||||||||||||||||||||||||||||||||||
| SpacesInCStyleCastParentheses: false | ||||||||||||||||||||||||||||||||||||||||||
| SpacesInParentheses: false | ||||||||||||||||||||||||||||||||||||||||||
| SpacesInSquareBrackets: false | ||||||||||||||||||||||||||||||||||||||||||
| Standard: Auto | ||||||||||||||||||||||||||||||||||||||||||
|
Collaborator
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more.
Suggested change
By default, ESP-IDF compiles C++ code with C++23 language standard with GNU extensions (-std=gnu++23). |
||||||||||||||||||||||||||||||||||||||||||
| StatementMacros: | ||||||||||||||||||||||||||||||||||||||||||
| - Q_UNUSED | ||||||||||||||||||||||||||||||||||||||||||
| - QT_REQUIRE_VERSION | ||||||||||||||||||||||||||||||||||||||||||
| TabWidth: 4 | ||||||||||||||||||||||||||||||||||||||||||
| UseTab: Never | ||||||||||||||||||||||||||||||||||||||||||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,91 @@ | ||
| # 代码风格指南 | ||
|
|
||
| ## 代码格式化工具 | ||
|
|
||
| 本项目使用 clang-format 工具来统一代码风格。我们已经在项目根目录下提供了 `.clang-format` 配置文件,该配置基于 Google C++ 风格指南,并做了一些自定义调整。 | ||
|
|
||
| ### 安装 clang-format | ||
|
|
||
| 在使用之前,请确保你已经安装了 clang-format 工具: | ||
|
|
||
| - **Windows**: | ||
| ```powershell | ||
| winget install LLVM | ||
| # 或者使用 Chocolatey | ||
| choco install llvm | ||
| ``` | ||
|
|
||
| - **Linux**: | ||
| ```bash | ||
| sudo apt install clang-format # Ubuntu/Debian | ||
| sudo dnf install clang-tools-extra # Fedora | ||
| ``` | ||
|
|
||
| - **macOS**: | ||
| ```bash | ||
| brew install clang-format | ||
| ``` | ||
|
|
||
| ### 使用方法 | ||
|
|
||
| 1. **格式化单个文件**: | ||
| ```bash | ||
| clang-format -i path/to/your/file.cpp | ||
| ``` | ||
|
|
||
| 2. **格式化整个项目**: | ||
| ```bash | ||
| # 在项目根目录下执行 | ||
| find main -iname *.h -o -iname *.cc | xargs clang-format -i | ||
| ``` | ||
|
|
||
| 3. **在提交代码前检查格式**: | ||
| ```bash | ||
| # 检查文件格式是否符合规范(不修改文件) | ||
| clang-format --dry-run -Werror path/to/your/file.cpp | ||
| ``` | ||
|
|
||
| ### IDE 集成 | ||
|
|
||
| - **Visual Studio Code**: | ||
| 1. 安装 C/C++ 扩展 | ||
| 2. 在设置中启用 `C_Cpp.formatting` 为 `clang-format` | ||
| 3. 可以设置保存时自动格式化:`editor.formatOnSave: true` | ||
|
|
||
| - **CLion**: | ||
| 1. 在设置中选择 `Editor > Code Style > C/C++` | ||
| 2. 将 `Formatter` 设置为 `clang-format` | ||
| 3. 选择使用项目中的 `.clang-format` 配置文件 | ||
|
|
||
| ### 主要格式规则 | ||
|
|
||
| - 缩进使用 4 个空格 | ||
| - 行宽限制为 100 字符 | ||
| - 大括号采用 Attach 风格(与控制语句在同一行) | ||
| - 指针和引用符号靠左对齐 | ||
| - 自动排序头文件包含 | ||
| - 类访问修饰符缩进为 -4 空格 | ||
|
|
||
| ### 注意事项 | ||
|
|
||
| 1. 提交代码前请确保代码已经过格式化 | ||
| 2. 不要手动调整已格式化的代码对齐 | ||
| 3. 如果某段代码不希望被格式化,可以使用以下注释包围: | ||
| ```cpp | ||
| // clang-format off | ||
| // 你的代码 | ||
| // clang-format on | ||
| ``` | ||
|
|
||
| ### 常见问题 | ||
|
|
||
| 1. **格式化失败**: | ||
| - 检查 clang-format 版本是否过低 | ||
| - 确认文件编码为 UTF-8 | ||
| - 验证 .clang-format 文件语法是否正确 | ||
|
|
||
| 2. **与期望格式不符**: | ||
| - 检查是否使用了项目根目录下的 .clang-format 配置 | ||
| - 确认没有其他位置的 .clang-format 文件被优先使用 | ||
|
|
||
| 如有任何问题或建议,欢迎提出 issue 或 pull request。 |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
AlwaysBreakAfterDefinitionReturnType: The function definition return type breaking style to use.
替代选项是
BreakAfterReturnType: ExceptShortTypehttps://clang.llvm.org/docs/ClangFormatStyleOptions.html#alwaysbreakafterdefinitionreturntype
https://clang.llvm.org/docs/ClangFormatStyleOptions.html#breakafterreturntype