highlight-1.0.0.2: src/Highlight/Highlight/Options.hs
{-# LANGUAGE InstanceSigs #-}
{-# LANGUAGE OverloadedStrings #-}
module Highlight.Highlight.Options
( ColorGrepFilenames(..)
, colorGrepFilenamesParser
, HasColorGrepFilenames(..)
, Options(..)
, defaultOptions
, optionsParser
, HasOptions(..)
, module Highlight.Common.Options
) where
import Prelude ()
import Prelude.Compat
import Control.Lens (Lens', lens)
import Options.Applicative (Parser, flag, help, long, short)
import Highlight.Common.Options
(CommonOptions, HasCommonOptions(commonOptionsLens),
HasIgnoreCase(ignoreCaseLens), HasInputFilenames(inputFilenamesLens),
HasRawRegex(rawRegexLens), HasRecursive(recursiveLens),
IgnoreCase(DoNotIgnoreCase, IgnoreCase),
InputFilename(InputFilename, unInputFilename), RawRegex(RawRegex),
Recursive(Recursive), commonOptionsParser, defaultCommonOptions)
--------------------------
-- Color grep filenames --
--------------------------
-- | Whether or not to color filenames output by @grep@ when reading in from
-- stdin.
data ColorGrepFilenames = ColorGrepFilenames | DoNotColorGrepFileNames
deriving (Eq, Read, Show)
class HasColorGrepFilenames r where
colorGrepFilenamesLens :: Lens' r ColorGrepFilenames
colorGrepFilenamesParser :: Parser ColorGrepFilenames
colorGrepFilenamesParser =
let mods =
long "from-grep" <>
short 'g' <>
help "highlight output from grep"
in flag DoNotColorGrepFileNames ColorGrepFilenames mods
-------------
-- Options --
-------------
data Options = Options
{ optionsColorGrepFilenames :: ColorGrepFilenames
, optionsCommonOptions :: CommonOptions
} deriving (Eq, Read, Show)
class HasOptions r where
optionsLens :: Lens' r Options
instance HasOptions Options where
optionsLens :: Lens' Options Options
optionsLens = id
instance HasColorGrepFilenames Options where
colorGrepFilenamesLens :: Lens' Options ColorGrepFilenames
colorGrepFilenamesLens =
lens
optionsColorGrepFilenames
(\s a -> s {optionsColorGrepFilenames = a})
instance HasCommonOptions Options where
commonOptionsLens :: Lens' Options CommonOptions
commonOptionsLens =
lens
optionsCommonOptions
(\s a -> s {optionsCommonOptions = a})
instance HasIgnoreCase Options
instance HasRecursive Options
instance HasRawRegex Options
instance HasInputFilenames Options
optionsParser :: Parser Options
optionsParser =
Options
<$> colorGrepFilenamesParser
<*> commonOptionsParser
defaultOptions :: Options
defaultOptions = Options DoNotColorGrepFileNames defaultCommonOptions