cppfastio / fast_io

Freestanding fast input/output for C++20
MIT License
666 stars 55 forks source link

A new clang-format style #875

Closed ikspress closed 1 month ago

ikspress commented 1 month ago
AccessModifierOffset: -4
AlignArrayOfStructures: Right
AlignConsecutiveBitFields: Consecutive
AlignConsecutiveMacros: Consecutive
AllowShortBlocksOnASingleLine: Empty
AllowShortFunctionsOnASingleLine: Empty
AlwaysBreakTemplateDeclarations: Yes
BasedOnStyle: LLVM
BreakBeforeTernaryOperators: false
BreakConstructorInitializers: AfterColon
BreakInheritanceList: AfterColon
IndentPPDirectives: AfterHash
IndentWidth: 4
KeepEmptyLinesAtTheStartOfBlocks: false
PackConstructorInitializers: CurrentLine
QualifierAlignment: Right
RemoveBracesLLVM: true
RemoveParentheses: ReturnStatement
RemoveSemicolon: true
ShortNamespaceLines: 0
SortIncludes: CaseSensitive

AttributeMacros:
  - CPPLAB_ATTRIB_forceinline
  - CPPLAB_ATTRIB_may_alias
  - NTSYSAPI
  - NTSYSCALLAPI
  - WINADVAPI

StatementMacros:
  - _Pragma # llvm/llvm-project#54180

这个是我目前在用的 .clang-format 格式,与本项目有较大区别

  1. 我使用空格作为缩进,而不是制表符
  2. 我的花括号不是独占一行
  3. 尽量少的花括号
  4. 限定到一行 80 字符

124条我认为可以调整,fast_io 的代码格式似乎不大好

ikspress commented 1 month ago

https://github.com/cppfastio/fast_io/blob/32a43da1ea6598457dd8e7cd70b423b39a00a212/include/fast_io_core_impl/dynamic_output_buffer.h#L138-L160

如你所见,虽然没有行宽限定,但是这些地方依然换行了 我认为 150 行宽最好,这样可以一行的代码正好充满整个 vscode(1080p屏幕,125%缩放) 卢瑟群的 no one 也支持这么做

YexuanXiao commented 1 month ago

fast_io当前的格式文件是为了

  1. 符合作者习惯
  2. 协作保持一致

而编写的。 因此

1: 将制表符换位空格没意义,这是编辑器应该解决的问题 2: 花括号换行是习惯如此,减少行数让内容更紧凑不是目标 3: 同 2 4: clang-format 不准确的行为是问题,可以使用变通方法进行调整,但还需要调查调整的实际效果和影响

另外需要注意,fast_io当前使用__has_include来检测依赖,因此不能重排头文件顺序。

havedifficultyinfindingnames commented 1 month ago
  1. 反对更换制表符为空格,这就是制表符的本意。制表符应该显示为多少空格应该在编辑器中调整。
  2. 花括号换行是项目作者的习惯。
  3. 不能为了减少花括号而导致代码误读。在自动换行的情况下减少花括号也会导致可读性下降。
  4. 限定一行到多少字符是很愚蠢的行为。自动换行应该由编辑器控制。不同人显示屏能显示的列数是不同的。如果涉及到逻辑的换行并缩进应该由手动书写,clang-format无法胜任这个工作。这也导致了3。如果你要设个自动换行,::fast_io::operations::defines::decay::details::print_freestanding_params_okay<...>应该显示在一行,而这(不算尖括号)就79个字符了,限制到80个字符显然不合理。而限制到150个字符或其他数字会导致屏幕宽度在120左右的开启或不开启自动换行都非常难受。因此人为设置一个每行限制到多少字符是很愚蠢的行为。
ikspress commented 1 month ago

行吧,我回头吧行宽设置到一个离谱的值来修复 2 楼代码片段的问题