blob: 1f96c5731f613e492a240018f07ac0a5d081947f [file] [log] [blame]
Coding Style & Guidelines
=========================
The following sections contain |FTB| coding guidelines. They are continually evolving and should not be considered "set
in stone". Feel free to question them and provide feedback.
The |FTB| project uses multiple "domains" (textual content types, like programming languages) and each defines its own
rules.
To help configuring text editors the project comes with "`EditorConfig`_" file(s). (:download:`../../.editorconfig`).
Shared rules
------------
The following rules are common for all domains, except where noted otherwise:
#. Files shall be **UTF-8** encoded.
#. Use **Unix** style line endings (``LF`` character)
#. The primary language of the project is English. All comments and documentation must be in this language.
#. Trailing whitespace is not welcome, please trim these.
C/C++ Domain
------------
C source code rules are base on the *Linux Coding Style* (See: |LCS|). The following deviations apply:
5. C code in |FTB| follows *ISO/IEC 9899:1999* standard.
#. C++ code in |FTB| follows *ISO/IEC 14882:2011* standard (C++ 11)
#. Line length shall not exceed 100 characters.
#. Use `snake_case`_ for function, variable and file names.
#. Each file shall be "self contained" and include header files with external dependencies. No file shall depend on
headers included by other files.
#. Include ordering: please include project specific headers first and then system includes. Please order the files
alphabetically in the above two groups.
#. All variables must be initialized.
CMake domain
------------
11. CMake file names use `CamelCase`_ style.
#. Indent with tabs and otherwise use spaces. Use 4 spaces for tab size.
#. Use LF as line end in CMake files.
#. Remove trailing whitespace.
#. Maximum line length is 128 characters.
#. When complicated functionality is needed prefer CMake scripting over other languages.
#. Prefix local variables with `_`.
#. Use functions to prevent global name-space pollution.
#. Use `snake_case`_ for function and variable names.
#. Use the ``include_guard()`` CMake function when creating new modules, to prevent multiple inclusion.
#. Use self contained modules, i.e. include direct dependencies of the module.
#. Use the Sphinx CMake domain for in-line documentation of CMake scripts. For details please refer to the
`CMake Documentation`_.
Restructured Text Domain
------------------------
Please refer to :ref:`Writing documentation`.
--------------
.. _`CamelCase`: https://hu.wikipedia.org/wiki/CamelCase
.. _`snake_case`: https://en.wikipedia.org/wiki/Snake_case
.. _`CMake Documentation`: https://github.com/Kitware/CMake/blob/master/Help/dev/documentation.rst
.. _`EditorConfig`: https://editorconfig.org/
.. _`Uncrustify`: https://github.com/uncrustify/uncrustify
*Copyright (c) 2020-2021, Arm Limited and Contributors. All rights reserved.*
SPDX-License-Identifier: BSD-3-Clause