From 7a69fb2363a10a34e5456eb570570c65ce066284 Mon Sep 17 00:00:00 2001 From: Alexander Kobjolke Date: Sat, 19 Aug 2023 01:10:47 +0200 Subject: [PATCH] Make 'nix flake check' work --- flake.nix | 15 +++++++++------ hcat.cabal | 3 +++ package.yaml | 1 + src/HCat.hs | 12 ++++++------ src/HCat/Internal.hs | 14 +++++++------- test/HCatSpec.hs | 2 +- 6 files changed, 27 insertions(+), 20 deletions(-) diff --git a/flake.nix b/flake.nix index 3c4be74..dc5d57e 100644 --- a/flake.nix +++ b/flake.nix @@ -11,7 +11,7 @@ }; outputs = { self, nixpkgs, flake-utils, pre-commit-hooks }: - flake-utils.lib.eachDefaultSystem (system: + flake-utils.lib.eachSystem [ "x86_64-linux" ] (system: let pkgs = nixpkgs.legacyPackages.${system}; @@ -27,13 +27,13 @@ # Dependency overrides go here }; - defaultPackage = self.packages.${system}.${packageName}; + packages.default = self.packages.${system}.${packageName}; apps = { # run with: nix run #.hcat hcat = { type = "app"; - program = "${self.defaultPackage.${system}}/bin/hcat"; + program = "${self.packages.${system}.default}/bin/hcat"; }; # run with: nix run @@ -43,6 +43,8 @@ checks = { pre-commit-check = pre-commit-hooks.lib.${system}.run { src = ./.; + settings = { ormolu.defaultExtensions = [ "GHC2021" ]; }; + tools.fourmolu = haskellPackages.fourmolu; hooks = { nixfmt.enable = true; fourmolu.enable = true; @@ -51,17 +53,18 @@ doctest = { enable = true; name = "Run documentation tests"; - entry = "doctest"; + entry = "${haskellPackages.doctest}/bin/doctest src app"; files = "\\.l?hs$"; + pass_filenames = false; }; }; }; }; - devShell = haskellPackages.shellFor { + devShells.default = haskellPackages.shellFor { inherit (self.checks.${system}.pre-commit-check) shellHook; - packages = p: [ self.defaultPackage.${system} ]; + packages = p: [ self.packages.${system}.default ]; withHoogle = true; diff --git a/hcat.cabal b/hcat.cabal index 16dadb2..fecf793 100644 --- a/hcat.cabal +++ b/hcat.cabal @@ -26,6 +26,7 @@ library default-extensions: BlockArguments OverloadedStrings + ImportQualifiedPost ghc-options: -Wall -Wunused-packages -fdefer-typed-holes build-depends: base >=4.13 && <5 @@ -41,6 +42,7 @@ executable hcat default-extensions: BlockArguments OverloadedStrings + ImportQualifiedPost ghc-options: -Wall -Wunused-packages -fdefer-typed-holes build-depends: base >=4.13 && <5 @@ -59,6 +61,7 @@ test-suite spec default-extensions: BlockArguments OverloadedStrings + ImportQualifiedPost ghc-options: -Wall -Wunused-packages -fdefer-typed-holes cpp-options: -DTEST build-tool-depends: diff --git a/package.yaml b/package.yaml index d0dfbea..4ddf9af 100644 --- a/package.yaml +++ b/package.yaml @@ -25,6 +25,7 @@ ghc-options: default-extensions: - BlockArguments - OverloadedStrings + - ImportQualifiedPost library: source-dirs: src diff --git a/src/HCat.hs b/src/HCat.hs index bdf9251..fa93ec5 100644 --- a/src/HCat.hs +++ b/src/HCat.hs @@ -1,6 +1,6 @@ module HCat ( - runHCat, - defaultMain, + runHCat, + defaultMain, ) where import System.Environment qualified as Env @@ -15,16 +15,16 @@ import HCat.Internal (parseArgs) runHCat :: IO () runHCat = do - fileNameOrError <- parseArgs <$> Env.getArgs - fileName <- eitherToError fileNameOrError - TextIO.readFile fileName >>= TextIO.putStr + fileNameOrError <- parseArgs <$> Env.getArgs + fileName <- eitherToError fileNameOrError + TextIO.readFile fileName >>= TextIO.putStr eitherToError :: Show a => Either a b -> IO b eitherToError = either (Exception.throwIO . IOError.userError . show) return handleError :: IOError -> IO () handleError e = do - hPutStrLn stderr $ "I ran into an issue: " <> show e + hPutStrLn stderr $ "I ran into an issue: " <> show e defaultMain :: IO () defaultMain = Exception.catch runHCat handleError diff --git a/src/HCat/Internal.hs b/src/HCat/Internal.hs index c0ec415..69f0493 100644 --- a/src/HCat/Internal.hs +++ b/src/HCat/Internal.hs @@ -7,9 +7,9 @@ module HCat.Internal where -- Right "foo" parseArgs :: [String] -> Either String FilePath parseArgs args = case args of - [] -> Left "No filename given!" - [arg] -> Right arg - _ -> Left "Only a single file is supported" + [] -> Left "No filename given!" + [arg] -> Right arg + _ -> Left "Only a single file is supported" -- | @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 _ [] = [] chunksOf n xs@(_ : _) - | n <= 0 = [] - | otherwise = - let (chunk, rest) = splitAt n xs - in chunk : chunksOf n rest + | n <= 0 = [] + | otherwise = + let (chunk, rest) = splitAt n xs + in chunk : chunksOf n rest diff --git a/test/HCatSpec.hs b/test/HCatSpec.hs index 6862706..0054f16 100644 --- a/test/HCatSpec.hs +++ b/test/HCatSpec.hs @@ -1,4 +1,4 @@ -{-# LANGUAGE GHC2021 #-} +-- {-# LANGUAGE GHC2021 #-} module HCatSpec (spec) where