Skip to content
This repository was archived by the owner on May 1, 2020. It is now read-only.

Commit b51f165

Browse files
committed
Support new docgen option for psc-docs
1 parent 1d17fda commit b51f165

File tree

1 file changed

+39
-4
lines changed

1 file changed

+39
-4
lines changed

src/Options.purs

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,14 @@ module GulpPurescript.Options
77

88
import Control.Alt ((<|>))
99

10-
import Data.Array (concat)
10+
import Data.Array (concat, singleton)
1111
import Data.Either (Either(..), either)
1212
import Data.Foreign (Foreign(), ForeignError(TypeMismatch), F())
1313
import Data.Foreign.Class (IsForeign, read, readProp)
14+
import Data.Foreign.Keys (keys)
1415
import Data.Foreign.NullOrUndefined (NullOrUndefined(..), runNullOrUndefined)
1516
import Data.Maybe (Maybe(..), fromMaybe, maybe)
17+
import Data.Traversable (for)
1618
import Data.Tuple (Tuple())
1719
import Data.Tuple.Nested (tuple2)
1820

@@ -76,6 +78,10 @@ ffiOpt = "ffi"
7678

7779
ffiKey = ffiOpt
7880

81+
docgenOpt = "docgen"
82+
83+
docgenKey = docgenOpt
84+
7985
newtype Psc
8086
= Psc { noPrelude :: NullOrUndefined Boolean
8187
, noTco :: NullOrUndefined Boolean
@@ -106,7 +112,9 @@ newtype PscMake
106112
}
107113

108114
newtype PscDocs
109-
= PscDocs { format :: NullOrUndefined Format }
115+
= PscDocs { format :: NullOrUndefined Format
116+
, docgen :: NullOrUndefined Foreign
117+
}
110118

111119
data Format = Markdown | ETags | CTags
112120

@@ -167,7 +175,11 @@ instance isForeignPscMake :: IsForeign PscMake where
167175
<*> readProp ffiKey obj)
168176

169177
instance isForeignPscDocs :: IsForeign PscDocs where
170-
read obj = PscDocs <<< { format: _ } <$> readProp formatKey obj
178+
read obj =
179+
PscDocs <$> ({ format: _
180+
, docgen: _
181+
} <$> readProp formatKey obj
182+
<*> readProp docgenOpt obj)
171183

172184
instance isForeignFormat :: IsForeign Format where
173185
read val = read val >>= (\a -> case a of
@@ -195,6 +207,28 @@ mkPathArray :: String -> NullOrUndefined [String] -> [String]
195207
mkPathArray key opt = concat $ mkString key <$> (NullOrUndefined <<< Just)
196208
<$> (fromMaybe [] (runNullOrUndefined opt) >>= expandGlob)
197209

210+
mkDocgen :: String -> NullOrUndefined Foreign -> [String]
211+
mkDocgen key opt = concat $ mkString key <$> (NullOrUndefined <<< Just)
212+
<$> (maybe [] parse (runNullOrUndefined opt))
213+
where
214+
parse :: Foreign -> [String]
215+
parse obj = either (const []) id $ parseName obj
216+
<|> parseList obj
217+
<|> parseObj obj
218+
<|> pure []
219+
220+
parseName :: Foreign -> F [String]
221+
parseName obj = singleton <$> read obj
222+
223+
parseList :: Foreign -> F [String]
224+
parseList obj = read obj
225+
226+
parseObj :: Foreign -> F [String]
227+
parseObj obj = do
228+
modules <- keys obj
229+
for modules \m -> (\f -> m ++ ":" ++ f) <$> readProp m obj
230+
231+
198232
foreign import expandGlob
199233
"""
200234
var expandGlob = (function () {
@@ -255,4 +289,5 @@ pscMakeOptions opts = either (const []) fold parsed
255289
pscDocsOptions :: Foreign -> [String]
256290
pscDocsOptions opts = either (const []) fold parsed
257291
where parsed = read opts :: F PscDocs
258-
fold (PscDocs a) = mkFormat formatOpt a.format
292+
fold (PscDocs a) = mkFormat formatOpt a.format <>
293+
mkDocgen docgenOpt a.docgen

0 commit comments

Comments
 (0)