Formatting and Linting
Run quality workflows through Aspect CLI from the repository root. The underlying formatters, linters, Python runtime, and C toolchain are pinned Bazel inputs; no Picblobs virtual environment or host linter installation is required.
# Apply formatting
aspect run //modules/picblobs/tools:format_write --
# Read-only formatting and Python/Bazel lint checks
aspect test --bazel-flag=--config=picblobs_quality //modules/picblobs/tools:format_check
aspect test --bazel-flag=--config=picblobs_quality //modules/picblobs/tools:lint_check
# Full Picblobs CI gate
aspect hovel-check modules
# Optional C static analysis target
aspect hovel-check modules
Optional repository hooks can be installed with
aspect hovel-hooks. They call Aspect-backed checks rather than
exposing the underlying tool commands.
Formatters and linters
| Language | Tool | Configuration |
|---|---|---|
| C/H files | clang-format | modules/picblobs/.clang-format |
| C/H files | clang-tidy | modules/picblobs/.clang-tidy and Bazel lint aspects |
| Python | Ruff formatter and linter | modules/picblobs/ruff.toml |
| C and Python | Lizard complexity checks |
modules/picblobs/tools/lint.py and
modules/picblobs/tools/lizard_baseline.txt
|
Complexity
# Check the complete declared source set
aspect test --bazel-flag=--config=picblobs_quality //modules/picblobs/tools:lint_check
# Run the lint materializer and forward an explicit source selection
aspect run //modules/picblobs/tools:lint_run -- -- src/payload/hello.c python/tests/test_python_api.py
The Bazel-managed lint target runs Lizard with a maximum cyclomatic
complexity number (CCN) of 10. Its declared input set excludes
build artifacts, virtual environments, and generated output trees. Explicit
Picblobs-relative paths forwarded after -- narrow the
materializer to those sources without bypassing the Aspect/Bazel toolchain.