44module Agda.Interaction.Imports.Virtual
55 ( VSourceFile (.. ),
66 vSrcFromUri ,
7+ parseSourceFromContents ,
78 parseVSource ,
89 )
910where
@@ -37,15 +38,20 @@ data VSourceFile = VSourceFile
3738 vSrcVFile :: VFS. VirtualFile
3839 }
3940
41+ #if MIN_VERSION_Agda(2,8,0)
42+ srcFilePath :: (TCM. MonadFileId m ) => SourceFile -> m AbsolutePath
43+ srcFilePath = TCM. srcFilePath
44+ #else
45+ srcFilePath :: (Monad m ) => SourceFile -> m AbsolutePath
46+ srcFilePath (SourceFile path) = return path
47+ #endif
48+
4049#if MIN_VERSION_Agda(2,8,0)
4150vSrcFilePath :: (TCM. MonadFileId m ) => VSourceFile -> m AbsolutePath
42- vSrcFilePath = TCM. srcFilePath . vSrcFileSrcFile
4351#else
4452vSrcFilePath :: (Monad m ) => VSourceFile -> m AbsolutePath
45- vSrcFilePath vSourceFile = do
46- let (SourceFile path) = vSrcFileSrcFile vSourceFile
47- return path
4853#endif
54+ vSrcFilePath = srcFilePath . vSrcFileSrcFile
4955
5056#if MIN_VERSION_Agda(2,8,0)
5157vSrcFromUri ::
@@ -69,37 +75,44 @@ vSrcFromUri normUri file = do
6975 return $ VSourceFile src normUri file
7076#endif
7177
72- -- | Based on @parseSource@
73- parseVSource :: (TCM. MonadTCM m , TCM. MonadTrace m , MonadAgdaLib m ) => VSourceFile -> m Imp. Source
74- parseVSource vSrcFile = do
75- let sourceFile = vSrcFileSrcFile vSrcFile
76- f <- TCM. liftTCM $ vSrcFilePath vSrcFile
78+ parseSourceFromContents ::
79+ (TCM. MonadTCM m , TCM. MonadTrace m , MonadAgdaLib m ) =>
80+ LSP. NormalizedUri ->
81+ SourceFile ->
82+ Text. Text ->
83+ m Imp. Source
84+ parseSourceFromContents srcUri srcFile contentsStrict = do
85+ f <- TCM. liftTCM $ srcFilePath srcFile
7786
7887 let rf0 = mkRangeFile f Nothing
7988 TCM. setCurrentRange (Imp. beginningOfFile rf0) $ do
80- let sourceStrict = VFS. virtualFileText $ vSrcVFile vSrcFile
81- let source = Strict. toLazy sourceStrict
82- let txt = Text. unpack sourceStrict
89+ let contents = Strict. toLazy contentsStrict
90+ let contentsString = Text. unpack contentsStrict
8391
8492 parsedModName0 <-
8593 TCM. liftTCM $
8694 Imp. moduleName f . fst . fst =<< do
87- Imp. runPMDropWarnings $ parseFile moduleParser rf0 txt
95+ Imp. runPMDropWarnings $ parseFile moduleParser rf0 contentsString
8896
8997 let rf = mkRangeFile f $ Just parsedModName0
90- ((parsedMod, attrs), fileType) <- TCM. liftTCM $ Imp. runPM $ parseFile moduleParser rf txt
98+ ((parsedMod, attrs), fileType) <- TCM. liftTCM $ Imp. runPM $ parseFile moduleParser rf contentsString
9199 parsedModName <- TCM. liftTCM $ Imp. moduleName f parsedMod
92100
93101 agdaLib <- askAgdaLib
94- let libs = maybeToList $ agdaLibToFile (vSrcUri vSrcFile) agdaLib
102+ let libs = maybeToList $ agdaLibToFile srcUri agdaLib
95103
96104 return
97105 Imp. Source
98- { Imp. srcText = source ,
106+ { Imp. srcText = contents ,
99107 Imp. srcFileType = fileType,
100- Imp. srcOrigin = sourceFile ,
108+ Imp. srcOrigin = srcFile ,
101109 Imp. srcModule = parsedMod,
102110 Imp. srcModuleName = parsedModName,
103111 Imp. srcProjectLibs = libs,
104112 Imp. srcAttributes = attrs
105113 }
114+
115+ -- | Based on @parseSource@
116+ parseVSource :: (TCM. MonadTCM m , TCM. MonadTrace m , MonadAgdaLib m ) => VSourceFile -> m Imp. Source
117+ parseVSource (VSourceFile srcFile uri vFile) =
118+ parseSourceFromContents uri srcFile (VFS. virtualFileText vFile)
0 commit comments