check: accept case-insensitive prefixes as arguments
Might a bad idea, but avoiding wasteful typing..
This commit is contained in:
parent
9abb33d8e7
commit
7510d99aec
@ -15,8 +15,8 @@ import Hledger.Cli.Commands.Check.Ordereddates (journalCheckOrdereddates)
|
|||||||
import Hledger.Cli.Commands.Check.Uniqueleafnames (journalCheckUniqueleafnames)
|
import Hledger.Cli.Commands.Check.Uniqueleafnames (journalCheckUniqueleafnames)
|
||||||
import System.Console.CmdArgs.Explicit
|
import System.Console.CmdArgs.Explicit
|
||||||
import Data.Either (partitionEithers)
|
import Data.Either (partitionEithers)
|
||||||
import Data.Char (toUpper)
|
import Data.Char (toLower,toUpper)
|
||||||
import Safe (readMay)
|
import Data.List (isPrefixOf, find)
|
||||||
import Control.Monad (forM_)
|
import Control.Monad (forM_)
|
||||||
import System.IO (stderr, hPutStrLn)
|
import System.IO (stderr, hPutStrLn)
|
||||||
import System.Exit (exitFailure)
|
import System.Exit (exitFailure)
|
||||||
@ -60,19 +60,24 @@ data Check =
|
|||||||
| Ordereddates
|
| Ordereddates
|
||||||
| Payees
|
| Payees
|
||||||
| Uniqueleafnames
|
| Uniqueleafnames
|
||||||
deriving (Read,Show,Eq)
|
deriving (Read,Show,Eq,Enum,Bounded)
|
||||||
|
|
||||||
-- | Parse the name of an error check, or return the name unparsed.
|
-- | Parse the name (or a name prefix) of an error check, or return the name unparsed.
|
||||||
-- Names are conventionally all lower case, but this parses case insensitively.
|
-- Check names are conventionally all lower case, but this parses case insensitively.
|
||||||
parseCheck :: String -> Either String Check
|
parseCheck :: String -> Either String Check
|
||||||
parseCheck s = maybe (Left s) Right $ readMay $ capitalise s
|
parseCheck s =
|
||||||
|
maybe (Left s) (Right . read) $ -- PARTIAL: read should not fail here
|
||||||
|
find (s' `isPrefixOf`) $ checknames
|
||||||
|
where
|
||||||
|
s' = capitalise $ map toLower s
|
||||||
|
checknames = map show [minBound..maxBound::Check]
|
||||||
|
|
||||||
capitalise :: String -> String
|
capitalise :: String -> String
|
||||||
capitalise (c:cs) = toUpper c : cs
|
capitalise (c:cs) = toUpper c : cs
|
||||||
capitalise s = s
|
capitalise s = s
|
||||||
|
|
||||||
-- | Parse a check argument: a string which is the lower-case name of an error check,
|
-- | Parse a check argument: a string which is the lower-case name of an error check,
|
||||||
-- followed by zero or more space-separated arguments for that check.
|
-- or a prefix thereof, followed by zero or more space-separated arguments for that check.
|
||||||
parseCheckArgument :: String -> Either String (Check,[String])
|
parseCheckArgument :: String -> Either String (Check,[String])
|
||||||
parseCheckArgument s =
|
parseCheckArgument s =
|
||||||
dbg3 "check argument" $
|
dbg3 "check argument" $
|
||||||
|
|||||||
@ -8,6 +8,8 @@ prevent problems in your data.
|
|||||||
Some of these are run automatically; or,
|
Some of these are run automatically; or,
|
||||||
you can use this `check` command to run them on demand,
|
you can use this `check` command to run them on demand,
|
||||||
with no output and a zero exit code if all is well.
|
with no output and a zero exit code if all is well.
|
||||||
|
Specify their names (or a prefix) as argument(s).
|
||||||
|
|
||||||
Some examples:
|
Some examples:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user