我正在构建一个brainfuck 编译器。可执行文件接受两个命令$ brainfuck compile ...
和$ brainfuck run
. 我希望可执行文件在按选项卡时自动完成。例如,写入$ brainfuck com
然后按 tab 应该生成$ brainfuck compile
.
data Command = Compile CompileArgs | Run RunArgs
deriving (Show)
main :: IO ()
main = execute =<< execParser opts
where
opts = info (helper <*> argsParser) fullDesc
execute :: Command -> IO ()
execute (Compile args) = compile args
execute (Run args) = run args
argsParser :: Parser Command
argsParser = subparser (compileCommand <> runCommand)
where
compileCommand = command "compile" $ info compileOptions $ progDesc "Compile brainfuck to an executable"
runCommand = command "run" $ info runOptions $ progDesc "Execute brainfuck code"
optparse 的 github page here上有一个部分,但我不是很明白。
该功能看起来与我已经在使用的功能completeWith :: Options.Applicative.Builder.Internal.HasCompleter f => [String] -> Mod f a
非常相似。command :: String -> ParserInfo a -> Mod CommandFields a
所以我想我可以使用它并将它们与它们结合起来,<>
但事实证明这CommandFields
不是HasCompleter
.
你应该如何让自动完成工作?