@@ -0,0 +1,101 @@
1+{-# OPTIONS_GHC -Wall #-}
2+{-# LANGUAGE OverloadedStrings #-}
3+module Reporting.Render.Type.Localizer
13+import qualified Data.Map as Map
14+import qualified Data.Set as Set
16+import qualified AST.Source as Src
17+import qualified Elm.Name as N
18+import Reporting.Doc ((<>))
19+import qualified Reporting.Doc as D
20+import qualified Reporting.Annotation as A
28+ Localizer (Map.Map N.Name Import)
33+ { _alias :: Maybe N.Name
34+ , _exposing :: Exposing
40+ | Only (Set.Set N.Name)
52+toDoc :: Localizer -> N.Name -> N.Name -> D.Doc
53+toDoc (Localizer localizer) home name =
54+ case Map.lookup home localizer of
56+ D.fromName home <> "." <> D.fromName name
58+ Just (Import alias exposing) ->
64+ if Set.member name set then
67+ D.fromName (maybe home id alias) <> "." <> D.fromName name
74+fromImports :: [Src.Import] -> Localizer
76+ Localizer $ Map.fromList (map toPair imports)
79+toPair :: Src.Import -> (N.Name, Import)
80+toPair (Src.Import (A.At _ name) alias exposing) =
82+ , Import alias (toExposing exposing)
86+toExposing :: Src.Exposing -> Exposing
92+ Src.Explicit exposedList ->
93+ Only (foldr addType Set.empty exposedList)
96+addType :: A.Located Src.Exposed -> Set.Set N.Name -> Set.Set N.Name
97+addType (A.At _ exposed) types =
100+ Src.Upper name _ -> Set.insert name types
101+ Src.Operator _ -> types