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:

Ukážeme si tyto nástroje:

  1. 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.
  2. 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).
  3. 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).
  4. 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