From: Edwin Rodriguez Date: Thu, 14 Aug 2025 13:45:31 +0000 (-0400) Subject: Add .clang-format configuration file X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F65049%2Fhead;p=ceph.git Add .clang-format configuration file Fixes: https://tracker.ceph.com/issues/72587 Signed-off-by: Edwin Rodriguez --- diff --git a/.clang-format b/.clang-format new file mode 100644 index 00000000000..cf35b865a78 --- /dev/null +++ b/.clang-format @@ -0,0 +1,219 @@ +--- + +# Documentation on clang-format options here: +# https://clang.llvm.org/docs/ClangFormatStyleOptions.html + +Language: Cpp +Standard: c++20 + +# Google style is a good starting point; modifiers attempt to match style +# guide here: https://github.com/ceph/ceph/blob/main/CodingStyle +BasedOnStyle: Google +IndentWidth: 2 +TabWidth: 8 +UseTab: Never +MaxEmptyLinesToKeep: 2 +ContinuationIndentWidth: 4 + +# The intended impact here is to allow up to 96 characters, but break at 80 if +# 96 is exceeded. +ColumnLimit: 80 + +# The "Penalty" concept in clang-format is not well +# documented, see here for more: https://stackoverflow.com/questions/26635370 +# +# Note that the penalties are not numbers of characters, they act more like +# decision weights. +PenaltyExcessCharacter: 50 +PenaltyBreakAssignment: 50 +PenaltyBreakBeforeFirstCallParameter: 50 +PenaltyBreakOpenParenthesis: 50 + +# Brace wrapping to match style guide +BreakBeforeBraces: Custom +BraceWrapping: + AfterCaseLabel: false + AfterClass: false + AfterControlStatement: Never + AfterEnum: false + AfterFunction: true + AfterNamespace: false + AfterStruct: false + BeforeCatch: false + BeforeElse: false + BeforeLambdaBody: false + SplitEmptyFunction: false + SplitEmptyRecord: false + SplitEmptyNamespace: false + +# Access modifiers indent/outdent specified relative to body, use -2 to +# align to braces. Also do not indent case blocks. Finally, an emply line +# should always precede "private:" or "public:" or "protected:" +AccessModifierOffset: -2 +IndentCaseLabels: false +EmptyLineBeforeAccessModifier: Always +ConstructorInitializerIndentWidth: 2 + +#Always break after an open bracket, if the parameters don’t fit on a single line +AlignAfterOpenBracket: AlwaysBreak + +# Newline escapes should be aligned and located at the leftmost alignment +AlignEscapedNewlines: Left + +# Align after operands across continuation into multiple lines for binary and +# ternary. +AlignOperands: Align + +# Do not align trailing comments across multiple lines. Note that this only applies +# to the single-line comment style using "//". Block inlines are always left alone. +AlignTrailingComments: false + +# If the function declaration doesn’t fit on a line, allow putting all parameters of a +# function declaration onto the next line even if BinPackParameters is OnePerLine +AllowAllParametersOfDeclarationOnNextLine: false + +# Do not allow short enums on a single line. +AllowShortEnumsOnASingleLine: false + +# Only merge functions defined inside a class. Implies empty +AllowShortFunctionsOnASingleLine: All + +# Never put short ifs on the same line. +AllowShortIfStatementsOnASingleLine: false + +# If true, "while (true) continue;" can be put on a single line +AllowShortLoopsOnASingleLine: false + +# Always break after the return type of function definitions. +AlwaysBreakAfterReturnType: AllDefinitions + +# Always break after template declaration. +AlwaysBreakTemplateDeclarations: Yes + +# If false, a function declaration’s or function definition’s parameters +# will either all be on the same line or will have one line each. +BinPackArguments: true +BinPackParameters: false + +# The break should always be after the binary and ternary operands. +BreakBeforeBinaryOperators: None +BreakBeforeTernaryOperators: true + +# Break constructor initializers before the colon and after the commas. +# Constructor() +# : initializer1(), +# initializer2() +BreakConstructorInitializers: AfterColon + +# Pad the braced list with spaces inside the braces. +Cpp11BracedListStyle: true + +# Where to put the & and the * in the case of pointers/references. +DerivePointerAlignment: false +PointerAlignment: Left + +# Keep empty lines at end of file. +KeepEmptyLinesAtEOF: false + +# Keep empty lines at start of a block. +KeepEmptyLinesAtTheStartOfBlocks: true + +# Align lambda body relative to the lambda signature. +LambdaBodyIndentation: Signature + +# No indent in namespaces. +NamespaceIndentation: None + +# No way to specify C vs C++ style comment for namespace closure, so just +# leave them alone. +FixNamespaceComments: true + +# 1 space before trailing comments +SpacesBeforeTrailingComments: 1 + +# Colon spacing should always be '"key" : "value"' +BitFieldColonSpacing: Both + +# Do not break up strings into multi-line strings. This becomes a problem when +# multi-line strings with no spaces are broken. +BreakStringLiterals: true + +# C-tor should always break before the : and again before the {} in cases where +# otherwise the c-tor could theoretically be one-lined. In the case where the +# initializer list is short enough to fit on one line after the wrap, do not break +# into individual lines. +# Note NextLineOnly requires clang-format >= 15 +PackConstructorInitializers: NextLineOnly + +# includes are sorted based on the other suboptions below +SortIncludes: true +# Merge multiple #include blocks together and sort as one. Then split into groups based on +# category priority. +IncludeBlocks: Regroup +# Regular expressions denoting the different #include categories used for ordering #includes. +IncludeCategories: + - Regex: 'debug.h' + Priority: 4 + - Regex: '\"\./[^/]+\"' + Priority: 1 + - Regex: '\"[^/]+\"' + Priority: 8 + - Regex: 'boost' + Priority: 5 + - Regex: '<.*\.h' + Priority: 2 + - Regex: '<' + Priority: 3 + - Regex: '.*' + Priority: 6 + +# use "template <>" instead of "template<>" +SpaceAfterTemplateKeyword: true + +# Always pad assignments with a space, like "variable = 2;". +SpaceBeforeAssignmentOperators: true + +# Turn off comment reflow entirely +# TODO: This was done to prevent undoing good formatting of doxygen @brief @param +# etc multi-line comments (similar to this comment). Investigate comment +# pragmas to leave these alone? +ReflowComments: false + +# There should always be an empty line between method definiton blocks. +SeparateDefinitionBlocks: Always + +# The penalty for each line break introduced inside a comment. +PenaltyBreakComment: 0 + +# How many spaces are allowed at the start of a line comment. To disable the maximum +# set it to -1, apart from that the maximum takes precedence over the minimum +SpacesInLineCommentPrefix: + Minimum: 1 + Maximum: -1 + +--- + +Language: Proto + +# Google style is a good starting point; +BasedOnStyle: Google +IndentWidth: 2 + +# The intended impact here is to allow up to 96 characters, but break at 80 if +# 96 is exceeded. The "Penalty" concept in clang-format is not well +# documented, see here for more: https://stackoverflow.com/questions/26635370 +ColumnLimit: 80 +PenaltyExcessCharacter: 50 + +# Turn off comment reflow entirely +# TODO: This was done to prevent undoing user-defined formatting of multi-line +# comments. +ReflowComments: false + +--- +Language: Json + +# Google style is a good starting point +BasedOnStyle: Google +IndentWidth: 2 +MaxEmptyLinesToKeep: 2