-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Parser for JavaScript -- @package language-javascript @version 0.5.13.4 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