Code Formatting
Starting with the post-release 3.0 codebase, we are trying to unify the
coding style of our source code. All new patches and contributions
should strive to follow the same style
(See
here for good reasons why this is important)
Indentation: Required to be using 4 characters per level,
no tabs allowed. Set your editor to insert spaces for
tabs.
Comments: Self explanatory code with descriptive naming of methods
and variables is preferred over comments. Only use comments if you feel
the intent of your code or the algorithm
used is not obvious from a casual reading of the code.
A general sample of the preferred style follows below. Follow this
template for whitespace around braces, parentheses, operators and
control statements.
For Eclipse users there is a Code Formatter template available at
(Remove the .doc extension)
For [[http://uncrustify.sourceforge.net/%7CUncrustify]]**users there
is an uncrustify.cfg available at
(Remove the .doc extension) FIXME file needs to be found. This is just a
placeholder file.
If possible change editor defaults to remove blank at the end of the line. Avoid encoding, whitespace and formatting issues.
CMake Formatting
Having a uniform formatting enhances readability. The main CMakeLists.txt + some (not all) support files has been successfully reformatted using https://github.com/cheshirekow/cmake_format. The configuration file (almost pristine) is available as https://raw.githubusercontent.com/OpenCPN/OpenCPN/master/.cmake-format.yaml.
All in all this has created a much more consistent formatting of the CMake setup files. It might make sense to consider also for a template project
#include <math.h> class Point { public: Point( double x, double y ) : x( x ), y( y ) { } double distance( const Point& other ) const; int compareX( const Point& other ) const; double x; double y; }; double Point::distance( const Point& other ) const { double dx = x - other.x; double dy = y - other.y; return sqrt( dx * dx + dy * dy ); } int Point::compareX( const Point& other ) const { if( x <other.x ) { return -1; } else if( x> other.x ) { return 1; } else { return 0; } } namespace FOO { int foo( int bar ) const { switch( bar ){ case 0: ++bar; break; case 1: --bar; default: { bar += bar; break; } } } } // end namespace FOO