hledger-1.16.2: Command-line interface for the hledger accounting tool
Safe HaskellNone
LanguageHaskell2010

Hledger.Cli

Description

Hledger.Cli re-exports the options, utilities and commands provided by the hledger command-line program. This module also aggregates the built-in unit tests defined throughout hledger and hledger-lib, and adds some more which are easier to define here.

Synopsis

Documentation

module Hledger

flagsVerbosity :: (Verbosity -> a -> a) -> [Flag a] Source #

Create verbosity flags triggered by -v/--verbose and -q/--quiet

flagNumericVersion :: (a -> a) -> Flag a Source #

Create a version flag triggered by --numeric-version.

flagVersion :: (a -> a) -> Flag a Source #

Create a version flag triggered by -V/--version.

flagHelpFormat :: (HelpFormat -> TextFormat -> a -> a) -> Flag a Source #

Create a help flag triggered by -?/--help. The user may optionally modify help by specifying the format, such as:

--help=all          - help for all modes
--help=html         - help in HTML format
--help=100          - wrap the text at 100 characters
--help=100,one      - full text wrapped at 100 characters

flagHelpSimple :: (a -> a) -> Flag a Source #

Create a help flag triggered by -?/--help.

processValueIO :: Mode a -> [String] -> IO a Source #

Like processValue but on failure prints to stderr and exits the program.

processValue :: Mode a -> [String] -> a Source #

Process a list of flags (usually obtained from getArgs and expandArgsAt) with a mode. Throws an error if the command line fails to parse, or returns the associated value. Implemeneted in terms of process. This function does not take account of any environment variables that may be set (see processArgs).

If you are in IO you will probably get a better user experience by calling processValueIO.

processArgs :: Mode a -> IO a Source #

Process the flags obtained by getArgs and expandArgsAt with a mode. Displays an error and exits with failure if the command line fails to parse, or returns the associated value. Implemented in terms of process. This function makes use of the following environment variables:

  • $CMDARGS_COMPLETE - causes the program to produce completions using complete, then exit. Completions are based on the result of getArgs, the index of the current argument is taken from $CMDARGS_COMPLETE (set it to - to complete the last argument), and the index within that argument is taken from $CMDARGS_COMPLETE_POS (if set).
  • $CMDARGS_HELPER/$CMDARGS_HELPER_PROG - uses the helper mechanism for entering command line programs as described in System.Console.CmdArgs.Helper.

helpText :: [String] -> HelpFormat -> Mode a -> [Text] Source #

Generate a help message from a mode. The first argument is a prefix, which is prepended when not using HelpFormatBash or HelpFormatZsh.

data HelpFormat Source #

Specify the format to output the help.

Constructors

HelpFormatDefault

Equivalent to HelpFormatAll if there is not too much text, otherwise HelpFormatOne.

HelpFormatOne

Display only the first mode.

HelpFormatAll

Display all modes.

HelpFormatBash

Bash completion information

HelpFormatZsh

Z shell completion information

Instances

Instances details
Bounded HelpFormat 
Instance details

Defined in System.Console.CmdArgs.Explicit.Help

Enum HelpFormat 
Instance details

Defined in System.Console.CmdArgs.Explicit.Help

Eq HelpFormat 
Instance details

Defined in System.Console.CmdArgs.Explicit.Help

Methods

(==) :: HelpFormat -> HelpFormat -> Bool

(/=) :: HelpFormat -> HelpFormat -> Bool

Ord HelpFormat 
Instance details

Defined in System.Console.CmdArgs.Explicit.Help

Read HelpFormat 
Instance details

Defined in System.Console.CmdArgs.Explicit.Help

Methods

readsPrec :: Int -> ReadS HelpFormat

readList :: ReadS [HelpFormat]

readPrec :: ReadPrec HelpFormat

readListPrec :: ReadPrec [HelpFormat]

Show HelpFormat 
Instance details

Defined in System.Console.CmdArgs.Explicit.Help

Methods

showsPrec :: Int -> HelpFormat -> ShowS

show :: HelpFormat -> String

showList :: [HelpFormat] -> ShowS

Default HelpFormat 
Instance details

Defined in System.Console.CmdArgs.Explicit.Help

complete Source #

Arguments

:: Mode a

Mode specifying which arguments are allowed

-> [String]

Arguments the user has already typed

-> (Int, Int)

0-based index of the argument they are currently on, and the position in that argument

-> [Complete] 

Given a current state, return the set of commands you could type now, in preference order.

data Complete Source #

How to complete a command line option. The Show instance is suitable for parsing from shell scripts.

Constructors

CompleteValue String

Complete to a particular value

CompleteFile String FilePath

Complete to a prefix, and a file

CompleteDir String FilePath

Complete to a prefix, and a directory

Instances

Instances details
Eq Complete 
Instance details

Defined in System.Console.CmdArgs.Explicit.Complete

Methods

(==) :: Complete -> Complete -> Bool

(/=) :: Complete -> Complete -> Bool

Ord Complete 
Instance details

Defined in System.Console.CmdArgs.Explicit.Complete

Methods

compare :: Complete -> Complete -> Ordering

(<) :: Complete -> Complete -> Bool

(<=) :: Complete -> Complete -> Bool

(>) :: Complete -> Complete -> Bool

(>=) :: Complete -> Complete -> Bool

max :: Complete -> Complete -> Complete

min :: Complete -> Complete -> Complete

Show Complete 
Instance details

Defined in System.Console.CmdArgs.Explicit.Complete

Methods

showsPrec :: Int -> Complete -> ShowS

show :: Complete -> String

showList :: [Complete] -> ShowS

process :: Mode a -> [String] -> Either String a Source #

Process a list of flags (usually obtained from getArgs/expandArgsAt) with a mode. Returns Left and an error message if the command line fails to parse, or Right and the associated value.

flagBool :: [Name] -> (Bool -> a -> a) -> Help -> Flag a Source #

Create a boolean flag, with a list of flag names, an update function and some help text.

flagArg :: Update a -> FlagHelp -> Arg a Source #

Create an argument flag, with an update function and the type of the argument.

flagReq :: [Name] -> Update a -> FlagHelp -> Help -> Flag a Source #

Create a flag taking a required argument value, with a list of flag names, an update function, the type of the argument and some help text.

flagOpt :: String -> [Name] -> Update a -> FlagHelp -> Help -> Flag a Source #

Create a flag taking an optional argument value, with an optional value, a list of flag names, an update function, the type of the argument and some help text.

flagNone :: [Name] -> (a -> a) -> Help -> Flag a Source #

Create a flag taking no argument value, with a list of flag names, an update function and some help text.

modes :: String -> a -> Help -> [Mode a] -> Mode a Source #

Create a list of modes, with a program name, an initial value, some help text and the child modes.

mode :: Name -> a -> Help -> Arg a -> [Flag a] -> Mode a Source #

Create a mode with a name, an initial value, some help text, a way of processing arguments and a list of flags.

modeEmpty :: a -> Mode a Source #

Create an empty mode specifying only modeValue. All other fields will usually be populated using record updates.

remapUpdate :: (a -> b) -> (b -> (a, a -> b)) -> Update a -> Update b Source #

Version of remap for the Update type alias.

remap2 :: Remap m => (a -> b) -> (b -> a) -> m a -> m b Source #

Restricted version of remap where the values are isomorphic.

checkMode :: Mode a -> Maybe String Source #

Check that a mode is well formed.

fromFlagOpt :: FlagInfo -> String Source #

Extract the value from inside a FlagOpt or FlagOptRare, or raises an error.

modeFlags :: Mode a -> [Flag a] Source #

Extract the flags from a Mode

modeModes :: Mode a -> [Mode a] Source #

Extract the modes from a Mode

toGroup :: [a] -> Group a Source #

Convert a list into a group, placing all fields in groupUnnamed.

fromGroup :: Group a -> [a] Source #

Convert a group into a list.

parseBool :: String -> Maybe Bool Source #

Parse a boolean, accepts as True: true yes on enabled 1.

type Help = String Source #

A help message that goes with either a flag or a mode.

type FlagHelp = String Source #

The type of a flag, i.e. --foo=TYPE.

data Group a Source #

A group of items (modes or flags). The items are treated as a list, but the group structure is used when displaying the help message.

Constructors

Group 

Fields

  • groupUnnamed :: [a]

    Normal items.

  • groupHidden :: [a]

    Items that are hidden (not displayed in the help message).

  • groupNamed :: [(Help, [a])]

    Items that have been grouped, along with a description of each group.

Instances

Instances details
Functor Group 
Instance details

Defined in System.Console.CmdArgs.Explicit.Type

Methods

fmap :: (a -> b) -> Group a -> Group b #

(<$) :: a -> Group b -> Group a #

Show a => Show (Group a) 
Instance details

Defined in System.Console.CmdArgs.Explicit.Type

Methods

showsPrec :: Int -> Group a -> ShowS

show :: Group a -> String

showList :: [Group a] -> ShowS

Semigroup (Group a) 
Instance details

Defined in System.Console.CmdArgs.Explicit.Type

Methods

(<>) :: Group a -> Group a -> Group a #

sconcat :: NonEmpty (Group a) -> Group a #

stimes :: Integral b => b -> Group a -> Group a #

Monoid (Group a) 
Instance details

Defined in System.Console.CmdArgs.Explicit.Type

Methods

mempty :: Group a #

mappend :: Group a -> Group a -> Group a #

mconcat :: [Group a] -> Group a #

data Mode a Source #

A mode. Do not use the Mode constructor directly, instead use mode to construct the Mode and then record updates. Each mode has three main features:

To produce the help information for a mode, either use helpText or show.

Constructors

Mode 

Fields

  • modeGroupModes :: Group (Mode a)

    The available sub-modes

  • modeNames :: [Name]

    The names assigned to this mode (for the root mode, this name is used as the program name)

  • modeValue :: a

    Value to start with

  • modeCheck :: a -> Either String a

    Check the value reprsented by a mode is correct, after applying all flags

  • modeReform :: a -> Maybe [String]

    Given a value, try to generate the input arguments.

  • modeExpandAt :: Bool

    Expand @ arguments with expandArgsAt, defaults to True, only applied if using an IO processing function. Only the root Modes value will be used.

  • modeHelp :: Help

    Help text

  • modeHelpSuffix :: [String]

    A longer help suffix displayed after a mode

  • modeArgs :: ([Arg a], Maybe (Arg a))

    The unnamed arguments, a series of arguments, followed optionally by one for all remaining slots

  • modeGroupFlags :: Group (Flag a)

    Groups of flags

Instances

Instances details
Remap Mode 
Instance details

Defined in System.Console.CmdArgs.Explicit.Type

Methods

remap :: (a -> b) -> (b -> (a, a -> b)) -> Mode a -> Mode b Source #

data FlagInfo Source #

The FlagInfo type has the following meaning:

             FlagReq     FlagOpt      FlagOptRare/FlagNone
-xfoo        -x=foo      -x=foo       -x -foo
-x foo       -x=foo      -x foo       -x foo
-x=foo       -x=foo      -x=foo       -x=foo
--xx foo     --xx=foo    --xx foo     --xx foo
--xx=foo     --xx=foo    --xx=foo     --xx=foo

Constructors

FlagReq

Required argument

FlagOpt String

Optional argument

FlagOptRare String

Optional argument that requires an = before the value

FlagNone

No argument

Instances

Instances details
Eq FlagInfo 
Instance details

Defined in System.Console.CmdArgs.Explicit.Type

Methods

(==) :: FlagInfo -> FlagInfo -> Bool

(/=) :: FlagInfo -> FlagInfo -> Bool

Ord FlagInfo 
Instance details

Defined in System.Console.CmdArgs.Explicit.Type

Methods

compare :: FlagInfo -> FlagInfo -> Ordering

(<) :: FlagInfo -> FlagInfo -> Bool

(<=) :: FlagInfo -> FlagInfo -> Bool

(>) :: FlagInfo -> FlagInfo -> Bool

(>=) :: FlagInfo -> FlagInfo -> Bool

max :: FlagInfo -> FlagInfo -> FlagInfo

min :: FlagInfo -> FlagInfo -> FlagInfo

Show FlagInfo 
Instance details

Defined in System.Console.CmdArgs.Explicit.Type

Methods

showsPrec :: Int -> FlagInfo -> ShowS

show :: FlagInfo -> String

showList :: [FlagInfo] -> ShowS

type Update a = String -> a -> Either String a Source #

A function to take a string, and a value, and either produce an error message (Left), or a modified value (Right).

data Flag a Source #

A flag, consisting of a list of flag names and other information.

Constructors

Flag 

Fields

Instances

Instances details
Remap Flag 
Instance details

Defined in System.Console.CmdArgs.Explicit.Type

Methods

remap :: (a -> b) -> (b -> (a, a -> b)) -> Flag a -> Flag b Source #

data Arg a Source #

An unnamed argument. Anything not starting with - is considered an argument, apart from "-" which is considered to be the argument "-", and any arguments following "--". For example:

programname arg1 -j - --foo arg3 -- -arg4 --arg5=1 arg6

Would have the arguments:

["arg1","-","arg3","-arg4","--arg5=1","arg6"]

Constructors

Arg 

Fields

  • argValue :: Update a

    A way of processing the argument.

  • argType :: FlagHelp

    The type of data for the argument, i.e. FILE/DIR/EXT

  • argRequire :: Bool

    Is at least one of these arguments required, the command line will fail if none are set

Instances

Instances details
Remap Arg 
Instance details

Defined in System.Console.CmdArgs.Explicit.Type

Methods

remap :: (a -> b) -> (b -> (a, a -> b)) -> Arg a -> Arg b Source #

class Remap (m :: Type -> Type) where Source #

Like functor, but where the the argument isn't just covariant.

Methods

remap Source #

Arguments

:: (a -> b)

Embed a value

-> (b -> (a, a -> b))

Extract the mode and give a way of re-embedding

-> m a 
-> m b 

Convert between two values.

Instances

Instances details
Remap Mode 
Instance details

Defined in System.Console.CmdArgs.Explicit.Type

Methods

remap :: (a -> b) -> (b -> (a, a -> b)) -> Mode a -> Mode b Source #

Remap Flag 
Instance details

Defined in System.Console.CmdArgs.Explicit.Type

Methods

remap :: (a -> b) -> (b -> (a, a -> b)) -> Flag a -> Flag b Source #

Remap Arg 
Instance details

Defined in System.Console.CmdArgs.Explicit.Type

Methods

remap :: (a -> b) -> (b -> (a, a -> b)) -> Arg a -> Arg b Source #

splitArgs :: String -> [String] Source #

Given a string, split into the available arguments. The inverse of joinArgs.

joinArgs :: [String] -> String Source #

Given a sequence of arguments, join them together in a manner that could be used on the command line, giving preference to the Windows cmd shell quoting conventions.

For an alternative version, intended for actual running the result in a shell, see "System.Process.showCommandForUser"

expandArgsAt :: [String] -> IO [String] Source #

Expand @ directives in a list of arguments, usually obtained from getArgs. As an example, given the file test.txt with the lines hello and world:

expandArgsAt ["@test.txt","!"] == ["hello","world","!"]

Any @ directives in the files will be recursively expanded (raising an error if there is infinite recursion).

To supress @ expansion, pass any @ arguments after --.