module Language.JavaScript.Parser.Parser (
parse
, parseModule
, readJs
, readJsModule
, parseFile
, parseFileUtf8
, parseUsing
, showStripped
, showStrippedMaybe
) where
import qualified Language.JavaScript.Parser.Grammar7 as P
import Language.JavaScript.Parser.Lexer
import qualified Language.JavaScript.Parser.AST as AST
import System.IO
parse :: String
-> String
-> Either String AST.JSAST
parse :: String -> String -> Either String JSAST
parse = Alex JSAST -> String -> String -> Either String JSAST
parseUsing Alex JSAST
P.parseProgram
parseModule :: String
-> String
-> Either String AST.JSAST
parseModule :: String -> String -> Either String JSAST
parseModule = Alex JSAST -> String -> String -> Either String JSAST
parseUsing Alex JSAST
P.parseModule
readJsWith :: (String -> String -> Either String AST.JSAST)
-> String
-> AST.JSAST
readJsWith :: (String -> String -> Either String JSAST) -> String -> JSAST
readJsWith String -> String -> Either String JSAST
f String
input =
case String -> String -> Either String JSAST
f String
input String
"src" of
Left String
msg -> String -> JSAST
forall a. HasCallStack => String -> a
error (String -> String
forall a. Show a => a -> String
show String
msg)
Right JSAST
p -> JSAST
p
readJs :: String -> AST.JSAST
readJs :: String -> JSAST
readJs = (String -> String -> Either String JSAST) -> String -> JSAST
readJsWith String -> String -> Either String JSAST
parse
readJsModule :: String -> AST.JSAST
readJsModule :: String -> JSAST
readJsModule = (String -> String -> Either String JSAST) -> String -> JSAST
readJsWith String -> String -> Either String JSAST
parseModule
parseFile :: FilePath -> IO AST.JSAST
parseFile :: String -> IO JSAST
parseFile String
filename =
do
String
x <- String -> IO String
readFile String
filename
JSAST -> IO JSAST
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (JSAST -> IO JSAST) -> JSAST -> IO JSAST
forall a b. (a -> b) -> a -> b
$ String -> JSAST
readJs String
x
parseFileUtf8 :: FilePath -> IO AST.JSAST
parseFileUtf8 :: String -> IO JSAST
parseFileUtf8 String
filename =
do
Handle
h <- String -> IOMode -> IO Handle
openFile String
filename IOMode
ReadMode
Handle -> TextEncoding -> IO ()
hSetEncoding Handle
h TextEncoding
utf8
String
x <- Handle -> IO String
hGetContents Handle
h
JSAST -> IO JSAST
forall a. a -> IO a
forall (m :: * -> *) a. Monad m => a -> m a
return (JSAST -> IO JSAST) -> JSAST -> IO JSAST
forall a b. (a -> b) -> a -> b
$ String -> JSAST
readJs String
x
showStripped :: AST.JSAST -> String
showStripped :: JSAST -> String
showStripped = JSAST -> String
AST.showStripped
showStrippedMaybe :: Show a => Either a AST.JSAST -> String
showStrippedMaybe :: forall a. Show a => Either a JSAST -> String
showStrippedMaybe Either a JSAST
maybeAst =
case Either a JSAST
maybeAst of
Left a
msg -> String
"Left (" String -> String -> String
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Show a => a -> String
show a
msg String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
")"
Right JSAST
p -> String
"Right (" String -> String -> String
forall a. [a] -> [a] -> [a]
++ JSAST -> String
AST.showStripped JSAST
p String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
")"
parseUsing ::
Alex AST.JSAST
-> String
-> String
-> Either String AST.JSAST
parseUsing :: Alex JSAST -> String -> String -> Either String JSAST
parseUsing Alex JSAST
p String
input String
_srcName = String -> Alex JSAST -> Either String JSAST
forall a. String -> Alex a -> Either String a
runAlex String
input Alex JSAST
p