on master help sign in
Make sure docs only contained exported values
58090deEvan Czaplicki
src/Docs.hs+63−3
@@ -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
15
17
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
18
21
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
88
91
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 =
95
98
96 let (aliases, unions, values) = categorizeDeclarations decls
99 let (aliases, unions, values) = categorizeDeclarations decls
97
100
101+ return $
98− return (Docs.Documentation (Module.Name names) overview aliases unions values)
102+ Docs.Documentation
103+ (Module.Name names)
104+ overview
105+ (filterAliases exports aliases)
106+ (filterUnions exports unions)
107+ (filterValues exports values)
99
108
100
109
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>"
202
211
212+
213+-- FILTER OUT UNEXPORTED VALUES, ALIASES, and UNIONS
214+
215+filterValues :: Var.Listing Var.Value -> [Docs.Value] -> [Docs.Value]
216+filterValues (Var.Listing exports open) values =
217+ case open of
218+ True -> values
219+ False ->
220+ let names =
221+ Set.fromList (Var.getValues exports)
222+ in
223+ filter (\value -> Set.member (Docs.valueName value) names) values
224+
225+
226+filterAliases :: Var.Listing Var.Value -> [Docs.Alias] -> [Docs.Alias]
227+filterAliases (Var.Listing exports open) aliases =
228+ case open of
229+ True -> aliases
230+ False ->
231+ let names =
232+ Set.fromList (Var.getAliases exports)
233+ in
234+ filter (\value -> Set.member (Docs.aliasName value) names) aliases
235+
236+
237+filterUnions :: Var.Listing Var.Value -> [Docs.Union] -> [Docs.Union]
238+filterUnions (Var.Listing exports open) unions =
239+ case open of
240+ True -> unions
241+ False ->
242+ Maybe.mapMaybe (filterUnion exportedUnions) unions
243+ where
244+ exportedUnions =
245+ Map.fromList (Var.getUnions exports)
246+
247+
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
251+ Nothing ->
252+ Nothing
253+
254+ Just (Var.Listing tags unionOpen)
255+ | unionOpen ->
256+ Just union
257+ | otherwise ->
258+ let publicTags =
259+ filter (\(tag, _) -> tag `elem` tags) (Docs.unionCases union)
260+ in
261+ Just (union { Docs.unionCases = publicTags })
262+