@@ -25,14 +25,14 @@ import qualified Options.Applicative as O
2525import HaskellCI.OptionsGrammar
2626
2727data SomeParser s where
28- SP :: (Maybe String -> Maybe String -> O. Parser (s -> s )) -> SomeParser s
28+ SP :: (Maybe MetaVar -> Maybe O. Completer -> Maybe Help -> O. Parser (s -> s )) -> SomeParser s
2929
3030newtype OptparseGrammar s a = OG [SomeParser s ]
3131 deriving Functor
3232
3333runOptparseGrammar :: OptparseGrammar s a -> O. Parser (s -> s )
3434runOptparseGrammar (OG ps) = fmap (foldr (flip (.) ) id ) $ many $ asum
35- [ p Nothing Nothing
35+ [ p Nothing Nothing Nothing
3636 | SP p <- ps
3737 ]
3838
@@ -42,7 +42,7 @@ instance Applicative (OptparseGrammar s) where
4242
4343instance C. FieldGrammar ParsecPretty OptparseGrammar where
4444 blurFieldGrammar l (OG ps) = OG
45- [ SP $ \ v h -> fmap (l C. #%~ ) (p v h)
45+ [ SP $ \ v c h -> fmap (l C. #%~ ) (p v c h)
4646 | SP p <- ps
4747 ]
4848
@@ -51,23 +51,23 @@ instance C.FieldGrammar ParsecPretty OptparseGrammar where
5151
5252 -- the non default flag has help entry
5353 booleanFieldDef fn l def = OG
54- [ SP $ \ _m h -> setOG l $ O. flag' True $ flagMods fn (th h)
55- , SP $ \ _m h -> setOG l $ O. flag' False $ flagMods (" no-" <> fn) (fh h)
54+ [ SP $ \ _m _c h -> setOG l $ O. flag' True $ flagMods fn (th h)
55+ , SP $ \ _m _c h -> setOG l $ O. flag' False $ flagMods (" no-" <> fn) (fh h)
5656 ]
5757 where
5858 th h = if def then Nothing else h
5959 fh h = if def then h else Nothing
6060
6161 optionalFieldAla fn c l = OG
62- [ SP $ \ m h -> setOptionalOG l $ O. option (C. unpack' c <$> readMParsec) $ optionMods fn m h ]
62+ [ SP $ \ m cpl h -> setOptionalOG l $ O. option (C. unpack' c <$> readMParsec) $ optionMods fn m cpl h ]
6363
6464 optionalFieldDefAla fn c l def = OG
65- [ SP $ \ m h -> setOG l $ O. option (C. unpack' c <$> readMParsec) $ optionMods fn m (fmap hdef h) ]
65+ [ SP $ \ m cpl h -> setOG l $ O. option (C. unpack' c <$> readMParsec) $ optionMods fn m cpl (fmap hdef h) ]
6666 where
6767 hdef h = h ++ " (Default: " ++ C. prettyShow (C. pack' c def) ++ " )"
6868
6969 monoidalFieldAla fn c l = OG
70- [ SP $ \ m h -> monoidOG l $ O. option (C. unpack' c <$> readMParsec) $ optionMods fn m h ]
70+ [ SP $ \ m cpl h -> monoidOG l $ O. option (C. unpack' c <$> readMParsec) $ optionMods fn m cpl h ]
7171
7272 prefixedFields _ _ = pure []
7373 knownField _ = pure ()
@@ -77,22 +77,27 @@ instance C.FieldGrammar ParsecPretty OptparseGrammar where
7777 hiddenField = id
7878
7979 freeTextField fn l = OG
80- [ SP $ \ m h -> setOptionalOG l $ O. strOption $ optionMods fn m h ]
80+ [ SP $ \ m c h -> setOptionalOG l $ O. strOption $ optionMods fn m c h ]
8181
8282 freeTextFieldDef fn l = OG
83- [ SP $ \ m h -> setOG l $ O. strOption $ optionMods fn m h ]
83+ [ SP $ \ m c h -> setOG l $ O. strOption $ optionMods fn m c h ]
8484
8585 freeTextFieldDefST fn l = OG
86- [ SP $ \ m h -> setOG l $ O. strOption $ optionMods fn m h ]
86+ [ SP $ \ m c h -> setOG l $ O. strOption $ optionMods fn m c h ]
8787
8888instance OptionsGrammar ParsecPretty OptparseGrammar where
8989 help h (OG ps) = OG
90- [ SP $ \ m _h -> p m (Just h)
90+ [ SP $ \ m c _h -> p m c (Just h)
9191 | SP p <- ps
9292 ]
9393
9494 metahelp m h (OG ps) = OG
95- [ SP $ \ _m _h -> p (Just m) (Just h)
95+ [ SP $ \ _m c _h -> p (Just m) c (Just h)
96+ | SP p <- ps
97+ ]
98+
99+ metaCompleterHelp m c h (OG ps) = OG
100+ [ SP $ \ _m _c _h -> p (Just m) (Just c) (Just h)
96101 | SP p <- ps
97102 ]
98103
@@ -105,19 +110,21 @@ instance OptionsGrammar ParsecPretty OptparseGrammar where
105110 -- where the --no-tests has help, because it's not default.
106111 --
107112 rangeField fn l def = OG
108- [ SP $ \ _m h -> setOG l $ O. flag' C. anyVersion $ flagMods fn (th h)
109- , SP $ \ _m h -> setOG l $ O. flag' C. noVersion $ flagMods (" no-" <> fn) (fh h)
110- , SP $ \ _m _h -> setOG l $ O. option readMParsec $ O. long (fromUTF8BS $ fn <> " -jobs" ) <> O. metavar " RANGE"
113+ [ SP $ \ _m _c h -> setOG l $ O. flag' C. anyVersion $ flagMods fn (th h)
114+ , SP $ \ _m _c h -> setOG l $ O. flag' C. noVersion $ flagMods (" no-" <> fn) (fh h)
115+ , SP $ \ _m _c _h -> setOG l $ O. option readMParsec $ O. long (fromUTF8BS $ fn <> " -jobs" ) <> O. metavar " RANGE"
111116 ]
112117 where
113118 th h = if equivVersionRanges def C. anyVersion then Nothing else h
114119 fh h = if equivVersionRanges def C. anyVersion then h else Nothing
115120
116- optionMods :: (O. HasName mods , O. HasMetavar mods ) => C. FieldName -> Maybe String -> Maybe String -> O. Mod mods a
117- optionMods fn mmetavar mhelp = flagMods fn mhelp
121+ optionMods :: (O. HasName mods , O. HasCompleter mods , O. HasMetavar mods )
122+ => C. FieldName -> Maybe MetaVar -> Maybe O. Completer -> Maybe Help -> O. Mod mods a
123+ optionMods fn mmetavar mcompl mhelp = flagMods fn mhelp
118124 <> maybe mempty O. metavar mmetavar
125+ <> maybe mempty O. completer mcompl
119126
120- flagMods :: O. HasName mods => C. FieldName -> Maybe String -> O. Mod mods a
127+ flagMods :: O. HasName mods => C. FieldName -> Maybe Help -> O. Mod mods a
121128flagMods fn mhelp = O. long (fromUTF8BS fn)
122129 <> maybe mempty O. help mhelp
123130
0 commit comments