diff --git a/src/GHCMod/Options.hs b/src/GHCMod/Options.hs index 4b7d159..4ae41e1 100644 --- a/src/GHCMod/Options.hs +++ b/src/GHCMod/Options.hs @@ -16,18 +16,18 @@ parseArgs = execParser opts where opts = info (argAndCmdSpec <**> helpVersion) - $$ fullDesc - ## header "ghc-mod: Happy Haskell Programming" + $$ fullDesc + <=> header "ghc-mod: Happy Haskell Programming" helpVersion :: Parser (a -> a) helpVersion = helper <*> abortOption (InfoMsg ghcModVersion) - $$ long "version" - ## help "Print the version of the program." + $$ long "version" + <=> help "Print the version of the program." <*> argument r - $$ value id - ## metavar "" + $$ value id + <=> metavar "" where r :: ReadM (a -> a) r = do @@ -55,73 +55,73 @@ logLevelParser = where logLevelOption = option int - $$ long "verbose" - ## metavar "LEVEL" - ## value 4 - ## showDefault - ## help "Set log level. (0-7)" + $$ long "verbose" + <=> metavar "LEVEL" + <=> value 4 + <=> showDefault + <=> help "Set log level. (0-7)" logLevelSwitch = (4+) . length <$> many $$ flag' () - $$ short 'v' - ## help "Increase log level" + $$ short 'v' + <=> help "Increase log level" silentSwitch = flag' 0 - $$ long "silent" - ## short 's' - ## help "Be silent, set log level to 0" + $$ long "silent" + <=> short 's' + <=> help "Be silent, set log level to 0" outputOptsSpec :: Parser OutputOpts outputOptsSpec = OutputOpts <$> logLevelParser <*> flag PlainStyle LispStyle - $$ long "tolisp" - ## short 'l' - ## help "Format output as an S-Expression" + $$ long "tolisp" + <=> short 'l' + <=> help "Format output as an S-Expression" <*> LineSeparator <$$> strOption - $$ long "boundary" - ## long "line-separator" - ## short 'b' - ## metavar "SEP" - ## value "\0" - ## showDefault - ## help "Output line separator" + $$ long "boundary" + <=> long "line-separator" + <=> short 'b' + <=> metavar "SEP" + <=> value "\0" + <=> showDefault + <=> help "Output line separator" <*> optional $$ splitOn ',' <$$> strOption - $$ long "line-prefix" - ## metavar "OUT,ERR" - ## help "Output prefixes" + $$ long "line-prefix" + <=> metavar "OUT,ERR" + <=> help "Output prefixes" programsArgSpec :: Parser Programs programsArgSpec = Programs <$> strOption - $$ long "with-ghc" - ## value "ghc" - ## showDefault - ## help "GHC executable to use" + $$ long "with-ghc" + <=> value "ghc" + <=> showDefault + <=> help "GHC executable to use" <*> strOption - $$ long "with-ghc-pkg" - ## value "ghc-pkg" - ## showDefault - ## help "ghc-pkg executable to use (only needed when guessing from GHC path fails)" + $$ long "with-ghc-pkg" + <=> value "ghc-pkg" + <=> showDefault + <=> help "ghc-pkg executable to use (only needed when guessing from GHC path fails)" <*> strOption - $$ long "with-cabal" - ## value "cabal" - ## showDefault - ## help "cabal-install executable to use" + $$ long "with-cabal" + <=> value "cabal" + <=> showDefault + <=> help "cabal-install executable to use" <*> strOption - $$ long "with-stack" - ## value "stack" - ## showDefault - ## help "stack executable to use" + $$ long "with-stack" + <=> value "stack" + <=> showDefault + <=> help "stack executable to use" globalArgSpec :: Parser Options globalArgSpec = Options <$> outputOptsSpec <*> programsArgSpec <*> many $$ strOption - $$ long "ghcOpt" - ## long "ghc-option" - ## short 'g' - ## metavar "OPT" - ## help "Option to be passed to GHC" + $$ long "ghcOpt" + <=> long "ghc-option" + <=> short 'g' + <=> metavar "OPT" + <=> help "Option to be passed to GHC" <*> many fileMappingSpec where {- @@ -160,7 +160,7 @@ globalArgSpec = Options -} fileMappingSpec = getFileMapping . splitOn '=' <$> strOption - $$ long "map-file" - ## metavar "MAPPING" - ## help "Redirect one file to another, --map-file \"file1.hs=file2.hs\"" + $$ long "map-file" + <=> metavar "MAPPING" + <=> help "Redirect one file to another, --map-file \"file1.hs=file2.hs\"" getFileMapping = second (\i -> if null i then Nothing else Just i) diff --git a/src/GHCMod/Options/Commands.hs b/src/GHCMod/Options/Commands.hs index 0d44d63..3db48a5 100644 --- a/src/GHCMod/Options/Commands.hs +++ b/src/GHCMod/Options/Commands.hs @@ -41,119 +41,120 @@ commandsSpec :: Parser GhcModCommands commandsSpec = hsubparser $ command "lang" - $$ info (pure CmdLang) - $$ progDesc "List all known GHC language extensions" + $$ info (pure CmdLang) + $$ progDesc "List all known GHC language extensions" <> command "flag" - $$ info (pure CmdFlag) - $$ progDesc "List GHC -f flags" + $$ info (pure CmdFlag) + $$ progDesc "List GHC -f flags" <> command "debug" - $$ info (pure CmdDebug) - $$ progDesc - "Print debugging information. Please include the output in any bug\ - \ reports you submit" + $$ info (pure CmdDebug) + $$ progDesc + "Print debugging information. Please include the output in any bug\ + \ reports you submit" <> command "debug-component" - $$ info debugComponentArgSpec - $$ progDesc "Debugging information related to cabal component resolution" + $$ info debugComponentArgSpec + $$ progDesc "Debugging information related to cabal component resolution" <> command "boot" - $$ info (pure CmdBoot) - $$ progDesc "Internal command used by the emacs frontend" - -- <> command "nuke-caches" ( - -- info (pure CmdNukeCaches) idm) + $$ info (pure CmdBoot) + $$ progDesc "Internal command used by the emacs frontend" + -- <> command "nuke-caches" + -- $$ info (pure CmdNukeCaches) idm <> command "root" - $$ info (pure CmdRoot) - $$ progDesc - "Try to find the project directory. For Cabal projects this is the\ - \ directory containing the cabal file, for projects that use a cabal\ - \ sandbox but have no cabal file this is the directory containing the\ - \ cabal.sandbox.config file and otherwise this is the current\ - \ directory" + $$ info (pure CmdRoot) + $$ progDesc + "Try to find the project directory. For Cabal projects this is the\ + \ directory containing the cabal file, for projects that use a cabal\ + \ sandbox but have no cabal file this is the directory containing the\ + \ cabal.sandbox.config file and otherwise this is the current\ + \ directory" <> command "legacy-interactive" - $$ info (pure CmdLegacyInteractive) - $$ progDesc "ghc-modi compatibility mode" + $$ info (pure CmdLegacyInteractive) + $$ progDesc "ghc-modi compatibility mode" <> command "list" - $$ info modulesArgSpec - $$ progDesc "List all visible modules" + $$ info modulesArgSpec + $$ progDesc "List all visible modules" <> command "modules" - $$ info modulesArgSpec - $$ progDesc "List all visible modules" + $$ info modulesArgSpec + $$ progDesc "List all visible modules" <> command "dumpsym" - $$ info dumpSymArgSpec idm + $$ info dumpSymArgSpec idm <> command "find" - $$ info findArgSpec - $$ progDesc "List all modules that define SYMBOL" + $$ info findArgSpec + $$ progDesc "List all modules that define SYMBOL" <> command "doc" - $$ info docArgSpec - $$ progDesc "Try finding the html documentation directory for the given MODULE" + $$ info docArgSpec + $$ progDesc "Try finding the html documentation directory for the given MODULE" <> command "lint" - $$ info lintArgSpec - $$ progDesc "Check files using `hlint'" + $$ info lintArgSpec + $$ progDesc "Check files using `hlint'" <> command "browse" - $$ info browseArgSpec - $$ progDesc "List symbols in a module" + $$ info browseArgSpec + $$ progDesc "List symbols in a module" <> command "check" - $$ info checkArgSpec - $$ progDesc "Load the given files using GHC and report errors/warnings,\ - \ but don't produce output files" + $$ info checkArgSpec + $$ progDesc + "Load the given files using GHC and report errors/warnings,\ + \ but don't produce output files" <> command "expand" - $$ info expandArgSpec - $$ progDesc "Like `check' but also pass `-ddump-splices' to GHC" + $$ info expandArgSpec + $$ progDesc "Like `check' but also pass `-ddump-splices' to GHC" <> command "info" - $$ info infoArgSpec - $$ progDesc - "Look up an identifier in the context of FILE (like ghci's `:info')\ - \ MODULE is completely ignored and only allowed for backwards\ - \ compatibility" + $$ info infoArgSpec + $$ progDesc + "Look up an identifier in the context of FILE (like ghci's `:info')\ + \ MODULE is completely ignored and only allowed for backwards\ + \ compatibility" <> command "type" - $$ info typeArgSpec - $$ progDesc "Get the type of the expression under (LINE,COL)" + $$ info typeArgSpec + $$ progDesc "Get the type of the expression under (LINE,COL)" <> command "split" - $$ info splitArgSpec - $$ progDesc + $$ info splitArgSpec + $$ progDesc "Split a function case by examining a type's constructors" - ## desc [ - text "For example given the following code snippet:" - , code [ - "f :: [a] -> a" - , "f x = _body" - ] - , text "would be replaced by:" - , code [ - "f :: [a] -> a" - , "f [] = _body" - , "f (x:xs) = _body" - ] - , text "(See https://github.com/kazu-yamamoto/ghc-mod/pull/274)" + <=> desc [ + text "For example given the following code snippet:" + , code [ + "f :: [a] -> a" + , "f x = _body" ] + , text "would be replaced by:" + , code [ + "f :: [a] -> a" + , "f [] = _body" + , "f (x:xs) = _body" + ] + , text "(See https://github.com/kazu-yamamoto/ghc-mod/pull/274)" + ] <> command "sig" - $$ info sigArgSpec - $$ progDesc "Generate initial code given a signature" - ## desc [ - text "For example when (LINE,COL) is on the signature in the following\ - \ code snippet:" - , code ["func :: [a] -> Maybe b -> (a -> b) -> (a,b)"] - , text "ghc-mod would add the following on the next line:" - , code ["func x y z f = _func_body"] - , text "(See: https://github.com/kazu-yamamoto/ghc-mod/pull/274)" - ] + $$ info sigArgSpec + $$ progDesc "Generate initial code given a signature" + <=> desc [ + text "For example when (LINE,COL) is on the signature in the following\ + \ code snippet:" + , code ["func :: [a] -> Maybe b -> (a -> b) -> (a,b)"] + , text "ghc-mod would add the following on the next line:" + , code ["func x y z f = _func_body"] + , text "(See: https://github.com/kazu-yamamoto/ghc-mod/pull/274)" + ] <> command "auto" - $$ info autoArgSpec - $$ progDesc "Try to automatically fill the contents of a hole" + $$ info autoArgSpec + $$ progDesc "Try to automatically fill the contents of a hole" <> command "refine" - $$ info refineArgSpec - $$ progDesc "Refine the typed hole at (LINE,COL) given EXPR" - ## desc [ - text "For example if EXPR is `filter', which has type `(a -> Bool) -> [a]\ - \ -> [a]' and (LINE,COL) is on the hole `_body' in the following\ - \ code snippet:" - , code [ - "filterNothing :: [Maybe a] -> [a]" - , "filterNothing xs = _body" - ] - , text "ghc-mod changes the code to get a value of type `[a]', which\ - \ results in:" - , code [ "filterNothing xs = filter _body_1 _body_2" ] - , text "(See also: https://github.com/kazu-yamamoto/ghc-mod/issues/311)" - ] + $$ info refineArgSpec + $$ progDesc "Refine the typed hole at (LINE,COL) given EXPR" + <=> desc [ + text "For example if EXPR is `filter', which has type `(a -> Bool) -> [a]\ + \ -> [a]' and (LINE,COL) is on the hole `_body' in the following\ + \ code snippet:" + , code [ + "filterNothing :: [Maybe a] -> [a]" + , "filterNothing xs = _body" + ] + , text "ghc-mod changes the code to get a value of type `[a]', which\ + \ results in:" + , code [ "filterNothing xs = filter _body_1 _body_2" ] + , text "(See also: https://github.com/kazu-yamamoto/ghc-mod/issues/311)" + ] strArg :: String -> Parser String strArg = argument str . metavar @@ -176,32 +177,32 @@ modulesArgSpec, dumpSymArgSpec, docArgSpec, findArgSpec, modulesArgSpec = CmdModules <$> switch - $$ long "detailed" - ## short 'd' - ## help "Print package modules belong to" + $$ long "detailed" + <=> short 'd' + <=> help "Print package modules belong to" dumpSymArgSpec = CmdDumpSym <$> strArg "TMPDIR" findArgSpec = CmdFind <$> strArg "SYMBOL" docArgSpec = CmdDoc <$> strArg "MODULE" lintArgSpec = CmdLint <$> LintOpts <$$> many $$ strOption - $$ long "hlintOpt" - ## short 'h' - ## help "Option to be passed to hlint" + $$ long "hlintOpt" + <=> short 'h' + <=> help "Option to be passed to hlint" <*> strArg "FILE" browseArgSpec = CmdBrowse <$> (BrowseOpts <$> switch - $$ long "operators" - ## short 'o' - ## help "Also print operators" + $$ long "operators" + <=> short 'o' + <=> help "Also print operators" <*> switch - $$ long "detailed" - ## short 'd' - ## help "Print symbols with accompanying signature" + $$ long "detailed" + <=> short 'd' + <=> help "Print symbols with accompanying signature" <*> switch - $$ long "qualified" - ## short 'q' - ## help "Qualify symbols" + $$ long "qualified" + <=> short 'q' + <=> help "Qualify symbols" ) <*> some (strArg "MODULE") debugComponentArgSpec = filesArgsSpec CmdDebugComponent diff --git a/src/GHCMod/Options/DocUtils.hs b/src/GHCMod/Options/DocUtils.hs index e315173..0641a4c 100644 --- a/src/GHCMod/Options/DocUtils.hs +++ b/src/GHCMod/Options/DocUtils.hs @@ -3,7 +3,7 @@ module GHCMod.Options.DocUtils ( desc, code, ($$), - (##), + (<=>), (<$$>), (<||>) ) where @@ -21,7 +21,7 @@ code x = vsep [line, indent 4 $ vsep $ map text x, line] infixl 7 <||> infixr 8 <$$> infixr 8 $$ -infixr 9 ## +infixr 9 <=> ($$) :: (a -> b) -> a -> b ($$) = ($) @@ -29,8 +29,8 @@ infixr 9 ## (<||>) :: Alternative a => a b -> a b -> a b (<||>) = (<|>) -(##) :: Monoid m => m -> m -> m -(##) = (<>) +(<=>) :: Monoid m => m -> m -> m +(<=>) = (<>) (<$$>) :: Functor f => (a -> b) -> f a -> f b (<$$>) = (<$>)