From f20fa61eb4c323eb1642c69c236b3d9a1f8b2cdb Mon Sep 17 00:00:00 2001 From: Jay Berkenbilt Date: Sat, 2 Apr 2022 17:13:36 -0400 Subject: [PATCH] Add .clang-format and .dir-locals.el files to set coding style Configure emacs and clang-format 15 to the coding style I am choosing for qpdf. --- .clang-format | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ .dir-locals.el | 38 ++++++++++++++++++++++++++++++++++++++ TODO | 36 ++---------------------------------- 3 files changed, 90 insertions(+), 34 deletions(-) create mode 100644 .clang-format create mode 100644 .dir-locals.el diff --git a/.clang-format b/.clang-format new file mode 100644 index 00000000..e9ffa627 --- /dev/null +++ b/.clang-format @@ -0,0 +1,50 @@ +# -*- yaml -*- +# This configuration works with clang-format-15. +# See https://clang.llvm.org/docs/ClangFormatStyleOptions.html +--- +Language: Cpp +BasedOnStyle: LLVM +AlignAfterOpenBracket: AlwaysBreak +AlignEscapedNewlines: DontAlign +AlignOperands: DontAlign +AllowShortFunctionsOnASingleLine: None +AlwaysBreakAfterReturnType: AllDefinitions +AlwaysBreakTemplateDeclarations: Yes +AttributeMacros: + - QPDF_DLL + - QPDF_DLL_CLASS +BinPackArguments: false +BinPackParameters: false +BraceWrapping: + AfterClass: true + AfterFunction: true + AfterNamespace: true + AfterStruct: true + AfterUnion: true +BreakBeforeBraces: Custom +BreakConstructorInitializers: AfterColon +DeriveLineEnding: false +PackConstructorInitializers: Never +IncludeCategories: + - Regex: '^["<](qpdf)/' + Priority: 1 + SortPriority: 0 + CaseSensitive: false + - Regex: '.*' + Priority: 2 + SortPriority: 0 + CaseSensitive: false + - Regex: '.*' + Priority: 1 + SortPriority: 0 + CaseSensitive: false +IndentCaseBlocks: true +IndentExternBlock: Indent +IndentPPDirectives: AfterHash +IndentWidth: 4 +InsertTrailingCommas: Wrapped +KeepEmptyLinesAtTheStartOfBlocks: false +NamespaceIndentation: All +PointerAlignment: Left +PPIndentWidth: 1 +SpaceBeforeInheritanceColon: false diff --git a/.dir-locals.el b/.dir-locals.el new file mode 100644 index 00000000..d3c0b626 --- /dev/null +++ b/.dir-locals.el @@ -0,0 +1,38 @@ +((nil . ((indent-tabs-mode . t) + (qpdf-cc-style + . + ("qpdf" + (c-basic-offset . 4) + (c-comment-only-line-offset . 0) + (c-offsets-alist + (defun-block-intro . +) + (block-open . 0) + (substatement-open . 0) + (statement-cont . +) + (case-label . 0) + (access-label . -2) + (statement-case-intro . +) + (statement-case-open . +) + (arglist-intro . +) + (arglist-close . 0) + (inline-open . 0) + (inlambda . 0) + ) + ) + ) + (c-noise-macro-names . ("QPDF_DLL" "QPDF_DLL_CLASS" "QPDF_DLL_LOCAL")) + ) + ) + (c++-mode . ((eval . (progn + (add-to-list 'c-style-alist qpdf-cc-style) + (c-set-style "qpdf") + ) + )) + ) + (c-mode . ((eval . (progn + (add-to-list 'c-style-alist qpdf-cc-style) + (c-set-style "qpdf") + ) + )) + ) +) diff --git a/TODO b/TODO index d214d5e7..6fd7f582 100644 --- a/TODO +++ b/TODO @@ -60,43 +60,11 @@ Use clang-format-15. as well as the use of a comment to force a line break. -Tentative .clang-format: - -``` ---- -Language: Cpp -BasedOnStyle: LLVM -AlignAfterOpenBracket: AlwaysBreak -AlignEscapedNewlines: DontAlign -AllowShortFunctionsOnASingleLine: None -BinPackArguments: false -BinPackParameters: false -BreakConstructorInitializers: BeforeComma -DeriveLineEnding: false -PackConstructorInitializers: Never -IncludeCategories: - - Regex: '^["<](qpdf)/' - Priority: 1 - SortPriority: 0 - CaseSensitive: false - - Regex: '.*' - Priority: 2 - SortPriority: 0 - CaseSensitive: false - - Regex: '.*' - Priority: 1 - SortPriority: 0 - CaseSensitive: false -IndentCaseBlocks: true -IndentWidth: 4 -InsertTrailingCommas: Wrapped -KeepEmptyLinesAtTheStartOfBlocks: false -PointerAlignment: Left -``` +https://clang.llvm.org/docs/ClangFormatStyleOptions.html Remaining work: -* Try to get emacs c-style to match as closely as possible +* Document .dir-locals.el and how it's close but not perfect * Consider blame.ignoreRevsFile if it seems to help * Add a `make format` similar to `make spell` (or whatever this ends up being with cmake)