变更记录

序号 录入时间 录入人 备注
1 2016-03-15 Alfred Jiang -

方案名称

Xcode - 使用 BBUncrustifyPlugin-Xcode 插件实现代码格式化

关键字

Xcode \ BBUncrustifyPlugin \ 代码格式化

需求场景

  1. 实现统一风格的代码

参考链接

  1. Xcode插件 BBUncrustifyPlugin-Xcode
  2. Uncrustify/UncrustifyX 配置工具
  3. GitHub - BBUncrustifyPlugin-Xcode
  4. GitHub - UncrustifyX

详细内容

1. 安装(仅介绍最简单方式,更多安装方式参考GitHub
  1. 点击这里 下载 BBUncrustifyPlugin-Xcode 最新发布版本
  2. 解压下载文件,复制 UncrustifyPlugin.xcplugin~/Library/Application Support/Developer/Shared/Xcode/Plug-ins 文件夹下
  3. 重启 Xcdoe,即可在 Edit 选项下看到 Format Code

Image

2. 使用(仅介绍快速使用方法,使用ryan-objc.cfg作为初始 Objective-C 配置文件)
  1. 点击这里 下载 Objective-C 配置文件
  2. 复制 ryan-objc.cfg~/.uncrustify 文件夹下(若没有则创建 .uncrustify 文件夹)
  3. 进入 Xcdoe ,选中需要格式化的代码,选择 Edit -> Format Code -> Format Selected Lines 即可格式化代码

Image

3. 配置(UncrustifyX 配置工具的下载使用)
  1. 点击这里 下载 UncrustifyX 最新发布版本
  2. 解压下载文件,拖动 UncrustifyXApplications 文件夹
  3. 进入 Xcdoe ,选择 Edit -> Format Code -> BBUncrustifyPlugin Preferences ,设置 Configuration EditorUncrustifyX
  4. 选择 Edit -> Format Code -> Edit Uncrustify Configuration 既可通过 UncrustifyX 配置 cfg 文件

Image

效果图

(无)

备注

ryan-objc.cfg 文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
#
# Uncrustify Configuration File
# File Created With UncrustifyX 0.2 (140)
#

# Alignment
# ---------

## Alignment

# Align obj-c declaration params on colon
align_oc_decl_colon = true # boolean (false/true)

# Align on tabstop
align_on_tabstop = false # boolean (false/true)

# Align variable definitions
align_func_params = true # boolean (false/true)

# Align with tabs
align_with_tabs = false # boolean (false/true)

# Keep non-indenting tabs
align_keep_tabs = false # boolean (false/true)

## Alignment Span

# Alignment span for #define bodies
align_pp_define_span = 8 # number

# Alignment span for equals in enums
align_enum_equ_span = 4 # number

# Alignment span for obj-c message colons
align_oc_msg_colon_span = 20 # number

# Alignment span for obj-c message spec
align_oc_msg_spec_span = 20 # number

# Alignment span for single-line typedefs
align_typedef_span = 5 # number

# Alignment span for struct initializer values
align_struct_init_span = 4 # number

# Alignment span for trailing comments
align_right_cmt_span = 8 # number

## Alignment Style

# Alignment style for star in variable definitions
align_var_def_star_style = 1 # number

## Gap

# Minimum gap between type and synonym of typedef
align_typedef_gap = 3 # number

# Minimum gap for trailing comment
align_right_cmt_gap = 8 # number

## Other

# Always align with first parameter in obj-c message
align_oc_msg_colon_first = false # boolean (false/true)

# Blank Lines
# -----------

## Newline Count After

# Newline count after function body
nl_after_func_body = 2 # number

# Newline count after single-line function body
nl_after_func_body_one_liner = 2 # number

# Newline count after variable definition block
nl_func_var_def_blk = 1 # number

## Other

# Remove blank lines after open brace
eat_blanks_after_open_brace = true # boolean (false/true)

# Remove blank lines before close brace
eat_blanks_before_close_brace = true # boolean (false/true)

# Code-Modifying
# --------------

## Braces

# Braces around statments that span N newlines
mod_full_brace_nl = 3 # number

# Braces on single-line do statement
mod_full_brace_do = ignore # string (add/force/ignore/remove)

# Braces on single-line else statement
mod_full_brace_if = ignore # string (add/force/ignore/remove)

# Braces on single-line for statement
mod_full_brace_for = add # string (add/force/ignore/remove)

# Braces on single-line while statement
mod_full_brace_while = remove # string (add/force/ignore/remove)

## Comments

# Add comment after ifdef/else statement of size
mod_add_long_ifdef_else_comment = 20 # number

# Add comment after ifdef/endif statement of size
mod_add_long_ifdef_endif_comment = 20 # number

## Parentheses

# Remove unnecessary parentheses on return statement
mod_paren_on_return = ignore # string (add/force/ignore/remove)

## Semicolons

# Remove superflous semicolons
mod_remove_extra_semicolon = true # boolean (false/true)

# Comments
# --------

## Empty Lines

# Empty first line for multi-line C comments
cmt_c_nl_start = true # boolean (false/true)

# Empty first line for multi-line C++ comments
cmt_cpp_nl_start = true # boolean (false/true)

## Other

# Stars on multi-line comments
cmt_star_cont = false # boolean (false/true)

# General
# -------

## Other

# Newline character
newlines = lf # string (auto/cr/crlf/lf)

# Output tab size
output_tab_size = 4 # number

# Indentation
# -----------

## Indentation

# Indent obj-c block
indent_oc_block = true # boolean (false/true)

## Indentation Size

# Indentation column size
indent_columns = 4 # number

# Indentation size between case and switch
indent_switch_case = 4 # number

# Indentation size for obj-c blocks in a message parameter
indent_oc_block_msg = 4 # number

# Indentation size for obj-c message subsequent parameters
indent_oc_msg_colon = 4 # number

## Other

# Align continued statements at equals
indent_align_assign = false # boolean (false/true)

# Indent goto labels
indent_label = 2 # number

# Indent with tabs
indent_with_tabs = 0 # number

# Newlines
# --------

## Merging

# Change unbraced if statements into one-liner
nl_create_if_one_liner = true # boolean (false/true)

## Newline After

# Newline after brace open
nl_after_brace_open = false # boolean (false/true)

# Newline after for
nl_after_for = force # string (add/force/ignore/remove)

# Newline after if
nl_after_if = force # string (add/force/ignore/remove)

# Newline after macro multi-line definition
nl_multi_line_define = true # boolean (false/true)

# Newline after return
nl_after_return = true # boolean (false/true)

## Newline Before

# Newline before case statement
nl_before_case = true # boolean (false/true)

# Newline before for
nl_before_for = force # string (add/force/ignore/remove)

# Newline before if
nl_before_if = force # string (add/force/ignore/remove)

# Newline before while
nl_before_while = force # string (add/force/ignore/remove)

## Newline Between

# Newline between case colon and open brace
nl_case_colon_brace = remove # string (add/force/ignore/remove)

# Newline between catch and open brace
nl_catch_brace = remove # string (add/force/ignore/remove)

# Newline between close brace and catch
nl_brace_catch = remove # string (add/force/ignore/remove)

# Newline between close brace and else
nl_brace_else = remove # string (add/force/ignore/remove)

# Newline between close brace and finally
nl_brace_finally = remove # string (add/force/ignore/remove)

# Newline between close brace and while
nl_brace_while = remove # string (add/force/ignore/remove)

# Newline between close parenthesis and open brace in multi line conditional
nl_multi_line_cond = false # boolean (false/true)

# Newline between do and open brace
nl_do_brace = remove # string (add/force/ignore/remove)

# Newline between else and open brace
nl_else_brace = remove # string (add/force/ignore/remove)

# Newline between else if and open brace
nl_elseif_brace = remove # string (add/force/ignore/remove)

# Newline between enum and open brace
nl_enum_brace = remove # string (add/force/ignore/remove)

# Newline between finally and open brace
nl_finally_brace = remove # string (add/force/ignore/remove)

# Newline between for and open brace
nl_for_brace = remove # string (add/force/ignore/remove)

# Newline between function call and open brace
nl_fcall_brace = remove # string (add/force/ignore/remove)

# Newline between function signature and open brace
nl_fdef_brace = remove # string (add/force/ignore/remove)

# Newline between if and open brace
nl_if_brace = remove # string (add/force/ignore/remove)

# Newline between struct and open brace
nl_struct_brace = remove # string (add/force/ignore/remove)

# Newline between switch and open brace
nl_switch_brace = remove # string (add/force/ignore/remove)

# Newline between try and open brace
nl_try_brace = remove # string (add/force/ignore/remove)

# Newline between union and open brace
nl_union_brace = remove # string (add/force/ignore/remove)

# Newline between while and open brace
nl_while_brace = remove # string (add/force/ignore/remove)

## Other

# Don't split one-line obj-c messages
nl_oc_msg_leave_one_liner = true # boolean (false/true)

# Newlines at end of file
nl_end_of_file = add # string (add/force/ignore/remove)

# Place obj-c message parameters on new lines
nl_oc_msg_args = true # boolean (false/true)

# Spacing
# -------

## Space After

# Space after C++ comment opening
sp_cmt_cpp_start = ignore # string (add/force/ignore/remove)

# Space after cast
sp_after_cast = remove # string (add/force/ignore/remove)

# Space after class colon
sp_after_class_colon = force # string (add/force/ignore/remove)

# Space after comma
sp_after_comma = add # string (add/force/ignore/remove)

# Space after condition close parenthesis
sp_after_sparen = force # string (add/force/ignore/remove)

# Space after obj-c block caret
sp_after_oc_block_caret = remove # string (add/force/ignore/remove)

# Space after obj-c colon
sp_after_oc_colon = remove # string (add/force/ignore/remove)

# Space after obj-c dictionary colon
sp_after_oc_dict_colon = add # string (add/force/ignore/remove)

# Space after obj-c message colon
sp_after_send_oc_colon = remove # string (add/force/ignore/remove)

# Space after obj-c property
sp_after_oc_property = add # string (add/force/ignore/remove)

# Space after obj-c return type
sp_after_oc_return_type = remove # string (add/force/ignore/remove)

# Space after obj-c scope
sp_after_oc_scope = force # string (add/force/ignore/remove)

# Space after obj-c type
sp_after_oc_type = remove # string (add/force/ignore/remove)

# Space after pointer star
sp_after_ptr_star = remove # string (add/force/ignore/remove)

# Space after pointer star followed by function
sp_after_ptr_star_func = force # string (add/force/ignore/remove)

## Space Around

# Space around arithmetic operators
sp_arith = add # string (add/force/ignore/remove)

# Space around assignment operator
sp_assign = add # string (add/force/ignore/remove)

# Space around boolean operators
sp_bool = add # string (add/force/ignore/remove)

# Space around compare operators
sp_compare = add # string (add/force/ignore/remove)

# Space around ternary condition colon
sp_cond_colon = force # string (add/force/ignore/remove)

# Space around ternary condition question mark
sp_cond_question = force # string (add/force/ignore/remove)

## Space Before

# Space before case colon
sp_before_case_colon = remove # string (add/force/ignore/remove)

# Space before class colon
sp_before_class_colon = force # string (add/force/ignore/remove)

# Space before if/for/switch/while open parenthesis
sp_before_sparen = force # string (add/force/ignore/remove)

# Space before obj-c block caret
sp_before_oc_block_caret = ignore # string (add/force/ignore/remove)

# Space before obj-c colon
sp_before_oc_colon = remove # string (add/force/ignore/remove)

# Space before obj-c dictionary colon
sp_before_oc_dict_colon = remove # string (add/force/ignore/remove)

# Space before obj-c message colon
sp_before_send_oc_colon = remove # string (add/force/ignore/remove)

# Space before pointer star
sp_before_ptr_star = force # string (add/force/ignore/remove)

# Space before pointer star followed by function
sp_before_ptr_star_func = force # string (add/force/ignore/remove)

# Space before unnamed pointer star
sp_before_unnamed_ptr_star = ignore # string (add/force/ignore/remove)

## Space Between

# Space between @selector and open parenthesis
sp_after_oc_at_sel = remove # string (add/force/ignore/remove)

# Space between catch and open brace
sp_catch_brace = add # string (add/force/ignore/remove)

# Space between catch and open parenthesis
sp_catch_paren = add # string (add/force/ignore/remove)

# Space between close brace and else
sp_brace_else = force # string (add/force/ignore/remove)

# Space between close parenthesis and open brace
sp_paren_brace = force # string (add/force/ignore/remove)

# Space between closing brace and catch
sp_brace_catch = add # string (add/force/ignore/remove)

# Space between closing brace and finally
sp_brace_finally = add # string (add/force/ignore/remove)

# Space between closing parenthesis and open brace
sp_fparen_brace = force # string (add/force/ignore/remove)

# Space between else and open brace
sp_else_brace = force # string (add/force/ignore/remove)

# Space between finally and open brace
sp_finally_brace = add # string (add/force/ignore/remove)

# Space between function name and open parenthesis
sp_func_call_paren = remove # string (add/force/ignore/remove)

# Space between function name and open parenthesis in declaration
sp_func_proto_paren = remove # string (add/force/ignore/remove)

# Space between function name and open parenthesis in function definition
sp_func_def_paren = remove # string (add/force/ignore/remove)

# Space between pointer stars
sp_between_ptr_star = remove # string (add/force/ignore/remove)

# Space between sizeof and open parenthesis
sp_sizeof_paren = remove # string (add/force/ignore/remove)

# Space between try and open brace
sp_try_brace = add # string (add/force/ignore/remove)

## Space Inside

# Space inside @selector() parens
sp_inside_oc_at_sel_parens = remove # string (add/force/ignore/remove)

# Space inside braces
sp_inside_braces = add # string (add/force/ignore/remove)

# Space inside cast parentheses
sp_inside_paren_cast = remove # string (add/force/ignore/remove)

# Space inside enum braces
sp_inside_braces_enum = add # string (add/force/ignore/remove)

# Space inside function parentheses
sp_inside_fparen = remove # string (add/force/ignore/remove)

# Space inside if-condition parentheses
sp_inside_sparen = remove # string (add/force/ignore/remove)

# Space inside parentheses
sp_inside_paren = remove # string (add/force/ignore/remove)

# Space inside parentheses in function type
sp_inside_tparen = remove # string (add/force/ignore/remove)

# Space inside struct/union braces
sp_inside_braces_struct = add # string (add/force/ignore/remove)