on 6c19c6e help sign in
63 lines 1.4 kB history raw
1module Generate.Mode
2 ( Mode(..)
3 , isDebug
4 , ShortFieldNames
5 , shortenFieldNames
6 )
7 where
10import qualified Data.List as List
11import qualified Data.Map as Map
12import qualified Data.Maybe as Maybe
13import qualified Data.Name as Name
15import qualified AST.Optimized as Opt
16import qualified Elm.Compiler.Type.Extract as Extract
17import qualified Generate.JavaScript.Name as JsName
21-- MODE
24data Mode
25 = Dev (Maybe Extract.Types)
26 | Prod ShortFieldNames
29isDebug :: Mode -> Bool
30isDebug mode =
31 case mode of
32 Dev mi -> Maybe.isJust mi
33 Prod _ -> False
37-- SHORTEN FIELD NAMES
40type ShortFieldNames =
41 Map.Map Name.Name JsName.Name
44shortenFieldNames :: Opt.GlobalGraph -> ShortFieldNames
45shortenFieldNames (Opt.GlobalGraph _ frequencies) =
46 Map.foldr addToShortNames Map.empty $
47 Map.foldrWithKey addToBuckets Map.empty frequencies
50addToBuckets :: Name.Name -> Int -> Map.Map Int [Name.Name] -> Map.Map Int [Name.Name]
51addToBuckets field frequency buckets =
52 Map.insertWith (++) frequency [field] buckets
55addToShortNames :: [Name.Name] -> ShortFieldNames -> ShortFieldNames
56addToShortNames fields shortNames =
57 List.foldl' addField shortNames fields
60addField :: ShortFieldNames -> Name.Name -> ShortFieldNames
61addField shortNames field =
62 let rename = JsName.fromInt (Map.size shortNames) in
63 Map.insert field rename shortNames