mirror of
https://develop.openfoam.com/Development/openfoam.git
synced 2025-11-28 03:28:01 +00:00
codingStyleGuide: updated and generated the pdf version. GUIDELINES removed.
This commit is contained in:
225
doc/GUIDELINES
225
doc/GUIDELINES
@ -1,225 +0,0 @@
|
|||||||
The guidelines document the current style or a recommended style for
|
|
||||||
documenting OpenFOAM source code (.C and .H) files.
|
|
||||||
|
|
||||||
|
|
||||||
General
|
|
||||||
~~~~~~~
|
|
||||||
|
|
||||||
- For readability in the comment blocks, certain tags are used that are
|
|
||||||
translated by pre-filtering the file before sending it to doxygen.
|
|
||||||
|
|
||||||
- The tags start in column 1, the contents follow on the next lines and
|
|
||||||
indented by 4 spaces. The filter removes the leading 4 spaces from the
|
|
||||||
following lines until the next tag that starts in column 1.
|
|
||||||
|
|
||||||
- The 'Class' and 'Description' tags are the most important ones.
|
|
||||||
|
|
||||||
- The first paragraph following the 'Description' will be used for the brief
|
|
||||||
description, the remaining paragraphs become the detailed description.
|
|
||||||
|
|
||||||
|
|
||||||
eg,
|
|
||||||
|-------------------------
|
|
||||||
|
|
|
||||||
|Class
|
|
||||||
| Foam::myClass
|
|
||||||
|
|
|
||||||
|Description
|
|
||||||
| A class for specifying the documentation style.
|
|
||||||
|
|
|
||||||
| The class is implemented as a set of recommendations that may
|
|
||||||
| sometimes be useful.
|
|
||||||
|
|
|
||||||
|-------------------------
|
|
||||||
|
|
||||||
|
|
||||||
- The class name must be qualified by its namespace, otherwise doxygen
|
|
||||||
will think you are documenting some other class.
|
|
||||||
|
|
||||||
- If you don't have anything to say about the class (at the moment),
|
|
||||||
use the namespace-qualified class name for the description.
|
|
||||||
This aids with finding these under-documented classes later.
|
|
||||||
|
|
||||||
|
|
||||||
eg,
|
|
||||||
|-------------------------
|
|
||||||
|
|
|
||||||
|Class
|
|
||||||
| Foam::myUnderDocumentedClass
|
|
||||||
|
|
|
||||||
|Description
|
|
||||||
| Foam::myUnderDocumentedClass
|
|
||||||
|
|
|
||||||
|-------------------------
|
|
||||||
|
|
||||||
|
|
||||||
- Use 'Class' and 'Namespace' tags in the header files.
|
|
||||||
The Description block then applies to documenting the class.
|
|
||||||
|
|
||||||
- Use 'InClass' and 'InNamespace' in the source files.
|
|
||||||
The Description block then applies to documenting the file itself.
|
|
||||||
|
|
||||||
eg,
|
|
||||||
|-------------------------
|
|
||||||
|
|
|
||||||
|InClass
|
|
||||||
| Foam::myClass
|
|
||||||
|
|
|
||||||
|Description
|
|
||||||
| Implements the read and writing of files.
|
|
||||||
|
|
|
||||||
|-------------------------
|
|
||||||
|
|
||||||
|
|
||||||
Doxygen Special Commands
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Doxygen has a large number of special commands with a '\' prefix or
|
|
||||||
a (alternatively) an '@' prefix.
|
|
||||||
|
|
||||||
The '@' prefix form is recommended for most doxygen specials, since it has
|
|
||||||
the advantage of standing out. It also happens to be what projects like gcc
|
|
||||||
and VTK are using.
|
|
||||||
|
|
||||||
The '\' prefix form, however, looks a bit better for the '\n' newline command
|
|
||||||
and when escaping single characters - eg, '\@', '\<', '\>', etc.
|
|
||||||
|
|
||||||
|
|
||||||
Since the filtering removes the leading 4 spaces within the blocks,
|
|
||||||
the doxygen commmands can be inserted within the block without problems.
|
|
||||||
|
|
||||||
eg,
|
|
||||||
|-------------------------
|
|
||||||
|
|
|
||||||
|InClass
|
|
||||||
| Foam::myClass
|
|
||||||
|
|
|
||||||
|Description
|
|
||||||
| Implements the read and writing of files.
|
|
||||||
|
|
|
||||||
| An example input file:
|
|
||||||
| @verbatim
|
|
||||||
| patchName
|
|
||||||
| {
|
|
||||||
| type myPatchType;
|
|
||||||
| refValue 100;
|
|
||||||
| value uniform 1;
|
|
||||||
| }
|
|
||||||
| @endverbatim
|
|
||||||
|
|
|
||||||
| Within the implementation, a loop over all patches is done:
|
|
||||||
| @code
|
|
||||||
| forAll(patches, patchI)
|
|
||||||
| {
|
|
||||||
| ... // some operation
|
|
||||||
| }
|
|
||||||
| @endcode
|
|
||||||
|
|
|
||||||
|-------------------------
|
|
||||||
|
|
||||||
|
|
||||||
HTML Special Commands
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Since Doxygen also handles HTML tags to a certain extent, the angle brackets
|
|
||||||
need quoting in the documentation blocks. Non-HTML tags cause doxygen to
|
|
||||||
complain, but seem to work anyhow.
|
|
||||||
|
|
||||||
eg,
|
|
||||||
The template with type <HR> is a bad example.
|
|
||||||
|
|
||||||
The template with type \<HR\> is a better example.
|
|
||||||
|
|
||||||
The template with type <Type> causes doxygen to complain about
|
|
||||||
an unknown html type, but it seems to work okay anyhow.
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Documenting Namespaces
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
- If namespaces are explictly declared with the Namespace() macro,
|
|
||||||
they should be documented there.
|
|
||||||
|
|
||||||
- If the namespaces is used to hold sub-models, the namespace can be
|
|
||||||
documented in the same file as the class with the model selector.
|
|
||||||
eg,
|
|
||||||
documented namespace 'Foam::functionEntries' within the
|
|
||||||
class 'Foam::functionEntry'
|
|
||||||
|
|
||||||
- If nothing else helps, find some sensible header.
|
|
||||||
eg,
|
|
||||||
namespace 'Foam' is documented in the foamVersion.H file
|
|
||||||
|
|
||||||
|
|
||||||
Documenting Typedefs and classes defined via macros
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
... not yet properly resolved
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Documenting Applications
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Any number of classes might be defined by a particular application, but
|
|
||||||
these classes will not, however, be available to other parts of OpenFOAM. At
|
|
||||||
the moment, the sole purpuse for running doxygen on the applications is to
|
|
||||||
extract program usage information for the '-doc' option.
|
|
||||||
|
|
||||||
The documentation for a particular application is normally contained within
|
|
||||||
the first comment block in a .C source file. The solution is this to invoke
|
|
||||||
a special filter for the "applications/{solver,utilities}" directories that
|
|
||||||
only allows the initial comment block for the .C files through.
|
|
||||||
|
|
||||||
The layout of the application documentation has not yet been finalized, but
|
|
||||||
foamToVTK shows an initial attempt.
|
|
||||||
|
|
||||||
|
|
||||||
Ignored files and directories
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Ignore directories of linked files
|
|
||||||
- */lnInclude/*
|
|
||||||
|
|
||||||
Ignore test directories
|
|
||||||
- */t/*
|
|
||||||
|
|
||||||
Ignore applications that clutter everything
|
|
||||||
|
|
||||||
Ignore application-specific classes
|
|
||||||
- */applications/utilities/*.H
|
|
||||||
- */applications/solvers/*.H
|
|
||||||
|
|
||||||
|
|
||||||
Orthography (always good for a flame-war)
|
|
||||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
||||||
|
|
||||||
Given the origins of OpenFOAM, the British spellings (eg, neighbour and not
|
|
||||||
neighbor) are generally favoured. For code sections that interact with
|
|
||||||
external libraries, it can be useful to adopt American spellings, especially
|
|
||||||
for names that constitute a significant part of the external library - eg,
|
|
||||||
'color' within graphics sub-systems.
|
|
||||||
|
|
||||||
Both '-ize' and the '-ise' variant are found in the code comments.
|
|
||||||
If used as a variable or class method name, it is probably better to use '-ize',
|
|
||||||
which is considered the main form by the Oxford University Press.
|
|
||||||
Eg,
|
|
||||||
myClass.initialize()
|
|
||||||
|
|
||||||
|
|
||||||
The word "its" (possesive) vs. "it's" (colloquial for "it is" or "it has")
|
|
||||||
seems to confuse non-native (and some native) English speakers.
|
|
||||||
It is better to donate the extra keystrokes and write "it is" or "it has".
|
|
||||||
Any remaining "it's" are likely an incorrect spelling of "its".
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Housekeeping
|
|
||||||
~~~~~~~~~~~~
|
|
||||||
|
|
||||||
The doc/Doxygen/tools directory contains miscellaneous scripts for finding
|
|
||||||
and possibly repairing documentation issues.
|
|
||||||
|
|
||||||
|
|
||||||
Updated: 2009-11-27
|
|
||||||
@ -2,7 +2,7 @@
|
|||||||
#
|
#
|
||||||
#+TITLE: OpenFOAM C++ style guide
|
#+TITLE: OpenFOAM C++ style guide
|
||||||
#+AUTHOR: OpenCFD Ltd.
|
#+AUTHOR: OpenCFD Ltd.
|
||||||
#+DATE: April 2010
|
#+DATE: May 2010
|
||||||
#+LINK: http://www.opencfd.co.uk
|
#+LINK: http://www.opencfd.co.uk
|
||||||
#+OPTIONS: author:nil ^:{}
|
#+OPTIONS: author:nil ^:{}
|
||||||
|
|
||||||
@ -13,9 +13,9 @@
|
|||||||
+ The normal indentation is 4 spaces per logical level.
|
+ The normal indentation is 4 spaces per logical level.
|
||||||
+ Use spaces for indentation, not tab characters.
|
+ Use spaces for indentation, not tab characters.
|
||||||
+ Avoid trailing whitespace.
|
+ Avoid trailing whitespace.
|
||||||
+ The body of control statements (eg, if, else, while, etc).
|
+ The body of control statements (eg, =if=, =else=, =while=, etc).
|
||||||
always delineated with brace brackets. A possible exception can be
|
always delineated with brace brackets. A possible exception can be
|
||||||
made with 'break' or 'continue' as part of a control structure.
|
made with =break= or =continue= as part of a control structure.
|
||||||
|
|
||||||
+ stream output
|
+ stream output
|
||||||
+ =<<= is always four characters after the start of the stream,
|
+ =<<= is always four characters after the start of the stream,
|
||||||
@ -72,16 +72,16 @@
|
|||||||
\*---------------------------------------------------------------------------*/
|
\*---------------------------------------------------------------------------*/
|
||||||
#+END_EXAMPLE
|
#+END_EXAMPLE
|
||||||
|
|
||||||
*** The =.H= Files
|
*** The /.H/ Files
|
||||||
+ header file spacing
|
+ header file spacing
|
||||||
+ Leave two empty lines between sections
|
+ Leave two empty lines between sections
|
||||||
(as per functions in the =.C= file etc)
|
(as per functions in the /.C/ file etc)
|
||||||
|
|
||||||
+ use "//- Comment" comments in header file
|
+ use =//- Comment= comments in header file
|
||||||
+ add descriptions to class data and functions
|
+ add descriptions to class data and functions
|
||||||
+ destructor
|
+ destructor
|
||||||
+ If adding a comment to the destructor -
|
+ If adding a comment to the destructor -
|
||||||
use //- and code as a normal function:
|
use =//-= and code as a normal function:
|
||||||
|
|
||||||
#+BEGIN_EXAMPLE
|
#+BEGIN_EXAMPLE
|
||||||
//- Destructor
|
//- Destructor
|
||||||
@ -89,11 +89,11 @@
|
|||||||
#+END_EXAMPLE
|
#+END_EXAMPLE
|
||||||
|
|
||||||
+ inline functions
|
+ inline functions
|
||||||
+ Use inline functions where appropriate in a separate classNameI.H file.
|
+ Use inline functions where appropriate in a separate /classNameI.H/ file.
|
||||||
Avoid cluttering the header file with function bodies.
|
Avoid cluttering the header file with function bodies.
|
||||||
|
|
||||||
*** The =.C= Files
|
*** The /.C/ Files
|
||||||
+ Do not open/close namespaces in a =.C= file
|
+ Do not open/close namespaces in a /.C/ file
|
||||||
+ Fully scope the function name, i.e.
|
+ Fully scope the function name, i.e.
|
||||||
|
|
||||||
#+BEGIN_EXAMPLE
|
#+BEGIN_EXAMPLE
|
||||||
@ -113,7 +113,7 @@
|
|||||||
|
|
||||||
EXCEPTION
|
EXCEPTION
|
||||||
|
|
||||||
When there are multiple levels of namespace, they may be used in the =.C=
|
When there are multiple levels of namespace, they may be used in the /.C/
|
||||||
file, i.e.
|
file, i.e.
|
||||||
|
|
||||||
#+BEGIN_EXAMPLE
|
#+BEGIN_EXAMPLE
|
||||||
@ -138,7 +138,7 @@
|
|||||||
+ const
|
+ const
|
||||||
Use everywhere it is applicable.
|
Use everywhere it is applicable.
|
||||||
|
|
||||||
+ variable initialisation using "="
|
+ variable initialisation using =
|
||||||
|
|
||||||
: const className& variableName = otherClass.data();
|
: const className& variableName = otherClass.data();
|
||||||
|
|
||||||
@ -169,7 +169,7 @@
|
|||||||
}
|
}
|
||||||
#+END_EXAMPLE
|
#+END_EXAMPLE
|
||||||
|
|
||||||
NOT (no space between "if" and "(")
|
NOT (no space between =if= and =(=)
|
||||||
|
|
||||||
#+BEGIN_EXAMPLE
|
#+BEGIN_EXAMPLE
|
||||||
if(condition)
|
if(condition)
|
||||||
@ -201,7 +201,7 @@
|
|||||||
}
|
}
|
||||||
#+END_EXAMPLE
|
#+END_EXAMPLE
|
||||||
|
|
||||||
NOT (no space between "for" and "(")
|
NOT (no space between =for= and =(=)
|
||||||
|
|
||||||
#+BEGIN_EXAMPLE
|
#+BEGIN_EXAMPLE
|
||||||
for(i = 0; i < maxI; i++)
|
for(i = 0; i < maxI; i++)
|
||||||
@ -245,7 +245,7 @@
|
|||||||
**** Splitting return type and function name
|
**** Splitting return type and function name
|
||||||
+ split initially after the function return type and left align
|
+ split initially after the function return type and left align
|
||||||
|
|
||||||
+ do not put "const" onto its own line - use a split to keep it with
|
+ do not put =const= onto its own line - use a split to keep it with
|
||||||
the function name and arguments.
|
the function name and arguments.
|
||||||
|
|
||||||
so
|
so
|
||||||
@ -277,7 +277,7 @@
|
|||||||
#+END_EXAMPLE
|
#+END_EXAMPLE
|
||||||
|
|
||||||
+ if it needs to be split again, split at the function name (leaving
|
+ if it needs to be split again, split at the function name (leaving
|
||||||
behind the preceding scoping "::"s), and again, left align, i.e.
|
behind the preceding scoping =::=s), and again, left align, i.e.
|
||||||
|
|
||||||
For example,
|
For example,
|
||||||
|
|
||||||
@ -326,16 +326,19 @@
|
|||||||
|
|
||||||
*** Maths and Logic
|
*** Maths and Logic
|
||||||
+ operator spacing
|
+ operator spacing
|
||||||
+ a + b, a - b
|
|
||||||
+ a*b, a/b
|
#+BEGIN_EXAMPLE
|
||||||
+ a & b, a ^ b
|
a + b, a - b
|
||||||
+ a = b, a != b
|
a*b, a/b
|
||||||
+ a < b, a > b, a >= b, a <= b
|
a & b, a ^ b
|
||||||
+ a || b, a && b
|
a = b, a != b
|
||||||
|
a < b, a > b, a >= b, a <= b
|
||||||
|
a || b, a && b
|
||||||
|
#+END_EXAMPLE
|
||||||
|
|
||||||
+ splitting formulae over several lines
|
+ splitting formulae over several lines
|
||||||
|
|
||||||
Split and indent as per "splitting long lines at an "=""
|
Split and indent as per "splitting long lines at an ="
|
||||||
with the operator on the lower line. Align operator so that first
|
with the operator on the lower line. Align operator so that first
|
||||||
variable, function or bracket on the next line is 4 spaces indented i.e.
|
variable, function or bracket on the next line is 4 spaces indented i.e.
|
||||||
|
|
||||||
@ -525,9 +528,9 @@
|
|||||||
option.
|
option.
|
||||||
|
|
||||||
The documentation for a particular application is normally contained
|
The documentation for a particular application is normally contained
|
||||||
within the first comment block in a =.C= source file. The solution is this
|
within the first comment block in a /.C/ source file. The solution is this
|
||||||
to invoke a special filter for the "applications/{solver,utilities}"
|
to invoke a special filter for the "/applications/{solver,utilities}/"
|
||||||
directories that only allows the initial comment block for the =.C= files
|
directories that only allows the initial comment block for the /.C/ files
|
||||||
through.
|
through.
|
||||||
|
|
||||||
The layout of the application documentation has not yet been finalized,
|
The layout of the application documentation has not yet been finalized,
|
||||||
@ -551,10 +554,7 @@
|
|||||||
myClass.initialize()
|
myClass.initialize()
|
||||||
#+END_EXAMPLE
|
#+END_EXAMPLE
|
||||||
|
|
||||||
|
|
||||||
The word "its" (possesive) vs. "it's" (colloquial for "it is" or "it has")
|
The word "its" (possesive) vs. "it's" (colloquial for "it is" or "it has")
|
||||||
seems to confuse non-native (and some native) English speakers.
|
seems to confuse non-native (and some native) English speakers.
|
||||||
It is better to donate the extra keystrokes and write "it is" or "it has".
|
It is better to donate the extra keystrokes and write "it is" or "it has".
|
||||||
Any remaining "it's" are likely an incorrect spelling of "its".
|
Any remaining "it's" are likely an incorrect spelling of "its".
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
BIN
doc/codingStyleGuide.pdf
Normal file
BIN
doc/codingStyleGuide.pdf
Normal file
Binary file not shown.
Reference in New Issue
Block a user