module Development.IDE.Plugin.Completions.Types (
module Development.IDE.Plugin.Completions.Types
) where
import Control.DeepSeq
import qualified Data.Map as Map
import qualified Data.Text as T
import GHC
import Development.IDE.Spans.Common
data Backtick = Surrounded | LeftSide deriving Show
data CompItem = CI
{ origName :: Name
, importedFrom :: T.Text
, thingType :: Maybe Type
, label :: T.Text
, isInfix :: Maybe Backtick
, docs :: SpanDoc
}
instance Show CompItem where
show CI { .. } = "CompItem { origName = \"" ++ showGhc origName ++ "\""
++ ", importedFrom = " ++ show importedFrom
++ ", thingType = " ++ show (fmap showGhc thingType)
++ ", label = " ++ show label
++ ", isInfix = " ++ show isInfix
++ ", docs = " ++ show docs
++ " } "
instance Eq CompItem where
ci1 == ci2 = origName ci1 == origName ci2
instance Ord CompItem where
compare ci1 ci2 = origName ci1 `compare` origName ci2
newtype QualCompls
= QualCompls { getQualCompls :: Map.Map T.Text [CompItem] }
deriving Show
instance Semigroup QualCompls where
(QualCompls a) <> (QualCompls b) = QualCompls $ Map.unionWith (++) a b
instance Monoid QualCompls where
mempty = QualCompls Map.empty
mappend = (Prelude.<>)
data CachedCompletions = CC
{ allModNamesAsNS :: [T.Text]
, unqualCompls :: [CompItem]
, qualCompls :: QualCompls
, importableModules :: [T.Text]
} deriving Show
instance NFData CachedCompletions where
rnf = rwhnf