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
_solversuffix.All task map packages with
_taskmapssuffix (or_taskmapif 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
overrideinstead ofvirtualwhen 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:
CamelCasedWithFirstCapitalLetterVariable names:
with_underscoresMember variables:
with_underscores_and_trailing_underscore_Struct data members:
with_underscoresConstants:
kCamelCasedWithPrefixFunction names:
CamelCasedWithFirstCapitalLetterNamespace names (always single word):
lowercaseEnum names:
CamelCasedWithFirstCapitalLetterEnum data members:
ALL_CAPSMacro names:
ALL_CAPSComments:
// always use double slashFile comments - include author, copyright, and license
File/class/function/variable comments:
/// always use doxygen documentation style commentsImplementation comments:
// always use regular double slash comments on a separate lineTODO:
// 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.,
pyexoticaClass names:
CamelCasedFunction and variable names:
lower_case_with_underscoresNon-public members:
_lower_case_with_leading_underscoreConstants:
ALL_CAPSGetters/setters: always replace with attributes
Always include explicit exports (
__all__)Apply PEP8 formatting