aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJay Berkenbilt <ejb@ql.org>2022-04-02 23:13:36 +0200
committerJay Berkenbilt <ejb@ql.org>2022-04-04 14:10:40 +0200
commitf20fa61eb4c323eb1642c69c236b3d9a1f8b2cdb (patch)
treeb9245b78632c60a9922347a53a8e9937bb5f52c5
parent97fc98901cc2dcfa3e1903374cb9040e93fd142f (diff)
downloadqpdf-f20fa61eb4c323eb1642c69c236b3d9a1f8b2cdb.tar.zst
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.
-rw-r--r--.clang-format50
-rw-r--r--.dir-locals.el38
-rw-r--r--TODO36
3 files changed, 90 insertions, 34 deletions
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)