registry-options-0.1.0.0: test/Test/Data/Registry/Options/HLintSpec.hs
{-# LANGUAGE DataKinds #-}
{-# LANGUAGE PartialTypeSignatures #-}
{-# LANGUAGE TemplateHaskell #-}
{-# OPTIONS_GHC -fno-warn-missing-signatures #-}
module Test.Data.Registry.Options.HLintSpec where
import Data.Registry
import Data.Registry.Options
import Data.Text qualified as T
import Protolude
import Test.Data.Registry.Options.HLint hiding (help)
import Test.Tasty.Hedgehogx hiding (Command, OptionDescription, maybe)
test_hlint = test "create a parser for the HLint program" $ do
let p = make @(Parser Command HLint) $ parsers
displayLines (parserHelp p)
=== [ "hlint - HLint v0.0.0, (C) Neil Mitchell",
"",
" Hlint gives hints on how to improve Haskell code",
" To check all Haskell files in 'src' and generate a",
" report type: hlint src --report",
"",
"USAGE",
"",
" hlint [-r|--report FILE] [-h|--hint FILE] [-c|--color] [-i|--ignore MESSAGE] [-s|--show] [--extension EXT] [-X|--language LANG] [-u|--utf8] [--encoding ENC] [-f|--find FILE] [-t|--test-mode] [-d|--datadir DIR] [--cpp-define NAME[=VALUE]] [--cpp-include DIR] [-?|--help] [-V|--version] [-v|--verbose] [-q|--quiet] [FILES/DIRS]",
"",
"OPTIONS",
"",
" -r,--report FILE Generate a report in HTML",
" -h,--hint FILE Hint/ignore file to use",
" -c,--color,--colour BOOL Color the output (requires ANSI terminal)",
" -i,--ignore MESSAGE Ignore a particular hint",
" -s,--show BOOL Show all ignored ideas",
" --extension EXT Show all ignored ideas",
" -X,--language LANG Language extension (Arrows, NoCPP)",
" -u,--utf8 BOOL Use UTF-8 text encoding",
" --encoding ENC Choose the text encoding",
" -f,--find FILE Find hints in a Haskell file",
" -t,--test-mode BOOL Run in test mode",
" -d,--datadir DIR Override the data directory",
" --cpp-define NAME[=VALUE] CPP #define",
" --cpp-include DIR CPP include path",
" -?,--help BOOL Display help message",
" -V,--version BOOL Print version information",
" -v,--verbose BOOL Loud verbosity",
" -q,--quiet BOOL Quiet verbosity",
" FILES/DIRS"
]
parsers :: Registry _ _
parsers =
$( makeCommandWith
parserConfiguration
''HLint
[ shortDescription "HLint v0.0.0, (C) Neil Mitchell",
longDescription $
T.unlines
[ "Hlint gives hints on how to improve Haskell code",
"",
"To check all Haskell files in 'src' and generate a report type:",
" hlint src --report"
]
]
)
<: options @"report" @FilePath [help "Generate a report in HTML", metavar "FILE"]
<: options @"hint" @FilePath [help "Hint/ignore file to use", metavar "FILE"]
<: setDefaultValue @"report" @FilePath "report.html"
<: switch @"color" [help "Color the output (requires ANSI terminal)", alias "colour"]
<: options @"ignore" @Text [help "Ignore a particular hint", metavar "MESSAGE"]
<: switch @"showIgnored" [name "show", help "Show all ignored ideas"]
<: options @"extension" @Text [noShort, help "Show all ignored ideas", metavar "EXT"]
<: options @"language" @Text [short 'X', help "Language extension (Arrows, NoCPP)", metavar "LANG"]
<: switch @"utf8" [help "Use UTF-8 text encoding"]
<: option @"encoding" @Text [noShort, help "Choose the text encoding", metavar "ENC"]
<: options @"find" @FilePath [help "Find hints in a Haskell file", metavar "FILE"]
<: switch @"testMode" [help "Run in test mode"]
<: options @"datadir" @FilePath [help "Override the data directory", metavar "DIR"]
<: options @"cppDefine" @Text [noShort, help "CPP #define", metavar "NAME[=VALUE]"]
<: options @"cppInclude" @FilePath [noShort, help "CPP include path", metavar "DIR"]
<: switch @"help" [short '?', help "Display help message"]
<: switch @"version" [short 'V', help "Print version information"]
<: switch @"verbose" [help "Loud verbosity"]
<: switch @"quiet" [help "Quiet verbosity"]
<: arguments @"files" @FilePath [metavar "FILES/DIRS"]
<: defaults
-- * Helpers
displayLines h = fmap trimRight (T.lines (displayHelp h))