aboutsummaryrefslogtreecommitdiff
path: root/etc
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2017-07-10 15:02:38 -0700
committerGarrett D'Amore <garrett@damore.org>2017-07-10 15:02:38 -0700
commit795aebbee77bb74d8792df96dfe1aa79ec9548fc (patch)
tree58c16424c16b9e71cebdceaee4507ab6608f80da /etc
parentde90f97167d2df6739db47b2c6aad85f06250270 (diff)
downloadnng-795aebbee77bb74d8792df96dfe1aa79ec9548fc.tar.gz
nng-795aebbee77bb74d8792df96dfe1aa79ec9548fc.tar.bz2
nng-795aebbee77bb74d8792df96dfe1aa79ec9548fc.zip
Give up on uncrustify; switch to clang-format.
Diffstat (limited to 'etc')
-rw-r--r--etc/README.adoc39
-rwxr-xr-xetc/format-check.sh (renamed from etc/uncrustify_check.sh)34
-rw-r--r--etc/nng.sublime-project5
-rw-r--r--etc/uncrustify.cfg408
4 files changed, 40 insertions, 446 deletions
diff --git a/etc/README.adoc b/etc/README.adoc
index 90faf708..b6470a3b 100644
--- a/etc/README.adoc
+++ b/etc/README.adoc
@@ -5,39 +5,34 @@ This directory contains support files that I use for developing this
project. I recommend others consider doing the same.
-Coding Style & Uncrustify
+Coding Style
~~~~~~~~~~~~~~~~~~~~~~~~~
I'm using Sublime Text as my development IDE, and so I've set things up
-for that.
+for that. But, I think you should be able to use any reasonable editor.
-The project coding style is automatically checked by the Uncrustify
-configuration, and there is a shell script here that will validate it.
-Uncrustify is not (for now) enforced outside of src/ (in particular it
-will probably choke on the stuff in ./tests). I may fix that one day.
+A clang-format configuration file is included in the project, you should
+use that. (clang format requires that the style file live at the top of
+of the project tree, not somewhere else, such as this etc directory.) The
+format rules are probably inappropriate for the test/ subdirectory, as
+the Convey framework has a style all it's own.
-I am running this using Uncrustify version 0.60 -- and I know Trusty Tahr
-has 0.59 which also seems to work. Older versions seem to generate different
-ugly output, and I have not tested the new versions. Until updated otherwise,
-the coding style is as enforced by this config with Uncrustify 0.60.
+The style is based loosely on WebKit, but is really modified -- someday
+if clang-format ever learns about BSD KNF I'll probably switch to that.
+
+Once upon a time this used uncrustify. However, the frequent breaking changes
+in uncrustify versions, and the fact that the latest (at this time 0.65) does
+not actually support one of the most common language constructs (extern "C"
+opening braces) has driven me towards clang-format. The good news is that
+this is probably actually easier for most folks to use.
Sublime Text
~~~~~~~~~~~~
-I have a custom version of the Sublime Uncrustify package, which understands
-project-specific settings. (I also have submitted an upstream PR for those
-chaanges here: https://github.com/obxyann/Sublime-Uncrustify/pulls so
-hopefully this functionality will be available to others.) The Sublime
-project file here takes care of seting this up (nng.sublime-project)
-
-I have the arranged in my Uncrustify Sublime package to configure both
-the location of the binary, and the location of the configuration, so that
-Alt-U will autoformat my buffer. I've also arranged for Sublime text to
-understand that .h is C, not C++ (this is important!)
+I've also arranged for Sublime text to understand that .h is C, not C++ (this
+is important!)
-Configuring Uncrustify without these enhancements is a little tricker, and
-will be specific to your setup.
ISO Standard C
~~~~~~~~~~~~~~
diff --git a/etc/uncrustify_check.sh b/etc/format-check.sh
index e59c8425..ea9bd2f2 100755
--- a/etc/uncrustify_check.sh
+++ b/etc/format-check.sh
@@ -18,32 +18,36 @@ mydir=`dirname $0`
srcdir=${mydir}/../src
failed=
-uncrustify --version > /dev/null
+clang-format -version > /dev/null
if [ $? -ne 0 ]; then
- echo "Uncrustify not found. Skipping checks."
+ echo "clang-format not found. Skipping checks."
exit 0
fi
+mytmpdir=`mktemp -d`
+
for file in `find ${srcdir} -name '*.[ch]' -print`
do
- uncrustify -c "${mydir}/uncrustify.cfg" -q -lC $file
- if [ $? -ne 0 ]; then
- echo "Cannot run uncrustify??" 1>&2
- exit 2
- fi
- if [ -t 1 ]; then
- colordiff -u $file $file.uncrustify
- else
- diff -u $file $file.uncrustify
- fi
- if [ $? -ne 0 ]; then
+ ext=${file##*.}
+ oldf=${file}
+ newf=${mytmpdir}/new.${ext}
+ clang-format -style=file ${oldf} > ${newf}
+ cmp -s ${oldf} ${newf}
+ if [ $? -ne 0 ]
+ then
+ echo "${file} style changes"
+ if [ -t 1 ]; then
+ colordiff -u $oldf $newf
+ else
+ diff -u $oldf $newf
+ fi
failed=1
fi
- rm ${file}.uncrustify
done
+rm -rf $mytmpdir
if [ -n "$failed" ]
then
- echo "Uncrustify differences found!" 1>&2
+ echo "Format differences found!" 1>&2
# Sadly, there are different versions of Uncrustify, and they don't
# seem to universally agree. So let's not trigger a build error on
# this -- but instead just emit it to standard output.
diff --git a/etc/nng.sublime-project b/etc/nng.sublime-project
index 3de94b35..8bb2ea31 100644
--- a/etc/nng.sublime-project
+++ b/etc/nng.sublime-project
@@ -9,6 +9,9 @@
{
"tab_size": 8,
"translate_tabs_to_spaces": false,
- "uncrustify_config": "${project_dir}/uncrustify.cfg"
+ "ClangFormat": {
+ "style": "File",
+ "format_on_save": true
+ }
}
}
diff --git a/etc/uncrustify.cfg b/etc/uncrustify.cfg
deleted file mode 100644
index 2fb5ed69..00000000
--- a/etc/uncrustify.cfg
+++ /dev/null
@@ -1,408 +0,0 @@
-# Uncrustify 0.55
-#
-# This is based on the FreeBSD uncrustify, except that we have
-# made the following changes:
-#
-# * NNI_LIST_FOREACH is treated like a FOR instead of the FreeBSD list macro.
-#
-# * sp_after_cast is set to true, because we like spaces after casts (like
-# illumos does.
-#
-# * sp_sizeof_paren is set to add. sizeof is a keyword, and we want keywords
-# to get that extra space.
-#
-# * align_var_struct_span is set to 99, because struct member align is nice
-#
-# This differs from illumos in a few key regard:
-#
-# * NNI_LIST_FOREACH gets a space before the opening brace. I'm not
-# sure cstyle understands this syntax at all. We know how to fix that,
-# but it seems to me that this is a for() block, and should use the
-# spacing rules.
-#
-# * Comments are aligned using pure spaces. This is actually better than
-# the illumos cstyle thing, because tabs should never be used for alignment,
-# only indentation. The illumos style is dead wrong, and fubar for anyone
-# who wants to use an editor with "indents" other than 8.
-#
-# * #define is not followed by tab but rather by space. This is one it
-# might be nice to fix, but frankly its just too much work to make this
-# right.
-#
-# make #define<space> turn into #define<tab>
-#
-set FOR NNI_LIST_FOREACH
-newlines = lf
-input_tab_size = 8
-output_tab_size = 8
-string_escape_char = 92
-string_escape_char2 = 0
-indent_columns = 8
-indent_continue = 4
-indent_with_tabs = 2
-indent_align_string = false
-indent_xml_string = 0
-indent_brace = 0
-indent_braces = false
-indent_braces_no_func = false
-indent_brace_parent = false
-indent_namespace = false
-indent_namespace_level = 0
-indent_namespace_limit = 0
-indent_extern = false
-indent_class = true
-indent_class_colon = true
-indent_else_if = false
-indent_var_def_blk = 0
-indent_func_call_param = false
-indent_func_def_param = false
-indent_func_proto_param = false
-indent_func_class_param = false
-indent_func_ctor_var_param = false
-indent_template_param = false
-indent_func_param_double = false
-indent_func_const = 0
-indent_func_throw = 0
-indent_member = 0
-indent_sing_line_comments = 0
-indent_relative_single_line_comments = false
-indent_switch_case = 0
-indent_case_shift = 0
-indent_case_brace = 0
-indent_col1_comment = false
-indent_label = 1
-indent_access_spec = 1
-indent_access_spec_body = false
-indent_paren_nl = false
-indent_paren_close = 0
-indent_comma_paren = false
-indent_bool_paren = false
-indent_square_nl = false
-indent_preserve_sql = false
-indent_align_assign = true
-sp_arith = ignore
-sp_assign = force
-sp_before_assign = ignore
-sp_after_assign = ignore
-sp_enum_assign = ignore
-sp_enum_before_assign = ignore
-sp_enum_after_assign = ignore
-sp_pp_concat = add
-sp_pp_stringify = add
-sp_bool = force
-sp_compare = force
-sp_inside_paren = remove
-sp_paren_paren = remove
-sp_balance_nested_parens = false
-sp_paren_brace = ignore
-sp_before_ptr_star = force
-sp_before_unnamed_ptr_star = ignore
-sp_between_ptr_star = remove
-sp_after_ptr_star = remove
-sp_after_ptr_star_func = ignore
-sp_before_ptr_star_func = ignore
-sp_before_byref = remove
-sp_before_unnamed_byref = ignore
-sp_after_byref = force
-sp_after_byref_func = ignore
-sp_before_byref_func = ignore
-sp_after_type = force
-sp_template_angle = ignore
-sp_before_angle = remove
-sp_inside_angle = remove
-sp_after_angle = force
-sp_angle_paren = ignore
-sp_angle_word = ignore
-sp_before_sparen = force
-sp_inside_sparen = remove
-sp_inside_sparen_close = ignore
-sp_after_sparen = force
-sp_sparen_brace = add
-sp_invariant_paren = ignore
-sp_after_invariant_paren = ignore
-sp_special_semi = ignore
-sp_before_semi = remove
-sp_before_semi_for = ignore
-sp_before_semi_for_empty = remove
-sp_after_semi = add
-sp_after_semi_for = force
-sp_after_semi_for_empty = remove
-sp_before_square = ignore
-sp_before_squares = ignore
-sp_inside_square = remove
-sp_after_comma = force
-sp_before_comma = remove
-sp_before_ellipsis = ignore
-sp_after_class_colon = ignore
-sp_before_class_colon = ignore
-sp_before_case_colon = remove
-sp_after_operator = ignore
-sp_after_operator_sym = ignore
-#sp_after_cast = remove
-sp_after_cast = add
-sp_inside_paren_cast = ignore
-sp_cpp_cast_paren = ignore
-#sp_sizeof_paren = remove
-sp_sizeof_paren = add
-sp_after_tag = ignore
-sp_inside_braces_enum = force
-sp_inside_braces_struct = force
-sp_inside_braces = force
-sp_inside_braces_empty = ignore
-sp_type_func = force
-sp_func_proto_paren = remove
-sp_func_def_paren = remove
-sp_inside_fparens = ignore
-sp_inside_fparen = remove
-sp_square_fparen = ignore
-sp_fparen_brace = add
-sp_func_call_paren = remove
-sp_func_call_user_paren = ignore
-sp_func_class_paren = remove
-sp_return_paren = force
-sp_attribute_paren = ignore
-sp_defined_paren = ignore
-sp_throw_paren = ignore
-sp_macro = ignore
-sp_macro_func = ignore
-sp_else_brace = add
-sp_brace_else = add
-sp_brace_typedef = force
-sp_catch_brace = ignore
-sp_brace_catch = ignore
-sp_finally_brace = ignore
-sp_brace_finally = ignore
-sp_try_brace = ignore
-sp_getset_brace = ignore
-sp_before_dc = remove
-sp_after_dc = remove
-sp_d_array_colon = ignore
-sp_not = remove
-sp_inv = remove
-sp_addr = remove
-sp_member = remove
-sp_deref = remove
-sp_sign = remove
-sp_incdec = remove
-sp_before_nl_cont = add
-sp_after_oc_scope = ignore
-sp_after_oc_colon = ignore
-sp_before_oc_colon = ignore
-sp_after_send_oc_colon = ignore
-sp_before_send_oc_colon = ignore
-sp_after_oc_type = ignore
-sp_after_oc_return_type = ignore
-sp_after_oc_at_sel = ignore
-sp_before_oc_block_caret = ignore
-sp_after_oc_block_caret = ignore
-sp_cond_colon = ignore
-sp_cond_question = ignore
-sp_case_label = remove
-sp_range = ignore
-sp_cmt_cpp_start = ignore
-sp_endif_cmt = ignore
-align_keep_tabs = false
-align_with_tabs = true
-align_on_tabstop = true
-align_number_left = true
-align_func_params = false
-align_same_func_call_params = false
-align_var_def_span = 0
-align_var_def_star_style = 0
-align_var_def_amp_style = 0
-align_var_def_thresh = 0
-align_var_def_gap = 0
-align_var_def_colon = false
-align_var_def_attribute = false
-align_var_def_inline = false
-align_assign_span = 0
-align_assign_thresh = 12
-align_enum_equ_span = 16
-align_enum_equ_thresh = 0
-align_var_struct_span = 99
-align_var_struct_thresh = 0
-align_var_struct_gap = 0
-align_struct_init_span = 3
-align_typedef_gap = 3
-align_typedef_span = 5
-align_typedef_func = 0
-align_typedef_star_style = 0
-align_typedef_amp_style = 0
-align_right_cmt_span = 3
-align_right_cmt_mix = false
-align_right_cmt_gap = 0
-align_right_cmt_at_col = 0
-align_func_proto_span = 0
-align_func_proto_gap = 0
-align_on_operator = false
-align_mix_var_proto = false
-align_single_line_func = false
-align_single_line_brace = false
-align_single_line_brace_gap = 0
-align_oc_msg_spec_span = 0
-align_nl_cont = true
-align_pp_define_gap = 4
-align_pp_define_span = 3
-align_left_shift = true
-align_oc_msg_colon_span = 0
-nl_collapse_empty_body = false
-nl_assign_leave_one_liners = true
-nl_class_leave_one_liners = true
-nl_enum_leave_one_liners = false
-nl_getset_leave_one_liners = false
-nl_func_leave_one_liners = false
-nl_if_leave_one_liners = false
-nl_start_of_file = remove
-nl_start_of_file_min = 0
-nl_end_of_file = force
-nl_end_of_file_min = 1
-nl_assign_brace = remove
-nl_assign_square = ignore
-nl_after_square_assign = ignore
-nl_func_var_def_blk = 1
-nl_fcall_brace = add
-nl_enum_brace = remove
-nl_struct_brace = remove
-nl_union_brace = remove
-nl_if_brace = remove
-nl_brace_else = remove
-nl_elseif_brace = ignore
-nl_else_brace = remove
-nl_else_if = remove
-nl_brace_finally = ignore
-nl_finally_brace = ignore
-nl_try_brace = ignore
-nl_getset_brace = force
-nl_for_brace = remove
-nl_catch_brace = ignore
-nl_brace_catch = ignore
-nl_while_brace = remove
-nl_brace_brace = ignore
-nl_do_brace = remove
-nl_brace_while = remove
-nl_switch_brace = remove
-nl_multi_line_cond = false
-nl_multi_line_define = true
-nl_before_case = false
-nl_before_throw = ignore
-nl_after_case = false
-nl_namespace_brace = ignore
-nl_template_class = ignore
-nl_class_brace = ignore
-nl_class_init_args = ignore
-nl_func_type_name = ignore
-nl_func_type_name_class = ignore
-nl_func_scope_name = ignore
-nl_func_proto_type_name = ignore
-nl_func_paren = remove
-nl_func_decl_start = ignore
-nl_func_decl_start_single = ignore
-nl_func_decl_args = ignore
-nl_func_decl_end = ignore
-nl_func_decl_end_single = ignore
-nl_func_decl_empty = ignore
-nl_fdef_brace = add
-nl_after_return = true
-nl_return_expr = ignore
-nl_after_semicolon = true
-nl_after_brace_open = true
-nl_after_brace_open_cmt = false
-nl_after_vbrace_open = false
-nl_after_vbrace_open_empty = false
-nl_after_brace_close = true
-nl_define_macro = false
-nl_squeeze_ifdef = false
-nl_before_if = ignore
-nl_after_if = ignore
-nl_before_for = ignore
-nl_after_for = ignore
-nl_before_while = ignore
-nl_after_while = ignore
-nl_before_switch = ignore
-nl_after_switch = ignore
-nl_before_do = ignore
-nl_after_do = ignore
-nl_ds_struct_enum_cmt = false
-nl_ds_struct_enum_close_brace = false
-nl_class_colon = ignore
-nl_create_if_one_liner = false
-nl_create_for_one_liner = false
-nl_create_while_one_liner = false
-pos_arith = ignore
-pos_assign = ignore
-pos_bool = trail
-pos_compare = ignore
-pos_conditional = ignore
-pos_comma = ignore
-pos_class_comma = ignore
-pos_class_colon = ignore
-code_width = 80
-ls_for_split_full = false
-ls_func_split_full = false
-nl_max = 4
-nl_after_func_proto = 0
-nl_after_func_proto_group = 2
-nl_after_func_body = 3
-nl_after_func_body_one_liner = 0
-nl_before_block_comment = 2
-nl_before_c_comment = 0
-nl_before_cpp_comment = 0
-nl_after_multiline_comment = false
-nl_before_access_spec = 0
-nl_after_access_spec = 0
-nl_comment_func_def = 1
-nl_after_try_catch_finally = 0
-nl_around_cs_property = 0
-nl_between_get_set = 0
-eat_blanks_after_open_brace = true
-eat_blanks_before_close_brace = true
-mod_full_brace_do = remove
-mod_full_brace_for = add
-mod_full_brace_function = ignore
-mod_full_brace_if = add
-mod_full_brace_if_chain = false
-mod_full_brace_nl = 0
-mod_full_brace_while = add
-mod_paren_on_return = add
-mod_pawn_semicolon = false
-mod_full_paren_if_bool = true
-mod_remove_extra_semicolon = true
-mod_add_long_function_closebrace_comment = 0
-mod_add_long_switch_closebrace_comment = 0
-mod_add_long_ifdef_endif_comment = 0
-mod_add_long_ifdef_else_comment = 0
-mod_sort_import = false
-mod_sort_using = false
-mod_sort_include = false
-mod_move_case_break = false
-mod_case_brace = remove
-mod_remove_empty_return = true
-cmt_width = 0
-cmt_reflow_mode = 0
-cmt_indent_multi = true
-cmt_c_group = false
-cmt_c_nl_start = false
-cmt_c_nl_end = false
-cmt_cpp_group = false
-cmt_cpp_nl_start = false
-cmt_cpp_nl_end = false
-cmt_cpp_to_c = false
-cmt_star_cont = true
-cmt_sp_before_star_cont = 0
-cmt_sp_after_star_cont = 0
-cmt_multi_check_last = true
-cmt_insert_file_header = ""
-cmt_insert_file_footer = ""
-cmt_insert_func_header = ""
-cmt_insert_class_header = ""
-cmt_insert_before_preproc = false
-pp_indent = remove
-pp_indent_at_level = false
-pp_indent_count = 1
-pp_space = ignore
-pp_space_count = 0
-pp_indent_region = 0
-pp_region_indent_code = false
-pp_indent_if = 0
-pp_if_indent_code = false
-pp_define_at_level = false