2
我想使用cmdargs將參數傳遞給我的Haskell程序。出於某些原因,我希望在cmdargs幫助消息中隱藏某些選項(未顯示但可用)。使用cmdargs隱藏參數
有沒有辦法做到這一點?
我正在使用cmdargs 0.10.9。
我想使用cmdargs將參數傳遞給我的Haskell程序。出於某些原因,我希望在cmdargs幫助消息中隱藏某些選項(未顯示但可用)。使用cmdargs隱藏參數
有沒有辦法做到這一點?
我正在使用cmdargs 0.10.9。
這裏的想法是攔截--help
處理並編輯 幫助文本,以在顯示隱藏選項之前刪除對隱藏選項的任何引用。 我們希望隱藏的選項可以用特殊幫助文本標記(例如&= help "HIDDEN OPTION"
) ,並且可以從幫助輸出中刪除這些行。
考慮一個簡單的主程序:
main = cmdArgs sampleArgs >>= print
時--help
是目前所採取的路徑如下:
cmdArgs = cmdArgsRun . cmdArgsMode
cmdArgs m = cmdArgsApply =<< processArgs m
cmdArgsApply :: CmdArgs a -> IO a
cmdArgsApply CmdArgs{..}
| Just x <- cmdArgsHelp = do putStr x; exitSuccess
| Just x <- cmdArgsVersion = ...
| otherwise = ...
要攔截幫助處理我們可以寫我們的main
這樣的:
main = do
b <- processArgs (cmdArgsMode sampleArgs)
a <- myApply b
print a
其中myApply
是cmdArgsApply
的一個版本,它發出編輯的 版本的幫助文本。
這裏是工作示例。幫助文本中不會顯示選項-s
和--secret
。這些論點嘗試:
prog
prog --help
prog --version
prog -s1234
計劃:
{-# LANGUAGE DeriveDataTypeable, RecordWildCards #-}
import Data.List (isInfixOf)
import System.Console.CmdArgs
import System.Console.CmdArgs.Explicit (processArgs)
import System.Exit (exitSuccess)
data MyArgs = MyArgs { file :: String, dest :: String, secret :: String }
deriving (Show, Data)
sample = MyArgs { file = "input.txt" &= help "the input file" &= opt "input"
, dest = "output.txt" &= help "the output file"
, secret = "3l33t" &= help "HIDDEN OPTION" &= opt "someflag"
}
main = do
b <- processArgs (cmdArgsMode sample)
a <- myApply b
putStrLn $ "running program with " ++ show a
myApply :: CmdArgs a -> IO a
myApply [email protected]{..}
| Just x <- cmdArgsHelp = do putStr (fixupHelp x); exitSuccess
| otherwise = cmdArgsApply b
fixupHelp = unlines
. filter (not . ("HIDDEN OPTION" `isInfixOf`))
. lines