@@ -8,6 +8,7 @@ import System.Exit
9import Control.Applicative ((<$>), (<*>))
9import Control.Applicative ((<$>), (<*>))
10import Data.Aeson
10import Data.Aeson
11+import Data.Aeson.Encode.Pretty
11import qualified Data.List as List
12import qualified Data.List as List
12import qualified Data.Map as Map
13import qualified Data.Map as Map
13import qualified Data.ByteString.Lazy as BS
14import qualified Data.ByteString.Lazy as BS
@@ -41,25 +42,29 @@ parseFile path = do
41 Right json -> do
42 Right json -> do
42 putStrLn $ "Documenting " ++ path
43 putStrLn $ "Documenting " ++ path
43 createDirectoryIfMissing True "docs"
44 createDirectoryIfMissing True "docs"
44− BS.writeFile ("docs" </> replaceExtension path ".json") (encode json)
45+ BS.writeFile ("docs" </> replaceExtension path ".json")
46+ (encodePretty' (defConfig { confIndent = 2 }) json)
45 Left err -> do
47 Left err -> do
46 putStrLn $ "Parse error in " ++ path ++ " at " ++ show err
48 putStrLn $ "Parse error in " ++ path ++ " at " ++ show err
47 exitFailure
49 exitFailure
49docs :: IParser Value
51docs :: IParser Value
51− optional freshLine
53+ (name, exports, structure) <- moduleDocs
52− (names, exports) <- option (["Main"],[]) moduleDef
54− structure <- option "" docComment
55 things <- document
54 things <- document
56− return $ toJson (List.intercalate "." names) exports structure things
55+ return $ toJson name exports structure things
58docComment :: IParser String
57docComment :: IParser String
59docComment = do
58docComment = do
60 try (string "{-|")
59 try (string "{-|")
61 contents <- closeComment
60 contents <- closeComment
62− return (init (init contents))
61+ return $ dropWhile (==' ') (init (init contents))
64+ (names,exports) <- anyThen moduleDef
65+ anyThen (lookAhead (string "{-|"))
66+ structure <- docComment
67+ return (List.intercalate "." names, exports, structure)
64document :: IParser [(String, Declaration t v, String)]
69document :: IParser [(String, Declaration t v, String)]
65document = go []
70document = go []