Skip to content

Commit 91ec6d4

Browse files
committed
support Agda 2.8.0 in tests
1 parent 094a883 commit 91ec6d4

File tree

5 files changed

+61
-63
lines changed

5 files changed

+61
-63
lines changed

src/Indexer.hs

Lines changed: 27 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
module Indexer
44
( withAstFor,
5+
usingSrcAsCurrent,
56
indexFile,
67
)
78
where
@@ -21,41 +22,48 @@ import Indexer.Postprocess (postprocess)
2122
import Server.Model.AgdaFile (AgdaFile)
2223
import Server.Model.Monad (WithAgdaLibM)
2324

24-
withAstFor :: Imp.Source -> (TopLevelInfo -> WithAgdaLibM a) -> WithAgdaLibM a
25+
usingSrcAsCurrent :: Imp.Source -> WithAgdaLibM a -> WithAgdaLibM a
2526
#if MIN_VERSION_Agda(2,8,0)
26-
withAstFor src f = do
27+
usingSrcAsCurrent src x = do
2728
TCM.liftTCM $
2829
TCM.setCurrentRange (C.modPragmas . Imp.srcModule $ src) $
2930
-- Now reset the options
3031
TCM.setCommandLineOptions . TCM.stPersistentOptions . TCM.stPersistentState =<< TCM.getTC
3132

3233
TCM.modifyTCLens TCM.stModuleToSourceId $ Map.insert (Imp.srcModuleName src) (Imp.srcOrigin src)
3334

34-
TCM.localTC (\e -> e {TCM.envCurrentPath = Just (TCM.srcFileId $ Imp.srcOrigin src)}) $ do
35-
let topLevel =
36-
TopLevel
37-
(Imp.srcOrigin src)
38-
(Imp.srcModuleName src)
39-
(C.modDecls $ Imp.srcModule src)
40-
ast <- TCM.liftTCM $ toAbstract topLevel
41-
f ast
35+
TCM.localTC (\e -> e {TCM.envCurrentPath = Just (TCM.srcFileId $ Imp.srcOrigin src)}) x
4236
#else
43-
withAstFor src f = do
37+
usingSrcAsCurrent src x = do
4438
TCM.liftTCM $
4539
TCM.setCurrentRange (C.modPragmas . Imp.srcModule $ src) $
4640
-- Now reset the options
4741
TCM.setCommandLineOptions . TCM.stPersistentOptions . TCM.stPersistentState =<< TCM.getTC
4842

4943
TCM.modifyTCLens TCM.stModuleToSource $ Map.insert (Imp.srcModuleName src) (srcFilePath $ Imp.srcOrigin src)
5044

51-
TCM.localTC (\e -> e {TCM.envCurrentPath = Just (srcFilePath $ Imp.srcOrigin src)}) $ do
52-
let topLevel =
53-
TopLevel
54-
(srcFilePath $ Imp.srcOrigin src)
55-
(Imp.srcModuleName src)
56-
(C.modDecls $ Imp.srcModule src)
57-
ast <- TCM.liftTCM $ toAbstract topLevel
58-
f ast
45+
TCM.localTC (\e -> e {TCM.envCurrentPath = Just (srcFilePath $ Imp.srcOrigin src)}) x
46+
#endif
47+
48+
withAstFor :: Imp.Source -> (TopLevelInfo -> WithAgdaLibM a) -> WithAgdaLibM a
49+
#if MIN_VERSION_Agda(2,8,0)
50+
withAstFor src f = usingSrcAsCurrent src $ do
51+
let topLevel =
52+
TopLevel
53+
(Imp.srcOrigin src)
54+
(Imp.srcModuleName src)
55+
(C.modDecls $ Imp.srcModule src)
56+
ast <- TCM.liftTCM $ toAbstract topLevel
57+
f ast
58+
#else
59+
withAstFor src f = usingSrcAsCurrent src $ do
60+
let topLevel =
61+
TopLevel
62+
(srcFilePath $ Imp.srcOrigin src)
63+
(Imp.srcModuleName src)
64+
(C.modDecls $ Imp.srcModule src)
65+
ast <- TCM.liftTCM $ toAbstract topLevel
66+
f ast
5967
#endif
6068

6169
indexFile ::

test/Test/Indexer/Invariants.hs

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,11 @@
11
module Test.Indexer.Invariants (tests) where
22

3-
import Agda.Interaction.FindFile (SourceFile (SourceFile), srcFilePath)
4-
import qualified Agda.Interaction.Imports as Imp
5-
import Agda.Interaction.Options (defaultOptions)
6-
import Agda.Syntax.Abstract.More ()
7-
import Agda.Syntax.Common.Pretty (prettyShow)
8-
import Agda.Syntax.Translation.ConcreteToAbstract (TopLevelInfo (topLevelDecls))
9-
import qualified Agda.TypeChecking.Monad as TCM
10-
import Agda.Utils.FileName (absolute)
113
import Control.Monad (forM)
12-
import Control.Monad.IO.Class (liftIO)
13-
import qualified Data.Map as Map
14-
import Indexer (indexFile, withAstFor)
15-
import qualified Language.LSP.Protocol.Types as LSP
16-
import qualified Language.LSP.Server as LSP
17-
import Monad (runServerT)
18-
import Server.Model.Monad (runWithAgdaLib)
19-
import System.FilePath (takeBaseName, (</>))
204
import Test.Indexer.NoDuplicateDecl (testNoDuplicateDecl)
215
import Test.Indexer.NoMissing (testNoMissing)
226
import Test.Indexer.NoOverlap (testNoOverlap)
237
import Test.Tasty (TestTree, testGroup)
248
import Test.Tasty.Golden (findByExtension)
25-
import TestData (AgdaFileDetails (AgdaFileDetails))
269
import qualified TestData
2710

2811
tests :: IO TestTree

test/TestData.hs

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
{-# LANGUAGE CPP #-}
12
{-# LANGUAGE DataKinds #-}
23

34
module TestData
@@ -13,7 +14,13 @@ module TestData
1314
)
1415
where
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+
)
1724
import qualified Agda.Interaction.Imports as Imp
1825
import qualified Agda.Interaction.Options
1926
import Agda.Syntax.Abstract.More ()
@@ -26,11 +33,11 @@ import Agda.Utils.Lens (set, (<&>))
2633
import Control.Concurrent (newChan)
2734
import Control.Monad.IO.Class (MonadIO, liftIO)
2835
import qualified Data.Map as Map
29-
import Indexer (indexFile, withAstFor)
36+
import Indexer (indexFile, withAstFor, usingSrcAsCurrent)
3037
import qualified Language.LSP.Protocol.Message as LSP
3138
import qualified Language.LSP.Protocol.Types as LSP
3239
import qualified Language.LSP.Server as LSP
33-
import Monad (Env (Env), runServerT)
40+
import Monad (Env (Env), runServerT, catchTCError)
3441
import Options (defaultOptions, initConfig)
3542
import qualified Server.CommandController as CommandController
3643
import Server.Model (Model (Model))
@@ -39,6 +46,7 @@ import Server.Model.AgdaLib (agdaLibIncludes, initAgdaLib)
3946
import Server.Model.Monad (runWithAgdaLib)
4047
import qualified Server.ResponseController as ResponseController
4148
import System.FilePath (takeBaseName, (</>))
49+
import Agda.TypeChecking.Pretty (prettyTCM)
4250

4351
data 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

test/data/Indexer/Module.agda

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
module Module where
1+
module Indexer.Module where
22

33
data Nat : Set where
44
zero : Nat

test/data/test.agda-lib

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
name: test
2+
include: .

0 commit comments

Comments
 (0)