packages feed

ghci-dap-0.0.16.0: app/GHCi/DAP/Type.hs

{-# LANGUAGE CPP #-}

module GHCi.DAP.Type where

import qualified GHC as G

import qualified Data.Map as M
import Control.Concurrent

import qualified GHCi.GhcApiCompat as GAC


import qualified Haskell.DAP as D


-- |
--
type EvalString = String


-- |
--
type ModuleName = String


-- |
--
type MVarDAPContext = MVar DAPContext


-- |
--
data LogLevel = ErrorLogLevel | WarnLogLevel | InfoLogLevel | DebugLogLevel
  deriving (Eq, Ord)

instance Show LogLevel where
  show ErrorLogLevel = "[DAP][ERROR]"
  show WarnLogLevel  = "[DAP][WARN]"
  show InfoLogLevel  = "[DAP][INFO]"
  show DebugLogLevel = "[DAP][DEBUG]"

-- |
--
data SourceBreakpointInfo = SourceBreakpointInfo {
    modNameSourceBreakpointInfo :: ModuleName
  , srcBPSourceBreakpointInfo   :: D.SourceBreakpoint
  , hitCntSourceBreakpointInfo  :: Int
  } deriving (Show, Read, Eq)


-- |
--
data DAPContext = DAPContext {
    variableReferenceMapDAPContext :: M.Map Int (GAC.Term, EvalString)
  , bindingDAPContext              :: [G.TyThing]
  , bindingGlobalDAPContext        :: [G.TyThing]
  , frameIdDAPContext              :: Int
  , srcBPsDAPContext               :: M.Map Int SourceBreakpointInfo
  , funcBPsDAPContext              :: M.Map Int (D.FunctionBreakpoint, Int)
  , runStmtDeclExceptionDAPContext :: Maybe GAC.SourceError
  , logLevelDAPContext             :: LogLevel
  , stackTraceResultDAPContext     :: Maybe (G.Resume, [G.History])
  , bindingNamesDAPContext         :: [G.Name]
  , isInspectVariableDAPContext    :: Bool
  , continueExecResultDAPContext   :: Maybe G.ExecResult
  }


-- |
--
defaultDAPContext :: DAPContext
defaultDAPContext = DAPContext {
    variableReferenceMapDAPContext = M.fromList []
  , bindingDAPContext = []
  , bindingGlobalDAPContext = []
  , frameIdDAPContext = 0
  , srcBPsDAPContext  = M.fromList []
  , funcBPsDAPContext = M.fromList []
  , runStmtDeclExceptionDAPContext = Nothing
  , logLevelDAPContext = InfoLogLevel
  , stackTraceResultDAPContext = Nothing
  , bindingNamesDAPContext = []
  , isInspectVariableDAPContext = True
  , continueExecResultDAPContext = Nothing
  }