The goal of the style guide is to describe in detail naming conventions for developing HELICS. Style conventions are encapsulated in the .clang_format files in the project.
We have an EditorConfig file that has basic formatting rules code editors and IDEs can use. See https://editorconfig.org/ for how to setup support in your preferred editor or IDE.
-
All functions should be
camelCase
PublicationID registerGlobalPublication (const std::string &name, const std::string &type, const std::string &units = "");
EXCEPTION: when the functionality matches a function defined in the standard library e.g. to_string()
-
All classes should be
PascalCase
class ValueFederate : public virtual Federate { public: ValueFederate (const FederateInfo &fi); }
-
class methods should be
camelCase
Publication ®isterGlobalPublication (const std::string &name, const std::string &type, const std::string &units = "");
Exceptions: functions that match standard library functions e.g. to_string()
-
Enumeration names should be
PascalCase
. Enumeration values should be CAPITAL_SNAKE_CASE/* Type definitions */ typedef enum { HELICS_OK, HELICS_DISCARD, HELICS_WARNING, HELICS_ERROR, } HelicsStatus;
-
Constants and macros should CAPITAL_SNAKE_CASE
-
Variable names: local variable names should be
camelCase
member variable names should bemPascalCase
static const members should beCAPITAL_SNAKE_CASE
function input names should becamelCase
index variables can becamelCase
orii,jj,kk,mm, nn
or similar if appropriate global variables shouldgPascalCase
-
All C++ functions and types should be contained in the helics namespace with subnamespaces used as appropriate
namespace helics { ... } // namespace helics
-
C interface functions should begin with helicsXXXX
HelicsBool helicsBrokerIsConnected (HelicsBroker broker);
-
C interface function should be of the format helics{Class}{Action} or helics{Action} if no class is appropriate
HelicsBool helicsBrokerIsConnected (HelicsBroker broker); const char *helicsGetVersion ();
-
All cmake commands (those defined in cmake itself) should be lower case
if as opposed to IF install vs INSTALL
-
Public interface functions should be documented consistent with Doxygen style comments non public ones should be documented as well with doxygen but we are a ways from that goal
/** get an identifier for the core @param core the core to query @return a string with the identifier of the core */ HELICS_EXPORT const char *helicsCoreGetIdentifier (HelicsCore core);
-
File names should match class names if possible
-
All user-facing options (e.g.
log_level
) should be expressed to the user as a single word or phrase usingnocase
,camelCase
, andsnake_case
. Do not use more than one synonymous term for the same option; that is, do not define a single option that is expressed to the user as bothbest_ice_cream_flavor
andmost_popular_ice_cream_flavor
.
Exception: when defining the command line options, the command-line parser already handles underscores and casing so there is no need to define all three cases for that parser.