0 | module Evince.SrcLoc
 1 |
 2 | import Data.List
 3 | import Data.String
 4 | import Language.Reflection
 5 | import Language.Reflection.TT
 6 | import Language.Reflection.TTImp
 7 |
 8 | %language ElabReflection
 9 |
10 | ||| A source file location (file path, line, column). Line and column
11 | ||| are 0-indexed (matching Idris 2's FC representation).
12 | public export
13 | record SrcLoc where
14 |   constructor MkSrcLoc
15 |   file : String
16 |   line : Int
17 |   col  : Int
18 |
19 | export
20 | Show SrcLoc where
21 |   show loc = loc.file ++ ":" ++ show (loc.line + 1)
22 |
23 | originToString : OriginDesc -> String
24 | originToString (PhysicalIdrSrc (MkMI parts)) = concat (intersperse "/" (reverse parts))
25 | originToString (PhysicalPkgSrc fname) = fname
26 | originToString (Virtual _) = "<virtual>"
27 |
28 | ||| Convert an Idris 2 FC to a SrcLoc.
29 | export
30 | fcToSrcLoc : FC -> SrcLoc
31 | fcToSrcLoc (MkFC origin (l, c) _) = MkSrcLoc (originToString origin) l c
32 | fcToSrcLoc (MkVirtualFC origin (l, c) _) = MkSrcLoc (originToString origin) l c
33 | fcToSrcLoc EmptyFC = MkSrcLoc "<unknown>" 0 0
34 |