diff --git a/.clang-format b/.clang-format index e89da94..104c404 100644 --- a/.clang-format +++ b/.clang-format @@ -1,5 +1,4 @@ # BasedOnStyle: Google - AccessModifierOffset: -2 AlignAfterOpenBracket: DontAlign AlignConsecutiveAssignments: false @@ -54,16 +53,16 @@ DisableFormat: false ExperimentalAutoDetectBinPacking: true FixNamespaceComments: true ForEachMacros: -- foreach -- Q_FOREACH -- BOOST_FOREACH + - foreach + - Q_FOREACH + - BOOST_FOREACH IncludeCategories: -- Priority: 2 - Regex: ^"(llvm|llvm-c|clang|clang-c)/ -- Priority: 3 - Regex: ^(<|"(gtest|gmock|isl|json)/) -- Priority: 1 - Regex: .* + - Priority: 2 + Regex: ^"(llvm|llvm-c|clang|clang-c)/ + - Priority: 3 + Regex: ^(<|"(gtest|gmock|isl|json)/) + - Priority: 1 + Regex: .* IncludeIsMainRegex: (Test)?$ IndentCaseLabels: false IndentWidth: 4 diff --git a/.clang-tidy b/.clang-tidy index 5f876cf..0276ee1 100644 --- a/.clang-tidy +++ b/.clang-tidy @@ -1,24 +1,10 @@ ---- Checks: > - google-*, - clang-diagnostic-*, - clang-analyzer-*, - cppcoreguidelines-*, - modernize-*, - -modernize-use-trailing-return-type, - bugprone-*, - performance-*, - readability-identifier-naming, - -google-readability-braces-around-statements, - -cppcoreguidelines-avoid-magic-numbers, - llvm-header-guard, - + google-*, clang-diagnostic-*, clang-analyzer-*, cppcoreguidelines-*, modernize-*, -modernize-use-trailing-return-type, + bugprone-*, performance-*, readability-identifier-naming, -google-readability-braces-around-statements, + -cppcoreguidelines-avoid-magic-numbers, llvm-header-guard, #magic___^_^___line WarningsAsErrors: '*' - FormatStyle: file - -HeaderFilterRegex: '.*' - +HeaderFilterRegex: .* CheckOptions: - key: readability-identifier-naming.ClassCase value: CamelCase @@ -40,4 +26,3 @@ CheckOptions: value: p - key: readability-identifier-naming.ConstantCase value: UPPER_CASE -... diff --git a/.cmake-format.yaml b/.cmake-format.yaml index 651e4ef..8988642 100755 --- a/.cmake-format.yaml +++ b/.cmake-format.yaml @@ -1,201 +1,201 @@ _help_format: Options affecting formatting. format: _help_disable: - - Disable formatting entirely, making cmake-format a no-op + - Disable formatting entirely, making cmake-format a no-op disable: false _help_line_width: - - How wide to allow formatted cmake files + - How wide to allow formatted cmake files line_width: 100 _help_tab_size: - - How many spaces to tab for indent + - How many spaces to tab for indent tab_size: 4 _help_use_tabchars: - - If true, lines are indented using tab characters (utf-8 - - 0x09) instead of space characters (utf-8 0x20). - - In cases where the layout would require a fractional tab - - character, the behavior of the fractional indentation is - - governed by + - If true, lines are indented using tab characters (utf-8 + - 0x09) instead of space characters (utf-8 0x20). + - In cases where the layout would require a fractional tab + - character, the behavior of the fractional indentation is + - governed by use_tabchars: false _help_fractional_tab_policy: - - If is True, then the value of this variable - - indicates how fractional indentions are handled during - - whitespace replacement. If set to 'use-space', fractional - - indentation is left as spaces (utf-8 0x20). If set to - - '`round-up` fractional indentation is replaced with a single' - - tab character (utf-8 0x09) effectively shifting the column - - to the next tabstop + - If is True, then the value of this variable + - indicates how fractional indentions are handled during + - whitespace replacement. If set to 'use-space', fractional + - indentation is left as spaces (utf-8 0x20). If set to + - '`round-up` fractional indentation is replaced with a single' + - tab character (utf-8 0x09) effectively shifting the column + - to the next tabstop fractional_tab_policy: use-space _help_max_subgroups_hwrap: - - If an argument group contains more than this many sub-groups - - (parg or kwarg groups) then force it to a vertical layout. + - If an argument group contains more than this many sub-groups + - (parg or kwarg groups) then force it to a vertical layout. max_subgroups_hwrap: 2 _help_max_pargs_hwrap: - - If a positional argument group contains more than this many - - arguments, then force it to a vertical layout. + - If a positional argument group contains more than this many + - arguments, then force it to a vertical layout. max_pargs_hwrap: 6 _help_max_rows_cmdline: - - If a cmdline positional group consumes more than this many - - lines without nesting, then invalidate the layout (and nest) + - If a cmdline positional group consumes more than this many + - lines without nesting, then invalidate the layout (and nest) max_rows_cmdline: 2 _help_separate_ctrl_name_with_space: - - If true, separate flow control names from their parentheses - - with a space + - If true, separate flow control names from their parentheses + - with a space separate_ctrl_name_with_space: false _help_separate_fn_name_with_space: - - If true, separate function names from parentheses with a - - space + - If true, separate function names from parentheses with a + - space separate_fn_name_with_space: false _help_dangle_parens: - - If a statement is wrapped to more than one line, than dangle - - the closing parenthesis on its own line. + - If a statement is wrapped to more than one line, than dangle + - the closing parenthesis on its own line. dangle_parens: false _help_dangle_align: - - If the trailing parenthesis must be 'dangled' on its on - - 'line, then align it to this reference: `prefix`: the start' - - 'of the statement, `prefix-indent`: the start of the' - - 'statement, plus one indentation level, `child`: align to' - - the column of the arguments + - If the trailing parenthesis must be 'dangled' on its on + - 'line, then align it to this reference: `prefix`: the start' + - 'of the statement, `prefix-indent`: the start of the' + - 'statement, plus one indentation level, `child`: align to' + - the column of the arguments dangle_align: prefix _help_min_prefix_chars: - - If the statement spelling length (including space and - - parenthesis) is smaller than this amount, then force reject - - nested layouts. + - If the statement spelling length (including space and + - parenthesis) is smaller than this amount, then force reject + - nested layouts. min_prefix_chars: 4 _help_max_prefix_chars: - - If the statement spelling length (including space and - - parenthesis) is larger than the tab width by more than this - - amount, then force reject un-nested layouts. + - If the statement spelling length (including space and + - parenthesis) is larger than the tab width by more than this + - amount, then force reject un-nested layouts. max_prefix_chars: 10 _help_max_lines_hwrap: - - If a candidate layout is wrapped horizontally but it exceeds - - this many lines, then reject the layout. + - If a candidate layout is wrapped horizontally but it exceeds + - this many lines, then reject the layout. max_lines_hwrap: 2 _help_line_ending: - - What style line endings to use in the output. + - What style line endings to use in the output. line_ending: unix _help_command_case: - - Format command names consistently as 'lower' or 'upper' case + - Format command names consistently as 'lower' or 'upper' case command_case: canonical _help_keyword_case: - - Format keywords consistently as 'lower' or 'upper' case + - Format keywords consistently as 'lower' or 'upper' case keyword_case: unchanged _help_always_wrap: - - A list of command names which should always be wrapped + - A list of command names which should always be wrapped always_wrap: [] _help_enable_sort: - - If true, the argument lists which are known to be sortable - - will be sorted lexicographicall + - If true, the argument lists which are known to be sortable + - will be sorted lexicographicall enable_sort: true _help_autosort: - - If true, the parsers may infer whether or not an argument - - list is sortable (without annotation). + - If true, the parsers may infer whether or not an argument + - list is sortable (without annotation). autosort: false _help_require_valid_layout: - - By default, if cmake-format cannot successfully fit - - everything into the desired linewidth it will apply the - - last, most agressive attempt that it made. If this flag is - - True, however, cmake-format will print error, exit with non- - - zero status code, and write-out nothing + - By default, if cmake-format cannot successfully fit + - everything into the desired linewidth it will apply the + - last, most agressive attempt that it made. If this flag is + - True, however, cmake-format will print error, exit with non- + - zero status code, and write-out nothing require_valid_layout: false _help_layout_passes: - - A dictionary mapping layout nodes to a list of wrap - - decisions. See the documentation for more information. + - A dictionary mapping layout nodes to a list of wrap + - decisions. See the documentation for more information. layout_passes: {} _help_markup: Options affecting comment reflow and formatting. markup: _help_bullet_char: - - What character to use for bulleted lists + - What character to use for bulleted lists bullet_char: '*' _help_enum_char: - - What character to use as punctuation after numerals in an - - enumerated list + - What character to use as punctuation after numerals in an + - enumerated list enum_char: . _help_first_comment_is_literal: - - If comment markup is enabled, don't reflow the first comment - - block in each listfile. Use this to preserve formatting of - - your copyright/license statements. + - If comment markup is enabled, don't reflow the first comment + - block in each listfile. Use this to preserve formatting of + - your copyright/license statements. first_comment_is_literal: false _help_literal_comment_pattern: - - If comment markup is enabled, don't reflow any comment block - - which matches this (regex) pattern. Default is `None` - - (disabled). - literal_comment_pattern: null + - If comment markup is enabled, don't reflow any comment block + - which matches this (regex) pattern. Default is `None` + - (disabled). + literal_comment_pattern: _help_fence_pattern: - - Regular expression to match preformat fences in comments - - default= ``r'^\s*([`~]{3}[`~]*)(.*)$'`` + - Regular expression to match preformat fences in comments + - default= ``r'^\s*([`~]{3}[`~]*)(.*)$'`` fence_pattern: ^\s*([`~]{3}[`~]*)(.*)$ _help_ruler_pattern: - - Regular expression to match rulers in comments default= - - '``r''^\s*[^\w\s]{3}.*[^\w\s]{3}$''``' + - Regular expression to match rulers in comments default= + - "``r'^\\s*[^\\w\\s]{3}.*[^\\w\\s]{3}$'``" ruler_pattern: ^\s*[^\w\s]{3}.*[^\w\s]{3}$ _help_explicit_trailing_pattern: - - If a comment line matches starts with this pattern then it - - is explicitly a trailing comment for the preceeding - - argument. Default is '#<' + - If a comment line matches starts with this pattern then it + - is explicitly a trailing comment for the preceeding + - argument. Default is '#<' explicit_trailing_pattern: '#<' _help_hashruler_min_length: - - If a comment line starts with at least this many consecutive - - hash characters, then don't lstrip() them off. This allows - - for lazy hash rulers where the first hash char is not - - separated by space + - If a comment line starts with at least this many consecutive + - hash characters, then don't lstrip() them off. This allows + - for lazy hash rulers where the first hash char is not + - separated by space hashruler_min_length: 10 _help_canonicalize_hashrulers: - - If true, then insert a space between the first hash char and - - remaining hash chars in a hash ruler, and normalize its - - length to fill the column + - If true, then insert a space between the first hash char and + - remaining hash chars in a hash ruler, and normalize its + - length to fill the column canonicalize_hashrulers: true _help_enable_markup: - - enable comment markup parsing and reflow + - enable comment markup parsing and reflow enable_markup: true _help_lint: Options affecting the linter lint: _help_disabled_codes: - - a list of lint codes to disable - # C0113: Missing COMMENT in statement which allows it - disabled_codes: ['C0113', 'C0301'] + - a list of lint codes to disable + # C0113: Missing COMMENT in statement which allows it + disabled_codes: [C0113, C0301] _help_function_pattern: - - regular expression pattern describing valid function names + - regular expression pattern describing valid function names function_pattern: '[0-9a-z_]+' _help_macro_pattern: - - regular expression pattern describing valid macro names + - regular expression pattern describing valid macro names macro_pattern: '[0-9A-Z_]+' _help_global_var_pattern: - - regular expression pattern describing valid names for - - variables with global (cache) scope + - regular expression pattern describing valid names for + - variables with global (cache) scope global_var_pattern: '[A-Z][0-9A-Z_]+' _help_internal_var_pattern: - - regular expression pattern describing valid names for - - variables with global scope (but internal semantic) + - regular expression pattern describing valid names for + - variables with global scope (but internal semantic) internal_var_pattern: _[A-Z][0-9A-Z_]+ _help_local_var_pattern: - - regular expression pattern describing valid names for - - variables with local scope + - regular expression pattern describing valid names for + - variables with local scope local_var_pattern: '[a-z][a-z0-9_]+' _help_private_var_pattern: - - regular expression pattern describing valid names for - - privatedirectory variables + - regular expression pattern describing valid names for + - privatedirectory variables private_var_pattern: _[0-9a-z_]+ _help_public_var_pattern: - - regular expression pattern describing valid names for public - - directory variables + - regular expression pattern describing valid names for public + - directory variables public_var_pattern: '[A-Z][0-9A-Z_]+' _help_argument_var_pattern: - - regular expression pattern describing valid names for - - function/macro arguments and loop variables. + - regular expression pattern describing valid names for + - function/macro arguments and loop variables. argument_var_pattern: '[a-z][a-z0-9_]+' _help_keyword_pattern: - - regular expression pattern describing valid names for - - keywords used in functions or macros + - regular expression pattern describing valid names for + - keywords used in functions or macros keyword_pattern: '[A-Z][0-9A-Z_]+' _help_max_conditionals_custom_parser: - - In the heuristic for C0201, how many conditionals to match - - within a loop in before considering the loop a parser. + - In the heuristic for C0201, how many conditionals to match + - within a loop in before considering the loop a parser. max_conditionals_custom_parser: 2 _help_min_statement_spacing: - - Require at least this many newlines between statements + - Require at least this many newlines between statements min_statement_spacing: 1 _help_max_statement_spacing: - - Require no more than this many newlines between statements + - Require no more than this many newlines between statements max_statement_spacing: 2 max_returns: 6 max_branches: 12 diff --git a/.github/workflows/format_and_lint_ci.yml b/.github/workflows/format_and_lint_ci.yml new file mode 100644 index 0000000..9dacd54 --- /dev/null +++ b/.github/workflows/format_and_lint_ci.yml @@ -0,0 +1,68 @@ +name: Formatting and Linting + +on: + + pull_request: + branches: + - main + + push: + branches: + - main + +jobs: + + setup-build-lint: + + runs-on: ubuntu-latest + + steps: + - name: Install dependencies + run: | + apt-get update + apt-get install -y check clang-format clang-tidy cmake + + - name: Set up workspace + run: | + # Create workspace structure + mkdir -p ~/ws/build ~/ws/install ~/ws/src + + - name: Checkout code + uses: actions/checkout@v4 + with: + path: ~/ws/src + + - name: Set up build + run: | + # Extract package name from CMakeLists.txt project() definition + PACKAGE_NAME=$(grep -m1 -Po 'project\(\K[^\)]+' ~/ws/src/CMakeLists.txt) + echo "Detected package name: $PACKAGE_NAME" + + # Create build directory for the package + mkdir -p ~/ws/build/$PACKAGE_NAME + + # Navigate to the package-specific build directory + cd ~/ws/build/$PACKAGE_NAME + + # Configure with specified flags and set install prefix to ~/ws/install + cmake ../../src \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_EXPORT_COMPILE_COMMANDS=ON \ + -DENABLE_TESTS=ON \ + -DCMAKE_INSTALL_PREFIX=~/ws/install + + # Install to the specified install directory + make install + + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: '3.10' + + - name: Install python dependencies + run: | + python -m pip install --upgrade pip + pip install pre-commit cmakelang[YAML] + + - name: Run pre-commit checks + run: pre-commit run --all-files --files ~/ws/src diff --git a/.github/workflows/mkdocs_ci_gh_pages.yml b/.github/workflows/mkdocs_ci_gh_pages.yml index 29810a6..87c3e78 100644 --- a/.github/workflows/mkdocs_ci_gh_pages.yml +++ b/.github/workflows/mkdocs_ci_gh_pages.yml @@ -1,24 +1,32 @@ name: ci_mkdocs + on: push: branches: - master - main + permissions: contents: write + jobs: + deploy: + runs-on: ubuntu-latest + steps: - uses: actions/checkout@v4 - name: Configure Git Credentials run: | git config user.name github-actions[bot] git config user.email 41898282+github-actions[bot]@users.noreply.github.com + - uses: actions/setup-python@v5 with: python-version: 3.x - run: echo "cache_id=$(date --utc '+%V')" >> $GITHUB_ENV + - uses: actions/cache@v4 with: key: mkdocs-material-${{ env.cache_id }} diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3207b3c..f1a2ba6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -2,9 +2,8 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v2.3.0 hooks: - - id: end-of-file-fixer - - id: trailing-whitespace - - id: check-yaml + - id: end-of-file-fixer + - id: trailing-whitespace - repo: https://github.com/pre-commit/mirrors-clang-format rev: v19.1.2 @@ -21,10 +20,10 @@ repos: language: system files: \.(c|h|cc)$ args: - - "-p" - - "../../build/PackageName/" # Replace 'build/' with your actual compilation database path (add set(CMAKE_EXPORT_COMPILE_COMMANDS ON) in CMakeLists.txt) - - "-extra-arg=-isystem" - - "-extra-arg=../../install/include" # Replace 'install/include' with your actual system include path + - -p + - ../../build/PackageName/ # Replace 'build/' with your actual compilation database path (add set(CMAKE_EXPORT_COMPILE_COMMANDS ON) in CMakeLists.txt) + - -extra-arg=-isystem + - -extra-arg=../../install/include # Replace 'install/include' with your actual system include path - id: cpp-lint name: cpp-lint @@ -32,10 +31,10 @@ repos: language: system files: \.(cpp|hpp)$ args: - - "-p" - - "../../build/PackageName/" # Replace 'build/' with your actual compilation database path (add set(CMAKE_EXPORT_COMPILE_COMMANDS ON) in CMakeLists.txt) - - "-extra-arg=-isystem" - - "-extra-arg=../../install/include" # Replace 'install/include' with your actual system include path + - -p + - ../../build/PackageName/ # Replace 'build/' with your actual compilation database path (add set(CMAKE_EXPORT_COMPILE_COMMANDS ON) in CMakeLists.txt) + - -extra-arg=-isystem + - -extra-arg=../../install/include # Replace 'install/include' with your actual system include path - id: cmake-format name: cmake-format @@ -50,8 +49,14 @@ repos: language: python types: [cmake] + - repo: https://github.com/google/yamlfmt + rev: v0.10.0 + hooks: + - id: yamlfmt + args: [-conf, .yamlfmt.yaml] + - repo: https://github.com/igorshubovych/markdownlint-cli rev: v0.42.0 hooks: - - id: markdownlint - args: ["--fix"] + - id: markdownlint + args: [--fix] diff --git a/.yamlfmt.yaml b/.yamlfmt.yaml new file mode 100644 index 0000000..4e67e16 --- /dev/null +++ b/.yamlfmt.yaml @@ -0,0 +1,6 @@ +formatter: + type: basic + indent: 2 + retain_line_breaks: true + include_document_start: false + max_line_length: 100 diff --git a/mkdocs.yaml b/mkdocs.yaml index 7738f7f..4b65958 100644 --- a/mkdocs.yaml +++ b/mkdocs.yaml @@ -9,21 +9,19 @@ theme: name: material palette: # Palette toggle for automatic mode - - media: "(prefers-color-scheme)" + - media: (prefers-color-scheme) toggle: icon: material/brightness-auto name: Switch to light mode - - # Palette toggle for light mode - - media: "(prefers-color-scheme: light)" + # Palette toggle for light mode + - media: '(prefers-color-scheme: light)' scheme: default primary: black toggle: icon: material/brightness-7 name: Switch to dark mode - - # Palette toggle for dark mode - - media: "(prefers-color-scheme: dark)" + # Palette toggle for dark mode + - media: '(prefers-color-scheme: dark)' scheme: slate primary: black toggle: