{-# LANGUAGE FlexibleInstances #-}
module Render.Position where
import Agda.Syntax.Position
import Agda.Utils.FileName
import qualified Data.Strict.Maybe as Strict
import Render.Class
import Render.RichText
instance Render AbsolutePath where
render = text . filePath
--------------------------------------------------------------------------------
instance Render a => Render (Position' (Strict.Maybe a)) where
render (Pn Strict.Nothing _ l c) = render l <> "," <> render c
render (Pn (Strict.Just f) _ l c) =
render f <> ":" <> render l <> "," <> render c
instance Render PositionWithoutFile where
render p = render (p {srcFile = Strict.Nothing} :: Position)
instance Render IntervalWithoutFile where
render (Interval s e) = start <> "-" <> end
where
sl = posLine s
el = posLine e
sc = posCol s
ec = posCol e
start = render sl <> "," <> render sc
end
| sl == el = render ec
| otherwise = render el <> "," <> render ec
instance Render a => Render (Interval' (Strict.Maybe a)) where
render i@(Interval s _) = file <> render (setIntervalFile () i)
where
file :: Inlines
file = case srcFile s of
Strict.Nothing -> mempty
Strict.Just f -> render f <> ":"
instance Render a => Render (Range' (Strict.Maybe a)) where
render r = maybe mempty render (rangeToIntervalWithFile r)