-
Notifications
You must be signed in to change notification settings - Fork 10
Coding Guidelines
The is the coding standardization for the YIO Remote project.
Common rules for project files:
- No spaces allowed in file and directory names
- Code and text files:
- No tabs. Use 4 spaces instead.
- Max line length: 120 characters.
- UTF-8 encoding (except it's a special system file required to be in another encoding).
- Do not use the BOM character in UTF-8 files.
It's of no use and certain tools will fail miserable when encountering a BOM (e.g. cpplint).
- Do not use the BOM character in UTF-8 files.
- Use proper linefeeds:
- Never hard code line feeds. It won't work on all platforms.
For C++ / Qt use:endl
- Use Git
core.autocrlf true
- Unix shell scripts must be
\r
- Never hard code line feeds. It won't work on all platforms.
- Each code file should have a GPL-3.0-or-later license header.
- The license template is provided in remote-software/license-template.txt
- This is mandatory for CPP files and checked with cpplint.
- Qt Creator setting: Tools -> Options... -> C++ -> File Naming:
License template
- Qt Creator setting: Tools -> Options... -> C++ -> File Naming:
- For JavaScript file a short one-liner is sufficient:
// @License GPL-3.0-or-later - please refer to LICENSE.md file for details
We are using the Google C++ Style Guide as main reference. See validation below for the few exceptions to the guide.
Additional rules to the Google C++ Style Guide:
- Use the modern
#pragma once
instead of the traditional#ifndef
header guards- Qt Creator setting: Tools -> Options... -> C++ -> File Naming: Check
Include guards
- Qt Creator setting: Tools -> Options... -> C++ -> File Naming: Check
- CPP files:
- Use lower case naming.
- Qt Creator setting: Tools -> Options... -> C++ -> File Naming: Check
Lower case file names
- Qt Creator setting: Tools -> Options... -> C++ -> File Naming: Check
- dash character
-
is not allowed.
- Use lower case naming.
Style validation is performed with cpplint on each push with a GitHub Action.
If the style violates the guidelines the check will fail and associated with the commit.
Filter settings for cpplint:
Filter | Description |
---|---|
-build/c++11 | We don't restrict C++ 11 features |
-build/include_subdir | Header files are in the same folder |
Options for cpplint:
Option | Description |
---|---|
--linelength=120 | The area of 3270 terminals is over |
--root=sources | Source directory |
Install cpplint (Python installation required):
$ sudo pip3 install --system cpplint
Run validation in the project's root directory:
$ cpplint --filter=-build/include_subdir,-build/c++11 --linelength=120 --root=sources --recursive sources
Note: cpplint version 1.5.2 or newer is required, otherwise there will be false positives with Qt signal definitions!
-
Install ClangFormat for your OS:
-
Linux Ubuntu:
sudo apt-get install clang-format
-
macOS using Homebrew:
brew install clang-format
Clang Format command:
/usr/local/bin/clang-format
-
Windows:
- Download a pre-built binary from http://releases.llvm.org/download.html#9.0.0.
- Install the package and add the path of %LLVM%\bin to your system environment.
-
-
In Qt Creator go to Help > About Plugins > C++ > Beautifier and enable the plugin.
-
Restart Qt.
-
Go to Tools -> Options -> Beautifier -> Clang Format
-
Verify the
Clang Format command
if it matches the installed version from step 1. -
For projects containing a clang format file
.clang-format
in the project's root directory:- Set
Use predefined style
to:File
. - Set
Fallback style
to:Google
- Set
-
Otherwise set
Use customized style
and add the following definition:BasedOnStyle: Google IndentWidth: 4 ColumnLimit: 120 AccessModifierOffset: -3 AlignConsecutiveDeclarations: true
-
To format a source file with the Beautifier definition:
Choose Tools -> Beautifier -> ClangFormat -> Format Current File
- Same line as the function definition
- The else goes on the same line as the closing bracket.
- Curly brackets are always required, even for single statements!
bool Foo::bar(const QString &newName) {
bool success = m_file.rename(newName);
if (success) {
emit nameChanged(newName);
} else {
qCWarning(CLASS_LC) << "Error renaming file:" << m_file;
}
return success;
}
TBD
YIO Remote Project Documentation Wiki Page https://github.com/YIO-Remote/documentation/wiki
Home
YIO Remote API
Dock
FAQ
Supporters
Remote Firmware
Dock Firmware
YIO Homepage
YIO Community
YIO Github
YIO Discord Channel
YIO Facebook
YIO Instagram
YIO Twitter
YIO YouTube
YIO Translation
Dock
Remote
Supported IR Extenders
Home Assistant
Homey
openHAB
Roon
Spotify
YIO Dock
Build Environment
Setup Qt IDE
Setup PlatformIO IDE
Developer VM
Setup Buildroot
API
API
WebSocket API
Generic
SSH/SCP
Architecture
Coding Guidelines
Configuration File
Developing Integrations
Entity Types
Logging
Workflow
Git Workflow
Pull Requests
Continuous Integration