-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Parser for JavaScript
--
-- Parses Javascript into an Abstract Syntax Tree (AST). Initially
-- intended as frontend to hjsmin.
--
-- Note: Version 0.5.0 breaks compatibility with prior versions, the AST
-- has been reworked to allow round trip processing of JavaScript.
@package language-javascript
@version 0.5.8
module Language.JavaScript.Parser.SrcLocation
-- | TokenPosn records the location of a token in the input text. It
-- has three fields: the address (number of characters preceding the
-- token), line number and column of a token within the file. Note: The
-- lexer assumes the usual eight character tab stops.
data TokenPosn
TokenPn :: !Int -> !Int -> !Int -> TokenPosn
tokenPosnEmpty :: TokenPosn
instance Typeable TokenPosn
instance Eq TokenPosn
instance Show TokenPosn
instance Read TokenPosn
instance Data TokenPosn
module Language.JavaScript.Parser.Lexer
-- | Lexical tokens. Each may be annotated with any comment occuring
-- between the prior token and this one
data Token
-- | Single line comment.
CommentToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
-- | White space, for preservation.
WsToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
-- | Identifier.
IdentifierToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
-- | Literal: Decimal
DecimalToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
-- | Literal: Hexadecimal Integer
HexIntegerToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
-- | Literal: Octal Integer
OctalToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
-- | Literal: string, delimited by either single or double quotes
StringToken :: !TokenPosn -> !String -> !Char -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_delimiter :: Token -> !Char
token_comment :: Token -> ![CommentAnnotation]
-- | Literal: Regular Expression
RegExToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
BreakToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
CaseToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
CatchToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
ConstToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
ContinueToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
DebuggerToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
DefaultToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
DeleteToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
DoToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
ElseToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
EnumToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
FalseToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
FinallyToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
ForToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
FunctionToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
IfToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
InToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
InstanceofToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
NewToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
NullToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
ReturnToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
SwitchToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
ThisToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
ThrowToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
TrueToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
TryToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
TypeofToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
VarToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
VoidToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
WhileToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
WithToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
FutureToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
GetToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
SetToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
SemiColonToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
CommaToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
HookToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
ColonToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
OrToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
AndToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
BitwiseOrToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
BitwiseXorToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
BitwiseAndToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
StrictEqToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
EqToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
AssignToken :: !TokenPosn -> !String -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_literal :: Token -> !String
token_comment :: Token -> ![CommentAnnotation]
SimpleAssignToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
StrictNeToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
NeToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
LshToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
LeToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
LtToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
UrshToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
RshToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
GeToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
GtToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
IncrementToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
DecrementToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
PlusToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
MinusToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
MulToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
DivToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
ModToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
NotToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
BitwiseNotToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
DotToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
LeftBracketToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
RightBracketToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
LeftCurlyToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
RightCurlyToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
LeftParenToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
RightParenToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
CondcommentEndToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
-- | Stuff between last JS and EOF
TailToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
-- | End of file
EOFToken :: !TokenPosn -> ![CommentAnnotation] -> Token
token_span :: Token -> !TokenPosn
token_comment :: Token -> ![CommentAnnotation]
data AlexPosn
AlexPn :: !Int -> !Int -> !Int -> AlexPosn
data Alex a
lexCont :: (Token -> Alex b) -> Alex b
alexError :: String -> Alex a
runAlex :: String -> Alex a -> Either String a
instance Eq AlexPosn
instance Show AlexPosn
instance Functor AlexLastAcc
instance Monad Alex
module Language.JavaScript.Parser.AST
data Node
-- | Terminals
JSIdentifier :: String -> Node
JSDecimal :: String -> Node
JSLiteral :: String -> Node
JSHexInteger :: String -> Node
JSOctal :: String -> Node
JSStringLiteral :: Char -> [Char] -> Node
JSRegEx :: String -> Node
-- | lb, args, rb
JSArguments :: JSNode -> [JSNode] -> JSNode -> Node
-- | lb, contents, rb
JSArrayLiteral :: JSNode -> [JSNode] -> JSNode -> Node
-- | optional lb,optional block statements,optional rb
JSBlock :: [JSNode] -> [JSNode] -> [JSNode] -> Node
-- | break, optional identifier, autosemi
JSBreak :: JSNode -> [JSNode] -> JSNode -> Node
-- | type : ., (), []; opening [ or ., contents, closing
JSCallExpression :: String -> [JSNode] -> [JSNode] -> [JSNode] -> Node
-- | case,expr,colon,stmtlist
JSCase :: JSNode -> JSNode -> JSNode -> [JSNode] -> Node
-- | catch,lb,ident,[if,expr],rb,block
JSCatch :: JSNode -> JSNode -> JSNode -> [JSNode] -> JSNode -> JSNode -> Node
-- | continue,optional identifier,autosemi
JSContinue :: JSNode -> [JSNode] -> JSNode -> Node
-- | default,colon,stmtlist
JSDefault :: JSNode -> JSNode -> [JSNode] -> Node
-- | do,stmt,while,lb,expr,rb,autosemi
JSDoWhile :: JSNode -> JSNode -> JSNode -> JSNode -> JSNode -> JSNode -> JSNode -> Node
-- | comma
JSElision :: JSNode -> Node
-- | expression components
JSExpression :: [JSNode] -> Node
-- | what, lhs, op, rhs
JSExpressionBinary :: String -> [JSNode] -> JSNode -> [JSNode] -> Node
-- | lb,expression,rb
JSExpressionParen :: JSNode -> JSNode -> JSNode -> Node
-- | type, expression, operator
JSExpressionPostfix :: String -> [JSNode] -> JSNode -> Node
-- | cond, ?, trueval, :, falseval
JSExpressionTernary :: [JSNode] -> JSNode -> [JSNode] -> JSNode -> [JSNode] -> Node
-- | finally,block
JSFinally :: JSNode -> JSNode -> Node
-- | for,lb,expr,semi,expr,semi,expr,rb.stmt
JSFor :: JSNode -> JSNode -> [JSNode] -> JSNode -> [JSNode] -> JSNode -> [JSNode] -> JSNode -> JSNode -> Node
-- | for,lb,expr,in,expr,rb,stmt
JSForIn :: JSNode -> JSNode -> [JSNode] -> JSNode -> JSNode -> JSNode -> JSNode -> Node
-- | for,lb,var,vardecl,semi,expr,semi,expr,rb,stmt
JSForVar :: JSNode -> JSNode -> JSNode -> [JSNode] -> JSNode -> [JSNode] -> JSNode -> [JSNode] -> JSNode -> JSNode -> Node
-- | for,lb,var,vardecl,in,expr,rb,stmt
JSForVarIn :: JSNode -> JSNode -> JSNode -> JSNode -> JSNode -> JSNode -> JSNode -> JSNode -> Node
-- | fn,name, lb,parameter list,rb,block | JSFunctionBody [JSNode] -- ^body
JSFunction :: JSNode -> JSNode -> JSNode -> [JSNode] -> JSNode -> JSNode -> Node
-- | fn,[name],lb, parameter list,rb,block`
JSFunctionExpression :: JSNode -> [JSNode] -> JSNode -> [JSNode] -> JSNode -> JSNode -> Node
-- | if,(,expr,),stmt,optional rest
JSIf :: JSNode -> JSNode -> JSNode -> JSNode -> [JSNode] -> [JSNode] -> Node
-- | identifier,colon,stmt
JSLabelled :: JSNode -> JSNode -> JSNode -> Node
-- | firstpart, dot, name
JSMemberDot :: [JSNode] -> JSNode -> JSNode -> Node
-- | firstpart, lb, expr, rb
JSMemberSquare :: [JSNode] -> JSNode -> JSNode -> JSNode -> Node
-- | lbrace contents rbrace
JSObjectLiteral :: JSNode -> [JSNode] -> JSNode -> Node
-- | opnode
JSOperator :: JSNode -> Node
-- | (get|set), name, lb, params, rb, block
JSPropertyAccessor :: JSNode -> JSNode -> JSNode -> [JSNode] -> JSNode -> JSNode -> Node
-- | name, colon, value
JSPropertyNameandValue :: JSNode -> JSNode -> [JSNode] -> Node
-- | return,optional expression,autosemi | JSSourceElements [JSNode] --
-- ^source elements
JSReturn :: JSNode -> [JSNode] -> JSNode -> Node
-- | source elements | JSStatementBlock JSNode JSNode JSNode --
-- ^lb,block,rb | JSStatementList [JSNode] -- ^statements
JSSourceElementsTop :: [JSNode] -> Node
-- | switch,lb,expr,rb,caseblock
JSSwitch :: JSNode -> JSNode -> JSNode -> JSNode -> JSNode -> Node
-- | throw val
JSThrow :: JSNode -> JSNode -> Node
-- | try,block,rest
JSTry :: JSNode -> JSNode -> [JSNode] -> Node
-- | type, operator
JSUnary :: String -> JSNode -> Node
-- | identifier, optional initializer
JSVarDecl :: JSNode -> [JSNode] -> Node
-- | var|const, decl, autosemi
JSVariables :: JSNode -> [JSNode] -> JSNode -> Node
-- | while,lb,expr,rb,stmt
JSWhile :: JSNode -> JSNode -> JSNode -> JSNode -> JSNode -> Node
-- | with,lb,expr,rb,stmt list
JSWith :: JSNode -> JSNode -> JSNode -> JSNode -> [JSNode] -> Node
-- | The JSNode is the building block of the AST. Each has a syntactic part
-- Node. In addition, the leaf elements (terminals) have a
-- position TokenPosn, as well as an array of comments and/or
-- whitespace that was collected while parsing.
data JSNode
-- | Non Terminal node, does not have any position or comment information
NN :: Node -> JSNode
-- | Terminal node, including position and comment/whitespace information
NT :: Node -> TokenPosn -> [CommentAnnotation] -> JSNode
showStripped :: JSNode -> String
instance Typeable Node
instance Typeable JSNode
instance Show Node
instance Eq Node
instance Read Node
instance Data Node
instance Show JSNode
instance Eq JSNode
instance Read JSNode
instance Data JSNode
module Language.JavaScript.Parser.Grammar5
parseProgram :: Alex JSNode
parseLiteral :: Alex JSNode
parsePrimaryExpression :: Alex JSNode
parseStatement :: Alex JSNode
fp :: JSNode -> JSNode
module Language.JavaScript.Parser.Parser
-- | Parse one compound statement, or a sequence of simple statements.
-- Generally used for interactive input, such as from the command line of
-- an interpreter. Return comments in addition to the parsed statements.
parse :: String -> String -> Either String JSNode
readJs :: String -> JSNode
-- | Parse the given file. For UTF-8 support, make sure your locale is set
-- such that System.IO.localeEncoding returns utf8
parseFile :: FilePath -> IO JSNode
-- | Parse the given file, explicitly setting the encoding to UTF8 when
-- reading it
parseFileUtf8 :: FilePath -> IO JSNode
-- | Parse one compound statement, or a sequence of simple statements.
-- Generally used for interactive input, such as from the command line of
-- an interpreter. Return comments in addition to the parsed statements.
parseUsing :: Alex JSNode -> String -> String -> Either String JSNode
showStripped :: JSNode -> String
showStrippedMaybe :: Show a => Either a JSNode -> String
module Language.JavaScript.Pretty.Printer
renderJS :: JSNode -> Builder
renderToString :: JSNode -> String
module Language.JavaScript.Parser
-- | Parse one compound statement, or a sequence of simple statements.
-- Generally used for interactive input, such as from the command line of
-- an interpreter. Return comments in addition to the parsed statements.
parse :: String -> String -> Either String JSNode
readJs :: String -> JSNode
-- | Parse the given file. For UTF-8 support, make sure your locale is set
-- such that System.IO.localeEncoding returns utf8
parseFile :: FilePath -> IO JSNode
-- | Parse the given file, explicitly setting the encoding to UTF8 when
-- reading it
parseFileUtf8 :: FilePath -> IO JSNode
showStripped :: JSNode -> String
showStrippedMaybe :: Show a => Either a JSNode -> String
-- | The JSNode is the building block of the AST. Each has a syntactic part
-- Node. In addition, the leaf elements (terminals) have a
-- position TokenPosn, as well as an array of comments and/or
-- whitespace that was collected while parsing.
data JSNode
-- | Non Terminal node, does not have any position or comment information
NN :: Node -> JSNode
-- | Terminal node, including position and comment/whitespace information
NT :: Node -> TokenPosn -> [CommentAnnotation] -> JSNode
data Node
-- | Terminals
JSIdentifier :: String -> Node
JSDecimal :: String -> Node
JSLiteral :: String -> Node
JSHexInteger :: String -> Node
JSOctal :: String -> Node
JSStringLiteral :: Char -> [Char] -> Node
JSRegEx :: String -> Node
-- | lb, args, rb
JSArguments :: JSNode -> [JSNode] -> JSNode -> Node
-- | lb, contents, rb
JSArrayLiteral :: JSNode -> [JSNode] -> JSNode -> Node
-- | optional lb,optional block statements,optional rb
JSBlock :: [JSNode] -> [JSNode] -> [JSNode] -> Node
-- | break, optional identifier, autosemi
JSBreak :: JSNode -> [JSNode] -> JSNode -> Node
-- | type : ., (), []; opening [ or ., contents, closing
JSCallExpression :: String -> [JSNode] -> [JSNode] -> [JSNode] -> Node
-- | case,expr,colon,stmtlist
JSCase :: JSNode -> JSNode -> JSNode -> [JSNode] -> Node
-- | catch,lb,ident,[if,expr],rb,block
JSCatch :: JSNode -> JSNode -> JSNode -> [JSNode] -> JSNode -> JSNode -> Node
-- | continue,optional identifier,autosemi
JSContinue :: JSNode -> [JSNode] -> JSNode -> Node
-- | default,colon,stmtlist
JSDefault :: JSNode -> JSNode -> [JSNode] -> Node
-- | do,stmt,while,lb,expr,rb,autosemi
JSDoWhile :: JSNode -> JSNode -> JSNode -> JSNode -> JSNode -> JSNode -> JSNode -> Node
-- | comma
JSElision :: JSNode -> Node
-- | expression components
JSExpression :: [JSNode] -> Node
-- | what, lhs, op, rhs
JSExpressionBinary :: String -> [JSNode] -> JSNode -> [JSNode] -> Node
-- | lb,expression,rb
JSExpressionParen :: JSNode -> JSNode -> JSNode -> Node
-- | type, expression, operator
JSExpressionPostfix :: String -> [JSNode] -> JSNode -> Node
-- | cond, ?, trueval, :, falseval
JSExpressionTernary :: [JSNode] -> JSNode -> [JSNode] -> JSNode -> [JSNode] -> Node
-- | finally,block
JSFinally :: JSNode -> JSNode -> Node
-- | for,lb,expr,semi,expr,semi,expr,rb.stmt
JSFor :: JSNode -> JSNode -> [JSNode] -> JSNode -> [JSNode] -> JSNode -> [JSNode] -> JSNode -> JSNode -> Node
-- | for,lb,expr,in,expr,rb,stmt
JSForIn :: JSNode -> JSNode -> [JSNode] -> JSNode -> JSNode -> JSNode -> JSNode -> Node
-- | for,lb,var,vardecl,semi,expr,semi,expr,rb,stmt
JSForVar :: JSNode -> JSNode -> JSNode -> [JSNode] -> JSNode -> [JSNode] -> JSNode -> [JSNode] -> JSNode -> JSNode -> Node
-- | for,lb,var,vardecl,in,expr,rb,stmt
JSForVarIn :: JSNode -> JSNode -> JSNode -> JSNode -> JSNode -> JSNode -> JSNode -> JSNode -> Node
-- | fn,name, lb,parameter list,rb,block | JSFunctionBody [JSNode] -- ^body
JSFunction :: JSNode -> JSNode -> JSNode -> [JSNode] -> JSNode -> JSNode -> Node
-- | fn,[name],lb, parameter list,rb,block`
JSFunctionExpression :: JSNode -> [JSNode] -> JSNode -> [JSNode] -> JSNode -> JSNode -> Node
-- | if,(,expr,),stmt,optional rest
JSIf :: JSNode -> JSNode -> JSNode -> JSNode -> [JSNode] -> [JSNode] -> Node
-- | identifier,colon,stmt
JSLabelled :: JSNode -> JSNode -> JSNode -> Node
-- | firstpart, dot, name
JSMemberDot :: [JSNode] -> JSNode -> JSNode -> Node
-- | firstpart, lb, expr, rb
JSMemberSquare :: [JSNode] -> JSNode -> JSNode -> JSNode -> Node
-- | lbrace contents rbrace
JSObjectLiteral :: JSNode -> [JSNode] -> JSNode -> Node
-- | opnode
JSOperator :: JSNode -> Node
-- | (get|set), name, lb, params, rb, block
JSPropertyAccessor :: JSNode -> JSNode -> JSNode -> [JSNode] -> JSNode -> JSNode -> Node
-- | name, colon, value
JSPropertyNameandValue :: JSNode -> JSNode -> [JSNode] -> Node
-- | return,optional expression,autosemi | JSSourceElements [JSNode] --
-- ^source elements
JSReturn :: JSNode -> [JSNode] -> JSNode -> Node
-- | source elements | JSStatementBlock JSNode JSNode JSNode --
-- ^lb,block,rb | JSStatementList [JSNode] -- ^statements
JSSourceElementsTop :: [JSNode] -> Node
-- | switch,lb,expr,rb,caseblock
JSSwitch :: JSNode -> JSNode -> JSNode -> JSNode -> JSNode -> Node
-- | throw val
JSThrow :: JSNode -> JSNode -> Node
-- | try,block,rest
JSTry :: JSNode -> JSNode -> [JSNode] -> Node
-- | type, operator
JSUnary :: String -> JSNode -> Node
-- | identifier, optional initializer
JSVarDecl :: JSNode -> [JSNode] -> Node
-- | var|const, decl, autosemi
JSVariables :: JSNode -> [JSNode] -> JSNode -> Node
-- | while,lb,expr,rb,stmt
JSWhile :: JSNode -> JSNode -> JSNode -> JSNode -> JSNode -> Node
-- | with,lb,expr,rb,stmt list
JSWith :: JSNode -> JSNode -> JSNode -> JSNode -> [JSNode] -> Node
data CommentAnnotation
CommentA :: TokenPosn -> String -> CommentAnnotation
WhiteSpace :: TokenPosn -> String -> CommentAnnotation
NoComment :: CommentAnnotation
-- | TokenPosn records the location of a token in the input text. It
-- has three fields: the address (number of characters preceding the
-- token), line number and column of a token within the file. Note: The
-- lexer assumes the usual eight character tab stops.
data TokenPosn
TokenPn :: !Int -> !Int -> !Int -> TokenPosn
tokenPosnEmpty :: TokenPosn
renderJS :: JSNode -> Builder
renderToString :: JSNode -> String