Make 'nix flake check' work

This commit is contained in:
Alexander Kobjolke 2023-08-19 01:10:47 +02:00
parent da3b61b467
commit 7a69fb2363
6 changed files with 27 additions and 20 deletions

View file

@ -11,7 +11,7 @@
}; };
outputs = { self, nixpkgs, flake-utils, pre-commit-hooks }: outputs = { self, nixpkgs, flake-utils, pre-commit-hooks }:
flake-utils.lib.eachDefaultSystem (system: flake-utils.lib.eachSystem [ "x86_64-linux" ] (system:
let let
pkgs = nixpkgs.legacyPackages.${system}; pkgs = nixpkgs.legacyPackages.${system};
@ -27,13 +27,13 @@
# Dependency overrides go here # Dependency overrides go here
}; };
defaultPackage = self.packages.${system}.${packageName}; packages.default = self.packages.${system}.${packageName};
apps = { apps = {
# run with: nix run #.hcat # run with: nix run #.hcat
hcat = { hcat = {
type = "app"; type = "app";
program = "${self.defaultPackage.${system}}/bin/hcat"; program = "${self.packages.${system}.default}/bin/hcat";
}; };
# run with: nix run # run with: nix run
@ -43,6 +43,8 @@
checks = { checks = {
pre-commit-check = pre-commit-hooks.lib.${system}.run { pre-commit-check = pre-commit-hooks.lib.${system}.run {
src = ./.; src = ./.;
settings = { ormolu.defaultExtensions = [ "GHC2021" ]; };
tools.fourmolu = haskellPackages.fourmolu;
hooks = { hooks = {
nixfmt.enable = true; nixfmt.enable = true;
fourmolu.enable = true; fourmolu.enable = true;
@ -51,17 +53,18 @@
doctest = { doctest = {
enable = true; enable = true;
name = "Run documentation tests"; name = "Run documentation tests";
entry = "doctest"; entry = "${haskellPackages.doctest}/bin/doctest src app";
files = "\\.l?hs$"; files = "\\.l?hs$";
pass_filenames = false;
}; };
}; };
}; };
}; };
devShell = haskellPackages.shellFor { devShells.default = haskellPackages.shellFor {
inherit (self.checks.${system}.pre-commit-check) shellHook; inherit (self.checks.${system}.pre-commit-check) shellHook;
packages = p: [ self.defaultPackage.${system} ]; packages = p: [ self.packages.${system}.default ];
withHoogle = true; withHoogle = true;

View file

@ -26,6 +26,7 @@ library
default-extensions: default-extensions:
BlockArguments BlockArguments
OverloadedStrings OverloadedStrings
ImportQualifiedPost
ghc-options: -Wall -Wunused-packages -fdefer-typed-holes ghc-options: -Wall -Wunused-packages -fdefer-typed-holes
build-depends: build-depends:
base >=4.13 && <5 base >=4.13 && <5
@ -41,6 +42,7 @@ executable hcat
default-extensions: default-extensions:
BlockArguments BlockArguments
OverloadedStrings OverloadedStrings
ImportQualifiedPost
ghc-options: -Wall -Wunused-packages -fdefer-typed-holes ghc-options: -Wall -Wunused-packages -fdefer-typed-holes
build-depends: build-depends:
base >=4.13 && <5 base >=4.13 && <5
@ -59,6 +61,7 @@ test-suite spec
default-extensions: default-extensions:
BlockArguments BlockArguments
OverloadedStrings OverloadedStrings
ImportQualifiedPost
ghc-options: -Wall -Wunused-packages -fdefer-typed-holes ghc-options: -Wall -Wunused-packages -fdefer-typed-holes
cpp-options: -DTEST cpp-options: -DTEST
build-tool-depends: build-tool-depends:

View file

@ -25,6 +25,7 @@ ghc-options:
default-extensions: default-extensions:
- BlockArguments - BlockArguments
- OverloadedStrings - OverloadedStrings
- ImportQualifiedPost
library: library:
source-dirs: src source-dirs: src

View file

@ -1,6 +1,6 @@
module HCat ( module HCat (
runHCat, runHCat,
defaultMain, defaultMain,
) where ) where
import System.Environment qualified as Env import System.Environment qualified as Env
@ -15,16 +15,16 @@ import HCat.Internal (parseArgs)
runHCat :: IO () runHCat :: IO ()
runHCat = do runHCat = do
fileNameOrError <- parseArgs <$> Env.getArgs fileNameOrError <- parseArgs <$> Env.getArgs
fileName <- eitherToError fileNameOrError fileName <- eitherToError fileNameOrError
TextIO.readFile fileName >>= TextIO.putStr TextIO.readFile fileName >>= TextIO.putStr
eitherToError :: Show a => Either a b -> IO b eitherToError :: Show a => Either a b -> IO b
eitherToError = either (Exception.throwIO . IOError.userError . show) return eitherToError = either (Exception.throwIO . IOError.userError . show) return
handleError :: IOError -> IO () handleError :: IOError -> IO ()
handleError e = do handleError e = do
hPutStrLn stderr $ "I ran into an issue: " <> show e hPutStrLn stderr $ "I ran into an issue: " <> show e
defaultMain :: IO () defaultMain :: IO ()
defaultMain = Exception.catch runHCat handleError defaultMain = Exception.catch runHCat handleError

View file

@ -7,9 +7,9 @@ module HCat.Internal where
-- Right "foo" -- Right "foo"
parseArgs :: [String] -> Either String FilePath parseArgs :: [String] -> Either String FilePath
parseArgs args = case args of parseArgs args = case args of
[] -> Left "No filename given!" [] -> Left "No filename given!"
[arg] -> Right arg [arg] -> Right arg
_ -> Left "Only a single file is supported" _ -> Left "Only a single file is supported"
-- | @chunksOf n@ splits a list into chunks of at most @n@ items. -- | @chunksOf n@ splits a list into chunks of at most @n@ items.
-- --
@ -24,7 +24,7 @@ parseArgs args = case args of
chunksOf :: Int -> [a] -> [[a]] chunksOf :: Int -> [a] -> [[a]]
chunksOf _ [] = [] chunksOf _ [] = []
chunksOf n xs@(_ : _) chunksOf n xs@(_ : _)
| n <= 0 = [] | n <= 0 = []
| otherwise = | otherwise =
let (chunk, rest) = splitAt n xs let (chunk, rest) = splitAt n xs
in chunk : chunksOf n rest in chunk : chunksOf n rest

View file

@ -1,4 +1,4 @@
{-# LANGUAGE GHC2021 #-} -- {-# LANGUAGE GHC2021 #-}
module HCatSpec (spec) where module HCatSpec (spec) where