on f4401ac help sign in
64 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 -- TODO try using an IntMap for buckets
53 Map.insertWith (++) frequency [field] buckets
56addToShortNames :: [Name.Name] -> ShortFieldNames -> ShortFieldNames
57addToShortNames fields shortNames =
58 List.foldl' addField shortNames fields
61addField :: ShortFieldNames -> Name.Name -> ShortFieldNames
62addField shortNames field =
63 let rename = JsName.fromInt (Map.size shortNames) in
64 Map.insert field rename shortNames