1# Basic .clang-format
2---
3BasedOnStyle: WebKit
4AlignAfterOpenBracket: DontAlign
5AlignConsecutiveMacros: AcrossEmptyLines
6AlignConsecutiveAssignments: false
7AlignConsecutiveDeclarations: false
8AlignEscapedNewlines: Left
9AlignOperands: false
10AlignTrailingComments: true
11AllowAllArgumentsOnNextLine: false
12AllowAllParametersOfDeclarationOnNextLine: false
13AllowShortBlocksOnASingleLine: Never
14AllowShortCaseLabelsOnASingleLine: false
15AllowShortFunctionsOnASingleLine: InlineOnly
16AllowShortIfStatementsOnASingleLine: Never
17AllowShortLoopsOnASingleLine: false
18AlwaysBreakAfterReturnType: TopLevelDefinitions
19AlwaysBreakBeforeMultilineStrings: false
20AlwaysBreakTemplateDeclarations: MultiLine
21BinPackArguments: true
22BinPackParameters: true
23BreakBeforeBinaryOperators: None
24BreakBeforeBraces: WebKit
25BreakBeforeTernaryOperators: false
26# TODO: BreakStringLiterals can cause very strange formatting so turn it off?
27BreakStringLiterals: false
28# Prefer:
29# some_var = function(arg1,
30#    arg2)
31# over:
32# some_var =
33#     function(arg1, arg2)
34PenaltyBreakAssignment: 100
35# Prefer:
36# some_long_function(arg1, arg2
37#     arg3)
38# over:
39# some_long_function(
40#     arg1, arg2, arg3)
41PenaltyBreakBeforeFirstCallParameter: 100
42CompactNamespaces: true
43DerivePointerAlignment: false
44DisableFormat: false
45ForEachMacros:
46  - ARB_ARRFOREACH
47  - ARB_ARRFOREACH_REVWCOND
48  - ARB_ARRFOREACH_REVERSE
49  - ARB_FOREACH
50  - ARB_FOREACH_FROM
51  - ARB_FOREACH_SAFE
52  - ARB_FOREACH_REVERSE
53  - ARB_FOREACH_REVERSE_FROM
54  - ARB_FOREACH_REVERSE_SAFE
55  - BIT_FOREACH_ISCLR
56  - BIT_FOREACH_ISSET
57  - CPU_FOREACH
58  - CPU_FOREACH_ISCLR
59  - CPU_FOREACH_ISSET
60  - FOREACH_THREAD_IN_PROC
61  - FOREACH_PROC_IN_SYSTEM
62  - FOREACH_PRISON_CHILD
63  - FOREACH_PRISON_DESCENDANT
64  - FOREACH_PRISON_DESCENDANT_LOCKED
65  - FOREACH_PRISON_DESCENDANT_LOCKED_LEVEL
66  - MNT_VNODE_FOREACH_ALL
67  - MNT_VNODE_FOREACH_ACTIVE
68  - RB_FOREACH
69  - RB_FOREACH_FROM
70  - RB_FOREACH_SAFE
71  - RB_FOREACH_REVERSE
72  - RB_FOREACH_REVERSE_FROM
73  - RB_FOREACH_REVERSE_SAFE
74  - SLIST_FOREACH
75  - SLIST_FOREACH_FROM
76  - SLIST_FOREACH_FROM_SAFE
77  - SLIST_FOREACH_SAFE
78  - SLIST_FOREACH_PREVPTR
79  - SPLAY_FOREACH
80  - LIST_FOREACH
81  - LIST_FOREACH_FROM
82  - LIST_FOREACH_FROM_SAFE
83  - LIST_FOREACH_SAFE
84  - STAILQ_FOREACH
85  - STAILQ_FOREACH_FROM
86  - STAILQ_FOREACH_FROM_SAFE
87  - STAILQ_FOREACH_SAFE
88  - TAILQ_FOREACH
89  - TAILQ_FOREACH_FROM
90  - TAILQ_FOREACH_FROM_SAFE
91  - TAILQ_FOREACH_REVERSE
92  - TAILQ_FOREACH_REVERSE_FROM
93  - TAILQ_FOREACH_REVERSE_FROM_SAFE
94  - TAILQ_FOREACH_REVERSE_SAFE
95  - TAILQ_FOREACH_SAFE
96  - VM_MAP_ENTRY_FOREACH
97  - VM_PAGE_DUMP_FOREACH
98SpaceBeforeParens: ControlStatementsExceptForEachMacros
99IndentCaseLabels: false
100IndentPPDirectives: None
101Language: Cpp
102NamespaceIndentation: None
103PointerAlignment: Right
104ContinuationIndentWidth: 4
105IndentWidth: 8
106TabWidth: 8
107ColumnLimit: 80
108UseTab: Always
109SpaceAfterCStyleCast: false
110IncludeBlocks: Regroup
111IncludeCategories:
112  - Regex: '^\"opt_.*\.h\"'
113    Priority: 1
114    SortPriority: 10
115  - Regex: '^<sys/cdefs\.h>'
116    Priority: 2
117    SortPriority: 20
118  - Regex: '^<sys/types\.h>'
119    Priority: 2
120    SortPriority: 21
121  - Regex: '^<sys/param\.h>'
122    Priority: 2
123    SortPriority: 22
124  - Regex: '^<sys/systm\.h>'
125    Priority: 2
126    SortPriority: 23
127  - Regex: '^<sys.*/'
128    Priority: 2
129    SortPriority: 24
130  - Regex: '^<vm/vm\.h>'
131    Priority: 3
132    SortPriority: 30
133  - Regex: '^<vm/'
134    Priority: 3
135    SortPriority: 31
136  - Regex: '^<machine/'
137    Priority: 4
138    SortPriority: 40
139  - Regex: '^<(x86|amd64|i386|xen)/'
140    Priority: 5
141    SortPriority: 50
142  - Regex: '^<dev/'
143    Priority: 6
144    SortPriority: 60
145  - Regex: '^<net.*/'
146    Priority: 7
147    SortPriority: 70
148  - Regex: '^<protocols/'
149    Priority: 7
150    SortPriority: 71
151  - Regex: '^<(fs|nfs(|client|server)|ufs)/'
152    Priority: 8
153    SortPriority: 80
154  - Regex: '^<[^/].*\.h'
155    Priority: 9
156    SortPriority: 90
157  - Regex: '^\".*\.h\"'
158    Priority: 10
159    SortPriority: 100
160# LLVM's header include ordering style is almost the exact opposite of ours.
161# Unfortunately, they have hard-coded their preferences into clang-format.
162# Clobbering this regular expression to avoid matching prevents non-system
163# headers from being forcibly moved to the top of the include list.
164# http://llvm.org/docs/CodingStandards.html#include-style
165IncludeIsMainRegex: 'BLAH_DONT_MATCH_ANYTHING'
166SortIncludes: true
167KeepEmptyLinesAtTheStartOfBlocks: false
168TypenameMacros:
169  - ARB_ELMTYPE
170  - ARB_HEAD
171  - ARB8_HEAD
172  - ARB16_HEAD
173  - ARB32_HEAD
174  - ARB_ENTRY
175  - ARB8_ENTRY
176  - ARB16_ENTRY
177  - ARB32_ENTRY
178  - LIST_CLASS_ENTRY
179  - LIST_CLASS_HEAD
180  - LIST_ENTRY
181  - LIST_HEAD
182  - QUEUE_TYPEOF
183  - RB_ENTRY
184  - RB_HEAD
185  - SLIST_CLASS_HEAD
186  - SLIST_CLASS_ENTRY
187  - SLIST_HEAD
188  - SLIST_ENTRY
189  - SMR_POINTER
190  - SPLAY_ENTRY
191  - SPLAY_HEAD
192  - STAILQ_CLASS_ENTRY
193  - STAILQ_CLASS_HEAD
194  - STAILQ_ENTRY
195  - STAILQ_HEAD
196  - TAILQ_CLASS_ENTRY
197  - TAILQ_CLASS_HEAD
198  - TAILQ_ENTRY
199  - TAILQ_HEAD
200