Code style¶
Python code formatters¶
For Python code formatting, we use Black code formatter, black settings are stored in the repository’s pyproject.toml.
We have GitHub workflow ci-black-formatting to maintain black formatting across the repository.
black
can be installed using pip install black
and files can be formatted with the following example command:
# Format the entire repository.
# Should be used in 99% cases as the entire repository is already formatted using black.
black .
# Format only some specific file.
black src/bonsai/bonsai/bim/module/qto/operator.py
There is also ruff with some basic linter rules (checked automatically by the same Github workflow). Which also helps maintaining consistency across the code base and ensure new Python syntax doesn’t break code on older Python versions.
ruff
can be installed using pip install ruff
and files can be formatted with the following example commands:
# Check issues for the entire repository.
ruff check
# Apply some automatic fixes, if available.
ruff check --fix
# Check only some specific file.
ruff src/bonsai/bonsai/bim/module/qto/operator.py
Python code style¶
Naming should be PEP8 compliant. Also prefer using long descriptive variable names.
C++ code style¶
prefer British English instead of American
strictly use C++17
use similar style for all languages
spaces (4) instead of tabs
CONSTANTS_AND_MACROS
prefix macros that leak into client code (code using the IfcOpenShell libraries) with IFC_
filenames_namespaces_classes_functions_and_variables
private_or_protected_member_variable_
postfix typedefs with _t, e.g. typedef float real_t
(outdated? codebase is mainly using same line brace) K&R style braces for control flow, but braces on their own line for non-control flow (classes, enums, functions, etc.)
#ifndef FOO_H
#define FOO_H
class foo
{
public:
void bar(bool foo_or_bar)
{
if (foo_or_bar) {
// ...
} else {
// ...
}
}
private:
bool i_am_foo_;
}
#endif