@@ -8,23 +8,83 @@ module TestData
88 fileUri3 ,
99 fakeUri ,
1010 getServerEnv ,
11+ AgdaFileDetails (.. ),
12+ agdaFileDetails ,
1113 )
1214where
1315
16+ import Agda.Interaction.FindFile (SourceFile (SourceFile ), srcFilePath )
17+ import qualified Agda.Interaction.Imports as Imp
18+ import qualified Agda.Interaction.Options
19+ import Agda.Syntax.Abstract.More ()
20+ import Agda.Syntax.Common.Pretty (prettyShow )
21+ import Agda.Syntax.Translation.ConcreteToAbstract (topLevelDecls )
22+ import qualified Agda.TypeChecking.Monad as TCM
23+ import Agda.Utils.FileName (absolute )
1424import Agda.Utils.IORef (newIORef )
1525import Agda.Utils.Lens (set , (<&>) )
1626import Control.Concurrent (newChan )
1727import Control.Monad.IO.Class (MonadIO , liftIO )
1828import qualified Data.Map as Map
29+ import Indexer (indexFile , withAstFor )
1930import qualified Language.LSP.Protocol.Message as LSP
2031import qualified Language.LSP.Protocol.Types as LSP
21- import Monad (Env (Env ))
32+ import qualified Language.LSP.Server as LSP
33+ import Monad (Env (Env ), runServerT )
2234import Options (defaultOptions , initConfig )
2335import qualified Server.CommandController as CommandController
2436import Server.Model (Model (Model ))
25- import Server.Model.AgdaFile (emptyAgdaFile )
37+ import Server.Model.AgdaFile (AgdaFile , emptyAgdaFile )
2638import Server.Model.AgdaLib (agdaLibIncludes , initAgdaLib )
39+ import Server.Model.Monad (runWithAgdaLib )
2740import qualified Server.ResponseController as ResponseController
41+ import System.FilePath (takeBaseName , (</>) )
42+
43+ data AgdaFileDetails = AgdaFileDetails
44+ { fileName :: String ,
45+ agdaFile :: AgdaFile ,
46+ interface :: TCM. Interface
47+ }
48+
49+ agdaFileDetails :: FilePath -> IO AgdaFileDetails
50+ agdaFileDetails inPath = do
51+ let testName = takeBaseName inPath
52+ uri = LSP. filePathToUri inPath
53+ model <- TestData. getModel
54+
55+ (file, interface) <- LSP. runLspT undefined $ do
56+ env <- TestData. getServerEnv model
57+ 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)
65+ 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
75+
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
81+
82+ agdaFile <- indexFile src
83+ return (agdaFile, interface)
84+
85+ return $ AgdaFileDetails testName file interface
86+
87+ --------------------------------------------------------------------------------
2888
2989documentSymbolMessage :: LSP. NormalizedUri -> LSP. TRequestMessage LSP. Method_TextDocumentDocumentSymbol
3090documentSymbolMessage uri =
0 commit comments