on master help sign in
Hide Elm.Name implementation in more places
dc356dfEvan Czaplicki
src/AST/Module/Name.hs+3−15
@@ -8,7 +8,6 @@ module AST.Module.Name
8 , virtualDom, debug, bitwise
8 , virtualDom, debug, bitwise
9 , jsonDecode, jsonEncode
9 , jsonDecode, jsonEncode
10 , webgl, vector2, vector3, vector4, matrix4
10 , webgl, vector2, vector3, vector4, matrix4
11− , canonicalToText
12 , isKernel, getKernel, canonicalIsKernel
11 , isKernel, getKernel, canonicalIsKernel
13 )
12 )
14 where
13 where
@@ -17,8 +16,6 @@ module AST.Module.Name
17import Prelude hiding (maybe)
16import Prelude hiding (maybe)
18import Control.Monad (liftM2)
17import Control.Monad (liftM2)
19import Data.Binary
18import Data.Binary
20−import qualified Data.Text as Text
21−import Data.Text (Text)
22
19
23import qualified Elm.Name as N
20import qualified Elm.Name as N
24import qualified Elm.Package as Pkg
21import qualified Elm.Package as Pkg
@@ -161,26 +158,17 @@ matrix4 = Canonical Pkg.linearAlgebra "Math.Matrix4"
161
158
162
159
163
160
164−-- CONVERSIONS
165−
166−
167−canonicalToText :: Canonical -> Text
168−canonicalToText (Canonical _ name) =
169− name
170−
171−
172−
173-- IS KERNEL
161-- IS KERNEL
174
162
175
163
176isKernel :: N.Name -> Bool
164isKernel :: N.Name -> Bool
177isKernel name =
165isKernel name =
178− Text.isPrefixOf "Elm.Kernel." name
166+ N.startsWith "Elm.Kernel." name
179
167
180
168
181−getKernel :: N.Name -> Text
169+getKernel :: N.Name -> N.Name
182getKernel name =
170getKernel name =
183− Text.drop 11 name
171+ N.drop 11 name
184
172
185
173
186canonicalIsKernel :: Canonical -> Bool
174canonicalIsKernel :: Canonical -> Bool
src/Elm/Name.hs+22−5
@@ -4,10 +4,12 @@ module Elm.Name
4 ( Name
4 ( Name
5 , length
5 , length
6 , startsWith
6 , startsWith
7+ , drop
7 , toString
8 , toString
8 , toBuilder
9 , toBuilder
9 , toShort
10 , toShort
10 , addIndex
11 , addIndex
12+ , addSafeIndex
11 , toCompositeName
13 , toCompositeName
12 , fromForeignPtr
14 , fromForeignPtr
13 , int, float, bool, char, string
15 , int, float, bool, char, string
@@ -20,10 +22,11 @@ module Elm.Name
20 where
22 where
21
23
22
24
23−import Prelude hiding (length, maybe, negate)
25+import Prelude hiding (drop, length, maybe, negate)
24import qualified Data.ByteString.Builder as B
26import qualified Data.ByteString.Builder as B
25import qualified Data.ByteString.Internal as B
27import qualified Data.ByteString.Internal as B
26import qualified Data.ByteString.Short as S
28import qualified Data.ByteString.Short as S
29+import qualified Data.Char as Char
27import qualified Data.Set as Set
30import qualified Data.Set as Set
28import qualified Data.Text as Text
31import qualified Data.Text as Text
29import qualified Data.Text.Encoding as Text
32import qualified Data.Text.Encoding as Text
@@ -48,6 +51,11 @@ startsWith =
48 Text.isPrefixOf
51 Text.isPrefixOf
49
52
50
53
54+drop :: Int -> Name -> Name
55+drop =
56+ Text.drop
57+
58+
51toString :: Name -> String
59toString :: Name -> String
52toString =
60toString =
53 Text.unpack
61 Text.unpack
@@ -59,13 +67,22 @@ toBuilder =
59
67
60
68
61toShort :: Name -> S.ShortByteString
69toShort :: Name -> S.ShortByteString
62−toShort =
70+toShort name =
63− error "TODO"
71+ error "TODO" name
64
72
65
73
66addIndex :: Name -> Int -> Name
74addIndex :: Name -> Int -> Name
67−addIndex name i =
75+addIndex name index =
68− Text.append name (Text.pack (show i))
76+ Text.append name (Text.pack (show index))
77+
78+
79+addSafeIndex :: Name -> Int -> Name
80+addSafeIndex name index =
81+ Text.append name $ Text.pack $
82+ if Char.isDigit (Text.last name) then
83+ '_' : show index
84+ else
85+ show index
69
86
70
87
71toCompositeName :: Set.Set Name -> Name
88toCompositeName :: Set.Set Name -> Name
src/Type/Type.hs+7−11
@@ -32,9 +32,7 @@ import qualified Control.Monad.State.Strict as State
32import qualified Data.Char as Char
32import qualified Data.Char as Char
33import Data.Foldable (foldrM)
33import Data.Foldable (foldrM)
34import qualified Data.Map.Strict as Map
34import qualified Data.Map.Strict as Map
35−import Data.Monoid ((<>))
36import qualified Data.Text as Text
35import qualified Data.Text as Text
37−import Data.Text (Text)
38import Data.Word (Word32)
36import Data.Word (Word32)
39
37
40import qualified AST.Canonical as Can
38import qualified AST.Canonical as Can
@@ -93,7 +91,7 @@ data Content
93 | RigidSuper SuperType N.Name
91 | RigidSuper SuperType N.Name
94 | Structure FlatType
92 | Structure FlatType
95 | Alias ModuleName.Canonical N.Name [(N.Name,Variable)] Variable
93 | Alias ModuleName.Canonical N.Name [(N.Name,Variable)] Variable
96− | Error Text
94+ | Error N.Name
97
95
98
96
99data SuperType
97data SuperType
@@ -287,16 +285,16 @@ nameToRigid name =
287
285
288toSuper :: N.Name -> Maybe SuperType
286toSuper :: N.Name -> Maybe SuperType
289toSuper name =
287toSuper name =
290− if Text.isPrefixOf "number" name then
288+ if N.startsWith "number" name then
291 Just Number
289 Just Number
292
290
293− else if Text.isPrefixOf "comparable" name then
291+ else if N.startsWith "comparable" name then
294 Just Comparable
292 Just Comparable
295
293
296− else if Text.isPrefixOf "appendable" name then
294+ else if N.startsWith "appendable" name then
297 Just Appendable
295 Just Appendable
298
296
299− else if Text.isPrefixOf "compappend" name then
297+ else if N.startsWith "compappend" name then
300 Just CompAppend
298 Just CompAppend
301
299
302 else
300 else
@@ -502,7 +500,7 @@ getFreshSuperHelp :: N.Name -> Int -> TakenNames -> (N.Name, Int)
502getFreshSuperHelp name index taken =
500getFreshSuperHelp name index taken =
503 let
501 let
504 newName =
502 newName =
505− if index <= 0 then name else name <> Text.pack (show index)
503+ if index <= 0 then name else N.addIndex name index
506 in
504 in
507 if Map.member newName taken then
505 if Map.member newName taken then
508 getFreshSuperHelp name (index + 1) taken
506 getFreshSuperHelp name (index + 1) taken
@@ -586,10 +584,8 @@ addName index givenName var makeContent takenNames =
586 indexedName =
584 indexedName =
587 if index <= 0 then
585 if index <= 0 then
588 givenName
586 givenName
589− else if Char.isDigit (Text.last givenName) then
590− givenName <> Text.pack ('_' : show index)
591 else
587 else
592− givenName <> Text.pack (show index)
588+ N.addSafeIndex givenName index
593 in
589 in
594 case Map.lookup indexedName takenNames of
590 case Map.lookup indexedName takenNames of
595 Nothing ->
591 Nothing ->