Hygiena
Nebojte, nebudeme si povídat o tom, že je dobré si před jídlem umýt ruce. Řeč bude o nástrojích, pomocí kterých lze v elixirových projektech udržovat to, co lze nazvat “hygiena kódu”. Konkrétně půjde o formátování a statickou analýzu.
Formátování kódu
Od verze 1.6 je podpora pro formátování kódu přímo součástí ekosystému jazyka. Jednoduše v projektovém adresáři napíšete mix format
a všechny zdrojové soubory v projektu se přeformátují standardním způsobem. Kouzlo spočívá v souboru .formatter.exs
, který se automaticky vygeneruje při zakládání nového projektu pomocí mix new
- obsahuje seznam cest k souborům, které se mají formátovat. V konfiguraci .formatter.exs
lze vlastnosti formátování měnit, což vřele nedoporučuji (nebo jen výjimečně, např. maximální délku řádku). Formátovat lze samozřejmě i jednotlivé soubory (mix format <cesta k souboru>
). Další možností je kontrola, jestli jsou zdrojáky projektu zformátované správně (mix format --check-formatted
). Této kontroly využívá mnoho komunitních projektů jako součást CI.
Pluginy podporující formátování existují pro většinu editorů (namátkou Vim, VS Code, IntelliJ IDEA). Více o formátování napoví mix help format
.
Credo
Credo je statický analyzátor, který se zaměřuje na konzistenci kódu. Umí poradit, kde můžete kód vylepšit nebo refaktorovat, vynadá, když nemáte okomentovaný modul a podobně. Určitě není na škodu udržovat svůj kód ve stavu, se kterým je credo spokojené. Doporučuji credo používat v přísnějším režimu (mix credo --strict
).
Dialyxir
Dialyxir je také statický analyzátor, ovšem zaměřený na hledání nesrovnalostí (a tedy potenciálních chyb) v kódu. Pro dynamický jazyk jako Elixir je taková kontrola velice užitečná, může odhalit hromadu chyb dříve, než program spustíte. Dialyxir je elixirový obal nad erlangovým nástrojem dialyzer. Nelekněte se delšího běhu (i několik minut) při prvním spuštění (mix dialyzer
), nástroj si vytvoří pomocné soubory. Další spuštění jsou již mnohem svižnější.
3 v 1
Podle mých zkušeností je užitečné všechny tři nástroje používat co nejdříve od vzniku projektu a udržovat jejich výstup bez chyb. Pokud si chcete usnadnit práci, můžete si pro spuštění všech tří vytvořit alias a následně je pouštět pomocí mix hygiene
, viz. následující mix.exs
projektu CisteRuce
:
defmodule CisteRuce.MixProject do
use Mix.Project
def project do
[
app: :ciste_ruce,
version: "0.1.0",
elixir: "~> 1.9",
start_permanent: Mix.env() == :prod,
deps: deps(),
aliases: aliases()
]
end
defp deps do
[
{:credo, "~> 1.1.0", only: [:dev, :test], runtime: false},
{:dialyxir, "~> 1.0.0-rc.7", only: [:dev], runtime: false}
]
end
defp aliases do
[
hygiene: [
"format --check-formatted",
"credo --strict",
"dialyzer"
]
]
end
end