- Use hyphens instead of underscores in file and directory names
- Code must meet the requirements of our options to
clang-format
- Headers should follow include-what-you-use guidelines
- Use
#pragma onceinstead of include guards - Place local headers (quoted) ahead of system headers (brackets), with each block in alphabetical order
- Public headers MUST have Doxygen markup for all public symbols
- Private headers should have Doxygen markup flagged with
@internal
- We use CMake 3.x (see the root
CMakeLists.txtfor the specific version) and have not moved to 4.x yet - Use modern CMake (e.g., 3.x) paradigms and avoid "legacy CMake"
- C++17 and C11 are supported
- Use modern C++ idioms
- Do not use GNU extensions
- Code should be platform-independent
- All shell scripts should be run through ShellCheck and report no issues
- Use
#!/usr/bin/env bashas a platform-independent shebang line - bash-isms are allowed, within reason
- All new functionality introduced MUST include tests of the feature
- This could include unit tests, system tests, and integration tests
- These tests MUST be automatable
- Bugfixes MUST include a proof-of-concept test that fails before the fix and passes after
clang-tidy, formatter, etc.