{-# LANGUAGE GADTs #-}
{-# LANGUAGE NamedFieldPuns #-}
module GhcTags.ETag
( module X
, compareTags
) where
import Data.Function (on)
import GhcTags.ETag.Formatter as X
import GhcTags.ETag.Parser as X
import GhcTags.Tag ( Tag (..)
, ETag
, TagAddress (..)
, tagFilePath
)
compareTags :: ETag -> ETag -> Ordering
compareTags :: ETag -> ETag -> Ordering
compareTags ETag
t0 ETag
t1 =
forall b c a. (b -> b -> c) -> (a -> b) -> a -> a -> c
on forall a. Ord a => a -> a -> Ordering
compare forall (tk :: TAG_KIND). Tag tk -> TagFilePath
tagFilePath ETag
t0 ETag
t1
forall a. Semigroup a => a -> a -> a
<> forall b c a. (b -> b -> c) -> (a -> b) -> a -> a -> c
on forall a. Ord a => a -> a -> Ordering
compare (\Tag {TagAddress 'ETAG
tagAddr :: forall (tk :: TAG_KIND). Tag tk -> TagAddress tk
tagAddr :: TagAddress 'ETAG
tagAddr} ->
case TagAddress 'ETAG
tagAddr of
TagLineCol Int
line Int
_ -> Int
line
TagLine Int
line -> Int
line
TagAddress 'ETAG
NoAddress -> Int
0
) ETag
t0 ETag
t1
forall a. Semigroup a => a -> a -> a
<> forall b c a. (b -> b -> c) -> (a -> b) -> a -> a -> c
on forall a. Ord a => a -> a -> Ordering
compare forall (tk :: TAG_KIND). Tag tk -> TagName
tagName ETag
t0 ETag
t1