まず見てみたのは、uncrustify。
ポチポチ調べながら作成し..どんどんもっと触りたくなってき来た所でやめた。
特にこだわりなはい と思っていたのですが、アレコレ設定を弄りたくなるもんだ。
これが途中まで作っていたconfig。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# | |
# uncrustify config file for objective-c and objective-c++ | |
# | |
newlines = auto # auto/lf/crlf/cr | |
utf8_force = true | |
output_tab_size = 4 # new tab size | |
# | |
# Indenting | |
# | |
indent_with_tabs = 0 # 0=space, 1=indent to level only, 2=indent with tabs | |
indent_columns = output_tab_size | |
indent_label = 2 # pos: absolute col, neg: relative column | |
indent_align_assign = false | |
indent_switch_case = indent_columns | |
# | |
# Inter-symbol newlines | |
# | |
nl_enum_brace = remove # "enum {" vs "enum \n {" | |
nl_union_brace = remove # "union {" vs "union \n {" | |
nl_struct_brace = remove # "struct {" vs "struct \n {" | |
nl_do_brace = remove # "do {" vs "do \n {" | |
nl_if_brace = remove # "if () {" vs "if () \n {" | |
nl_for_brace = remove # "for () {" vs "for () \n {" | |
nl_else_brace = remove # "else {" vs "else \n {" | |
nl_while_brace = remove # "while () {" vs "while () \n {" | |
nl_switch_brace = remove # "switch () {" vs "switch () \n {" | |
nl_brace_while = remove # "} while" vs "} \n while" - cuddle while | |
nl_brace_else = remove # "} else" vs "} \n else" - cuddle else | |
nl_func_var_def_blk = 1 # add new lines after a block of variable decls | |
nl_fcall_brace = remove # "list_for_each() {" vs "list_for_each()\n{" | |
nl_fdef_brace = remove # "int foo() {" vs "int foo()\n{" | |
nl_after_return = false | |
# Force a newline in a define after the macro name for multi-line defines. | |
nl_multi_line_define = true # false/true | |
# Add a newline between ')' and '{' if the ')' is on a different line than the if/for/etc. | |
# Overrides nl_for_brace, nl_if_brace, nl_switch_brace, nl_while_switch, and nl_catch_brace. | |
nl_multi_line_cond = true # false/true | |
# The number of newlines after '}' of a multi-line function body | |
nl_after_func_body = 2 # number | |
# The number of newlines after '}' of a single line function body | |
nl_after_func_body_one_liner = 2 # number | |
# | |
# Source code modifications | |
# | |
mod_paren_on_return = ignore # "return 1;" vs "return (1);" | |
mod_full_brace_if = ignore # "if (a) a--;" vs "if (a) { a--; }" | |
mod_full_brace_for = add # "for () a--;" vs "for () { a--; }" | |
mod_full_brace_do = ignore # "do a--; while ();" vs "do { a--; } while ();" | |
mod_full_brace_while = remove # "while (a) a--;" vs "while (a) { a--; }" | |
mod_full_brace_nl = 3 # don't remove if more than 3 newlines | |
mod_add_long_ifdef_endif_comment = 20 | |
mod_add_long_ifdef_else_comment = mod_add_long_ifdef_else_comment | |
mod_add_long_switch_closebrace_comment = mod_add_long_ifdef_else_comment | |
mod_add_long_function_closebrace_comment = mod_add_long_ifdef_else_comment | |
# | |
# Inter-character spacing options | |
# | |
#sp_return_paren = force # "return (1);" vs "return(1);" | |
sp_sizeof_paren = remove # "sizeof (int)" vs "sizeof(int)" | |
sp_before_sparen = force # "if (" vs "if(" | |
sp_after_sparen = force # "if () {" vs "if (){" | |
sp_after_cast = remove # "(int) a" vs "(int)a" | |
sp_inside_braces = add # "{ 1 }" vs "{1}" | |
sp_inside_braces_struct = add # "{ 1 }" vs "{1}" | |
sp_inside_braces_enum = add # "{ 1 }" vs "{1}" | |
sp_inside_fparen = remove # "func( param )" vs "func(param)" | |
sp_inside_sparen = remove | |
sp_paren_brace = force | |
sp_sparen_brace = force # Add or remove space between ')' and '{' of 'if', 'for', 'switch', and 'while' | |
sp_fparen_brace = force # Add or remove space between ')' and '{' of function | |
sp_assign = add | |
sp_arith = add | |
sp_bool = add | |
sp_compare = add | |
sp_assign = add | |
sp_after_comma = add | |
sp_func_def_paren = remove # "int foo (){" vs "int foo(){" | |
sp_func_call_paren = remove # "foo (" vs "foo(" | |
sp_func_proto_paren = remove # "int foo ();" vs "int foo();" | |
sp_before_ptr_star = force | |
sp_after_ptr_star = remove | |
sp_before_unnamed_ptr_star = ignore | |
sp_between_ptr_star = remove | |
sp_after_ptr_star_func = force | |
sp_before_ptr_star_func = force | |
sp_cmt_cpp_start = add | |
sp_cond_question = force | |
sp_cond_colon = force | |
sp_else_brace = force | |
sp_brace_else = force | |
sp_after_class_colon = force | |
sp_before_class_colon = force | |
sp_before_case_colon = force | |
# Objective-C specifics | |
sp_before_oc_colon = remove # '-(int) f: (int) x;' vs '-(int) f : (int) x;' | |
sp_after_oc_colon = remove # '-(int) f:(int) x;' vs '-(int) f: (int) x;' | |
sp_before_oc_dict_colon = remove # '@{@"foo": @"bar"};' | |
sp_after_oc_dict_colon = remove # '@{@"foo" :@"bar"};' | |
sp_before_send_oc_colon = remove # '[object setValue:1];' vs '[object setValue :1];' | |
sp_after_send_oc_colon = remove # '[object setValue:1];' vs '[object setValue: 1];' | |
sp_after_oc_scope = force | |
sp_after_oc_type = remove # '-(int)f: (int) x;' vs '-(int)f: (int)x;' | |
sp_after_oc_return_type = remove # '-(int) f:(int)x;' vs '-(int)f:(int)x;' | |
sp_after_oc_at_sel = remove # '@selector(msgName)' vs '@selector (msgName)' | |
sp_before_oc_block_caret = ignore # '^int (int arg){...}' vs. ' ^int (int arg){...}' | |
sp_after_oc_block_caret = remove # '^int (int arg){...}' vs. '^ int (int arg){...}' | |
sp_cond_colon = force # Add or remove space around the ':' in 'b ? t : f' | |
sp_cond_question = force # Add or remove space around the '?' in 'b ? t : f' | |
# | |
# Aligning stuff | |
# | |
align_with_tabs = false # use tabs to align | |
align_on_tabstop = false # align on tabstops | |
align_keep_tabs = false | |
align_enum_equ_span = 4 # '=' in enum definition | |
align_struct_init_span = 4 # align stuff in a structure init '= { }' | |
align_right_cmt_span = 8 # The span for aligning comments that end lines (0=don't align) | |
align_right_cmt_gap = 8 | |
align_pp_define_span = 8 | |
align_typedef_span = 5 | |
align_typedef_gap = 3 | |
# Objective-C specifics | |
align_oc_msg_colon_span = 20 # Span for aligning parameters in an Obj-C message call on the ':' (0=don't align) | |
align_oc_msg_spec_span = 0 # The span for aligning ObjC msg spec (0=don't align) | |
#align_oc_decl_colon = true | |
# | |
# Line Splitting options | |
# | |
# ls_func_split_full = true # Whether to fully split long function protos/calls at commas | |
# | |
# Comment modifications | |
# | |
cmt_star_cont = true # Whether to put a star on subsequent comment lines | |
eat_blanks_before_close_brace = true # Whether to remove blank lines before '}' | |
eat_blanks_after_open_brace = true # Whether to remove blank lines after '{' |
Javaの経験が長かったので目と手が慣れているというのが一番の理由なのだけど、迷わないのであれば無駄に改行をいれない方がさっと見渡せるしいいんじゃないかと思っている。
K&Rにしたければまたフォーマットすればヨシ。
ここまでイジってみたが、気にいらなかったのが、
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{ | |
dispatch_async(dispatch_get_main_queue(), ^{ | |
}); | |
}); |
結構記述する事が多い書き方なんですが、blockの中のコードのインデントが、( までインデントされてしまう。
4つスペースのインデントで十分だし、XCodeのフォーマットもその形なので合わせたかったのだが、方法がさっとわからなかった。
いやいや、自我を捨てて標準的なフォーマットになればそれでOKだよ
と思い直す。
そこで、次にClangFormatを試す
そこにある、GoogleのルールをベースにColumnの制限なしにして、インデントを4に変更した。
BasedOnStyle: Google ColumnLimit: 0 IndentWidth: 4これで良い気がする。
どこまで細かくフォーマットしてくれているのかが良くわからないが、暫くこれを使って運用してみよう。