fix: cli: accept --conf with no command

This commit is contained in:
Simon Michael 2024-07-12 15:41:53 +01:00
parent 85480a7572
commit 6f3c4c9bf0
3 changed files with 21 additions and 14 deletions

View File

@ -140,10 +140,10 @@ mainmode addons = defMode {
,modeGroupFlags = Group { ,modeGroupFlags = Group {
-- flags in named groups: (keep synced with Hledger.Cli.CliOptions.highlightHelp) -- flags in named groups: (keep synced with Hledger.Cli.CliOptions.highlightHelp)
groupNamed = cligeneralflagsgroups1 groupNamed = cligeneralflagsgroups1
-- flags in the unnamed group, shown last: -- flags in the unnamed group, shown last: (keep synced with dropUnsupportedOpts)
,groupUnnamed = confflags -- keep synced with dropUnsupportedOpts ,groupUnnamed = confflags
-- flags handled but not shown in the help: -- other flags handled but not shown in help:
,groupHidden = hiddenflags ,groupHidden = hiddenflagsformainmode
} }
,modeHelpSuffix = [] ,modeHelpSuffix = []
-- "Examples:" : -- "Examples:" :

View File

@ -27,6 +27,7 @@ module Hledger.Cli.CliOptions (
flattreeflags, flattreeflags,
confflags, confflags,
hiddenflags, hiddenflags,
hiddenflagsformainmode,
-- outputflags, -- outputflags,
outputFormatFlag, outputFormatFlag,
outputFileFlag, outputFileFlag,
@ -267,10 +268,9 @@ confflags = [
,flagNone ["no-conf","n"] (setboolopt "no-conf") "ignore any config file" ,flagNone ["no-conf","n"] (setboolopt "no-conf") "ignore any config file"
] ]
-- | Common flags that are accepted but not shown in --help, -- | Common legacy flags that are accepted but not shown in --help.
-- such as --effective, --aux-date. hiddenflagsformainmode :: [Flag RawOpts]
hiddenflags :: [Flag RawOpts] hiddenflagsformainmode = [
hiddenflags = [
flagNone ["effective","aux-date"] (setboolopt "date2") "Ledger-compatible aliases for --date2" flagNone ["effective","aux-date"] (setboolopt "date2") "Ledger-compatible aliases for --date2"
,flagNone ["infer-value"] (setboolopt "infer-market-prices") "legacy flag that was renamed" ,flagNone ["infer-value"] (setboolopt "infer-market-prices") "legacy flag that was renamed"
,flagNone ["pretty-tables"] (setopt "pretty" "always") "legacy flag that was renamed" ,flagNone ["pretty-tables"] (setopt "pretty" "always") "legacy flag that was renamed"
@ -278,7 +278,10 @@ hiddenflags = [
,flagNone ["obfuscate"] (setboolopt "obfuscate") "slightly obfuscate hledger's output. Warning, does not give privacy. Formerly --anon." -- #2133, handled by maybeObfuscate ,flagNone ["obfuscate"] (setboolopt "obfuscate") "slightly obfuscate hledger's output. Warning, does not give privacy. Formerly --anon." -- #2133, handled by maybeObfuscate
,flagReq ["rules-file"] (\s opts -> Right $ setopt "rules" s opts) "RULESFILE" "was renamed to --rules" ,flagReq ["rules-file"] (\s opts -> Right $ setopt "rules" s opts) "RULESFILE" "was renamed to --rules"
] ]
++ confflags -- repeated here so subcommands/addons won't error when parsing them
-- Subcommands/addons add the conf flags, so they won't error if those are present.
hiddenflags :: [Flag RawOpts]
hiddenflags = hiddenflagsformainmode ++ confflags
-- | Common output-related flags: --output-file, --output-format... -- | Common output-related flags: --output-file, --output-format...

View File

@ -114,25 +114,29 @@ $ hledger --no-conf check -f/dev/null
# ** 15. --conf CONFFILE works with builtin commands. # ** 15. --conf CONFFILE works with builtin commands.
$ hledger --conf /dev/null check -f/dev/null $ hledger --conf /dev/null check -f/dev/null
# ** 16. When moving options written before the command name: # ** 16. --conf works with no command.
$ hledger --conf /dev/null
> /Commands/
# ** 17. When moving options written before the command name:
# if the flag name is used in general options and also one or more commands, # if the flag name is used in general options and also one or more commands,
# the general option's arity determines whether a value is expected. # the general option's arity determines whether a value is expected.
# Here -p is a help command flag taking no value, but also a general option requiring a value, # Here -p is a help command flag taking no value, but also a general option requiring a value,
# so the value ("today") is detected. # so the value ("today") is detected.
$ hledger -p today check -f/dev/null $ hledger -p today check -f/dev/null
# ** 17. The specially-handled --debug option is also moved properly, with no value: # ** 18. The specially-handled --debug option is also moved properly, with no value:
$ hledger --debug check -f/dev/null $ hledger --debug check -f/dev/null
>2 // >2 //
# ** 18. a joined value: # ** 19. a joined value:
$ hledger --debug=1 check -f/dev/null $ hledger --debug=1 check -f/dev/null
>2 // >2 //
# ** 19. or a separate value: # ** 20. or a separate value:
$ hledger --debug 1 check -f/dev/null $ hledger --debug 1 check -f/dev/null
>2 // >2 //
# ** 20. A short flag with joined value, or multiple valueless short flags joined together, are moved properly. # ** 21. A short flag with joined value, or multiple valueless short flags joined together, are moved properly.
$ hledger -f/dev/null -BI check $ hledger -f/dev/null -BI check
>2 // >2 //