1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Generate.JavaScript.Variable
16import qualified Control.Monad.State.Strict as State
17import Data.Monoid ((<>))
18import qualified Data.Set as Set
19import qualified Data.Text as Text
20import Data.Text (Text)
22import qualified AST.Helpers as Help
23import qualified AST.Module.Name as ModuleName
24import qualified AST.Variable as Var
25import qualified Elm.Package as Pkg
26import qualified Generate.JavaScript.Builder as JS
27import qualified Generate.JavaScript.Helpers as JS
34type Generator = State.State Int
37run :: Generator a -> a
39 State.evalState generator 0
46fresh :: Generator Text
50 return ("_v" <> Text.pack (show uid))
57local :: Text -> JS.Expr
64 if Set.member name reservedWords then
70reservedWords :: Set.Set Text
73 -- reserved by JavaScript
74 [ "null", "undefined", "Nan", "Infinity", "true", "false", "eval"
75 , "arguments", "int", "byte", "char", "goto", "long", "final", "float"
76 , "short", "double", "native", "throws", "boolean", "abstract", "volatile"
77 , "transient", "synchronized", "function", "break", "case", "catch"
78 , "continue", "debugger", "default", "delete", "do", "else", "finally"
79 , "for", "function", "if", "in", "instanceof", "new", "return", "switch"
80 , "this", "throw", "try", "typeof", "var", "void", "while", "with", "class"
81 , "const", "enum", "export", "extends", "import", "super", "implements"
82 , "interface", "let", "package", "private", "protected", "public"
85 , "F2", "F3", "F4", "F5", "F6", "F7", "F8", "F9"
86 , "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9"
95global :: Var.Global -> Generator JS.Expr
97 JS.ref <$> globalName var
100globalName :: Var.Global -> Generator Text
101globalName (Var.Global home name) =
102 return (globalToName home name)
105globalToName :: ModuleName.Canonical -> Text -> Text
106globalToName (ModuleName.Canonical (Pkg.Name user project) moduleName) name =
107 if ModuleName.isKernel moduleName then
108 "_" <> ModuleName.getKernel moduleName <> "_" <> name
113 if Help.isOp name then
114 "_op_" <> Help.desymbol name
118 Text.replace "-" "_" user
119 <> "$" <> Text.replace "-" "_" project
120 <> "$" <> Text.replace "." "_" moduleName
121 <> "$" <> revisedName
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list