cli: commands list: fix addons being shown twice

This commit is contained in:
Simon Michael 2019-01-29 20:36:50 -08:00
parent 2442b4f46f
commit 8d6b5cc4f3

View File

@ -44,7 +44,6 @@ where
import Data.Char (isSpace) import Data.Char (isSpace)
import Data.Default import Data.Default
import Data.List import Data.List
import Data.List.Split (splitOn)
#if !(MIN_VERSION_base(4,11,0)) #if !(MIN_VERSION_base(4,11,0))
import Data.Monoid ((<>)) import Data.Monoid ((<>))
#endif #endif
@ -210,7 +209,7 @@ printCommandsList :: [String] -> IO ()
printCommandsList addonsFound = printCommandsList addonsFound =
putStr $ putStr $
regexReplace "PROGVERSION" (prognameandversion) $ regexReplace "PROGVERSION" (prognameandversion) $
regexReplace "OTHER" (unlines unknownCommandsFound) $ regexReplace "OTHER" (unlines $ (map ('+':) unknownCommandsFound)) $
-- regexReplace "COUNT" (show cmdcount) $ -- regexReplace "COUNT" (show cmdcount) $
unlines $ concatMap adjustline $ lines $ unlines $ concatMap adjustline $ lines $
cmdlist cmdlist
@ -218,7 +217,7 @@ printCommandsList addonsFound =
cmdlist = commandsList cmdlist = commandsList
-- cmdcount = length $ commandsFromCommandsList cmdlist -- cmdcount = length $ commandsFromCommandsList cmdlist
commandsFound = map (' ':) builtinCommandNames ++ map ('+':) addonsFound commandsFound = map (' ':) builtinCommandNames ++ map ('+':) addonsFound
unknownCommandsFound = map ('+':) $ addonsFound \\ knownCommands unknownCommandsFound = addonsFound \\ knownCommands
adjustline l | " hledger " `isPrefixOf` l = [l] adjustline l | " hledger " `isPrefixOf` l = [l]
adjustline l@('+':_) | not $ cmd `elem` commandsFound = [] adjustline l@('+':_) | not $ cmd `elem` commandsFound = []
@ -229,11 +228,11 @@ printCommandsList addonsFound =
knownCommands :: [String] knownCommands :: [String]
knownCommands = sort $ commandsFromCommandsList commandsList knownCommands = sort $ commandsFromCommandsList commandsList
-- | Extract the command names from a commands list like the above: -- | Extract the command names from commandsList: the first word
-- the first word (or words separated by |) of lines beginning with a space. -- of lines beginning with a space or + sign.
commandsFromCommandsList :: String -> [String] commandsFromCommandsList :: String -> [String]
commandsFromCommandsList s = commandsFromCommandsList s =
concatMap (splitOn "|") [w | ' ':l <- lines s, let w:_ = words l] [w | c:l <- lines s, c `elem` [' ','+'], let w:_ = words l]
-- The test command is defined here for easy access to other modules' tests. -- The test command is defined here for easy access to other modules' tests.