agda-unused-0.1.0: src/Agda/Unused/Types/Range.hs
{- |
Module: Agda.Unused.Types.Range
Location ranges of Agda code files.
-}
module Agda.Unused.Types.Range
( -- * Definitions
Range
, Range'(..)
, RangeType(..)
, RangeInfo(..)
-- * Interface
, getRange
, rangeContains
) where
import Agda.Unused.Types.Name
(QName)
import Agda.Syntax.Position
(PositionWithoutFile, Range, Range'(..), getRange, rEnd', rStart')
-- ## Definitions
-- | The type of item found at a named range.
data RangeType where
RangeData
:: RangeType
RangeDefinition
:: RangeType
RangeImport
:: RangeType
RangeImportItem
:: RangeType
RangeModule
:: RangeType
RangeModuleItem
:: RangeType
RangeOpen
:: RangeType
RangeOpenItem
:: RangeType
RangePatternSynonym
:: RangeType
RangePostulate
:: RangeType
RangeRecord
:: RangeType
RangeRecordConstructor
:: RangeType
RangeVariable
:: RangeType
deriving (Eq, Ord, Show)
-- | Information associated with an item found at a certain range.
data RangeInfo where
RangeNamed
:: !RangeType
-> !QName
-> RangeInfo
RangeMutual
:: RangeInfo
deriving (Eq, Ord, Show)
-- ## Interface
-- | Determine whether the first range contains the second.
rangeContains
:: Range
-> Range
-> Bool
rangeContains r1 r2
= rangeContains' (rStart' r1) (rEnd' r1) (rStart' r2) (rEnd' r2)
rangeContains'
:: Maybe PositionWithoutFile
-> Maybe PositionWithoutFile
-> Maybe PositionWithoutFile
-> Maybe PositionWithoutFile
-> Bool
rangeContains' (Just s1) (Just e1) (Just s2) (Just e2)
= s1 <= s2 && e1 >= e2
rangeContains' _ _ _ _
= False