106 lines
3.2 KiB
Nix
106 lines
3.2 KiB
Nix
{ actionlint
|
|
, black
|
|
, buildToolbox
|
|
, checkedShellScript
|
|
, deadnix
|
|
, git
|
|
, hlint
|
|
, hsie
|
|
, nixpkgs-fmt
|
|
, python3Packages
|
|
, ruff
|
|
, silver-searcher
|
|
, statix
|
|
, stylish-haskell
|
|
, writeText
|
|
}:
|
|
let
|
|
style =
|
|
checkedShellScript
|
|
{
|
|
name = "postgrest-style";
|
|
docs = "Automatically format Haskell, Nix and Python files.";
|
|
workingDir = "/";
|
|
}
|
|
''
|
|
# Format Nix files
|
|
${statix}/bin/statix fix
|
|
${nixpkgs-fmt}/bin/nixpkgs-fmt . > /dev/null 2> /dev/null
|
|
|
|
# Format Haskell files
|
|
# --vimgrep fixes a bug in ag: https://github.com/ggreer/the_silver_searcher/issues/753
|
|
${silver-searcher}/bin/ag -l --vimgrep -g '\.l?hs$' . \
|
|
| xargs ${stylish-haskell}/bin/stylish-haskell -i
|
|
|
|
# Format Python files
|
|
${black}/bin/black . 2> /dev/null
|
|
'';
|
|
|
|
# Script to check whether any uncommitted changes result from postgrest-style
|
|
styleCheck =
|
|
checkedShellScript
|
|
{
|
|
name = "postgrest-style-check";
|
|
docs = "Check whether postgrest-style results in any uncommitted changes.";
|
|
workingDir = "/";
|
|
}
|
|
''
|
|
${style}
|
|
|
|
trap "echo postgrest-style-check failed. Run postgrest-style to fix issues automatically." ERR
|
|
|
|
${git}/bin/git diff-index --exit-code HEAD -- '*.hs' '*.lhs' '*.nix' '*.py'
|
|
'';
|
|
|
|
hlintConfig = writeText "hlintConfig.yml" ''
|
|
|
|
# Arguments passed to hlint
|
|
- arguments: [-j, -XQuasiQuotes, -XNoPatternSynonyms]
|
|
|
|
# Warnings
|
|
- warn: { lhs: "a == a", rhs: "True", note: "This comparison always evaluates to True" }
|
|
- warn: { lhs: "a /= a", rhs: "False", note: "This comparison always evaluates to False" }
|
|
- warn: { lhs: "a < a", rhs: "False", note: "This comparison always evaluates to False" }
|
|
- warn: { lhs: "a > a", rhs: "False", note: "This comparison always evaluates to False" }
|
|
- warn: { lhs: "a <= a", rhs: "True", note: "This comparison always evaluates to True" }
|
|
- warn: { lhs: "a >= a", rhs: "True", note: "This comparison always evaluates to True" }
|
|
'';
|
|
|
|
lint =
|
|
checkedShellScript
|
|
{
|
|
name = "postgrest-lint";
|
|
docs = "Lint all Haskell files, bash scripts and github workflows.";
|
|
workingDir = "/";
|
|
}
|
|
''
|
|
echo "Linting workflows..."
|
|
${actionlint}/bin/actionlint
|
|
|
|
echo "Scanning nix files for unused code..."
|
|
${deadnix}/bin/deadnix -f
|
|
|
|
# ruff has gaps in scanning for unused code, so we use vulture
|
|
echo "Scanning python files for unused code..."
|
|
${silver-searcher}/bin/ag -l --vimgrep -g '\.l?py$' . \
|
|
| xargs ${python3Packages.vulture}/bin/vulture --exclude docs/conf.py --min-confidence 80
|
|
|
|
echo "Linting python files..."
|
|
${ruff}/bin/ruff check .
|
|
|
|
echo "Checking consistency of import aliases in Haskell code..."
|
|
${hsie} check-aliases main src
|
|
|
|
echo "Linting Haskell files..."
|
|
# --vimgrep fixes a bug in ag: https://github.com/ggreer/the_silver_searcher/issues/753
|
|
${silver-searcher}/bin/ag -l --vimgrep -g '\.l?hs$' . \
|
|
| xargs ${hlint}/bin/hlint --hint=${hlintConfig}
|
|
'';
|
|
|
|
in
|
|
buildToolbox
|
|
{
|
|
name = "postgrest-style";
|
|
tools = { inherit style styleCheck lint; };
|
|
}
|