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_std only. No heap types (Vec, String, HashMap, Box). Use fixed-size arrays and heapless collections.unwrap, expect, panic!, or direct [] indexing in production paths. Prefer get(), pattern matching, or returning Result / Option.checked_* / saturating_* / wrapping_* rather than bare +, -, * on integers where overflow is possible.read_volatile / write_volatile and must go through HAL traits rather than touching registers directly.unsafe blocks require // SAFETY: comments that explain why the invariants hold.subtle for comparing secrets, and zeroize to 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:
snake_case instead of PascalCase.int *foo) instead of the type name (int* foo).Formatting is done with clang-format.