diff --git a/.clang-format b/.clang-format new file mode 100644 index 00000000000..fd4f2d951e2 --- /dev/null +++ b/.clang-format @@ -0,0 +1,167 @@ +# -*- yaml -*- + +# Copyright (C) 2021-2026 Free Software Foundation, Inc. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +# A clang format style for gdb. + +# ⚠️⚠️⚠️ DO NOT BULK REFORMAT FILES ⚠️⚠️⚠️ + +# This style is still in flux and still considered "alpha". Use "git +# clang-format" or the like to reformat just the parts your patch +# touches -- at most. At some point in the future we will bulk +# reformat and at that point we'll send out new instructions. + +# There is currently not a blessed version of clang-format. This was +# tried with versions 18-21 with various results. + +# There's a gdb bug open for discussion of the format. +# +# https://sourceware.org/bugzilla/show_bug.cgi?id=30098 +# +# It also has links to relevant upstream clang-format bugs. + +# Options here are generally in alphabetical order. + +Language: Cpp +# BasedOnStyle: GNU +AccessModifierOffset: -2 +AlignAfterOpenBracket: Align +AlignConsecutiveAssignments: false +AlignConsecutiveDeclarations: false +AlignConsecutiveMacros: false +AlignEscapedNewlines: Left +AlignOperands: true +AlignTrailingComments: true +AllowAllArgumentsOnNextLine: false +AllowAllParametersOfDeclarationOnNextLine: false +AllowShortBlocksOnASingleLine: false +AllowShortCaseLabelsOnASingleLine: false +AllowShortEnumsOnASingleLine: false +AllowShortFunctionsOnASingleLine: None +AllowShortIfStatementsOnASingleLine: Never +AllowShortLambdasOnASingleLine: All +AllowShortLoopsOnASingleLine: false +AlwaysBreakAfterReturnType: TopLevelDefinitions +AlwaysBreakBeforeMultilineStrings: false +AlwaysBreakTemplateDeclarations: Yes +# +# Run: +# git grep 'define ATTRIBUTE_' -- include gdb* | \ +# sed -e's/^.*\(ATTRIBUTE_[A-Z0-9_]*\).*$/\1/' | \ +# sort -u | \ +# sed -e "s/^\(.*\)$/ '\1',/" +AttributeMacros: [ + 'ATTRIBUTE_ALIGNED_ALIGNOF', + 'ATTRIBUTE_COLD', + 'ATTRIBUTE_FORMAT_PRINTF_STANDARD', + 'ATTRIBUTE_FPTR_PRINTF', + 'ATTRIBUTE_GCC_STRUCT', + 'ATTRIBUTE_HOT', + 'ATTRIBUTE_MALLOC', + 'ATTRIBUTE_NOCLONE', + 'ATTRIBUTE_NONNULL', + 'ATTRIBUTE_NONSTRING', + 'ATTRIBUTE_NORETURN', + 'ATTRIBUTE_NO_SANITIZE_UNDEFINED', + 'ATTRIBUTE_NULL_PRINTF', + 'ATTRIBUTE_PACKED', + 'ATTRIBUTE_PRINTF', + 'ATTRIBUTE_PURE', + 'ATTRIBUTE_RESULT_SIZE_1', + 'ATTRIBUTE_RESULT_SIZE_1_2', + 'ATTRIBUTE_RESULT_SIZE_2', + 'ATTRIBUTE_RETURNS_NONNULL', + 'ATTRIBUTE_SENTINEL', + 'ATTRIBUTE_UNUSED', + 'ATTRIBUTE_UNUSED_LABEL', + 'ATTRIBUTE_UNUSED_RESULT', + 'ATTRIBUTE_USED', + 'ATTRIBUTE_VISIBILITY', + 'ATTRIBUTE_WARN_UNUSED_RESULT', + ] +BinPackArguments: true +BinPackParameters: true +# Because BreakBeforeBraces = GNU, we don't need BraceWrapping. +BreakBeforeBinaryOperators: All +BreakBeforeBraces: GNU +BreakBeforeTernaryOperators: true +BreakConstructorInitializers: BeforeColon +BreakInheritanceList: BeforeColon +BreakStringLiterals: true +ColumnLimit: 79 +CommentPragmas: 'ARI:' +CompactNamespaces: false +ConstructorInitializerIndentWidth: 2 +ContinuationIndentWidth: 2 +Cpp11BracedListStyle: false +DerivePointerAlignment: false +DisableFormat: false +# The docs say not to use this. +# ExperimentalAutoDetectBinPacking: false +FixNamespaceComments: true +IncludeBlocks: Preserve +IndentCaseLabels: false +# This next setting is incorrect but it's a clang-format issue. +IndentGotoLabels: true +IndentPPDirectives: None +IndentWidth: 2 +IndentWrappedFunctionNames: false +KeepEmptyLinesAtTheStartOfBlocks: false +LineEnding: LF +# MacroBlockBegin: '' +# MacroBlockEnd: '' +MaxEmptyLinesToKeep: 1 +NamespaceIndentation: None +# NamespaceMacros +PackConstructorInitializers: Never +PenaltyBreakAssignment: 50 +PenaltyBreakBeforeFirstCallParameter: 100 +# clang 20 setting: +# PenaltyBreakBeforeMemberAccess: 50 +# PenaltyBreakComment +# PenaltyBreakFirstLessLess +PenaltyBreakOpenParenthesis: 100 +# PenaltyBreakString +# PenaltyBreakTemplateDeclaration +# PenaltyExcessCharacter +# PenaltyReturnTypeOnItsOwnLine +PointerAlignment: Right +# RawStringFormats: [ I don't think we need this ] +# Should be IndentOnly but that requires clang 20. +ReflowComments: false +# FIXME - enable +SortIncludes: Never +SortUsingDeclarations: true +SpaceAfterCStyleCast: true +SpaceAfterLogicalNot: false +SpaceAfterTemplateKeyword: false +SpaceBeforeAssignmentOperators: true +SpaceBeforeCpp11BracedList: true +SpaceBeforeCtorInitializerColon: true +SpaceBeforeInheritanceColon: true +SpaceBeforeParens: Always +SpaceBeforeRangeBasedForLoopColon: true +SpaceBeforeSquareBrackets: false +SpaceInEmptyBlock: false +SpacesBeforeTrailingComments: 1 +SpacesInAngles: false +SpacesInContainerLiterals: true +SpacesInParens: Never +SpacesInSquareBrackets: false +Standard: c++17 +TabWidth: 8 +TypenameMacros: [ 'ENUM_BITFIELD' ] +UseTab: ForContinuationAndIndentation diff --git a/.gitignore b/.gitignore index 7f1c81e00c4..eb44ff7f255 100644 --- a/.gitignore +++ b/.gitignore @@ -37,7 +37,6 @@ TAGS.sub .local.vimrc .lvimrc -.clang-format .clang-tidy .clangd .cache