on master help sign in
Track location where docs SHOULD be
commit42e08849d62db7faf7f9193b510b6e93d8c26817 authorEvan Czaplicki <evancz@users.noreply.github.com> dateThu 1 Feb 2018, 23:20 (9 years ago) parent6b9a7ed
7 files changed+44−32
src/AST/Canonical.hs+9−6 src/AST/Source.hs+7−1 src/AST/Valid.hs+7−3 src/Canonicalize/Module.hs+5−5 src/Elm/Docs.hs+4−4 src/Parse/Module.hs+9−10 src/Reporting/Error/Docs.hs+3−3
src/AST/Canonical.hs+9−6
@@ -201,7 +201,7 @@ data AliasType
201201data Module =
202202 Module
203203 { _name :: ModuleName.Canonical
204− , _docs :: Maybe (A.Located Docs)
204+ , _docs :: Docs
205205 , _exports :: Exports
206206 , _decls :: Decls
207207 , _unions :: Map.Map N.Name Union
@@ -239,11 +239,14 @@ data Ctor =
239239-- DOCS
240240
241241
242−data Docs =
243− Docs
244− { _overview :: B.ByteString
245− , _comments :: Map.Map N.Name Text
246− }
242+data Docs
243+ = NoDocs R.Position R.Position
244+ | YesDocs
245+ { _start :: R.Position
246+ , _end :: R.Position
247+ , _overview :: B.ByteString
248+ , _comments :: Map.Map N.Name Text
249+ }
247250
248251
249252
src/AST/Source.hs+7−1
@@ -7,6 +7,7 @@ module AST.Source
77 , Type, Type_(..)
88 , Module(..)
99 , Header(..)
10+ , Docs(..)
1011 , Import(..)
1112 , Effects(..)
1213 , Manager(..)
@@ -143,7 +144,7 @@ data Header
143144 { _name :: N.Name
144145 , _effects :: Effects
145146 , _exports :: Exposing
146− , _docs :: Maybe (A.Located B.ByteString)
147+ , _docs :: Docs
147148 }
148149
149150
@@ -155,6 +156,11 @@ data Import =
155156 }
156157
157158
159+data Docs
160+ = NoDocs R.Position R.Position
161+ | YesDocs R.Position R.Position B.ByteString
162+
163+
158164data Effects
159165 = NoEffects
160166 | Ports R.Region
src/AST/Valid.hs+7−3
@@ -16,7 +16,6 @@ module AST.Valid
1616 where
1717
1818
19−import qualified Data.ByteString as B
2019import qualified Data.Map as Map
2120import Data.Text (Text)
2221
@@ -76,7 +75,7 @@ data Def
7675data Module =
7776 Module
7877 { _name :: N.Name
79− , _overview :: Maybe (A.Located B.ByteString)
78+ , _overview :: Src.Docs
8079 , _docs :: Map.Map N.Name Text
8180 , _exports :: Src.Exposing
8281 , _imports :: [Src.Import]
@@ -113,7 +112,7 @@ defaultModule :: Map.Map N.Name Text -> [Src.Import] -> [A.Located Decl] -> [Uni
113112defaultModule docs imports decls unions aliases binop =
114113 Module
115114 { _name = "Main"
116− , _overview = Nothing
115+ , _overview = Src.NoDocs zero zero
117116 , _docs = docs
118117 , _exports = Src.Open
119118 , _imports = imports
@@ -123,3 +122,8 @@ defaultModule docs imports decls unions aliases binop =
123122 , _binop = binop
124123 , _effects = NoEffects
125124 }
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
6868-- DOCUMENTATION
6969
7070
71−toDocs :: Valid.Module -> Maybe (A.Located Can.Docs)
71+toDocs :: Valid.Module -> Can.Docs
7272toDocs (Valid.Module _ docs comments _ _ _ _ _ _ _) =
7373 case docs of
74− Nothing ->
75− Nothing
74+ Src.NoDocs start end ->
75+ Can.NoDocs start end
7676
77− Just (A.At region overview) ->
78− Just (A.At region (Can.Docs overview comments))
77+ Src.YesDocs start end overview ->
78+ Can.YesDocs start end overview comments
7979
8080
8181
src/Elm/Docs.hs+4−4
@@ -294,11 +294,11 @@ fromModule (Can.Module name docs exports decls unions aliases binops effects) =
294294
295295 Can.Export exportDict ->
296296 case docs of
297− Nothing ->
298− Result.throw $ Error.Docs $ E.NoDocs
297+ Can.NoDocs start end ->
298+ Result.throw $ Error.Docs $ E.NoDocs $ R.Region start end
299299
300− Just (A.At region (Can.Docs overview comments)) ->
301− do names <- parseOverview region overview
300+ Can.YesDocs start end overview comments ->
301+ do names <- parseOverview (R.Region start end) overview
302302 Result.mapError Error.Docs $
303303 do checkNames exportDict names
304304 let types = gatherTypes decls Map.empty
src/Parse/Module.hs+9−10
@@ -8,8 +8,6 @@ module Parse.Module
88 where
99
1010
11−import qualified Data.ByteString as B
12−
1311import qualified AST.Source as Src
1412import qualified Elm.Compiler.Imports as Imports
1513import qualified Elm.Name as N
@@ -47,7 +45,7 @@ chompHeader =
4745 P.spaces
4846 exports <- exposing
4947 P.popContext ()
50− docs <- maybeDocComment
48+ docs <- chompDocComment
5149 return (Src.Header name effects exports docs)
5250
5351
@@ -158,16 +156,17 @@ chompSubscription =
158156-- DOC COMMENTS
159157
160158
161−maybeDocComment :: Parser (Maybe (A.Located B.ByteString))
162−maybeDocComment =
163− do freshLine
164− newStart <- P.getPosition
159+chompDocComment :: Parser Src.Docs
160+chompDocComment =
161+ do endOfExposing <- P.getPosition
162+ freshLine
163+ nextStart <- P.getPosition
165164 oneOf
166165 [ do doc <- W.docComment
167− end <- P.getPosition
166+ docEnd <- P.getPosition
168167 freshLine
169− return (Just (A.at newStart end doc))
170− , return Nothing
168+ return (Src.YesDocs nextStart docEnd doc)
169+ , return (Src.NoDocs endOfExposing nextStart)
171170 ]
172171
173172
src/Reporting/Error/Docs.hs+3−3
@@ -17,7 +17,7 @@ import qualified Reporting.Report as Report
1717
1818
1919data Error
20− = NoDocs
20+ = NoDocs R.Region
2121 | ImplicitExposing
2222 | Duplicate N.Name R.Region R.Region
2323 | OnlyInDocs N.Name R.Region
@@ -33,8 +33,8 @@ data Error
3333toReport :: Code.Source -> Error -> Report.Report
3434toReport source err =
3535 case err of
36− NoDocs ->
37− Report.Report "NO DOCS" (error "TODO") [] $
36+ NoDocs region ->
37+ Report.Report "NO DOCS" region [] $
3838 H.stack
3939 [
4040 H.reflow $