module Language.JS.Common where
import qualified Text.Parsec as P
parens, braces, angles, brackets :: P.Stream s m Char =>
P.ParsecT s u m a -> P.ParsecT s u m a
parens = P.between (P.string "(") (P.string ")")
braces = P.between (P.string "{") (P.string "}")
angles = P.between (P.string "<") (P.string ">")
brackets = P.between (P.string "[") (P.string "]")
semi, comma, dot, colon :: P.Stream s m Char => P.ParsecT s u m String
semi = P.string ";"
comma = P.string ","
dot = P.string "."
colon = P.string ":"
dotSep, commaSep, semiSep :: P.Stream s m Char => P.ParsecT s u m a -> P.ParsecT s u m [a]
dotSep p = P.sepBy1 p dot
commaSep p = P.sepBy p comma
semiSep p = P.sepBy p semi
commaSep1, semiSep1 :: P.Stream s m Char => P.ParsecT s u m a -> P.ParsecT s u m [a]
commaSep1 p = P.sepBy1 p comma
semiSep1 p = P.sepBy1 p semi
whiteSpace :: P.Stream s m Char => P.ParsecT s u m Char
whiteSpace = P.oneOf " \n\t"
whiteSpaces :: P.Stream s m Char => P.ParsecT s u m String
whiteSpaces = P.many whiteSpace
betweenSpaces :: P.Stream s m Char => P.ParsecT s u m a -> P.ParsecT s u m a
betweenSpaces p = whiteSpaces *> p <* whiteSpaces
lexeme :: P.Stream s m Char => P.ParsecT s u m a -> P.ParsecT s u m a
lexeme p = p <* whiteSpaces
keywordB :: P.Stream s m Char => String -> P.ParsecT s u m String
keywordB = P.try . lexeme . P.string
reservedWords :: [String]
reservedWords = ["async", "await", "yield", "delete", "void", "typeof",
"instanceof", "new", "debugger",
"var", "let", "const",
"switch", "case", "break", "default",
"try", "catch", "finally",
"for", "while", "do", "in", "of", "continue",
"if", "else",
"with",
"function", "return",
"class", "extends", "static", "get", "set", "super",
"import", "from", "export", "as"
]