{-# LANGUAGE DataKinds #-}
{-# LANGUAGE DerivingVia #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE StrictData #-}
{-# LANGUAGE TypeFamilies #-}
module Ide.Plugin.SemanticTokens.Types where
import Control.DeepSeq (NFData (rnf), rwhnf)
import qualified Data.Array as A
import Data.Default (Default (def))
import Data.Generics (Typeable)
import Development.IDE (Pretty (pretty), RuleResult)
import qualified Development.IDE.Core.Shake as Shake
import Development.IDE.GHC.Compat hiding (loc)
import Development.IDE.Graph.Classes (Hashable)
import GHC.Generics (Generic)
import Language.LSP.Protocol.Types
import Data.Text (Text)
import Ide.Plugin.Error (PluginError)
import Language.Haskell.TH.Syntax (Lift)
data HsSemanticTokenType
= TVariable
| TFunction
| TDataConstructor
| TTypeVariable
| TClassMethod
| TPatternSynonym
| TTypeConstructor
| TClass
| TTypeSynonym
| TTypeFamily
| TRecordField
| TOperator
| TModule
deriving (HsSemanticTokenType -> HsSemanticTokenType -> Bool
(HsSemanticTokenType -> HsSemanticTokenType -> Bool)
-> (HsSemanticTokenType -> HsSemanticTokenType -> Bool)
-> Eq HsSemanticTokenType
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: HsSemanticTokenType -> HsSemanticTokenType -> Bool
== :: HsSemanticTokenType -> HsSemanticTokenType -> Bool
$c/= :: HsSemanticTokenType -> HsSemanticTokenType -> Bool
/= :: HsSemanticTokenType -> HsSemanticTokenType -> Bool
Eq, Eq HsSemanticTokenType
Eq HsSemanticTokenType =>
(HsSemanticTokenType -> HsSemanticTokenType -> Ordering)
-> (HsSemanticTokenType -> HsSemanticTokenType -> Bool)
-> (HsSemanticTokenType -> HsSemanticTokenType -> Bool)
-> (HsSemanticTokenType -> HsSemanticTokenType -> Bool)
-> (HsSemanticTokenType -> HsSemanticTokenType -> Bool)
-> (HsSemanticTokenType
-> HsSemanticTokenType -> HsSemanticTokenType)
-> (HsSemanticTokenType
-> HsSemanticTokenType -> HsSemanticTokenType)
-> Ord HsSemanticTokenType
HsSemanticTokenType -> HsSemanticTokenType -> Bool
HsSemanticTokenType -> HsSemanticTokenType -> Ordering
HsSemanticTokenType -> HsSemanticTokenType -> HsSemanticTokenType
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: HsSemanticTokenType -> HsSemanticTokenType -> Ordering
compare :: HsSemanticTokenType -> HsSemanticTokenType -> Ordering
$c< :: HsSemanticTokenType -> HsSemanticTokenType -> Bool
< :: HsSemanticTokenType -> HsSemanticTokenType -> Bool
$c<= :: HsSemanticTokenType -> HsSemanticTokenType -> Bool
<= :: HsSemanticTokenType -> HsSemanticTokenType -> Bool
$c> :: HsSemanticTokenType -> HsSemanticTokenType -> Bool
> :: HsSemanticTokenType -> HsSemanticTokenType -> Bool
$c>= :: HsSemanticTokenType -> HsSemanticTokenType -> Bool
>= :: HsSemanticTokenType -> HsSemanticTokenType -> Bool
$cmax :: HsSemanticTokenType -> HsSemanticTokenType -> HsSemanticTokenType
max :: HsSemanticTokenType -> HsSemanticTokenType -> HsSemanticTokenType
$cmin :: HsSemanticTokenType -> HsSemanticTokenType -> HsSemanticTokenType
min :: HsSemanticTokenType -> HsSemanticTokenType -> HsSemanticTokenType
Ord, Int -> HsSemanticTokenType -> ShowS
[HsSemanticTokenType] -> ShowS
HsSemanticTokenType -> String
(Int -> HsSemanticTokenType -> ShowS)
-> (HsSemanticTokenType -> String)
-> ([HsSemanticTokenType] -> ShowS)
-> Show HsSemanticTokenType
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> HsSemanticTokenType -> ShowS
showsPrec :: Int -> HsSemanticTokenType -> ShowS
$cshow :: HsSemanticTokenType -> String
show :: HsSemanticTokenType -> String
$cshowList :: [HsSemanticTokenType] -> ShowS
showList :: [HsSemanticTokenType] -> ShowS
Show, Int -> HsSemanticTokenType
HsSemanticTokenType -> Int
HsSemanticTokenType -> [HsSemanticTokenType]
HsSemanticTokenType -> HsSemanticTokenType
HsSemanticTokenType -> HsSemanticTokenType -> [HsSemanticTokenType]
HsSemanticTokenType
-> HsSemanticTokenType
-> HsSemanticTokenType
-> [HsSemanticTokenType]
(HsSemanticTokenType -> HsSemanticTokenType)
-> (HsSemanticTokenType -> HsSemanticTokenType)
-> (Int -> HsSemanticTokenType)
-> (HsSemanticTokenType -> Int)
-> (HsSemanticTokenType -> [HsSemanticTokenType])
-> (HsSemanticTokenType
-> HsSemanticTokenType -> [HsSemanticTokenType])
-> (HsSemanticTokenType
-> HsSemanticTokenType -> [HsSemanticTokenType])
-> (HsSemanticTokenType
-> HsSemanticTokenType
-> HsSemanticTokenType
-> [HsSemanticTokenType])
-> Enum HsSemanticTokenType
forall a.
(a -> a)
-> (a -> a)
-> (Int -> a)
-> (a -> Int)
-> (a -> [a])
-> (a -> a -> [a])
-> (a -> a -> [a])
-> (a -> a -> a -> [a])
-> Enum a
$csucc :: HsSemanticTokenType -> HsSemanticTokenType
succ :: HsSemanticTokenType -> HsSemanticTokenType
$cpred :: HsSemanticTokenType -> HsSemanticTokenType
pred :: HsSemanticTokenType -> HsSemanticTokenType
$ctoEnum :: Int -> HsSemanticTokenType
toEnum :: Int -> HsSemanticTokenType
$cfromEnum :: HsSemanticTokenType -> Int
fromEnum :: HsSemanticTokenType -> Int
$cenumFrom :: HsSemanticTokenType -> [HsSemanticTokenType]
enumFrom :: HsSemanticTokenType -> [HsSemanticTokenType]
$cenumFromThen :: HsSemanticTokenType -> HsSemanticTokenType -> [HsSemanticTokenType]
enumFromThen :: HsSemanticTokenType -> HsSemanticTokenType -> [HsSemanticTokenType]
$cenumFromTo :: HsSemanticTokenType -> HsSemanticTokenType -> [HsSemanticTokenType]
enumFromTo :: HsSemanticTokenType -> HsSemanticTokenType -> [HsSemanticTokenType]
$cenumFromThenTo :: HsSemanticTokenType
-> HsSemanticTokenType
-> HsSemanticTokenType
-> [HsSemanticTokenType]
enumFromThenTo :: HsSemanticTokenType
-> HsSemanticTokenType
-> HsSemanticTokenType
-> [HsSemanticTokenType]
Enum, HsSemanticTokenType
HsSemanticTokenType
-> HsSemanticTokenType -> Bounded HsSemanticTokenType
forall a. a -> a -> Bounded a
$cminBound :: HsSemanticTokenType
minBound :: HsSemanticTokenType
$cmaxBound :: HsSemanticTokenType
maxBound :: HsSemanticTokenType
Bounded, (forall x. HsSemanticTokenType -> Rep HsSemanticTokenType x)
-> (forall x. Rep HsSemanticTokenType x -> HsSemanticTokenType)
-> Generic HsSemanticTokenType
forall x. Rep HsSemanticTokenType x -> HsSemanticTokenType
forall x. HsSemanticTokenType -> Rep HsSemanticTokenType x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. HsSemanticTokenType -> Rep HsSemanticTokenType x
from :: forall x. HsSemanticTokenType -> Rep HsSemanticTokenType x
$cto :: forall x. Rep HsSemanticTokenType x -> HsSemanticTokenType
to :: forall x. Rep HsSemanticTokenType x -> HsSemanticTokenType
Generic, (forall (m :: * -> *). Quote m => HsSemanticTokenType -> m Exp)
-> (forall (m :: * -> *).
Quote m =>
HsSemanticTokenType -> Code m HsSemanticTokenType)
-> Lift HsSemanticTokenType
forall t.
(forall (m :: * -> *). Quote m => t -> m Exp)
-> (forall (m :: * -> *). Quote m => t -> Code m t) -> Lift t
forall (m :: * -> *). Quote m => HsSemanticTokenType -> m Exp
forall (m :: * -> *).
Quote m =>
HsSemanticTokenType -> Code m HsSemanticTokenType
$clift :: forall (m :: * -> *). Quote m => HsSemanticTokenType -> m Exp
lift :: forall (m :: * -> *). Quote m => HsSemanticTokenType -> m Exp
$cliftTyped :: forall (m :: * -> *).
Quote m =>
HsSemanticTokenType -> Code m HsSemanticTokenType
liftTyped :: forall (m :: * -> *).
Quote m =>
HsSemanticTokenType -> Code m HsSemanticTokenType
Lift)
instance Default SemanticTokensConfig where
def :: SemanticTokensConfig
def = STC
{ stFunction :: SemanticTokenTypes
stFunction = SemanticTokenTypes
SemanticTokenTypes_Function
, stVariable :: SemanticTokenTypes
stVariable = SemanticTokenTypes
SemanticTokenTypes_Variable
, stDataConstructor :: SemanticTokenTypes
stDataConstructor = SemanticTokenTypes
SemanticTokenTypes_EnumMember
, stTypeVariable :: SemanticTokenTypes
stTypeVariable = SemanticTokenTypes
SemanticTokenTypes_TypeParameter
, stClassMethod :: SemanticTokenTypes
stClassMethod = SemanticTokenTypes
SemanticTokenTypes_Method
, stPatternSynonym :: SemanticTokenTypes
stPatternSynonym = SemanticTokenTypes
SemanticTokenTypes_Macro
, stTypeConstructor :: SemanticTokenTypes
stTypeConstructor = SemanticTokenTypes
SemanticTokenTypes_Enum
, stClass :: SemanticTokenTypes
stClass = SemanticTokenTypes
SemanticTokenTypes_Class
, stTypeSynonym :: SemanticTokenTypes
stTypeSynonym = SemanticTokenTypes
SemanticTokenTypes_Type
, stTypeFamily :: SemanticTokenTypes
stTypeFamily = SemanticTokenTypes
SemanticTokenTypes_Interface
, stRecordField :: SemanticTokenTypes
stRecordField = SemanticTokenTypes
SemanticTokenTypes_Property
, stModule :: SemanticTokenTypes
stModule = SemanticTokenTypes
SemanticTokenTypes_Namespace
, stOperator :: SemanticTokenTypes
stOperator = SemanticTokenTypes
SemanticTokenTypes_Operator
}
data SemanticTokensConfig = STC
{ SemanticTokensConfig -> SemanticTokenTypes
stFunction :: !SemanticTokenTypes
, SemanticTokensConfig -> SemanticTokenTypes
stVariable :: !SemanticTokenTypes
, SemanticTokensConfig -> SemanticTokenTypes
stDataConstructor :: !SemanticTokenTypes
, SemanticTokensConfig -> SemanticTokenTypes
stTypeVariable :: !SemanticTokenTypes
, SemanticTokensConfig -> SemanticTokenTypes
stClassMethod :: !SemanticTokenTypes
, SemanticTokensConfig -> SemanticTokenTypes
stPatternSynonym :: !SemanticTokenTypes
, SemanticTokensConfig -> SemanticTokenTypes
stTypeConstructor :: !SemanticTokenTypes
, SemanticTokensConfig -> SemanticTokenTypes
stClass :: !SemanticTokenTypes
, SemanticTokensConfig -> SemanticTokenTypes
stTypeSynonym :: !SemanticTokenTypes
, SemanticTokensConfig -> SemanticTokenTypes
stTypeFamily :: !SemanticTokenTypes
, SemanticTokensConfig -> SemanticTokenTypes
stRecordField :: !SemanticTokenTypes
, SemanticTokensConfig -> SemanticTokenTypes
stModule :: !SemanticTokenTypes
, SemanticTokensConfig -> SemanticTokenTypes
stOperator :: !SemanticTokenTypes
} deriving ((forall x. SemanticTokensConfig -> Rep SemanticTokensConfig x)
-> (forall x. Rep SemanticTokensConfig x -> SemanticTokensConfig)
-> Generic SemanticTokensConfig
forall x. Rep SemanticTokensConfig x -> SemanticTokensConfig
forall x. SemanticTokensConfig -> Rep SemanticTokensConfig x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. SemanticTokensConfig -> Rep SemanticTokensConfig x
from :: forall x. SemanticTokensConfig -> Rep SemanticTokensConfig x
$cto :: forall x. Rep SemanticTokensConfig x -> SemanticTokensConfig
to :: forall x. Rep SemanticTokensConfig x -> SemanticTokensConfig
Generic, Int -> SemanticTokensConfig -> ShowS
[SemanticTokensConfig] -> ShowS
SemanticTokensConfig -> String
(Int -> SemanticTokensConfig -> ShowS)
-> (SemanticTokensConfig -> String)
-> ([SemanticTokensConfig] -> ShowS)
-> Show SemanticTokensConfig
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> SemanticTokensConfig -> ShowS
showsPrec :: Int -> SemanticTokensConfig -> ShowS
$cshow :: SemanticTokensConfig -> String
show :: SemanticTokensConfig -> String
$cshowList :: [SemanticTokensConfig] -> ShowS
showList :: [SemanticTokensConfig] -> ShowS
Show)
instance Semigroup HsSemanticTokenType where
HsSemanticTokenType
a <> :: HsSemanticTokenType -> HsSemanticTokenType -> HsSemanticTokenType
<> HsSemanticTokenType
b = HsSemanticTokenType -> HsSemanticTokenType -> HsSemanticTokenType
forall a. Ord a => a -> a -> a
max HsSemanticTokenType
a HsSemanticTokenType
b
data SemanticTokenOriginal tokenType = SemanticTokenOriginal
{ forall tokenType. SemanticTokenOriginal tokenType -> tokenType
_tokenType :: tokenType,
forall tokenType. SemanticTokenOriginal tokenType -> Loc
_loc :: Loc,
forall tokenType. SemanticTokenOriginal tokenType -> String
_name :: String
}
deriving (SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Bool
(SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Bool)
-> (SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Bool)
-> Eq (SemanticTokenOriginal tokenType)
forall tokenType.
Eq tokenType =>
SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: forall tokenType.
Eq tokenType =>
SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Bool
== :: SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Bool
$c/= :: forall tokenType.
Eq tokenType =>
SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Bool
/= :: SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Bool
Eq, Eq (SemanticTokenOriginal tokenType)
Eq (SemanticTokenOriginal tokenType) =>
(SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Ordering)
-> (SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Bool)
-> (SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Bool)
-> (SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Bool)
-> (SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Bool)
-> (SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType)
-> (SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType)
-> Ord (SemanticTokenOriginal tokenType)
SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Bool
SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Ordering
SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
forall tokenType.
Ord tokenType =>
Eq (SemanticTokenOriginal tokenType)
forall tokenType.
Ord tokenType =>
SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Bool
forall tokenType.
Ord tokenType =>
SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Ordering
forall tokenType.
Ord tokenType =>
SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType
$ccompare :: forall tokenType.
Ord tokenType =>
SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Ordering
compare :: SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Ordering
$c< :: forall tokenType.
Ord tokenType =>
SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Bool
< :: SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Bool
$c<= :: forall tokenType.
Ord tokenType =>
SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Bool
<= :: SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Bool
$c> :: forall tokenType.
Ord tokenType =>
SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Bool
> :: SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Bool
$c>= :: forall tokenType.
Ord tokenType =>
SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Bool
>= :: SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType -> Bool
$cmax :: forall tokenType.
Ord tokenType =>
SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType
max :: SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType
$cmin :: forall tokenType.
Ord tokenType =>
SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType
min :: SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType
-> SemanticTokenOriginal tokenType
Ord)
instance (Show tokenType) => Show (SemanticTokenOriginal tokenType) where
show :: SemanticTokenOriginal tokenType -> String
show (SemanticTokenOriginal tokenType
tk Loc
loc String
name) = Loc -> String
forall a. Show a => a -> String
show Loc
loc String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
" " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> tokenType -> String
forall a. Show a => a -> String
show tokenType
tk String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
" " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> ShowS
forall a. Show a => a -> String
show String
name
data Loc = Loc
{ Loc -> UInt
_line :: UInt,
Loc -> UInt
_startChar :: UInt,
Loc -> UInt
_len :: UInt
}
deriving (Loc -> Loc -> Bool
(Loc -> Loc -> Bool) -> (Loc -> Loc -> Bool) -> Eq Loc
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: Loc -> Loc -> Bool
== :: Loc -> Loc -> Bool
$c/= :: Loc -> Loc -> Bool
/= :: Loc -> Loc -> Bool
Eq, Eq Loc
Eq Loc =>
(Loc -> Loc -> Ordering)
-> (Loc -> Loc -> Bool)
-> (Loc -> Loc -> Bool)
-> (Loc -> Loc -> Bool)
-> (Loc -> Loc -> Bool)
-> (Loc -> Loc -> Loc)
-> (Loc -> Loc -> Loc)
-> Ord Loc
Loc -> Loc -> Bool
Loc -> Loc -> Ordering
Loc -> Loc -> Loc
forall a.
Eq a =>
(a -> a -> Ordering)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> Bool)
-> (a -> a -> a)
-> (a -> a -> a)
-> Ord a
$ccompare :: Loc -> Loc -> Ordering
compare :: Loc -> Loc -> Ordering
$c< :: Loc -> Loc -> Bool
< :: Loc -> Loc -> Bool
$c<= :: Loc -> Loc -> Bool
<= :: Loc -> Loc -> Bool
$c> :: Loc -> Loc -> Bool
> :: Loc -> Loc -> Bool
$c>= :: Loc -> Loc -> Bool
>= :: Loc -> Loc -> Bool
$cmax :: Loc -> Loc -> Loc
max :: Loc -> Loc -> Loc
$cmin :: Loc -> Loc -> Loc
min :: Loc -> Loc -> Loc
Ord)
instance Show Loc where
show :: Loc -> String
show (Loc UInt
line UInt
startChar UInt
len) = UInt -> String
forall a. Show a => a -> String
show UInt
line String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
":" String -> ShowS
forall a. Semigroup a => a -> a -> a
<> UInt -> String
forall a. Show a => a -> String
show UInt
startChar String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
"-" String -> ShowS
forall a. Semigroup a => a -> a -> a
<> UInt -> String
forall a. Show a => a -> String
show (UInt
startChar UInt -> UInt -> UInt
forall a. Num a => a -> a -> a
+ UInt
len)
data GetSemanticTokens = GetSemanticTokens
deriving (GetSemanticTokens -> GetSemanticTokens -> Bool
(GetSemanticTokens -> GetSemanticTokens -> Bool)
-> (GetSemanticTokens -> GetSemanticTokens -> Bool)
-> Eq GetSemanticTokens
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: GetSemanticTokens -> GetSemanticTokens -> Bool
== :: GetSemanticTokens -> GetSemanticTokens -> Bool
$c/= :: GetSemanticTokens -> GetSemanticTokens -> Bool
/= :: GetSemanticTokens -> GetSemanticTokens -> Bool
Eq, Int -> GetSemanticTokens -> ShowS
[GetSemanticTokens] -> ShowS
GetSemanticTokens -> String
(Int -> GetSemanticTokens -> ShowS)
-> (GetSemanticTokens -> String)
-> ([GetSemanticTokens] -> ShowS)
-> Show GetSemanticTokens
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> GetSemanticTokens -> ShowS
showsPrec :: Int -> GetSemanticTokens -> ShowS
$cshow :: GetSemanticTokens -> String
show :: GetSemanticTokens -> String
$cshowList :: [GetSemanticTokens] -> ShowS
showList :: [GetSemanticTokens] -> ShowS
Show, Typeable, (forall x. GetSemanticTokens -> Rep GetSemanticTokens x)
-> (forall x. Rep GetSemanticTokens x -> GetSemanticTokens)
-> Generic GetSemanticTokens
forall x. Rep GetSemanticTokens x -> GetSemanticTokens
forall x. GetSemanticTokens -> Rep GetSemanticTokens x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. GetSemanticTokens -> Rep GetSemanticTokens x
from :: forall x. GetSemanticTokens -> Rep GetSemanticTokens x
$cto :: forall x. Rep GetSemanticTokens x -> GetSemanticTokens
to :: forall x. Rep GetSemanticTokens x -> GetSemanticTokens
Generic)
instance Hashable GetSemanticTokens
instance NFData GetSemanticTokens
type RangeSemanticTokenTypeList = [(Range, HsSemanticTokenType)]
newtype RangeHsSemanticTokenTypes = RangeHsSemanticTokenTypes {RangeHsSemanticTokenTypes -> RangeSemanticTokenTypeList
rangeSemanticList :: RangeSemanticTokenTypeList}
instance NFData RangeHsSemanticTokenTypes where
rnf :: RangeHsSemanticTokenTypes -> ()
rnf :: RangeHsSemanticTokenTypes -> ()
rnf (RangeHsSemanticTokenTypes RangeSemanticTokenTypeList
a) = RangeSemanticTokenTypeList -> ()
forall a. a -> ()
rwhnf RangeSemanticTokenTypeList
a
instance Show RangeHsSemanticTokenTypes where
show :: RangeHsSemanticTokenTypes -> String
show (RangeHsSemanticTokenTypes RangeSemanticTokenTypeList
xs) = [String] -> String
unlines ([String] -> String) -> [String] -> String
forall a b. (a -> b) -> a -> b
$ ((Range, HsSemanticTokenType) -> String)
-> RangeSemanticTokenTypeList -> [String]
forall a b. (a -> b) -> [a] -> [b]
map (Range, HsSemanticTokenType) -> String
showRangeToken RangeSemanticTokenTypeList
xs
showRangeToken :: (Range, HsSemanticTokenType) -> String
showRangeToken :: (Range, HsSemanticTokenType) -> String
showRangeToken (Range
ran, HsSemanticTokenType
tk) = Range -> String
showRange Range
ran String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
" " String -> ShowS
forall a. Semigroup a => a -> a -> a
<> HsSemanticTokenType -> String
forall a. Show a => a -> String
show HsSemanticTokenType
tk
showRange :: Range -> String
showRange :: Range -> String
showRange (Range (Position UInt
l1 UInt
c1) (Position UInt
l2 UInt
c2)) = UInt -> String
forall a. Show a => a -> String
show UInt
l1 String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
":" String -> ShowS
forall a. Semigroup a => a -> a -> a
<> UInt -> String
forall a. Show a => a -> String
show UInt
c1 String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
"-" String -> ShowS
forall a. Semigroup a => a -> a -> a
<> UInt -> String
forall a. Show a => a -> String
show UInt
l2 String -> ShowS
forall a. Semigroup a => a -> a -> a
<> String
":" String -> ShowS
forall a. Semigroup a => a -> a -> a
<> UInt -> String
forall a. Show a => a -> String
show UInt
c2
type instance RuleResult GetSemanticTokens = RangeHsSemanticTokenTypes
data HieFunMaskKind kind where
HieFreshFun :: HieFunMaskKind Type
HieFromDiskFun :: A.Array TypeIndex Bool -> HieFunMaskKind TypeIndex
data SemanticLog
= LogShake Shake.Log
| LogDependencyError PluginError
| LogNoAST FilePath
| LogConfig SemanticTokensConfig
| LogMsg String
| LogNoVF
| LogSemanticTokensDeltaMisMatch Text (Maybe Text)
instance Pretty SemanticLog where
pretty :: forall ann. SemanticLog -> Doc ann
pretty SemanticLog
theLog = case SemanticLog
theLog of
LogShake Log
shakeLog -> Log -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. Log -> Doc ann
pretty Log
shakeLog
LogNoAST String
path -> Doc ann
"no HieAst exist for file" Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
path
SemanticLog
LogNoVF -> Doc ann
"no VirtualSourceFile exist for file"
LogConfig SemanticTokensConfig
config -> Doc ann
"SemanticTokensConfig_: " Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty (SemanticTokensConfig -> String
forall a. Show a => a -> String
show SemanticTokensConfig
config)
LogMsg String
msg -> Doc ann
"SemanticLog Debug Message: " Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> String -> Doc ann
forall ann. String -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty String
msg
LogSemanticTokensDeltaMisMatch Text
previousIdFromRequest Maybe Text
previousIdFromCache
-> Doc ann
"SemanticTokensDeltaMisMatch: previousIdFromRequest: " Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Text -> Doc ann
forall ann. Text -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Text
previousIdFromRequest
Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Doc ann
" previousIdFromCache: " Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> Maybe Text -> Doc ann
forall ann. Maybe Text -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty Maybe Text
previousIdFromCache
LogDependencyError PluginError
err -> Doc ann
"SemanticTokens' dependency error: " Doc ann -> Doc ann -> Doc ann
forall a. Semigroup a => a -> a -> a
<> PluginError -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. PluginError -> Doc ann
pretty PluginError
err
type SemanticTokenId = Text