cli: new, comprehensive commands list

This commit is contained in:
Simon Michael 2017-09-14 05:55:44 -07:00
parent bc66c75bd2
commit 6e7a14b656

View File

@ -48,6 +48,7 @@ import Test.HUnit
import Hledger
import Hledger.Cli.CliOptions
import Hledger.Cli.Version
import Hledger.Cli.Commands.Accounts
import Hledger.Cli.Commands.Activity
import Hledger.Cli.Commands.Add
@ -82,11 +83,18 @@ builtinCommands = [
,(balancesheetequitymode , balancesheetequity)
,(cashflowmode , cashflow)
,(checkdatesmode , checkdates)
,(checkdupesmode , checkdupes)
,(equitymode , equity)
,(helpmode , help')
,(incomestatementmode , incomestatement)
,(pricesmode , prices)
,(printmode , print')
,(printuniquemode , printunique)
,(registermode , register)
,(registermatchmode , registermatch)
,(rewritemode , rewrite)
,(statsmode , stats)
,(tagsmode , tags)
,(testmode , testcmd)
]
@ -99,68 +107,85 @@ findCommand :: String -> Maybe (Mode RawOpts, CliOpts -> Journal -> IO ())
findCommand cmdname = find (elem cmdname . modeNames . fst) builtinCommands
-- | A template for the commands list, containing entries (indented lines)
-- for all currently known builtin and addon commands.
-- for all known and some hypothetical builtin and addon commands.
-- These will be filtered based on the commands found at runtime,
-- except those beginning with "hledger", which are not filtered.
-- OTHERCMDS is replaced with an entry for each unknown addon command found.
-- COUNT is replaced with the number of commands found.
-- PROGVERSION is replaced with the program name and version.
-- OTHER is replaced with an entry for each unknown addon command found.
--
-- The command descriptions here should be kept synced with
-- each command's builtin help and with hledger manual's command list.
--
commandsListTemplate :: String
commandsListTemplate = [here|Commands available (COUNT):
commandsList :: String
commandsList = [here|
-------------------------------------------------------------------------------
PROGVERSION, commands available:
Standard reports:
accounts show chart of accounts
balancesheet (bs) show a balance sheet
balancesheetequity (bse) show a balance sheet with equity
Statements:
balancesheet (bs) show a simple balance sheet with net worth
balancesheetequity (bse) show a detailed balance sheet with equity
cashflow (cf) show a cashflow statement
incomestatement (is) show an income statement
transactions (txns) show transactions in some account
General reporting:
activity show a bar chart of posting counts per interval
balance (bal) show accounts and balances
budget add automated postings/txns/bucket accts (experimental)
chart generate simple balance pie charts (experimental)
Basic reports:
accounts (a) show account names
activity show a chart of posting counts per interval
aregister (ar, areg) show transactions in a single account
balance (b, bal) show account balance changes or ending balances
prices show market price records
print (p, txns) show transactions/journal entries
register (r, reg) show postings to one or more accounts
stats show journal statistics
tags show tag names
Modifying data:
add add transactions using console ui
iadd add transactions using curses ui
import add new transactions from one or more import files
edit open a text editor on some part of the journal
equity generate balance-resetting transactions
interest generate interest transactions
rewrite generate automated postings on matched transactions
UIs:
api start web api server
ui start curses ui
web start web ui
Other/experimental:
autosync download/deduplicate/convert OFX data
budget add automated postings/txns/bucket accts
chart generate simple balance pie charts
check check more powerful balance assertions
check-dates check transactions are ordered by date
check-dupes check for accounts with the same leaf name
diff compare account transactions in two journal files
irr calculate internal rate of return of an investment
prices show market price records
print show transaction journal entries
print-unique show only transactions with unique descriptions
register (reg) show postings and running total
register-match show best matching transaction for a description
stats show some journal statistics
Interfaces:
add console ui for adding transactions
api web api server
iadd curses ui for adding transactions
ui curses ui
web web ui
Misc:
autosync download/deduplicate/convert OFX data
equity generate transactions to zero & restore account balances
interest generate interest transactions
rewrite add automated postings to certain transactions
test run some self tests
OTHERCMDS
test run self tests
OTHER
Help:
help show any of the hledger manuals in various formats
hledger CMD -h show command usage
hledger -h show general usage
-------------------------------------------------------------------------------
|]
-- | Print the commands list, modifying the template above based on
-- the currently available addons. Missing addons will be removed, and
-- extra addons will be added under Misc.
printCommandsList :: [String] -> IO ()
printCommandsList addonsFound = putStr commandsList
printCommandsList addonsFound =
putStr $
regexReplace "PROGVERSION" (prognameandversion) $
regexReplace "OTHER" (unlines $ map (' ':) unknownCommandsFound) $
-- regexReplace "COUNT" (show cmdcount) $
unlines $ concatMap adjustline $ lines $
cmdlist
where
cmdlist = commandsList
-- cmdcount = length $ commandsFromCommandsList cmdlist
commandsFound = builtinCommandNames ++ addonsFound
unknownCommandsFound = addonsFound \\ knownCommands
@ -169,21 +194,14 @@ printCommandsList addonsFound = putStr commandsList
where w = takeWhile (not . (`elem` ['|',' '])) l
adjustline l = [l]
commandsList1 =
regexReplace "OTHERCMDS" (unlines [' ':w | w <- unknownCommandsFound]) $
unlines $ concatMap adjustline $ lines commandsListTemplate
commandsList =
regexReplace "COUNT" (show $ length $ commandsFromCommandsList commandsList1)
commandsList1
knownCommands :: [String]
knownCommands = sort $ commandsFromCommandsList commandsListTemplate
knownCommands = sort $ commandsFromCommandsList commandsList
-- | Extract the command names from a commands list like the above:
-- the first word (or words separated by |) of lines beginning with a space.
commandsFromCommandsList :: String -> [String]
commandsFromCommandsList s = concatMap (splitOn "|") [w | ' ':l <- lines s, let w:_ = words l]
commandsFromCommandsList s =
concatMap (splitOn "|") [w | ' ':l <- lines s, let w:_ = words l]