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 of virtual 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