Styleguide
Code format
We rely on rustfmt to automatically format our code.
Code organization
We organize/separate imports into three blocks (all separated by one newline):
- 1st block for core language things:
core,alloc,stdetc. - 2nd block for libraries:
vibrio,x86,lazy_staticetc. - 3rd block for internal imports:
crate::*,super::*etc. - 4th block for re-exports:
pub(crate) use::*etc. - 5th block for modules:
mod foo;etc.
Afterwards a .rs file should (roughly) have the following structure:
- 1st
typedeclarations - 2nd
constdeclarations - 3rd
staticdeclarations - 4th
struct,fn,impletc. declarations
Visibility
Avoid the use of pub in the kernel. Use pub(crate), pub(super) etc. This
helps with dead code elimination.
Assembly
We use AT&T syntax for assembly code (options(att_syntax) in Rust asm!
blocks)
Cargo features
Libraries and binaries only have non-additive / non-conflicting feature flags.
This helps to spot compilation problems quickly (e.g. with cargo build --all-features)
Errors
The KError type is used to represent errors in the kernel. Whenever possible,
each variant should only be used once/in a single location (to be easy to grep
for) and should have a descriptive name.
Formatting Commit Messages
We follow the conventions on How to Write a Git Commit Message.
Be sure to include any related GitHub issue references in the commit message. See GFM syntax for referencing issues and commits.
Github pull requests & history
Since github doesn't do fast-forward merges through the UI, after PR passes test, merge it on the command line to keep the same commit hashes of the branch in master:
git checkout master
git merge --ff-only feature-branch-name