doc(style): update C++ style guide

This commit is contained in:
Soonho Kong 2013-09-25 17:44:27 -07:00
parent 1452e9319e
commit 4a66712ef2

View file

@ -157,30 +157,61 @@ Similarly, we write `x < y + 1` instead of `x<y+1`.
Google's C++ Style Guide Google's C++ Style Guide
------------------------ ------------------------
We are using a modified version of We are using a modified version of [Google's C++ Style Guide][google-style].
[Google's C++ Style Guide][google-style]. Here is a list of checks We also have our version of Google's style checker [cpplint.py][cpplint].
that we *disabled*: You can run the checker over the codebase by typing:
- Namespace should be terminated with "namespace" [readability/namespace] make style
If you use Ninja, you can check by ``ninja style``. It is also a part of testcases and can be run by
ctest -R style_check
*Disabled* Features:
- Namespace should be terminated with "namespace"
- At least two spaces is best between code and comments - At least two spaces is best between code and comments
- Do not use ``dynamic_cast<>``. If you need to cast within a class - Do not use ``dynamic_cast<>``. If you need to cast within a class
hierarchy, use ``static_cast<>`` to upcast. Google doesn't support hierarchy, use ``static_cast<>`` to upcast. Google doesn't support
RTTI. RTTI.
- "public:" should be preceded by a blank line [whitespace/blank_line] - "public:" should be preceded by a blank line
- Missing space before ``{`` [whitespace/braces] - Missing space before ``{``
- Found C system header after C++ system header. Should be: - Found C system header after C++ system header. Should be:
environment.h, c system, c++ system, other. [build/include_order] environment.h, c system, c++ system, other.
[4]
- Labels should always be indented at least one space. If this is - Labels should always be indented at least one space. If this is
a member-initializer list in a constructor or the base class list in a member-initializer list in a constructor or the base class list in
a class definition, the colon should be on the following line. a class definition, the colon should be on the following line.
[whitespace/labels] - You don't need a ``;`` after a ``}``
- You don't need a ``;`` after a ``}`` [readability/braces]
- No ``#ifndef`` header guard found - No ``#ifndef`` header guard found
- Streams are highly discouraged. - Streams are highly discouraged.
- Extra space before ``(`` in function call [whitespace/parens] - Extra space before ``(`` in function call
- Else clause should never be on same line as else [whitespace/newline] - Else clause should never be on same line as else
- Extra space before ``)`` [whitespace/parens] - Extra space before ``)``
- Is this a non-const reference? If so, make const or use a pointer. [runtime/references] - Is this a non-const reference? If so, make const or use a pointer.
- All parameters should be named in a function
Modified Features:
- Add ``#include <list>`` for ``list<>``
=> *Check* ``std::list`` instead of ``list`` because we do have our own ``lean::list`` type.
- Add ``#include <algorithm>`` for copy
=> *Check* ``std::copy`` instead of ``copy`` because we do have our own ``lean::copy`` method.
- Do not use namespace using-directives. Use using-declarations instead.
=> *Allow* this if filename contains "tests/"
- Small and focused functions are preferred: foo()
has xxx non-comment lines (error triggered by exceeding 500 lines).
=> *Allow* this if filename contains "tests/"
- Include the directory when naming .h files
=> *Allow* this if the included filename is "version.h" which is generated by cmake.
[google-style]: http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml [google-style]: http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml
[cpplint]: /src/cmake/Modules/cpplint.py