@@ -10,11 +10,14 @@ import System.IO
10import Control.Applicative ((<$>))
10import Control.Applicative ((<$>))
11import Control.Arrow (second)
11import Control.Arrow (second)
12import qualified Data.Aeson.Encode.Pretty as Json
12import qualified Data.Aeson.Encode.Pretty as Json
13−import qualified Data.Map as Map
14import qualified Data.ByteString.Lazy.Char8 as BS
13import qualified Data.ByteString.Lazy.Char8 as BS
14+import qualified Data.Map as Map
15+import qualified Data.Maybe as Maybe
16+import qualified Data.Set as Set
16import qualified AST.Declaration as Decl
18import qualified AST.Declaration as Decl
17import qualified AST.Expression.Source as Source
19import qualified AST.Expression.Source as Source
20+import qualified AST.Variable as Var
19import Text.Parsec hiding (newline, spaces)
22import Text.Parsec hiding (newline, spaces)
20import qualified Parse.Declaration as Parse (typeDecl, infixDecl)
23import qualified Parse.Declaration as Parse (typeDecl, infixDecl)
@@ -84,7 +87,7 @@ config =
84documentation :: Parse.IParser Docs.Documentation
87documentation :: Parse.IParser Docs.Documentation
85documentation =
88documentation =
86 do optional Parse.freshLine
89 do optional Parse.freshLine
87− (names, _exports) <- Parse.header
90+ (names, exports) <- Parse.header
89 manyTill (string " " <|> Parse.newline <?> "more whitespace")
92 manyTill (string " " <|> Parse.newline <?> "more whitespace")
90 (lookAhead (string "{-|") <?> "module documentation comment")
93 (lookAhead (string "{-|") <?> "module documentation comment")
@@ -95,7 +98,13 @@ documentation =
96 let (aliases, unions, values) = categorizeDeclarations decls
99 let (aliases, unions, values) = categorizeDeclarations decls
98− return (Docs.Documentation (Module.Name names) overview aliases unions values)
102+ Docs.Documentation
105+ (filterAliases exports aliases)
106+ (filterUnions exports unions)
107+ (filterValues exports values)
101docComment :: Parse.IParser String
110docComment :: Parse.IParser String
@@ -200,3 +209,54 @@ errorMessage =
200 "there appears to be a bug in this tool.\n" ++
209 "there appears to be a bug in this tool.\n" ++
201 "Please report it to <https://github.com/elm-lang/Elm/issues>"
210 "Please report it to <https://github.com/elm-lang/Elm/issues>"
213+-- FILTER OUT UNEXPORTED VALUES, ALIASES, and UNIONS
215+filterValues :: Var.Listing Var.Value -> [Docs.Value] -> [Docs.Value]
216+filterValues (Var.Listing exports open) values =
221+ Set.fromList (Var.getValues exports)
223+ filter (\value -> Set.member (Docs.valueName value) names) values
226+filterAliases :: Var.Listing Var.Value -> [Docs.Alias] -> [Docs.Alias]
227+filterAliases (Var.Listing exports open) aliases =
232+ Set.fromList (Var.getAliases exports)
234+ filter (\value -> Set.member (Docs.aliasName value) names) aliases
237+filterUnions :: Var.Listing Var.Value -> [Docs.Union] -> [Docs.Union]
238+filterUnions (Var.Listing exports open) unions =
242+ Maybe.mapMaybe (filterUnion exportedUnions) unions
245+ Map.fromList (Var.getUnions exports)
248+filterUnion :: Map.Map String (Var.Listing String) -> Docs.Union -> Maybe Docs.Union
249+filterUnion exportedUnions union =
250+ case Map.lookup (Docs.unionName union) exportedUnions of
254+ Just (Var.Listing tags unionOpen)
259+ filter (\(tag, _) -> tag `elem` tags) (Docs.unionCases union)
261+ Just (union { Docs.unionCases = publicTags })