{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE RankNTypes     #-}

module Wingman.Range where

import           Development.IDE hiding (rangeToRealSrcSpan, rangeToSrcSpan)
import qualified FastString as FS
import           SrcLoc


------------------------------------------------------------------------------
-- | Convert a DAML compiler Range to a GHC SrcSpan
-- TODO(sandy): this doesn't belong here
rangeToSrcSpan :: String -> Range -> SrcSpan
rangeToSrcSpan :: String -> Range -> SrcSpan
rangeToSrcSpan String
file Range
range = RealSrcSpan -> SrcSpan
RealSrcSpan (RealSrcSpan -> SrcSpan) -> RealSrcSpan -> SrcSpan
forall a b. (a -> b) -> a -> b
$ String -> Range -> RealSrcSpan
rangeToRealSrcSpan String
file Range
range


rangeToRealSrcSpan :: String -> Range -> RealSrcSpan
rangeToRealSrcSpan :: String -> Range -> RealSrcSpan
rangeToRealSrcSpan String
file (Range (Position Int
startLn Int
startCh) (Position Int
endLn Int
endCh)) =
  RealSrcLoc -> RealSrcLoc -> RealSrcSpan
mkRealSrcSpan
    (FastString -> Int -> Int -> RealSrcLoc
mkRealSrcLoc (String -> FastString
FS.fsLit String
file) (Int
startLn Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) (Int
startCh Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1))
    (FastString -> Int -> Int -> RealSrcLoc
mkRealSrcLoc (String -> FastString
FS.fsLit String
file) (Int
endLn Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1) (Int
endCh Int -> Int -> Int
forall a. Num a => a -> a -> a
+ Int
1))