on master help sign in
Track location where docs SHOULD be
42e0884Evan Czaplicki
src/AST/Canonical.hs+9−6
@@ -201,7 +201,7 @@ data AliasType
201data Module =
201data Module =
202 Module
202 Module
203 { _name :: ModuleName.Canonical
203 { _name :: ModuleName.Canonical
204− , _docs :: Maybe (A.Located Docs)
204+ , _docs :: Docs
205 , _exports :: Exports
205 , _exports :: Exports
206 , _decls :: Decls
206 , _decls :: Decls
207 , _unions :: Map.Map N.Name Union
207 , _unions :: Map.Map N.Name Union
@@ -239,11 +239,14 @@ data Ctor =
239-- DOCS
239-- DOCS
240
240
241
241
242−data Docs =
242+data Docs
243− Docs
243+ = NoDocs R.Position R.Position
244+ | YesDocs
245+ { _start :: R.Position
246+ , _end :: R.Position
244− { _overview :: B.ByteString
247+ , _overview :: B.ByteString
245− , _comments :: Map.Map N.Name Text
248+ , _comments :: Map.Map N.Name Text
246− }
249+ }
247
250
248
251
249
252
src/AST/Source.hs+7−1
@@ -7,6 +7,7 @@ module AST.Source
7 , Type, Type_(..)
7 , Type, Type_(..)
8 , Module(..)
8 , Module(..)
9 , Header(..)
9 , Header(..)
10+ , Docs(..)
10 , Import(..)
11 , Import(..)
11 , Effects(..)
12 , Effects(..)
12 , Manager(..)
13 , Manager(..)
@@ -143,7 +144,7 @@ data Header
143 { _name :: N.Name
144 { _name :: N.Name
144 , _effects :: Effects
145 , _effects :: Effects
145 , _exports :: Exposing
146 , _exports :: Exposing
146− , _docs :: Maybe (A.Located B.ByteString)
147+ , _docs :: Docs
147 }
148 }
148
149
149
150
@@ -155,6 +156,11 @@ data Import =
155 }
156 }
156
157
157
158
159+data Docs
160+ = NoDocs R.Position R.Position
161+ | YesDocs R.Position R.Position B.ByteString
162+
163+
158data Effects
164data Effects
159 = NoEffects
165 = NoEffects
160 | Ports R.Region
166 | Ports R.Region
src/AST/Valid.hs+7−3
@@ -16,7 +16,6 @@ module AST.Valid
16 where
16 where
17
17
18
18
19−import qualified Data.ByteString as B
20import qualified Data.Map as Map
19import qualified Data.Map as Map
21import Data.Text (Text)
20import Data.Text (Text)
22
21
@@ -76,7 +75,7 @@ data Def
76data Module =
75data Module =
77 Module
76 Module
78 { _name :: N.Name
77 { _name :: N.Name
79− , _overview :: Maybe (A.Located B.ByteString)
78+ , _overview :: Src.Docs
80 , _docs :: Map.Map N.Name Text
79 , _docs :: Map.Map N.Name Text
81 , _exports :: Src.Exposing
80 , _exports :: Src.Exposing
82 , _imports :: [Src.Import]
81 , _imports :: [Src.Import]
@@ -113,7 +112,7 @@ defaultModule :: Map.Map N.Name Text -> [Src.Import] -> [A.Located Decl] -> [Uni
113defaultModule docs imports decls unions aliases binop =
112defaultModule docs imports decls unions aliases binop =
114 Module
113 Module
115 { _name = "Main"
114 { _name = "Main"
116− , _overview = Nothing
115+ , _overview = Src.NoDocs zero zero
117 , _docs = docs
116 , _docs = docs
118 , _exports = Src.Open
117 , _exports = Src.Open
119 , _imports = imports
118 , _imports = imports
@@ -123,3 +122,8 @@ defaultModule docs imports decls unions aliases binop =
123 , _binop = binop
122 , _binop = binop
124 , _effects = NoEffects
123 , _effects = NoEffects
125 }
124 }
125+
126+
127+zero :: R.Position
128+zero =
129+ R.Position 1 1
src/Canonicalize/Module.hs+5−5
@@ -68,14 +68,14 @@ canonicalize pkg importDict interfaces module_@(Valid.Module name _ _ exports im
68-- DOCUMENTATION
68-- DOCUMENTATION
69
69
70
70
71−toDocs :: Valid.Module -> Maybe (A.Located Can.Docs)
71+toDocs :: Valid.Module -> Can.Docs
72toDocs (Valid.Module _ docs comments _ _ _ _ _ _ _) =
72toDocs (Valid.Module _ docs comments _ _ _ _ _ _ _) =
73 case docs of
73 case docs of
74− Nothing ->
74+ Src.NoDocs start end ->
75− Nothing
75+ Can.NoDocs start end
76
76
77− Just (A.At region overview) ->
77+ Src.YesDocs start end overview ->
78− Just (A.At region (Can.Docs overview comments))
78+ Can.YesDocs start end overview comments
79
79
80
80
81
81
src/Elm/Docs.hs+4−4
@@ -294,11 +294,11 @@ fromModule (Can.Module name docs exports decls unions aliases binops effects) =
294
294
295 Can.Export exportDict ->
295 Can.Export exportDict ->
296 case docs of
296 case docs of
297− Nothing ->
297+ Can.NoDocs start end ->
298− Result.throw $ Error.Docs $ E.NoDocs
298+ Result.throw $ Error.Docs $ E.NoDocs $ R.Region start end
299
299
300− Just (A.At region (Can.Docs overview comments)) ->
300+ Can.YesDocs start end overview comments ->
301− do names <- parseOverview region overview
301+ do names <- parseOverview (R.Region start end) overview
302 Result.mapError Error.Docs $
302 Result.mapError Error.Docs $
303 do checkNames exportDict names
303 do checkNames exportDict names
304 let types = gatherTypes decls Map.empty
304 let types = gatherTypes decls Map.empty
src/Parse/Module.hs+9−10
@@ -8,8 +8,6 @@ module Parse.Module
8 where
8 where
9
9
10
10
11−import qualified Data.ByteString as B
12−
13import qualified AST.Source as Src
11import qualified AST.Source as Src
14import qualified Elm.Compiler.Imports as Imports
12import qualified Elm.Compiler.Imports as Imports
15import qualified Elm.Name as N
13import qualified Elm.Name as N
@@ -47,7 +45,7 @@ chompHeader =
47 P.spaces
45 P.spaces
48 exports <- exposing
46 exports <- exposing
49 P.popContext ()
47 P.popContext ()
50− docs <- maybeDocComment
48+ docs <- chompDocComment
51 return (Src.Header name effects exports docs)
49 return (Src.Header name effects exports docs)
52
50
53
51
@@ -158,16 +156,17 @@ chompSubscription =
158-- DOC COMMENTS
156-- DOC COMMENTS
159
157
160
158
161−maybeDocComment :: Parser (Maybe (A.Located B.ByteString))
159+chompDocComment :: Parser Src.Docs
162−maybeDocComment =
160+chompDocComment =
161+ do endOfExposing <- P.getPosition
163− do freshLine
162+ freshLine
164− newStart <- P.getPosition
163+ nextStart <- P.getPosition
165 oneOf
164 oneOf
166 [ do doc <- W.docComment
165 [ do doc <- W.docComment
167− end <- P.getPosition
166+ docEnd <- P.getPosition
168 freshLine
167 freshLine
169− return (Just (A.at newStart end doc))
168+ return (Src.YesDocs nextStart docEnd doc)
170− , return Nothing
169+ , return (Src.NoDocs endOfExposing nextStart)
171 ]
170 ]
172
171
173
172
src/Reporting/Error/Docs.hs+3−3
@@ -17,7 +17,7 @@ import qualified Reporting.Report as Report
17
17
18
18
19data Error
19data Error
20− = NoDocs
20+ = NoDocs R.Region
21 | ImplicitExposing
21 | ImplicitExposing
22 | Duplicate N.Name R.Region R.Region
22 | Duplicate N.Name R.Region R.Region
23 | OnlyInDocs N.Name R.Region
23 | OnlyInDocs N.Name R.Region
@@ -33,8 +33,8 @@ data Error
33toReport :: Code.Source -> Error -> Report.Report
33toReport :: Code.Source -> Error -> Report.Report
34toReport source err =
34toReport source err =
35 case err of
35 case err of
36− NoDocs ->
36+ NoDocs region ->
37− Report.Report "NO DOCS" (error "TODO") [] $
37+ Report.Report "NO DOCS" region [] $
38 H.stack
38 H.stack
39 [
39 [
40 H.reflow $
40 H.reflow $