|
| 1 | +module ParseFile where |
| 2 | + |
| 3 | +import Prelude |
| 4 | + |
| 5 | +import Data.Array as Array |
| 6 | +import Data.Foldable (for_) |
| 7 | +import Data.Maybe (Maybe(..)) |
| 8 | +import Effect (Effect) |
| 9 | +import Effect.Aff (launchAff_) |
| 10 | +import Effect.Class (liftEffect) |
| 11 | +import Effect.Class.Console as Console |
| 12 | +import Node.Buffer as Buffer |
| 13 | +import Node.Encoding (Encoding(..)) |
| 14 | +import Node.FS.Aff (readFile) |
| 15 | +import Node.Process as Process |
| 16 | +import PureScript.CST (RecoveredParserResult(..), parseModule) |
| 17 | +import PureScript.CST.Errors (printParseError) |
| 18 | +import PureScript.CST.Parser.Monad (PositionedError) |
| 19 | + |
| 20 | +main :: Effect Unit |
| 21 | +main = launchAff_ do |
| 22 | + args <- Array.drop 2 <$> liftEffect Process.argv |
| 23 | + case Array.head args of |
| 24 | + Just fileName -> do |
| 25 | + contents <- liftEffect <<< Buffer.toString UTF8 =<< readFile fileName |
| 26 | + case parseModule contents of |
| 27 | + ParseSucceeded _ -> do |
| 28 | + Console.log "Parse succeeded." |
| 29 | + ParseSucceededWithErrors _ errs -> |
| 30 | + for_ errs $ Console.error <<< printPositionedError |
| 31 | + ParseFailed err -> |
| 32 | + Console.error $ printPositionedError err |
| 33 | + Nothing -> |
| 34 | + Console.log "File path required" |
| 35 | + |
| 36 | +printPositionedError :: PositionedError -> String |
| 37 | +printPositionedError { error, position } = |
| 38 | + "[" <> show (position.line + 1) <> ":" <> show (position.column + 1) <> "] " <> printParseError error |
0 commit comments