Skip to main content

beman-tidy: The Codebase Bemanification Tool

CI Tests

beman-tidy is a tool aimed at Beman Project contributors to check (--dry-run) and apply (--fix-inplace) the Beman Standard to their repositories.

Note 2025-06-07: The first iteration of the tool will not support --fix-inplace in order to expedite adoption across the Beman Project.

Installation

uv tool install beman-tidy

To update:

uv tool upgrade beman-tidy

Post-install sanity check:

beman-tidy --help

Requirements

  • Python 3.12+
  • uv (Python package and project manager - Installation)

Compatibility

  • Linux
  • macOS
  • Windows

Usage

  • Display help:
$ beman-tidy --help
usage: beman-tidy [-h] [--version] [--fix-inplace | --no-fix-inplace] [--verbose | --no-verbose] [--require-all | --no-require-all] [--list-checks] [--checks CHECKS] [--config CONFIG]
                  repo_path

positional arguments:
  repo_path             path to the repository to check

options:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  --fix-inplace, --no-fix-inplace
                        try to automatically fix found issues
  --verbose, --no-verbose
                        print verbose output for each check
  --require-all, --no-require-all
                        all checks are required regardless of their type (e.g., all RECOMMENDATIONs become REQUIREMENTs)
  --list-checks         list all implemented checks
  --checks CHECKS       array of checks to run
  --config CONFIG       path to the configuration file (default: .beman-tidy.yaml in repo root)
  • Run beman-tidy on the exemplar repository (default: dry-run mode)
# dry-run, require-all, non-verbose
$ beman-tidy --require-all /path/to/exemplar
Summary    Requirement:  18 checks passed, 1 checks failed, 5 checks skipped,  23 checks not implemented.
Summary Recommendation:  0 checks passed, 0 checks failed, 0 checks skipped,  0 checks not implemented.

Coverage    Requirement:  95.83% (23/24 checks passed).
Coverage Recommendation:   0.00% (0/0 checks passed).
Coverage          TOTAL:  95.83% (23/24 checks passed).

# dry-run, no-require-all, non-verbose
$ beman-tidy /path/to/exemplar
Summary    Requirement:  13 checks passed, 1 checks failed, 3 checks skipped,  9 checks not implemented.
Summary Recommendation:  5 checks passed, 0 checks failed, 2 checks skipped,  14 checks not implemented.

Coverage    Requirement:  66.67% (16/24 checks passed).
Coverage Recommendation: 100.00% (7/7 checks passed).
Coverage          TOTAL:  74.19% (23/31 checks passed).

or verbose mode without errors:

# dry-run, require-all, verbose mode - no errors
$ beman-tidy --require-all --verbose /path/to/exemplar
beman-tidy pipeline started ...

Running check [Requirement][license.approved] ...
[info           ][license.approved         ]: Valid Apache License - Version 2.0 with LLVM Exceptions found in LICENSE file.
	check [Requirement][license.approved] ... passed

Running check [Requirement][license.apache_llvm] ...
	check [Requirement][license.apache_llvm] ... passed

Running check [Requirement][license.criteria] ...
[skipped        ][license.criteria         ]: beman-tidy cannot actually check license.criteria. Please ignore this message if license.approved has passed. See https://github.com/bemanproject/beman/blob/main/docs/beman_standard.md#licensecriteria for more information.
Running check [Requirement][license.criteria] ... skipped

...

Running check [Requirement][readme.title] ...
	check [Requirement][readme.title] ... passed

Running check [Requirement][readme.badges] ...
	check [Requirement][readme.badges] ... passed

Running check [Requirement][readme.implements] ...
	check [Requirement][readme.implements] ... passed

...

beman-tidy pipeline finished.

Summary    Requirement:  19 checks passed, 0 checks failed, 3 checks skipped,  23 checks not implemented.
Summary Recommendation:  0 checks passed, 0 checks failed, 2 checks skipped,  0 checks not implemented.

Coverage    Requirement: 100.00% (24/24 checks passed).
Coverage Recommendation:   0.00% (0/0 checks passed).
Coverage          TOTAL: 100.00% (24/24 checks passed).

or verbose mode with errors:

# dry-run, require-all, verbose mode - with errors
$ beman-tidy --require-all --verbose /path/to/exemplar
beman-tidy pipeline started ...

Running check [Requirement][license.approved] ...
[info           ][license.approved         ]: Valid Apache License - Version 2.0 with LLVM Exceptions found in LICENSE file.
	check [Requirement][license.approved] ... passed

Running check [Requirement][license.apache_llvm] ...
	check [Requirement][license.apache_llvm] ... passed

Running check [Requirement][license.criteria] ...
[skipped        ][license.criteria         ]: beman-tidy cannot actually check license.criteria. Please ignore this message if license.approved has passed. See https://github.com/bemanproject/beman/blob/main/docs/beman_standard.md#licensecriteria for more information.
Running check [Requirement][license.criteria] ... skipped

...

Running check [Requirement][readme.implements] ...
	check [Requirement][readme.implements] ... passed

Running check [Requirement][readme.library_status] ...
[error          ][readme.library_status    ]: The file '/Users/dariusn/dev/dn/git/Beman/exemplar/README.md' does not contain exactly one of the required statuses from ['**Status**: [Under development and not yet ready for production use.](https://github.com/bemanproject/beman/blob/main/docs/beman_library_maturity_model.md#under-development-and-not-yet-ready-for-production-use)', '**Status**: [Production ready. API may undergo changes.](https://github.com/bemanproject/beman/blob/main/docs/beman_library_maturity_model.md#production-ready-api-may-undergo-changes)', '**Status**: [Production ready. Stable API.](https://github.com/bemanproject/beman/blob/main/docs/beman_library_maturity_model.md#production-ready-stable-api)', '**Status**: [Retired. No longer maintained or actively developed.](https://github.com/bemanproject/beman/blob/main/docs/beman_library_maturity_model.md#retired-no-longer-maintained-or-actively-developed)']
	check [Requirement][readme.library_status] ... failed

...

beman-tidy pipeline finished.

Summary    Requirement:  18 checks passed, 1 checks failed, 3 checks skipped,  23 checks not implemented.
Summary Recommendation:  0 checks passed, 0 checks failed, 2 checks skipped,  0 checks not implemented.

Coverage    Requirement:  95.83% (23/24 checks passed).
Coverage Recommendation:   0.00% (0/0 checks passed).
Coverage          TOTAL:  95.83% (23/24 checks passed).
  • Run beman-tidy on the exemplar repository (fix issues in-place):
beman-tidy --fix-inplace --verbose path/to/exemplar

CI Usage (GitHub Actions)

This repository already includes a full workflow in .github/workflows/beman-tidy.yml covering linting, tests, build/install, and running beman-tidy on bemanproject/exemplar.

Configuration

beman-tidy attempts to read configuration for each source file from a .beman-tidy.yaml file located in the root of your repository. You can also specify a custom configuration file path using the --config option.

The following configuration options may be used in a .beman-tidy.yaml file:

  • ignored_paths - A list of paths to be excluded from all checks.

    • To ignore a specific file, provide its full path relative to the repository root.
    • To ignore a directory, provide the path to that directory. This will ignore the directory itself and all files and subdirectories within it. A trailing slash (/) is optional.
  • Example:

    ignored_paths:
      # Ignores a single file
      - include/beman/optional/detail/stl_interfaces/config.hpp
    
      # Ignores a directory and everything inside it
      - include/beman/optional/another_dir
    
  • disabled_rules - A list of rule names (or patterns) to be completely skipped during checks.

    • To disable a specific rule, provide its exact name (e.g., readme.title).
    • To disable all rules in a category, use a glob pattern with * (e.g., readme.* to skip all readme checks).
    • To disable a specific rule across all categories, use *.rule_name (e.g., *.title).
    • Unknown patterns that don't match any known rule will produce a warning and be skipped.
    • Disabled rules appear as "disabled" in the summary and are excluded from coverage calculations.
  • Example:

    disabled_rules:
      # Disable a single rule
      - readme.title
    
      # Disable all readme checks
      - readme.*
    
      # Disable all rules named "title" across categories
      - "*.title"
    

Fix-inplace Status

  • The CLI exposes --fix-inplace, but auto-fix support is currently limited.

Troubleshooting / FAQ

  • Why is a check reported as skipped?
    • Some checks are intentionally skippable/dummy implementations and emit a reason in verbose mode.
  • Why do I see "not implemented" in the summary?
    • The check exists in the Beman Standard snapshot but does not yet have an implemented checker.
  • How do I ignore files/directories?
    • Use ignored_paths in .beman-tidy.yaml.
  • How do I disable specific rules?
    • Use disabled_rules in .beman-tidy.yaml. You can specify exact rule names or glob patterns like readme.*.
  • How do I get more detail?
    • Run with --verbose to print per-check diagnostics.

Integrating beman-tidy into Your Library

Please refer to the How to Integrate beman-tidy pre-commit Hook in Your Library for more details.

Contributing on beman-tidy

Please refer to the Beman Tidy Development Guide for more details.

License

Licensed under Apache-2.0 WITH LLVM-exception. See LICENSE.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

beman_tidy-0.5.4.tar.gz (45.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

beman_tidy-0.5.4-py3-none-any.whl (58.5 kB view details)

Uploaded Python 3

File details

Details for the file beman_tidy-0.5.4.tar.gz.

File metadata

  • Download URL: beman_tidy-0.5.4.tar.gz
  • Upload date:
  • Size: 45.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for beman_tidy-0.5.4.tar.gz
Algorithm Hash digest
SHA256 49abb6a770bfefdb3870d08f8f79706d9180d2fa3b81d8789611213599f2ed5c
MD5 970f89d70f5cbfa3a75a39daaf794681
BLAKE2b-256 25bd45318f116e5170c4fd8c3306af43c3d5177180d93c020559288bed24848b

See more details on using hashes here.

Provenance

The following attestation bundles were made for beman_tidy-0.5.4.tar.gz:

Publisher: publish.yml on bemanproject/beman-tidy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file beman_tidy-0.5.4-py3-none-any.whl.

File metadata

  • Download URL: beman_tidy-0.5.4-py3-none-any.whl
  • Upload date:
  • Size: 58.5 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for beman_tidy-0.5.4-py3-none-any.whl
Algorithm Hash digest
SHA256 f569e27b9bb1d5ae598c0005b921130a4ce2aa5930243001740406db48187f24
MD5 738868fb71d4e314d8f70f9719b43456
BLAKE2b-256 0c2f48feb4cd1e91ad347142eaa5dca355de928b43b89b4e8e2d8eacb165080a

See more details on using hashes here.

Provenance

The following attestation bundles were made for beman_tidy-0.5.4-py3-none-any.whl:

Publisher: publish.yml on bemanproject/beman-tidy

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.5.4 This release

2 files

0.5.1

2 files

0.5.0

2 files

0.4.1

2 files

0.4.0

2 files

0.3.0

2 files

0.2.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page