hindent-6.3.0: src/HIndent/CommandlineOptions.hs
-- | Types and functions related to HIndent's commandline options.
module HIndent.CommandlineOptions
( Action(..)
, RunMode(..)
, options
) where
import Data.Maybe
import HIndent.Config
import HIndent.LanguageExtension
import HIndent.LanguageExtension.Types
import Options.Applicative hiding (action, style)
-- | HIndent actions.
data Action
= Validate -- ^ Validate if the code is formatted.
| Reformat -- ^ Format the code.
-- | HIndent running mode.
data RunMode
= ShowVersion -- ^ Show HIndent's version.
| Run Config [Extension] Action [FilePath] -- ^ Format or validate the code.
-- | Program options.
options :: Config -> Parser RunMode
options config =
flag' ShowVersion (long "version" <> help "Print the version")
<|> (Run <$> style <*> exts <*> action <*> files)
where
style =
(makeStyle config
<$> lineLen
<*> indentSpaces
<*> trailingNewline
<*> sortImports)
<* optional
(strOption
(long "style"
<> help "Style to print with (historical, now ignored)"
<> metavar "STYLE") :: Parser String)
exts =
fmap
getExtensions
(many
(strOption
(short 'X' <> help "Language extension" <> metavar "GHCEXT")))
indentSpaces =
option
auto
(long "indent-size"
<> help "Indentation size in spaces"
<> value (configIndentSpaces config)
<> showDefault)
<|> option
auto
(long "tab-size"
<> help "Same as --indent-size, for compatibility")
lineLen =
option
auto
(long "line-length"
<> help "Desired length of lines"
<> value (configMaxColumns config)
<> showDefault)
trailingNewline =
not
<$> flag
(not (configTrailingNewline config))
(configTrailingNewline config)
(long "no-force-newline"
<> help "Don't force a trailing newline"
<> showDefault)
sortImports =
flag
Nothing
(Just True)
(long "sort-imports" <> help "Sort imports in groups" <> showDefault)
<|> flag
Nothing
(Just False)
(long "no-sort-imports" <> help "Don't sort imports")
action =
flag
Reformat
Validate
(long "validate"
<> help "Check if files are formatted without changing them")
makeStyle s mlen tabs trailing imports =
s
{ configMaxColumns = mlen
, configIndentSpaces = tabs
, configTrailingNewline = trailing
, configSortImports = fromMaybe (configSortImports s) imports
}
files = many (strArgument (metavar "FILENAMES"))