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 | ||| A source file location (file path, line, column). Line and column
 9 | ||| are 0-indexed.
10 | public export
11 | record SrcLoc where
12 |   constructor MkSrcLoc
13 |   file : String
14 |   line : Int
15 |   col  : Int
16 |
17 | export
18 | Show SrcLoc where
19 |   show loc = loc.file ++ ":" ++ show (loc.line + 1)
20 |
21 | originToString : OriginDesc -> String
22 | originToString (PhysicalIdrSrc (MkMI parts)) = concat (intersperse "/" (reverse parts))
23 | originToString (PhysicalPkgSrc fname) = fname
24 | originToString (Virtual _) = "<virtual>"
25 |
26 | ||| Convert an Idris 2 FC to a SrcLoc.
27 | export
28 | fcToSrcLoc : FC -> SrcLoc
29 | fcToSrcLoc (MkFC origin (l, c) _) = MkSrcLoc (originToString origin) l c
30 | fcToSrcLoc (MkVirtualFC origin (l, c) _) = MkSrcLoc (originToString origin) l c
31 | fcToSrcLoc EmptyFC = MkSrcLoc "<unknown>" 0 0
32 |