Code Style - umrover/mrover-ros2 GitHub Wiki
Formatting
Run ./style.sh in the top-level directory. ./style.sh --fix will attempt to auto-format.
General
- Prefer longer variable names. Avoid abbreviations. We have autocomplete for a reason!
C++
- Adhere to all clang tidy checks defined in
.clang-tidy. This is tested by the CI. - Style syntax with the clang format defined by
.clang-format. This is tested by the CI. - Never use raw pointers, prefer smart pointers (usually
std::shared_ptr). - Check if something exists in the standard library before you reinvent the wheel!
- Prefer
static_castetc. instead of C style cast - Use
autoon iterator types (ranged for) and when the type is obvious, for example casting orstd::make_shared - Pass primitives by value (
int,float, etc.) and complex types by reference or smart pointers - Do not use references (&) types for out parameters in functions, prefer returning a struct
- Prefer using an explicit struct instead of
std::pairorstd::tuple - Use structured binding when possible (e.g. iterating named map, unpacking a
std::pair, ...) - Avoid
std::bind, use an explicit lambda - Prefer PascalCase for things like classes and camelCase for things like member variables. This is tested by the CI.
Python
- Currently
blackandmypyare used. This is tested by the CI. - If you are writing a function, please use type hinting for the signature. For other places, only use if necessary, for example a situation where the types are confusing.
- Black is an autoformating tool that will control the format of your code
- MyPy is a static type analysis tool that will make sure you don't violate type hinted functions
- Document your code! Use the reST standard specifically
- Prefer snake_case for regular python classes, functions, and variables and UPPER_CASE for constants
Here is a good concrete example:
def pos_distance_to(self, p: SE3) -> float:
"""
Get the euclidean distance from the position of this SE3 pose to the position of another SE3 pose.
:param p: another SE3 pose object
:returns: euclidean distance between the two SE3 poses
"""
return np.linalg.norm(p.position_vector() - self.position_vector())