Code Styleguide and Naming Convention¶
Packages, files and directories¶
- Package names in lower case with underscores and exotica prefix:
exotica exotica_python exotica_examples exotica_core_taskmaps exotica_aico_solver exotica_ik_solver exotica_collision_scene_fcl_latest ...
All solver packages with
_solver
suffix.All task map packages with
_taskmaps
suffix (or_taskmap
if it contains only a single task map).File names:
with_underscores.cpp
,with_underscores.h
,with_underscores.py
(do not use *.cc, *.hpp, … file types)Directory structure:
package_name\ package_name\launch\ (*.launch) package_name\src\ (*.cpp) package_name\include\package_name\ (*.h) package_name\scripts\ (*.py - with correct shebang and without file endings) package_name\init\ (*.in) package_name\cmake\ (*.cmake and supporting scripts) package_name\doc\ (doxygen and other files) package_name\resources\ (urdf/srdf/meshes/scenes/trajectories/...) package_name\test\ (C++/python test scripts) package_name\test\resources\ (test resources)
For files in scripts/
, if they are Python file:
- Make the script executable (
chmod +x filename
). - Add an appropriate shebang.
- Do not include the file ending.
C++¶
We follow the Google C++ style guide with minor amendments (cf. file naming above). A good reference on notation terminology is the Drake style guide.
Where the Google style guide leaves multiple options, here are our choices:
- Use
override
instead ofvirtual
when overriding a function in a child class. - Order output parameters after inputs if returning values via arguments.
- Avoid boost.
- Always use C++11.
- Type names:
CamelCasedWithFirstCapitalLetter
- Variable names:
with_underscores
- Member variables:
with_underscores_and_trailing_underscore_
- Struct data members:
with_underscores
- Constants:
kCamelCasedWithPrefix
- Function names:
CamelCasedWithFirstCapitalLetter
- Namespace names (always single word):
lowercase
- Enum names:
CamelCasedWithFirstCapitalLetter
- Enum data members:
ALL_CAPS
- Macro names:
ALL_CAPS
- Comments:
// always use double slash
- File comments - include author, copyright, and license
- File/class/function/variable comments:
/// always use doxygen documentation style comments
- Implementation comments:
// always use regular double slash comments on a separate line
- TODO:
// TODO(githubusername or email) use comments with enough detail - the name references who added it or who is responsible for fixing it
Formatting¶
- No line length limit (use your own judgment for readability).
- Use the provided clang-format – cf. Code Formatting.
- Use UTF-8 encoding.
- Use 4 spaces instead of tabs.
- Opening
{
on a new line on the same level as the conditional/function/loop and the closing brace. - Use vertical white space to separate code blocks/declarations.
Python¶
- Packages/Modules: Short lower case (avoid underscores), e.g.,
pyexotica
- Class names:
CamelCased
- Function and variable names:
lower_case_with_underscores
- Non-public members:
_lower_case_with_leading_underscore
- Constants:
ALL_CAPS
- Getters/setters: always replace with attributes
- Always include explicit exports (
__all__
) - Apply PEP8 formatting