This document describes the coding style used by this project.
All of the formatters can be invoked by the pw utility script in the root of
the project:
$ ./pw format
This project follows the standard Rust Style
Guide for Rust code. Formatting is
done with rustfmt using the
rustfmt.toml
from the upstream Pigweed repository.
Beyond formatting, openprot is embedded, security-critical firmware and review
enforces the following constraints. See .github/copilot-instructions.md for
the full list.
no_stdonly. No heap types (Vec,String,HashMap,Box). Use fixed-size arrays andheaplesscollections.- Panic-free. No
unwrap,expect,panic!, or direct[]indexing in production paths. Preferget(), pattern matching, or returningResult/Option. - Checked arithmetic. Use
checked_*/saturating_*/wrapping_*rather than bare+,-,*on integers where overflow is possible. - Volatile MMIO. Register access uses
read_volatile/write_volatileand must go through HAL traits rather than touching registers directly. unsafeblocks require// SAFETY:comments that explain why the invariants hold.- Constant-time crypto. Use
subtlefor comparing secrets, andzeroizeto bound the lifetime of secret material in memory.
This project follows PEP8 for Python code.
Formatting is done with the black formatter.
This project follows the standard bzl style
guide for Starlark code.
Formatting is done with the buildifier tool.
This project follows the [Google C++ Style Guide] for C and C++ code, with the following exceptions:
- Indent is 4 spaces instead of 2.
- Function names should use
snake_caseinstead ofPascalCase. - In pointer declarations, the asterisk is attached to the variable name (
int *foo) instead of the type name (int* foo).
Formatting is done with clang-format.