summaryrefslogtreecommitdiffstatshomepage
path: root/.clang-format
diff options
context:
space:
mode:
authorMiguel Ojeda <miguel.ojeda.sandonis@gmail.com>2018-04-10 15:32:40 -0800
committerLinus Torvalds <torvalds@linux-foundation.org>2018-04-11 09:28:35 -0800
commitd4ef8d3ff005c70f6c9e2ffea14cc65fc8fe328d (patch)
treec91fcb2d6157e9c2af86d1d2d87a5b890ecefa1d /.clang-format
parent3ea056c50476f877f8bceb560ab69871098cb3a9 (diff)
downloadlinux-stable-d4ef8d3ff005c70f6c9e2ffea14cc65fc8fe328d.tar.gz
linux-stable-d4ef8d3ff005c70f6c9e2ffea14cc65fc8fe328d.tar.bz2
linux-stable-d4ef8d3ff005c70f6c9e2ffea14cc65fc8fe328d.tar.xz
linux-stable-d4ef8d3ff005c70f6c9e2ffea14cc65fc8fe328d.zip
clang-format: add configuration file
clang-format is a tool to format C/C++/... code according to a set of rules and heuristics. Like most tools, it is not perfect nor covers every single case, but it is good enough to be helpful. In particular, it is useful for quickly re-formatting blocks of code automatically, for reviewing full files in order to spot coding style mistakes, typos and possible improvements. It is also handy for sorting ``#includes``, for aligning variables and macros, for reflowing text and other similar tasks. It also serves as a teaching tool/guide for newcomers. The tool itself has been already included in the repositories of popular Linux distributions for a long time. The rules in this file are intended for clang-format >= 4, which is easily available in most distributions. This commit adds the configuration file that contains the rules that the tool uses to know how to format the code according to the kernel coding style. This gives us several advantages: * clang-format works out of the box with reasonable defaults; avoiding that everyone has to re-do the configuration. * Everyone agrees (eventually) on what is the most useful default configuration for most of the kernel. * If it becomes commonplace among kernel developers, clang-format may feel compelled to support us better. They already recognize the Linux kernel and its style in their documentation and in one of the style sub-options. Some of clang-format's features relevant for the kernel are: * Uses clang's tooling support behind the scenes to parse and rewrite the code. It is not based on ad-hoc regexps. * Supports reasonably well the Linux kernel coding style. * Fast enough to be used at the press of a key. * There are already integrations (either built-in or third-party) for many common editors used by kernel developers (e.g. vim, emacs, Sublime, Atom...) that allow you to format an entire file or, more usefully, just your selection. * Able to parse unified diffs -- you can, for instance, reformat only the lines changed by a git commit. * Able to reflow text comments as well. * Widely supported and used by hundreds of developers in highly complex projects and organizations (e.g. the LLVM project itself, Chromium, WebKit, Google, Mozilla...). Therefore, it will be supported for a long time. See more information about the tool at: https://clang.llvm.org/docs/ClangFormat.html https://clang.llvm.org/docs/ClangFormatStyleOptions.html Link: http://lkml.kernel.org/r/20180318171632.qfkemw3mwbcukth6@gmail.com Signed-off-by: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com> Cc: Randy Dunlap <rdunlap@infradead.org> Cc: Andy Whitcroft <apw@canonical.com> Cc: Joe Perches <joe@perches.com> Cc: Jonathan Corbet <corbet@lwn.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to '.clang-format')
-rw-r--r--.clang-format428
1 files changed, 428 insertions, 0 deletions
diff --git a/.clang-format b/.clang-format
new file mode 100644
index 000000000000..faffc0d5af4e
--- /dev/null
+++ b/.clang-format
@@ -0,0 +1,428 @@
1# SPDX-License-Identifier: GPL-2.0
2#
3# clang-format configuration file. Intended for clang-format >= 4.
4#
5# For more information, see:
6#
7# Documentation/process/clang-format.rst
8# https://clang.llvm.org/docs/ClangFormat.html
9# https://clang.llvm.org/docs/ClangFormatStyleOptions.html
10#
11---
12AccessModifierOffset: -4
13AlignAfterOpenBracket: Align
14AlignConsecutiveAssignments: false
15AlignConsecutiveDeclarations: false
16#AlignEscapedNewlines: Left # Unknown to clang-format-4.0
17AlignOperands: true
18AlignTrailingComments: false
19AllowAllParametersOfDeclarationOnNextLine: false
20AllowShortBlocksOnASingleLine: false
21AllowShortCaseLabelsOnASingleLine: false
22AllowShortFunctionsOnASingleLine: None
23AllowShortIfStatementsOnASingleLine: false
24AllowShortLoopsOnASingleLine: false
25AlwaysBreakAfterDefinitionReturnType: None
26AlwaysBreakAfterReturnType: None
27AlwaysBreakBeforeMultilineStrings: false
28AlwaysBreakTemplateDeclarations: false
29BinPackArguments: true
30BinPackParameters: true
31BraceWrapping:
32 AfterClass: false
33 AfterControlStatement: false
34 AfterEnum: false
35 AfterFunction: true
36 AfterNamespace: true
37 AfterObjCDeclaration: false
38 AfterStruct: false
39 AfterUnion: false
40 #AfterExternBlock: false # Unknown to clang-format-5.0
41 BeforeCatch: false
42 BeforeElse: false
43 IndentBraces: false
44 #SplitEmptyFunction: true # Unknown to clang-format-4.0
45 #SplitEmptyRecord: true # Unknown to clang-format-4.0
46 #SplitEmptyNamespace: true # Unknown to clang-format-4.0
47BreakBeforeBinaryOperators: None
48BreakBeforeBraces: Custom
49#BreakBeforeInheritanceComma: false # Unknown to clang-format-4.0
50BreakBeforeTernaryOperators: false
51BreakConstructorInitializersBeforeComma: false
52#BreakConstructorInitializers: BeforeComma # Unknown to clang-format-4.0
53BreakAfterJavaFieldAnnotations: false
54BreakStringLiterals: false
55ColumnLimit: 80
56CommentPragmas: '^ IWYU pragma:'
57#CompactNamespaces: false # Unknown to clang-format-4.0
58ConstructorInitializerAllOnOneLineOrOnePerLine: false
59ConstructorInitializerIndentWidth: 8
60ContinuationIndentWidth: 8
61Cpp11BracedListStyle: false
62DerivePointerAlignment: false
63DisableFormat: false
64ExperimentalAutoDetectBinPacking: false
65#FixNamespaceComments: false # Unknown to clang-format-4.0
66
67# Taken from:
68# git grep -h '^#define [^[:space:]]*for_each[^[:space:]]*(' include/ \
69# | sed "s,^#define \([^[:space:]]*for_each[^[:space:]]*\)(.*$, - '\1'," \
70# | sort | uniq
71ForEachMacros:
72 - 'apei_estatus_for_each_section'
73 - 'ata_for_each_dev'
74 - 'ata_for_each_link'
75 - 'ax25_for_each'
76 - 'ax25_uid_for_each'
77 - 'bio_for_each_integrity_vec'
78 - '__bio_for_each_segment'
79 - 'bio_for_each_segment'
80 - 'bio_for_each_segment_all'
81 - 'bio_list_for_each'
82 - 'bip_for_each_vec'
83 - 'blkg_for_each_descendant_post'
84 - 'blkg_for_each_descendant_pre'
85 - 'blk_queue_for_each_rl'
86 - 'bond_for_each_slave'
87 - 'bond_for_each_slave_rcu'
88 - 'btree_for_each_safe128'
89 - 'btree_for_each_safe32'
90 - 'btree_for_each_safe64'
91 - 'btree_for_each_safel'
92 - 'card_for_each_dev'
93 - 'cgroup_taskset_for_each'
94 - 'cgroup_taskset_for_each_leader'
95 - 'cpufreq_for_each_entry'
96 - 'cpufreq_for_each_entry_idx'
97 - 'cpufreq_for_each_valid_entry'
98 - 'cpufreq_for_each_valid_entry_idx'
99 - 'css_for_each_child'
100 - 'css_for_each_descendant_post'
101 - 'css_for_each_descendant_pre'
102 - 'device_for_each_child_node'
103 - 'drm_atomic_crtc_for_each_plane'
104 - 'drm_atomic_crtc_state_for_each_plane'
105 - 'drm_atomic_crtc_state_for_each_plane_state'
106 - 'drm_for_each_connector_iter'
107 - 'drm_for_each_crtc'
108 - 'drm_for_each_encoder'
109 - 'drm_for_each_encoder_mask'
110 - 'drm_for_each_fb'
111 - 'drm_for_each_legacy_plane'
112 - 'drm_for_each_plane'
113 - 'drm_for_each_plane_mask'
114 - 'drm_mm_for_each_hole'
115 - 'drm_mm_for_each_node'
116 - 'drm_mm_for_each_node_in_range'
117 - 'drm_mm_for_each_node_safe'
118 - 'for_each_active_drhd_unit'
119 - 'for_each_active_iommu'
120 - 'for_each_available_child_of_node'
121 - 'for_each_bio'
122 - 'for_each_board_func_rsrc'
123 - 'for_each_bvec'
124 - 'for_each_child_of_node'
125 - 'for_each_clear_bit'
126 - 'for_each_clear_bit_from'
127 - 'for_each_cmsghdr'
128 - 'for_each_compatible_node'
129 - 'for_each_console'
130 - 'for_each_cpu'
131 - 'for_each_cpu_and'
132 - 'for_each_cpu_not'
133 - 'for_each_cpu_wrap'
134 - 'for_each_dev_addr'
135 - 'for_each_dma_cap_mask'
136 - 'for_each_drhd_unit'
137 - 'for_each_dss_dev'
138 - 'for_each_efi_memory_desc'
139 - 'for_each_efi_memory_desc_in_map'
140 - 'for_each_endpoint_of_node'
141 - 'for_each_evictable_lru'
142 - 'for_each_fib6_node_rt_rcu'
143 - 'for_each_fib6_walker_rt'
144 - 'for_each_free_mem_range'
145 - 'for_each_free_mem_range_reverse'
146 - 'for_each_func_rsrc'
147 - 'for_each_hstate'
148 - 'for_each_if'
149 - 'for_each_iommu'
150 - 'for_each_ip_tunnel_rcu'
151 - 'for_each_irq_nr'
152 - 'for_each_lru'
153 - 'for_each_matching_node'
154 - 'for_each_matching_node_and_match'
155 - 'for_each_memblock'
156 - 'for_each_memblock_type'
157 - 'for_each_memcg_cache_index'
158 - 'for_each_mem_pfn_range'
159 - 'for_each_mem_range'
160 - 'for_each_mem_range_rev'
161 - 'for_each_migratetype_order'
162 - 'for_each_msi_entry'
163 - 'for_each_net'
164 - 'for_each_netdev'
165 - 'for_each_netdev_continue'
166 - 'for_each_netdev_continue_rcu'
167 - 'for_each_netdev_feature'
168 - 'for_each_netdev_in_bond_rcu'
169 - 'for_each_netdev_rcu'
170 - 'for_each_netdev_reverse'
171 - 'for_each_netdev_safe'
172 - 'for_each_net_rcu'
173 - 'for_each_new_connector_in_state'
174 - 'for_each_new_crtc_in_state'
175 - 'for_each_new_plane_in_state'
176 - 'for_each_new_private_obj_in_state'
177 - 'for_each_node'
178 - 'for_each_node_by_name'
179 - 'for_each_node_by_type'
180 - 'for_each_node_mask'
181 - 'for_each_node_state'
182 - 'for_each_node_with_cpus'
183 - 'for_each_node_with_property'
184 - 'for_each_of_allnodes'
185 - 'for_each_of_allnodes_from'
186 - 'for_each_of_pci_range'
187 - 'for_each_old_connector_in_state'
188 - 'for_each_old_crtc_in_state'
189 - 'for_each_oldnew_connector_in_state'
190 - 'for_each_oldnew_crtc_in_state'
191 - 'for_each_oldnew_plane_in_state'
192 - 'for_each_oldnew_private_obj_in_state'
193 - 'for_each_old_plane_in_state'
194 - 'for_each_old_private_obj_in_state'
195 - 'for_each_online_cpu'
196 - 'for_each_online_node'
197 - 'for_each_online_pgdat'
198 - 'for_each_pci_bridge'
199 - 'for_each_pci_dev'
200 - 'for_each_pci_msi_entry'
201 - 'for_each_populated_zone'
202 - 'for_each_possible_cpu'
203 - 'for_each_present_cpu'
204 - 'for_each_prime_number'
205 - 'for_each_prime_number_from'
206 - 'for_each_process'
207 - 'for_each_process_thread'
208 - 'for_each_property_of_node'
209 - 'for_each_reserved_mem_region'
210 - 'for_each_resv_unavail_range'
211 - 'for_each_rtdcom'
212 - 'for_each_rtdcom_safe'
213 - 'for_each_set_bit'
214 - 'for_each_set_bit_from'
215 - 'for_each_sg'
216 - 'for_each_sg_page'
217 - '__for_each_thread'
218 - 'for_each_thread'
219 - 'for_each_zone'
220 - 'for_each_zone_zonelist'
221 - 'for_each_zone_zonelist_nodemask'
222 - 'fwnode_for_each_available_child_node'
223 - 'fwnode_for_each_child_node'
224 - 'fwnode_graph_for_each_endpoint'
225 - 'gadget_for_each_ep'
226 - 'hash_for_each'
227 - 'hash_for_each_possible'
228 - 'hash_for_each_possible_rcu'
229 - 'hash_for_each_possible_rcu_notrace'
230 - 'hash_for_each_possible_safe'
231 - 'hash_for_each_rcu'
232 - 'hash_for_each_safe'
233 - 'hctx_for_each_ctx'
234 - 'hlist_bl_for_each_entry'
235 - 'hlist_bl_for_each_entry_rcu'
236 - 'hlist_bl_for_each_entry_safe'
237 - 'hlist_for_each'
238 - 'hlist_for_each_entry'
239 - 'hlist_for_each_entry_continue'
240 - 'hlist_for_each_entry_continue_rcu'
241 - 'hlist_for_each_entry_continue_rcu_bh'
242 - 'hlist_for_each_entry_from'
243 - 'hlist_for_each_entry_from_rcu'
244 - 'hlist_for_each_entry_rcu'
245 - 'hlist_for_each_entry_rcu_bh'
246 - 'hlist_for_each_entry_rcu_notrace'
247 - 'hlist_for_each_entry_safe'
248 - '__hlist_for_each_rcu'
249 - 'hlist_for_each_safe'
250 - 'hlist_nulls_for_each_entry'
251 - 'hlist_nulls_for_each_entry_from'
252 - 'hlist_nulls_for_each_entry_rcu'
253 - 'hlist_nulls_for_each_entry_safe'
254 - 'ide_host_for_each_port'
255 - 'ide_port_for_each_dev'
256 - 'ide_port_for_each_present_dev'
257 - 'idr_for_each_entry'
258 - 'idr_for_each_entry_continue'
259 - 'idr_for_each_entry_ul'
260 - 'inet_bind_bucket_for_each'
261 - 'inet_lhash2_for_each_icsk_rcu'
262 - 'iov_for_each'
263 - 'key_for_each'
264 - 'key_for_each_safe'
265 - 'klp_for_each_func'
266 - 'klp_for_each_object'
267 - 'kvm_for_each_memslot'
268 - 'kvm_for_each_vcpu'
269 - 'list_for_each'
270 - 'list_for_each_entry'
271 - 'list_for_each_entry_continue'
272 - 'list_for_each_entry_continue_rcu'
273 - 'list_for_each_entry_continue_reverse'
274 - 'list_for_each_entry_from'
275 - 'list_for_each_entry_from_reverse'
276 - 'list_for_each_entry_lockless'
277 - 'list_for_each_entry_rcu'
278 - 'list_for_each_entry_reverse'
279 - 'list_for_each_entry_safe'
280 - 'list_for_each_entry_safe_continue'
281 - 'list_for_each_entry_safe_from'
282 - 'list_for_each_entry_safe_reverse'
283 - 'list_for_each_prev'
284 - 'list_for_each_prev_safe'
285 - 'list_for_each_safe'
286 - 'llist_for_each'
287 - 'llist_for_each_entry'
288 - 'llist_for_each_entry_safe'
289 - 'llist_for_each_safe'
290 - 'media_device_for_each_entity'
291 - 'media_device_for_each_intf'
292 - 'media_device_for_each_link'
293 - 'media_device_for_each_pad'
294 - 'netdev_for_each_lower_dev'
295 - 'netdev_for_each_lower_private'
296 - 'netdev_for_each_lower_private_rcu'
297 - 'netdev_for_each_mc_addr'
298 - 'netdev_for_each_uc_addr'
299 - 'netdev_for_each_upper_dev_rcu'
300 - 'netdev_hw_addr_list_for_each'
301 - 'nft_rule_for_each_expr'
302 - 'nla_for_each_attr'
303 - 'nla_for_each_nested'
304 - 'nlmsg_for_each_attr'
305 - 'nlmsg_for_each_msg'
306 - 'nr_neigh_for_each'
307 - 'nr_neigh_for_each_safe'
308 - 'nr_node_for_each'
309 - 'nr_node_for_each_safe'
310 - 'of_for_each_phandle'
311 - 'of_property_for_each_string'
312 - 'of_property_for_each_u32'
313 - 'pci_bus_for_each_resource'
314 - 'ping_portaddr_for_each_entry'
315 - 'plist_for_each'
316 - 'plist_for_each_continue'
317 - 'plist_for_each_entry'
318 - 'plist_for_each_entry_continue'
319 - 'plist_for_each_entry_safe'
320 - 'plist_for_each_safe'
321 - 'pnp_for_each_card'
322 - 'pnp_for_each_dev'
323 - 'protocol_for_each_card'
324 - 'protocol_for_each_dev'
325 - 'queue_for_each_hw_ctx'
326 - 'radix_tree_for_each_contig'
327 - 'radix_tree_for_each_slot'
328 - 'radix_tree_for_each_tagged'
329 - 'rbtree_postorder_for_each_entry_safe'
330 - 'resource_list_for_each_entry'
331 - 'resource_list_for_each_entry_safe'
332 - 'rhl_for_each_entry_rcu'
333 - 'rhl_for_each_rcu'
334 - 'rht_for_each'
335 - 'rht_for_each_continue'
336 - 'rht_for_each_entry'
337 - 'rht_for_each_entry_continue'
338 - 'rht_for_each_entry_rcu'
339 - 'rht_for_each_entry_rcu_continue'
340 - 'rht_for_each_entry_safe'
341 - 'rht_for_each_rcu'
342 - 'rht_for_each_rcu_continue'
343 - '__rq_for_each_bio'
344 - 'rq_for_each_segment'
345 - 'scsi_for_each_prot_sg'
346 - 'scsi_for_each_sg'
347 - 'sctp_for_each_hentry'
348 - 'sctp_skb_for_each'
349 - 'shdma_for_each_chan'
350 - '__shost_for_each_device'
351 - 'shost_for_each_device'
352 - 'sk_for_each'
353 - 'sk_for_each_bound'
354 - 'sk_for_each_entry_offset_rcu'
355 - 'sk_for_each_from'
356 - 'sk_for_each_rcu'
357 - 'sk_for_each_safe'
358 - 'sk_nulls_for_each'
359 - 'sk_nulls_for_each_from'
360 - 'sk_nulls_for_each_rcu'
361 - 'snd_pcm_group_for_each_entry'
362 - 'snd_soc_dapm_widget_for_each_path'
363 - 'snd_soc_dapm_widget_for_each_path_safe'
364 - 'snd_soc_dapm_widget_for_each_sink_path'
365 - 'snd_soc_dapm_widget_for_each_source_path'
366 - 'tb_property_for_each'
367 - 'udp_portaddr_for_each_entry'
368 - 'udp_portaddr_for_each_entry_rcu'
369 - 'usb_hub_for_each_child'
370 - 'v4l2_device_for_each_subdev'
371 - 'v4l2_m2m_for_each_dst_buf'
372 - 'v4l2_m2m_for_each_dst_buf_safe'
373 - 'v4l2_m2m_for_each_src_buf'
374 - 'v4l2_m2m_for_each_src_buf_safe'
375 - 'zorro_for_each_dev'
376
377#IncludeBlocks: Preserve # Unknown to clang-format-5.0
378IncludeCategories:
379 - Regex: '.*'
380 Priority: 1
381IncludeIsMainRegex: '(Test)?$'
382IndentCaseLabels: false
383#IndentPPDirectives: None # Unknown to clang-format-5.0
384IndentWidth: 8
385IndentWrappedFunctionNames: true
386JavaScriptQuotes: Leave
387JavaScriptWrapImports: true
388KeepEmptyLinesAtTheStartOfBlocks: false
389MacroBlockBegin: ''
390MacroBlockEnd: ''
391MaxEmptyLinesToKeep: 1
392NamespaceIndentation: Inner
393#ObjCBinPackProtocolList: Auto # Unknown to clang-format-5.0
394ObjCBlockIndentWidth: 8
395ObjCSpaceAfterProperty: true
396ObjCSpaceBeforeProtocolList: true
397
398# Taken from git's rules
399#PenaltyBreakAssignment: 10 # Unknown to clang-format-4.0
400PenaltyBreakBeforeFirstCallParameter: 30
401PenaltyBreakComment: 10
402PenaltyBreakFirstLessLess: 0
403PenaltyBreakString: 10
404PenaltyExcessCharacter: 100
405PenaltyReturnTypeOnItsOwnLine: 60
406
407PointerAlignment: Right
408ReflowComments: false
409SortIncludes: false
410#SortUsingDeclarations: false # Unknown to clang-format-4.0
411SpaceAfterCStyleCast: false
412SpaceAfterTemplateKeyword: true
413SpaceBeforeAssignmentOperators: true
414#SpaceBeforeCtorInitializerColon: true # Unknown to clang-format-5.0
415#SpaceBeforeInheritanceColon: true # Unknown to clang-format-5.0
416SpaceBeforeParens: ControlStatements
417#SpaceBeforeRangeBasedForLoopColon: true # Unknown to clang-format-5.0
418SpaceInEmptyParentheses: false
419SpacesBeforeTrailingComments: 1
420SpacesInAngles: false
421SpacesInContainerLiterals: false
422SpacesInCStyleCastParentheses: false
423SpacesInParentheses: false
424SpacesInSquareBrackets: false
425Standard: Cpp03
426TabWidth: 8
427UseTab: Always
428...