1+ {-# LANGUAGE CPP #-}
12{-# LANGUAGE DataKinds #-}
23
34module TestData
@@ -13,7 +14,13 @@ module TestData
1314 )
1415where
1516
16- import Agda.Interaction.FindFile (SourceFile (SourceFile ), srcFilePath )
17+ import Agda.Interaction.FindFile
18+ ( SourceFile (SourceFile ),
19+ #if MIN_VERSION_Agda(2,8,0)
20+ #else
21+ srcFilePath ,
22+ #endif
23+ )
1724import qualified Agda.Interaction.Imports as Imp
1825import qualified Agda.Interaction.Options
1926import Agda.Syntax.Abstract.More ()
@@ -26,11 +33,11 @@ import Agda.Utils.Lens (set, (<&>))
2633import Control.Concurrent (newChan )
2734import Control.Monad.IO.Class (MonadIO , liftIO )
2835import qualified Data.Map as Map
29- import Indexer (indexFile , withAstFor )
36+ import Indexer (indexFile , withAstFor , usingSrcAsCurrent )
3037import qualified Language.LSP.Protocol.Message as LSP
3138import qualified Language.LSP.Protocol.Types as LSP
3239import qualified Language.LSP.Server as LSP
33- import Monad (Env (Env ), runServerT )
40+ import Monad (Env (Env ), runServerT , catchTCError )
3441import Options (defaultOptions , initConfig )
3542import qualified Server.CommandController as CommandController
3643import Server.Model (Model (Model ))
@@ -39,6 +46,7 @@ import Server.Model.AgdaLib (agdaLibIncludes, initAgdaLib)
3946import Server.Model.Monad (runWithAgdaLib )
4047import qualified Server.ResponseController as ResponseController
4148import System.FilePath (takeBaseName , (</>) )
49+ import Agda.TypeChecking.Pretty (prettyTCM )
4250
4351data AgdaFileDetails = AgdaFileDetails
4452 { fileName :: String ,
@@ -55,32 +63,29 @@ agdaFileDetails inPath = do
5563 (file, interface) <- LSP. runLspT undefined $ do
5664 env <- TestData. getServerEnv model
5765 runServerT env $ do
58- interface <- runWithAgdaLib uri $ do
59- TCM. liftTCM $ TCM. setCommandLineOptions Agda.Interaction.Options. defaultOptions
60- absInPath <- liftIO $ absolute inPath
61- let srcFile = SourceFile absInPath
62- src <- TCM. liftTCM $ Imp. parseSource srcFile
63-
64- TCM. modifyTCLens TCM. stModuleToSource $ Map. insert (Imp. srcModuleName src) (srcFilePath $ Imp. srcOrigin src)
66+ let withSrc f = runWithAgdaLib uri $ do
67+ TCM. liftTCM $ TCM. setCommandLineOptions Agda.Interaction.Options. defaultOptions
68+ absInPath <- liftIO $ absolute inPath
69+ #if MIN_VERSION_Agda(2,8,0)
70+ srcFile <- TCM. srcFromPath absInPath
71+ #else
72+ let srcFile = SourceFile absInPath
73+ #endif
74+ src <- TCM. liftTCM $ Imp. parseSource srcFile
75+
76+ f src
77+
78+ let onErr = \ err -> runWithAgdaLib uri $ do
79+ t <- TCM. liftTCM $ prettyTCM err
80+ error $ prettyShow t
81+
82+ interface <- (withSrc $ \ src -> usingSrcAsCurrent src $ do
6583 checkResult <- TCM. liftTCM $ Imp. typeCheckMain Imp. TypeCheck src
66- return $ Imp. crInterface checkResult
67-
68- ast <- runWithAgdaLib uri $ do
69- TCM. liftTCM $ TCM. setCommandLineOptions Agda.Interaction.Options. defaultOptions
70- absInPath <- liftIO $ absolute inPath
71- let srcFile = SourceFile absInPath
72- src <- TCM. liftTCM $ Imp. parseSource srcFile
73-
74- withAstFor src return
84+ return $ Imp. crInterface checkResult) `catchTCError` onErr
7585
76- runWithAgdaLib uri $ do
77- TCM. liftTCM $ TCM. setCommandLineOptions Agda.Interaction.Options. defaultOptions
78- absInPath <- liftIO $ absolute inPath
79- let srcFile = SourceFile absInPath
80- src <- TCM. liftTCM $ Imp. parseSource srcFile
86+ file <- withSrc indexFile `catchTCError` onErr
8187
82- agdaFile <- indexFile src
83- return (agdaFile, interface)
88+ return (file, interface)
8489
8590 return $ AgdaFileDetails testName file interface
8691
0 commit comments