From 4fd26da3cb8b7d2eadd4391dbf2c8290a63013e8 Mon Sep 17 00:00:00 2001 From: Hieu Hoang Date: Fri, 15 Nov 2024 15:25:02 +0700 Subject: [PATCH] Add tools check coding convention --- .pre-commit-config.yaml | 27 +++++ docs/coding_convention_tool.md | 2 - docs/release_note.md | 8 ++ tools/.clang-tidy | 50 ++++++++ tools/.codespell/.codespellrc | 10 ++ tools/.codespell/exclude-file.txt | 0 tools/.codespell/ignore-words.txt | 2 + tools/uncrustify.cfg | 182 ++++++++++++++++++++++++++++++ 8 files changed, 279 insertions(+), 2 deletions(-) create mode 100644 .pre-commit-config.yaml create mode 100644 tools/.clang-tidy create mode 100644 tools/.codespell/.codespellrc create mode 100644 tools/.codespell/exclude-file.txt create mode 100644 tools/.codespell/ignore-words.txt create mode 100644 tools/uncrustify.cfg diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000..ffc3c8ae --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,27 @@ + +exclude: ^(docs|site|assets|pictures|simplicity_sdk|test/test_script|log|sample|cmake|components|lib/inc/coding_standard.h|lib/inc/silabs_license_agreement.h|lib/inc/sl_iec60730_library_documentation.h|README.md) +repos: +- repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.0.1 + hooks: + - id: end-of-file-fixer + - id: trailing-whitespace +- repo: https://github.com/codespell-project/codespell + rev: v2.2.4 + hooks: + - id: codespell + args: [-w,--config,./tools/.codespell/.codespellrc] +- repo: https://github.com/pocc/pre-commit-hooks + rev: v1.3.5 + hooks: + - id: uncrustify + args: [-c,./tools/uncrustify.cfg,-lC,--no-backup,--replace] + - id: clang-tidy + args: + - --config-file=./tools/.clang-tidy + - --use-color + - --extra-arg=-Iusr/include + - --header-filter:'^((?!test).)*$' + - -p=./build + - id: cppcheck + args: [--language=c,--std=c99,--check-config,-DSL_IEC60730_BOARD_HEADER="sl_iec60730_board.h",--suppress=missingInclude,--suppress=unmatchedSuppression] diff --git a/docs/coding_convention_tool.md b/docs/coding_convention_tool.md index e4594a56..0cb90499 100644 --- a/docs/coding_convention_tool.md +++ b/docs/coding_convention_tool.md @@ -3,8 +3,6 @@ > [!NOTE] > This is a code formatter tool that helps ensure consistent coding style and detects common issues in source code files. It integrates with pre-commit, allowing you to automate code formatting and checks as part of your development workflow. -> -> **Currently it is only used internally for checking during development, not publicly available.** - See details rule check in folder tools: [tools](). diff --git a/docs/release_note.md b/docs/release_note.md index 754e9682..57d3e49a 100644 --- a/docs/release_note.md +++ b/docs/release_note.md @@ -61,6 +61,14 @@ This release contains the following components: - *.xml + + ---------------- + Coding Convention + + - /tools + + - .pre-commit-config.yaml + ---------------- ## Revision History diff --git a/tools/.clang-tidy b/tools/.clang-tidy new file mode 100644 index 00000000..a764bc0a --- /dev/null +++ b/tools/.clang-tidy @@ -0,0 +1,50 @@ +Checks: > + -*, + readability-identifier-naming, + readability-magic-numbers, + readability-braces-around-statements + +WarningsAsErrors: > + readability-identifier-naming, + readability-magic-numbers, + readability-braces-around-statements + +HeaderFilterRegex: '' +FormatStyle: none +InheritParentConfig: true +User: user +CheckOptions: + - key: readability-identifier-naming.VariableCase + value: lower_case + - key: readability-identifier-naming.GlobalConstantCase + value: UPPER_CASE + - key: readability-identifier-naming.GlobalConstantPrefix + value: SL_ + - key: readability-identifier-naming.ConstantCase + value: UPPER_CASE + - key: readability-identifier-naming.ConstantPrefix + value: SL_ + - key: readability-identifier-naming.EnumConstantCase + value: UPPER_CASE + - key: readability-identifier-naming.EnumConstantPrefix + value: SL_ + - key: readability-identifier-naming.EnumCase + value: lower_case + - key: readability-identifier-naming.EnumPrefix + value: sl_ + - key: readability-identifier-naming.FunctionIgnoredRegexp + value: 'sli_.*' + - key: readability-identifier-naming.FunctionCase + value: lower_case + - key: readability-identifier-naming.FunctionPrefix + value: 'sl_' + - key: readability-identifier-naming.StructCase + value: lower_case + - key: readability-identifier-naming.StructPrefix + value: 'sl_' + - key: readability-identifier-naming.StructMemberCase + value: lower_case + - key: readability-identifier-naming.TypedefCase + value: lower_case + - key: readability-identifier-naming.TypedefPrefix + value: 'sl_' diff --git a/tools/.codespell/.codespellrc b/tools/.codespell/.codespellrc new file mode 100644 index 00000000..55409600 --- /dev/null +++ b/tools/.codespell/.codespellrc @@ -0,0 +1,10 @@ +# See: https://github.com/codespell-project/codespell#using-a-config-file +[codespell] +# In the event of a false positive, add the problematic word, in all lowercase, to 'ignore-words.txt' (one word per line). +# Or copy & paste the whole problematic line to 'exclude-file.txt' +ignore-words = ./tools/.codespell/ignore-words.txt +exclude-file = ./tools/.codespell/exclude-file.txt +check-filenames = +check-hidden = +count = +skip = .git,*.a, diff --git a/tools/.codespell/exclude-file.txt b/tools/.codespell/exclude-file.txt new file mode 100644 index 00000000..e69de29b diff --git a/tools/.codespell/ignore-words.txt b/tools/.codespell/ignore-words.txt new file mode 100644 index 00000000..62fde747 --- /dev/null +++ b/tools/.codespell/ignore-words.txt @@ -0,0 +1,2 @@ +teh +foobar diff --git a/tools/uncrustify.cfg b/tools/uncrustify.cfg new file mode 100644 index 00000000..2b1548d1 --- /dev/null +++ b/tools/uncrustify.cfg @@ -0,0 +1,182 @@ +# uncrustify.cfg version 1.0.0 + +tok_split_gte=false +utf8_byte=false +utf8_force=true +indent_cmt_with_tabs=false +indent_align_string=true +indent_braces=false +indent_braces_no_func=false +indent_braces_no_class=false +indent_braces_no_struct=false +indent_brace_parent=false +indent_namespace=false +indent_extern=false +indent_class=true +indent_class_colon=false +indent_else_if=false +indent_var_def_cont=false +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_relative_single_line_comments=false +indent_col1_comment=false +indent_access_spec_body=false +indent_paren_nl=false +indent_comma_paren=false +indent_bool_paren=false +indent_first_bool_expr=false +indent_square_nl=false +indent_preserve_sql=false +indent_align_assign=true +sp_balance_nested_parens=false +align_keep_tabs=false +align_with_tabs=false +align_on_tabstop=false +#align_number_left=false +align_func_params=false +align_same_func_call_params=false +align_var_def_colon=false +align_var_def_attribute=false +align_var_def_inline=false +align_right_cmt_mix=false +align_on_operator=false +align_mix_var_proto=false +align_single_line_func=false +align_single_line_brace=false +align_nl_cont=true +align_left_shift=true +align_oc_decl_colon=false +nl_collapse_empty_body=false +nl_assign_leave_one_liners=false +nl_class_leave_one_liners=false +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_multi_line_cond=false +nl_multi_line_define=false +nl_before_case=false +nl_after_case=false +nl_after_return=false +nl_after_semicolon=false +nl_after_brace_open=false +nl_after_brace_open_cmt=false +nl_after_vbrace_open=false +nl_after_vbrace_open_empty=false +nl_after_brace_close=false +nl_after_vbrace_close=false +nl_define_macro=false +nl_squeeze_ifdef=false +nl_ds_struct_enum_cmt=false +nl_ds_struct_enum_close_brace=false +nl_create_if_one_liner=false +nl_create_for_one_liner=false +nl_create_while_one_liner=false +ls_for_split_full=false +ls_func_split_full=true +nl_after_multiline_comment=false +eat_blanks_after_open_brace=true +eat_blanks_before_close_brace=true +mod_full_brace_if_chain=false +mod_pawn_semicolon=false +mod_full_paren_if_bool=false +mod_remove_extra_semicolon=false +mod_sort_import=false +mod_sort_using=false +mod_sort_include=false +mod_move_case_break=false +mod_remove_empty_return=false +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=false +cmt_multi_check_last=true +cmt_insert_before_preproc=false +pp_indent=ignore +pp_if_indent_code=false +input_tab_size=2 +indent_columns=2 +indent_label=0 +align_pp_define_span=0 +nl_start_of_file=remove +nl_end_of_file_min=1 +code_width=0 +nl_max=2 +nl_comment_func_def=1 +cmt_width=0 +utf8_bom=remove +indent_with_tabs=0 +sp_before_assign=add +sp_after_assign=add +sp_bool=add +sp_compare=add +sp_inside_paren=remove +sp_before_sparen=force +sp_paren_paren=ignore +sp_inside_sparen=ignore +sp_after_sparen=force +sp_before_square=remove +sp_before_squares=remove +sp_inside_square=remove +sp_after_comma=force +sp_before_comma=remove +sp_paren_comma=remove +sp_inside_braces=add +sp_inside_braces_empty=remove +sp_func_def_paren=remove +sp_inside_fparen=remove +sp_func_call_paren=remove +sp_func_call_paren_empty=remove +sp_else_brace=force +sp_brace_else=force +sp_sign=remove +sp_incdec=remove +sp_cmt_cpp_start=ignore +sp_endif_cmt=force +nl_end_of_file=add +nl_enum_brace=remove +nl_struct_brace=remove +nl_union_brace=remove +nl_for_brace=remove +nl_brace_finally=remove +nl_while_brace=remove +nl_do_brace=remove +nl_brace_while=remove +nl_switch_brace=remove +nl_if_brace=remove +nl_brace_else=remove +nl_elseif_brace=remove +nl_else_brace=remove +nl_fdef_brace=add +mod_full_brace_do=force +mod_full_brace_if=force +mod_full_brace_while=ignore +mod_full_brace_for=force +mod_full_brace_function=force +sp_cmt_cpp_doxygen=true +cmt_sp_after_star_cont=3 +align_keep_extra_space=True +align_var_def_star_style=1 +align_var_def_amp_style=1 +sp_after_type=ignore +pos_arith=lead +pos_bool=lead +pos_compare=lead +pos_conditional=lead +pos_comma=trail +sp_arith=add +sp_assign=add +sp_pp_concat=ignore +# Indent the 'case' label from the 'switch' header (coding standard ยง4.4.3) +# Note: Must come *after* the declaration of 'indent_columns'! +indent_switch_case=indent_columns