on master help sign in
Make sure docs only contained exported values
commit58090de33acb4842b521b194116a8eee4a8351c8 authorEvan Czaplicki <info@elm-lang.org> dateSun 23 Nov 2014, 22:54 (12 years ago) parenta1aa92a
1 file changed+63−3
src/Docs.hs+63−3
src/Docs.hs+63−3
@@ -10,11 +10,14 @@ import System.IO
1010import Control.Applicative ((<$>))
1111import Control.Arrow (second)
1212import qualified Data.Aeson.Encode.Pretty as Json
13−import qualified Data.Map as Map
1413import 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
1517
1618import qualified AST.Declaration as Decl
1719import qualified AST.Expression.Source as Source
20+import qualified AST.Variable as Var
1821
1922import Text.Parsec hiding (newline, spaces)
2023import qualified Parse.Declaration as Parse (typeDecl, infixDecl)
@@ -84,7 +87,7 @@ config =
8487documentation :: Parse.IParser Docs.Documentation
8588documentation =
8689 do optional Parse.freshLine
87− (names, _exports) <- Parse.header
90+ (names, exports) <- Parse.header
8891
8992 manyTill (string " " <|> Parse.newline <?> "more whitespace")
9093 (lookAhead (string "{-|") <?> "module documentation comment")
@@ -95,7 +98,13 @@ documentation =
9598
9699 let (aliases, unions, values) = categorizeDeclarations decls
97100
98− return (Docs.Documentation (Module.Name names) overview aliases unions values)
101+ return $
102+ Docs.Documentation
103+ (Module.Name names)
104+ overview
105+ (filterAliases exports aliases)
106+ (filterUnions exports unions)
107+ (filterValues exports values)
99108
100109
101110docComment :: Parse.IParser String
@@ -200,3 +209,54 @@ errorMessage =
200209 "there appears to be a bug in this tool.\n" ++
201210 "Please report it to <https://github.com/elm-lang/Elm/issues>"
202211
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+