Nástroje programátora
Nutné nástroje: textový editor (např. vim a kompilátor (např. g++, clang++)
Další nástroje mohou výrazně usnadnit práci. Nejběžnější jsou ucelená vývojová prostředí (IDE), ale běžné jsou i nástroje které lze použít samostatně nebo integrované do textového editoru nebo IDE (např. formou pluginů).
Každý editor/IDE je třeba správně nastavit:
- parametry kompilace (pokud se projekt kompiluje z editoru/IDE)
- odsazování tab/space, délka řádku, whitespace na konci řádků (viz také editorconfig níže)
- dále se hodí: zvýraznění syntaxe, čísla řádků, schování bloku, atd.
Ukážeme si tyto nástroje:
- editorconfig poskytuje jednotnou specifikaci, která umožňuje nastavit základní způsob formátování zdrojového kódu napříč editory/IDE. Mnoho editorů/IDE poskytuje nativní podporu nebo je k dispozici plugin.
- clangd poskytuje „chytré“ funkce pro editor/IDE (např. doplňování kódu, chyby při kompilaci, varování na běžné problémy (viz clang-tidy níže), statická analýza, apod.) Existují rozšíření/pluginy pro několik editorů/IDE (Vim, Emacs, Visual Studio Code, Sublime Text).
- clang-tidy je nástroj umožňující pokročilou analýzu kódu, diagnostiku běžných problémů které často vedou k chybám, a automatické opravování některých chyb. Existuje několik rozšíření/pluginů pro běžné editory/IDE (pluginy pro clangd poskytují stejnou nebo větší funkcionalitu, takže pro editory/IDE s clangd není potřeba hledat plugin pro clang-tidy).
- clang-format je nástroj pro automatické formátování kódu dle zvolených pravidel. K dispozici jsou běžné styly (např. Google, Mozilla) a podrobný konfigurační soubor. Lze použít buď samostatně nebo použít integraci pro editor/IDE (Vim, Emacs, BBEdit, CLion, Visual Studio, Visual Studio Code).
Znáte nějaké další podobné nástroje?
Vzorové konfigurační soubory
Všechny soubory patří do hlavního (kořenového) adresáře projektu a působí i na soubory v podadresářích.
Soubor .editorconfig
pro nástroj editorconfig:
# top-most EditorConfig file
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
indent_style = space
indent_size = 4
Soubor .clang-format
pro nástroj clang-format:
# Documentation: https://clang.llvm.org/docs/ClangFormatStyleOptions.html
---
Language: Cpp
Standard: c++14
BasedOnStyle: Mozilla
IndentWidth: 4
ContinuationIndentWidth: 4
IndentAccessModifiers: false
AccessModifierOffset: -4
...
# vim: ft=yaml
Soubor .clang-tidy
pro nástroje clang-tidy a clangd:
# Documentation: https://clang.llvm.org/extra/clang-tidy/
---
HeaderFilterRegex: '^*.*$'
AnalyzeTemporaryDtors: false
FormatStyle: file
User: user
Checks: 'readability-*,
modernize-*,
-modernize-use-trailing-return-type,
performance-*'
WarningsAsErrors: 'performance-*'
CheckOptions:
- key: readability-braces-around-statements.ShortStatementLines
value: 2
- key: readability-function-size.LineThreshold
value: 64
- key: readability-function-size.ParameterThreshold
value: 8
- key: readability-magic-numbers.IgnoreAllFloatingPointValues
value: true
- key: readability-magic-numbers.IgnorePowersOf2IntegerValues
value: true
- key: modernize-use-default-member-init.UseAssignment
value: true
- key: modernize-use-auto.MinTypeNameLength
value: 10
...
# vim: ft=yaml
Kromě toho je pro nástroje clang-tidy a clangd potřeba specifikovat parametry překladače (tj. stejné parametry, které
předáváme programu clang++ při překladu). V nejjednodušším případě stačí vytvořit textový soubor compile_flags.txt
s
jednoduchým formátem (co řádek, to parametr):
-std=c++14