Make extension-aware parser entrypoint

This commit is contained in:
Kirill Andreev 2020-08-14 14:54:04 +04:00
parent 28e16ca068
commit ba66f6e8e4
No known key found for this signature in database
GPG Key ID: CF7DA79DE4785A47
3 changed files with 30 additions and 5 deletions

View File

@ -28,13 +28,10 @@ import qualified System.Log as L
import Duplo.Error import Duplo.Error
import Duplo.Tree (collect) import Duplo.Tree (collect)
import Parser
import ParseTree
import Range import Range
import Product import Product
import AST hiding (def) import AST hiding (def)
import qualified AST.Find as Find import qualified AST.Find as Find
import AST.Pascaligo.Parser
-- import Error -- import Error
main :: IO () main :: IO ()
@ -219,7 +216,7 @@ loadFromVFS funs uri = do
Just vf <- Core.getVirtualFileFunc funs $ J.toNormalizedUri uri Just vf <- Core.getVirtualFileFunc funs $ J.toNormalizedUri uri
let txt = virtualFileText vf let txt = virtualFileText vf
let Just fin = J.uriToFilePath uri let Just fin = J.uriToFilePath uri
(tree, _) <- runParserM . recognise =<< mkRawTreePascal (Text fin txt) (tree, _) <- parse (Text fin txt)
return $ addLocalScopes tree return $ addLocalScopes tree
-- loadByURI -- loadByURI
@ -242,7 +239,7 @@ collectErrors
collectErrors funs uri path version = do collectErrors funs uri path version = do
case path of case path of
Just fin -> do Just fin -> do
(tree, errs) <- runParserM . recognise =<< mkRawTreePascal (Path fin) (tree, errs) <- parse (Path fin)
Core.publishDiagnosticsFunc funs 100 uri version Core.publishDiagnosticsFunc funs 100 uri version
$ partitionBySource $ partitionBySource
$ map errorToDiag (errs <> map (getElem *** void) (collect tree)) $ map errorToDiag (errs <> map (getElem *** void) (collect tree))

View File

@ -5,3 +5,4 @@ import AST.Completion as M
import AST.Find as M import AST.Find as M
import AST.Scope as M import AST.Scope as M
import AST.Skeleton as M import AST.Skeleton as M
import AST.Parser as M

View File

@ -0,0 +1,27 @@
module AST.Parser
( Source(..)
, parse
) where
import Control.Monad.Catch
import System.FilePath
import qualified AST.Pascaligo.Parser as Pascal
import qualified AST.Reasonligo.Parser as Reason
import AST.Skeleton
import ParseTree
import Parser
data UnsupportedExtension = UnsupportedExtension String
deriving stock Show
deriving anyclass Exception
parse :: Source -> IO (LIGO Info, [Msg])
parse src = do
case takeExtension $ srcPath src of
"religo" -> mkRawTreeReason src >>= runParserM . Reason.recognise
"ligo" -> mkRawTreePascal src >>= runParserM . Pascal.recognise
ext -> throwM $ UnsupportedExtension ext