Formatting and Linting
Run quality workflows through Task 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
task picblobs:fmt
# Read-only formatting and Python/Bazel lint checks
task picblobs:fmt-check
task picblobs:lint-check
# Full Picblobs CI gate
task picblobs:ci
# Optional C static analysis target
task --dir modules/picblobs lint:c
Optional repository hooks can be installed with
task hooks:install. They call Task-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
task picblobs:lint-check
# Run the lint materializer and forward an explicit source selection
task picblobs:lint -- 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 Task/Bazel toolchain.