on master help sign in
Start threading docs all the way through to canonical modules
23c9c2aEvan Czaplicki
builder/src/Build.hs+5−5
@@ -267,7 +267,7 @@ crawlFile env@(Env _ root pkg _ _ _) mvar expectedName path =
267 Left err ->
267 Left err ->
268 return $ SBadSyntax path time source err
268 return $ SBadSyntax path time source err
269
269
270− Right modul@(Src.Module maybeActualName _ imports values _ _ _ _) ->
270+ Right modul@(Src.Module maybeActualName _ _ imports values _ _ _ _) ->
271 case maybeActualName of
271 case maybeActualName of
272 Nothing ->
272 Nothing ->
273 return $ SBadSyntax path time source (Syntax.ModuleNameUnspecified expectedName)
273 return $ SBadSyntax path time source (Syntax.ModuleNameUnspecified expectedName)
@@ -339,13 +339,13 @@ checkModule env@(Env _ root pkg _ _ _) foreigns resultsMVar name status =
339 do source <- File.readUtf8 path
339 do source <- File.readUtf8 path
340 return $ RProblem $ Error.Module name path time source $
340 return $ RProblem $ Error.Module name path time source $
341 case Parse.fromByteString pkg source of
341 case Parse.fromByteString pkg source of
342− Right (Src.Module _ _ imports _ _ _ _ _) ->
342+ Right (Src.Module _ _ _ imports _ _ _ _ _) ->
343 Error.BadImports (toImportErrors env results imports problems)
343 Error.BadImports (toImportErrors env results imports problems)
344
344
345 Left err ->
345 Left err ->
346 Error.BadSyntax err
346 Error.BadSyntax err
347
347
348− SChanged local@(Details.Local path time deps _) source modul@(Src.Module _ _ imports _ _ _ _ _) ->
348+ SChanged local@(Details.Local path time deps _) source modul@(Src.Module _ _ _ imports _ _ _ _ _) ->
349 do results <- readMVar resultsMVar
349 do results <- readMVar resultsMVar
350 depsStatus <- checkDeps root results deps
350 depsStatus <- checkDeps root results deps
351 case depsStatus of
351 case depsStatus of
@@ -859,7 +859,7 @@ crawlMain env@(Env _ _ pkg _ _ _) mvar given =
859 do time <- File.getTime path
859 do time <- File.getTime path
860 source <- File.readUtf8 path
860 source <- File.readUtf8 path
861 case Parse.fromByteString pkg source of
861 case Parse.fromByteString pkg source of
862− Right modul@(Src.Module _ _ imports values _ _ _ _) ->
862+ Right modul@(Src.Module _ _ _ imports values _ _ _ _) ->
863 do let deps = map Src.getImportName imports
863 do let deps = map Src.getImportName imports
864 let local = Details.Local path time deps (any isMain values)
864 let local = Details.Local path time deps (any isMain values)
865 crawlDeps env mvar deps (SOutsideOk local source modul)
865 crawlDeps env mvar deps (SOutsideOk local source modul)
@@ -889,7 +889,7 @@ checkMain env@(Env _ root _ _ _ _) results pendingMain =
889 SOutsideErr err ->
889 SOutsideErr err ->
890 return (ROutsideErr err)
890 return (ROutsideErr err)
891
891
892− SOutsideOk local@(Details.Local path time deps _) source modul@(Src.Module _ _ imports _ _ _ _ _) ->
892+ SOutsideOk local@(Details.Local path time deps _) source modul@(Src.Module _ _ _ imports _ _ _ _ _) ->
893 do depsStatus <- checkDeps root results deps
893 do depsStatus <- checkDeps root results deps
894 case depsStatus of
894 case depsStatus of
895 DepsChange ifaces ->
895 DepsChange ifaces ->
builder/src/Elm/Details.hs+1−1
@@ -568,7 +568,7 @@ crawlFile :: Map.Map ModuleName.Raw ForeignInterface -> MVar StatusDict -> Pkg.N
568crawlFile foreignDeps mvar pkg src expectedName path =
568crawlFile foreignDeps mvar pkg src expectedName path =
569 do bytes <- File.readUtf8 path
569 do bytes <- File.readUtf8 path
570 case Parse.fromByteString pkg bytes of
570 case Parse.fromByteString pkg bytes of
571− Right modul@(Src.Module (Just (A.At _ actualName)) _ imports _ _ _ _ _) | expectedName == actualName ->
571+ Right modul@(Src.Module (Just (A.At _ actualName)) _ _ imports _ _ _ _ _) | expectedName == actualName ->
572 do deps <- crawlImports foreignDeps mvar pkg src imports
572 do deps <- crawlImports foreignDeps mvar pkg src imports
573 return (Just (SLocal deps modul))
573 return (Just (SLocal deps modul))
574
574
compiler/src/AST/Canonical.hs+2
@@ -58,6 +58,7 @@ import qualified Data.Map as Map
58import Data.Name (Name)
58import Data.Name (Name)
59import qualified Data.Utf8 as Utf8
59import qualified Data.Utf8 as Utf8
60
60
61+import qualified AST.Source as Src
61import qualified AST.Utils.Binop as Binop
62import qualified AST.Utils.Binop as Binop
62import qualified AST.Utils.Shader as Shader
63import qualified AST.Utils.Shader as Shader
63import qualified Data.Index as Index
64import qualified Data.Index as Index
@@ -231,6 +232,7 @@ data Module =
231 Module
232 Module
232 { _name :: ModuleName.Canonical
233 { _name :: ModuleName.Canonical
233 , _exports :: Exports
234 , _exports :: Exports
235+ , _docs :: Maybe Src.Docs
234 , _decls :: Decls
236 , _decls :: Decls
235 , _unions :: Map.Map Name Union
237 , _unions :: Map.Map Name Union
236 , _aliases :: Map.Map Name Alias
238 , _aliases :: Map.Map Name Alias
compiler/src/AST/Source.hs+23−4
@@ -12,10 +12,12 @@ module AST.Source
12 , Value(..)
12 , Value(..)
13 , Union(..)
13 , Union(..)
14 , Alias(..)
14 , Alias(..)
15− , Binop(..)
15+ , Infix(..)
16 , Port(..)
16 , Port(..)
17 , Effects(..)
17 , Effects(..)
18 , Manager(..)
18 , Manager(..)
19+ , Docs(..)
20+ , Comment(..)
19 , Exposing(..)
21 , Exposing(..)
20 , Exposed(..)
22 , Exposed(..)
21 , Privacy(..)
23 , Privacy(..)
@@ -25,6 +27,8 @@ module AST.Source
25
27
26import Data.Name (Name)
28import Data.Name (Name)
27import qualified Data.Utf8 as Utf8
29import qualified Data.Utf8 as Utf8
30+import Data.Word (Word8)
31+import Foreign.Ptr (Ptr)
28
32
29import qualified AST.Utils.Binop as Binop
33import qualified AST.Utils.Binop as Binop
30import qualified AST.Utils.Shader as Shader
34import qualified AST.Utils.Shader as Shader
@@ -124,17 +128,18 @@ data Module =
124 Module
128 Module
125 { _name :: Maybe (A.Located Name)
129 { _name :: Maybe (A.Located Name)
126 , _exports :: A.Located Exposing
130 , _exports :: A.Located Exposing
131+ , _docs :: Maybe Docs
127 , _imports :: [Import]
132 , _imports :: [Import]
128 , _values :: [A.Located Value]
133 , _values :: [A.Located Value]
129 , _unions :: [A.Located Union]
134 , _unions :: [A.Located Union]
130 , _aliases :: [A.Located Alias]
135 , _aliases :: [A.Located Alias]
131− , _binops :: [A.Located Binop]
136+ , _binops :: [A.Located Infix]
132 , _effects :: Effects
137 , _effects :: Effects
133 }
138 }
134
139
135
140
136getName :: Module -> Name
141getName :: Module -> Name
137−getName (Module maybeName _ _ _ _ _ _ _) =
142+getName (Module maybeName _ _ _ _ _ _ _ _) =
138 case maybeName of
143 case maybeName of
139 Just (A.At _ name) ->
144 Just (A.At _ name) ->
140 name
145 name
@@ -165,7 +170,7 @@ data Import =
165data Value = Value (A.Located Name) [Pattern] Expr (Maybe Type)
170data Value = Value (A.Located Name) [Pattern] Expr (Maybe Type)
166data Union = Union (A.Located Name) [A.Located Name] [(A.Located Name, [Type])]
171data Union = Union (A.Located Name) [A.Located Name] [(A.Located Name, [Type])]
167data Alias = Alias (A.Located Name) [A.Located Name] Type
172data Alias = Alias (A.Located Name) [A.Located Name] Type
168−data Binop = Binop Name Binop.Associativity Binop.Precedence Name
173+data Infix = Infix Name Binop.Associativity Binop.Precedence Name
169data Port = Port (A.Located Name) Type
174data Port = Port (A.Located Name) Type
170
175
171
176
@@ -181,6 +186,20 @@ data Manager
181 | Fx (A.Located Name) (A.Located Name)
186 | Fx (A.Located Name) (A.Located Name)
182
187
183
188
189+data Docs =
190+ Docs
191+ { _overview :: Comment
192+ , _comments :: [(Name, Comment)]
193+ }
194+
195+
196+data Comment =
197+ Comment
198+ { _start :: Ptr Word8
199+ , _end :: Ptr Word8
200+ }
201+
202+
184
203
185-- EXPOSING
204-- EXPOSING
186
205
compiler/src/Canonicalize/Environment/Local.hs+3−3
@@ -54,7 +54,7 @@ addVars module_ (Env.Env home vs ts cs bs qvs qts qcs) =
54
54
55
55
56collectVars :: Src.Module -> Result i w (Map.Map Name.Name Env.Var)
56collectVars :: Src.Module -> Result i w (Map.Map Name.Name Env.Var)
57−collectVars (Src.Module _ _ _ values _ _ _ effects) =
57+collectVars (Src.Module _ _ _ _ values _ _ _ effects) =
58 let
58 let
59 addDecl dict (A.At _ (Src.Value (A.At region name) _ _ _)) =
59 addDecl dict (A.At _ (Src.Value (A.At region name) _ _ _)) =
60 Dups.insert name region (Env.TopLevel region) dict
60 Dups.insert name region (Env.TopLevel region) dict
@@ -95,7 +95,7 @@ toEffectDups effects =
95
95
96
96
97addTypes :: Src.Module -> Env.Env -> Result i w Env.Env
97addTypes :: Src.Module -> Env.Env -> Result i w Env.Env
98−addTypes (Src.Module _ _ _ _ unions aliases _ _) (Env.Env home vs ts cs bs qvs qts qcs) =
98+addTypes (Src.Module _ _ _ _ _ unions aliases _ _) (Env.Env home vs ts cs bs qvs qts qcs) =
99 let
99 let
100 addAliasDups dups (A.At _ (Src.Alias (A.At region name) _ _)) = Dups.insert name region () dups
100 addAliasDups dups (A.At _ (Src.Alias (A.At region name) _ _)) = Dups.insert name region () dups
101 addUnionDups dups (A.At _ (Src.Union (A.At region name) _ _)) = Dups.insert name region () dups
101 addUnionDups dups (A.At _ (Src.Union (A.At region name) _ _)) = Dups.insert name region () dups
@@ -262,7 +262,7 @@ addFreeVars freeVars (A.At region tipe) =
262
262
263
263
264addCtors :: Src.Module -> Env.Env -> Result i w (Env.Env, Unions, Aliases)
264addCtors :: Src.Module -> Env.Env -> Result i w (Env.Env, Unions, Aliases)
265−addCtors (Src.Module _ _ _ _ unions aliases _ _) env@(Env.Env home vs ts cs bs qvs qts qcs) =
265+addCtors (Src.Module _ _ _ _ _ unions aliases _ _) env@(Env.Env home vs ts cs bs qvs qts qcs) =
266 do unionInfo <- traverse (canonicalizeUnion env) unions
266 do unionInfo <- traverse (canonicalizeUnion env) unions
267 aliasInfo <- traverse (canonicalizeAlias env) aliases
267 aliasInfo <- traverse (canonicalizeAlias env) aliases
268
268
compiler/src/Canonicalize/Module.hs+4−4
@@ -42,7 +42,7 @@ type Result i w a =
42
42
43
43
44canonicalize :: Pkg.Name -> Map.Map ModuleName.Raw I.Interface -> Src.Module -> Result i [W.Warning] Can.Module
44canonicalize :: Pkg.Name -> Map.Map ModuleName.Raw I.Interface -> Src.Module -> Result i [W.Warning] Can.Module
45−canonicalize pkg ifaces modul@(Src.Module _ exports imports values _ _ binops effects) =
45+canonicalize pkg ifaces modul@(Src.Module _ exports docs imports values _ _ binops effects) =
46 do let home = ModuleName.Canonical pkg (Src.getName modul)
46 do let home = ModuleName.Canonical pkg (Src.getName modul)
47 let cbinops = Map.fromList (map canonicalizeBinop binops)
47 let cbinops = Map.fromList (map canonicalizeBinop binops)
48
48
@@ -54,15 +54,15 @@ canonicalize pkg ifaces modul@(Src.Module _ exports imports values _ _ binops ef
54 ceffects <- Effects.canonicalize env values cunions effects
54 ceffects <- Effects.canonicalize env values cunions effects
55 cexports <- canonicalizeExports values cunions caliases cbinops ceffects exports
55 cexports <- canonicalizeExports values cunions caliases cbinops ceffects exports
56
56
57− return $ Can.Module home cexports cvalues cunions caliases cbinops ceffects
57+ return $ Can.Module home cexports docs cvalues cunions caliases cbinops ceffects
58
58
59
59
60
60
61-- CANONICALIZE BINOP
61-- CANONICALIZE BINOP
62
62
63
63
64−canonicalizeBinop :: A.Located Src.Binop -> ( Name.Name, Can.Binop )
64+canonicalizeBinop :: A.Located Src.Infix -> ( Name.Name, Can.Binop )
65−canonicalizeBinop (A.At _ (Src.Binop op associativity precedence func)) =
65+canonicalizeBinop (A.At _ (Src.Infix op associativity precedence func)) =
66 ( op, Can.Binop_ associativity precedence func )
66 ( op, Can.Binop_ associativity precedence func )
67
67
68
68
compiler/src/Elm/Interface.hs+1−1
@@ -73,7 +73,7 @@ data Binop =
73
73
74
74
75fromModule :: Pkg.Name -> Can.Module -> Map.Map Name.Name Can.Annotation -> Interface
75fromModule :: Pkg.Name -> Can.Module -> Map.Map Name.Name Can.Annotation -> Interface
76−fromModule home (Can.Module _ exports _ unions aliases binops _) annotations =
76+fromModule home (Can.Module _ exports _ _ unions aliases binops _) annotations =
77 Interface
77 Interface
78 { _home = home
78 { _home = home
79 , _values = restrict exports annotations
79 , _values = restrict exports annotations
compiler/src/Nitpick/PatternMatches.hs+1−1
@@ -204,7 +204,7 @@ data Context
204
204
205
205
206check :: Can.Module -> Either (NE.List Error) ()
206check :: Can.Module -> Either (NE.List Error) ()
207−check (Can.Module _ _ decls _ _ _ _) =
207+check (Can.Module _ _ _ decls _ _ _ _) =
208 case checkDecls decls [] of
208 case checkDecls decls [] of
209 [] ->
209 [] ->
210 Right ()
210 Right ()
compiler/src/Optimize/Module.hs+1−1
@@ -41,7 +41,7 @@ type Annotations =
41
41
42
42
43optimize :: Annotations -> Can.Module -> Result i [W.Warning] Opt.LocalGraph
43optimize :: Annotations -> Can.Module -> Result i [W.Warning] Opt.LocalGraph
44−optimize annotations (Can.Module home _ decls unions aliases _ effects) =
44+optimize annotations (Can.Module home _ _ decls unions aliases _ effects) =
45 addDecls home annotations decls $
45 addDecls home annotations decls $
46 addEffects home effects $
46 addEffects home effects $
47 addUnions home unions $
47 addUnions home unions $
compiler/src/Type/Constrain/Module.hs+1−1
@@ -23,7 +23,7 @@ import Type.Type (Type(..), Constraint(..), (==>), mkFlexVar, nameToRigid, never
23
23
24
24
25constrain :: Can.Module -> IO Constraint
25constrain :: Can.Module -> IO Constraint
26−constrain (Can.Module home _ decls _ _ _ effects) =
26+constrain (Can.Module home _ _ decls _ _ _ effects) =
27 case effects of
27 case effects of
28 Can.NoEffects ->
28 Can.NoEffects ->
29 constrainDecls decls CSaveTheEnvironment
29 constrainDecls decls CSaveTheEnvironment