@@ -1,17 +1,19 @@
11{-# LANGUAGE OverloadedStrings #-}
22module Elm.Docs where
33
4−import Control.Applicative ((<$>),(<*>))
4+import Control.Applicative ((<$>),(<*>),(<|>))
55import Control.Monad
66import Data.Aeson ((.:), (.:?), (.=))
77import qualified Data.Aeson as Json
88import qualified Data.Aeson.Encode.Pretty as Json
99import qualified Data.ByteString.Lazy.Char8 as BS
1010import qualified Data.Map as Map
11+import qualified Data.Text as Text
1112
1213import qualified Docs.AST as Docs
1314import qualified Elm.Compiler.Module as Module
1415import qualified Elm.Compiler.Type as Type
16+import qualified Elm.Compiler.Version as Version
1517import qualified Reporting.Annotation as A
1618
1719
@@ -21,6 +23,7 @@ data Documentation = Documentation
2123 , aliases :: [Alias]
2224 , types :: [Union]
2325 , values :: [Value]
26+ , version :: Version
2427 }
2528
2629
@@ -48,6 +51,9 @@ data Value = Value
4851 }
4952
5053
54+data Version = NonCanonicalTypes | Version String
55+
56+
5157-- FROM CHECKED DOCS
5258
5359fromCheckedDocs :: Module.Name -> Docs.Checked -> Documentation
@@ -69,6 +75,7 @@ fromCheckedDocs name (Docs.Docs comment aliases unions values) =
6975 (map toAlias (Map.toList aliases))
7076 (map toUnion (Map.toList unions))
7177 (map toValue (Map.toList values))
78+ (Version Version.version)
7279
7380
7481-- PRETTY JSON
@@ -94,13 +101,14 @@ config =
94101-- JSON for DOCUMENTATION
95102
96103instance Json.ToJSON Documentation where
97− toJSON (Documentation name comment aliases types values) =
104+ toJSON (Documentation name comment aliases types values version) =
98105 Json.object
99106 [ "name" .= name
100107 , "comment" .= comment
101108 , "aliases" .= aliases
102109 , "types" .= types
103110 , "values" .= values
111+ , "generated-with-elm-version" .= version
104112 ]
105113
106114
@@ -112,11 +120,34 @@ instance Json.FromJSON Documentation where
112120 <*> obj .: "aliases"
113121 <*> obj .: "types"
114122 <*> obj .: "values"
123+ <*> ((obj .: "generated-with-elm-version") <|> return NonCanonicalTypes)
115124
116125 parseJSON value =
117126 fail $ "Cannot decode Documentation from: " ++ BS.unpack (Json.encode value)
118127
119128
129+-- JSON for VERSION
130+
131+instance Json.ToJSON Version where
132+ toJSON version =
133+ case version of
134+ NonCanonicalTypes ->
135+ Json.String "old"
136+
137+ Version vsn ->
138+ Json.String (Text.pack vsn)
139+
140+
141+instance Json.FromJSON Version where
142+ parseJSON (Json.String text) =
143+ case Text.unpack text of
144+ "old" -> return NonCanonicalTypes
145+ vrsn -> return (Version vrsn)
146+
147+ parseJSON value =
148+ fail $ "Cannot decode version of documentation from: " ++ BS.unpack (Json.encode value)
149+
150+
120151-- JSON for ALIAS
121152
122153instance Json.ToJSON Alias where