|
1 | | --- | This module reexports unexported functions |
2 | 1 | module Agda.Interaction.Imports.More |
3 | | - ( setOptionsFromSourcePragmas, |
| 2 | + ( parseVirtualSource, |
| 3 | + setOptionsFromSourcePragmas, |
4 | 4 | checkModuleName', |
5 | 5 | ) |
6 | 6 | where |
7 | 7 |
|
8 | | -import Agda.Interaction.FindFile (SourceFile, checkModuleName) |
9 | | -import Agda.Interaction.Imports (Source) |
| 8 | +import Agda.Interaction.FindFile (SourceFile (SourceFile), checkModuleName, moduleName) |
| 9 | +import Agda.Interaction.Imports (Source (..)) |
10 | 10 | import qualified Agda.Interaction.Imports as Imp |
11 | 11 | import Agda.Interaction.Library (OptionsPragma (..), _libPragmas) |
12 | 12 | import Agda.Syntax.Common (TopLevelModuleName') |
13 | 13 | import qualified Agda.Syntax.Concrete as C |
14 | | -import Agda.Syntax.Position (Range) |
| 14 | +import Agda.Syntax.Parser (moduleParser, parseFile) |
| 15 | +import Agda.Syntax.Position (Range, mkRangeFile) |
15 | 16 | import Agda.Syntax.TopLevelModuleName (TopLevelModuleName) |
16 | 17 | import Agda.TypeChecking.Monad (Interface, TCM, checkAndSetOptionsFromPragma, setCurrentRange, setOptionsFromPragma, setTCLens, stPragmaOptions, useTC) |
| 18 | +import qualified Agda.TypeChecking.Monad.Benchmark as Bench |
| 19 | +import Agda.TypeChecking.Warnings (runPM) |
17 | 20 | import Agda.Utils.Monad (bracket_) |
| 21 | +import qualified Data.Text.Lazy as TL |
| 22 | + |
| 23 | +-- | Parse a source file without talking to the filesystem |
| 24 | +parseVirtualSource :: |
| 25 | + -- | Logical path of the source file. Used in ranges, not filesystem access. |
| 26 | + SourceFile -> |
| 27 | + -- | Logical contents of the source file |
| 28 | + TL.Text -> |
| 29 | + TCM Imp.Source |
| 30 | +parseVirtualSource sourceFile@(SourceFile f) source = Bench.billTo [Bench.Parsing] $ do |
| 31 | + let rf0 = mkRangeFile f Nothing |
| 32 | + ((parsedMod0, _attrs), _fileType) <- runPM $ parseFile moduleParser rf0 $ TL.unpack source |
| 33 | + parsedModName <- moduleName f parsedMod0 |
| 34 | + |
| 35 | + let rf = mkRangeFile f (Just parsedModName) |
| 36 | + ((parsedMod, attrs), fileType) <- runPM $ parseFile moduleParser rf $ TL.unpack source |
| 37 | + |
| 38 | + -- TODO: handle libs properly |
| 39 | + let libs = [] |
| 40 | + |
| 41 | + return |
| 42 | + Source |
| 43 | + { srcText = source, |
| 44 | + srcFileType = fileType, |
| 45 | + srcOrigin = sourceFile, |
| 46 | + srcModule = parsedMod, |
| 47 | + srcModuleName = parsedModName, |
| 48 | + srcProjectLibs = libs, |
| 49 | + srcAttributes = attrs |
| 50 | + } |
| 51 | + |
| 52 | +-- Unexported Agda functions |
18 | 53 |
|
19 | 54 | srcDefaultPragmas :: Imp.Source -> [OptionsPragma] |
20 | 55 | srcDefaultPragmas src = map _libPragmas (Imp.srcProjectLibs src) |
|
0 commit comments