{-# LANGUAGE GADTs #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Haskell.Debug.Adapter.State.DebugRun where
import Control.Monad.IO.Class
import qualified System.Log.Logger as L
import Control.Monad.State.Lazy
import Control.Monad.Except
import Control.Lens
import qualified Text.Read as R
import qualified Haskell.DAP as DAP
import Haskell.Debug.Adapter.Constant
import qualified Haskell.Debug.Adapter.Utility as U
import Haskell.Debug.Adapter.Type
import qualified Haskell.Debug.Adapter.GHCi as P
import Haskell.Debug.Adapter.State.DebugRun.Threads()
import Haskell.Debug.Adapter.State.DebugRun.StackTrace()
import Haskell.Debug.Adapter.State.DebugRun.Scopes()
import Haskell.Debug.Adapter.State.DebugRun.Variables()
import Haskell.Debug.Adapter.State.DebugRun.Continue()
import Haskell.Debug.Adapter.State.DebugRun.Next()
import Haskell.Debug.Adapter.State.DebugRun.StepIn()
import Haskell.Debug.Adapter.State.DebugRun.Terminate()
import Haskell.Debug.Adapter.State.DebugRun.InternalTerminate()
import qualified Haskell.Debug.Adapter.State.Utility as SU
instance AppStateIF DebugRunStateData where
entryAction :: AppState DebugRunStateData -> AppContext ()
entryAction AppState DebugRunStateData
DebugRunState = do
IO () -> AppContext ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> AppContext ()) -> IO () -> AppContext ()
forall a b. (a -> b) -> a -> b
$ String -> String -> IO ()
L.debugM String
_LOG_APP String
"DebugRunState entryAction called."
AppContext ()
goEntry
exitAction :: AppState DebugRunStateData -> AppContext ()
exitAction AppState DebugRunStateData
DebugRunState = do
IO () -> AppContext ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> AppContext ()) -> IO () -> AppContext ()
forall a b. (a -> b) -> a -> b
$ String -> String -> IO ()
L.debugM String
_LOG_APP String
"DebugRunState exitAction called."
() -> AppContext ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
doActivity :: AppState DebugRunStateData
-> WrapRequest -> AppContext (Maybe StateTransit)
doActivity AppState DebugRunStateData
s (WrapRequest r :: Request a
r@InitializeRequest{}) = AppState DebugRunStateData
-> Request a -> AppContext (Maybe StateTransit)
forall s r.
StateActivityIF s r =>
AppState s -> Request r -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
s Request a
r
doActivity AppState DebugRunStateData
s (WrapRequest r :: Request a
r@LaunchRequest{}) = AppState DebugRunStateData
-> Request a -> AppContext (Maybe StateTransit)
forall s r.
StateActivityIF s r =>
AppState s -> Request r -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
s Request a
r
doActivity AppState DebugRunStateData
s (WrapRequest r :: Request a
r@DisconnectRequest{}) = AppState DebugRunStateData
-> Request a -> AppContext (Maybe StateTransit)
forall s r.
StateActivityIF s r =>
AppState s -> Request r -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
s Request a
r
doActivity AppState DebugRunStateData
s (WrapRequest r :: Request a
r@PauseRequest{}) = AppState DebugRunStateData
-> Request a -> AppContext (Maybe StateTransit)
forall s r.
StateActivityIF s r =>
AppState s -> Request r -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
s Request a
r
doActivity AppState DebugRunStateData
s (WrapRequest r :: Request a
r@TerminateRequest{}) = AppState DebugRunStateData
-> Request a -> AppContext (Maybe StateTransit)
forall s r.
StateActivityIF s r =>
AppState s -> Request r -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
s Request a
r
doActivity AppState DebugRunStateData
s (WrapRequest r :: Request a
r@SetBreakpointsRequest{}) = AppState DebugRunStateData
-> Request a -> AppContext (Maybe StateTransit)
forall s r.
StateActivityIF s r =>
AppState s -> Request r -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
s Request a
r
doActivity AppState DebugRunStateData
s (WrapRequest r :: Request a
r@SetFunctionBreakpointsRequest{}) = AppState DebugRunStateData
-> Request a -> AppContext (Maybe StateTransit)
forall s r.
StateActivityIF s r =>
AppState s -> Request r -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
s Request a
r
doActivity AppState DebugRunStateData
s (WrapRequest r :: Request a
r@SetExceptionBreakpointsRequest{}) = AppState DebugRunStateData
-> Request a -> AppContext (Maybe StateTransit)
forall s r.
StateActivityIF s r =>
AppState s -> Request r -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
s Request a
r
doActivity AppState DebugRunStateData
s (WrapRequest r :: Request a
r@ConfigurationDoneRequest{}) = AppState DebugRunStateData
-> Request a -> AppContext (Maybe StateTransit)
forall s r.
StateActivityIF s r =>
AppState s -> Request r -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
s Request a
r
doActivity AppState DebugRunStateData
s (WrapRequest r :: Request a
r@ThreadsRequest{}) = AppState DebugRunStateData
-> Request a -> AppContext (Maybe StateTransit)
forall s r.
StateActivityIF s r =>
AppState s -> Request r -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
s Request a
r
doActivity AppState DebugRunStateData
s (WrapRequest r :: Request a
r@StackTraceRequest{}) = AppState DebugRunStateData
-> Request a -> AppContext (Maybe StateTransit)
forall s r.
StateActivityIF s r =>
AppState s -> Request r -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
s Request a
r
doActivity AppState DebugRunStateData
s (WrapRequest r :: Request a
r@ScopesRequest{}) = AppState DebugRunStateData
-> Request a -> AppContext (Maybe StateTransit)
forall s r.
StateActivityIF s r =>
AppState s -> Request r -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
s Request a
r
doActivity AppState DebugRunStateData
s (WrapRequest r :: Request a
r@VariablesRequest{}) = AppState DebugRunStateData
-> Request a -> AppContext (Maybe StateTransit)
forall s r.
StateActivityIF s r =>
AppState s -> Request r -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
s Request a
r
doActivity AppState DebugRunStateData
s (WrapRequest r :: Request a
r@ContinueRequest{}) = AppState DebugRunStateData
-> Request a -> AppContext (Maybe StateTransit)
forall s r.
StateActivityIF s r =>
AppState s -> Request r -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
s Request a
r
doActivity AppState DebugRunStateData
s (WrapRequest r :: Request a
r@NextRequest{}) = AppState DebugRunStateData
-> Request a -> AppContext (Maybe StateTransit)
forall s r.
StateActivityIF s r =>
AppState s -> Request r -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
s Request a
r
doActivity AppState DebugRunStateData
s (WrapRequest r :: Request a
r@StepInRequest{}) = AppState DebugRunStateData
-> Request a -> AppContext (Maybe StateTransit)
forall s r.
StateActivityIF s r =>
AppState s -> Request r -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
s Request a
r
doActivity AppState DebugRunStateData
s (WrapRequest r :: Request a
r@EvaluateRequest{}) = AppState DebugRunStateData
-> Request a -> AppContext (Maybe StateTransit)
forall s r.
StateActivityIF s r =>
AppState s -> Request r -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
s Request a
r
doActivity AppState DebugRunStateData
s (WrapRequest r :: Request a
r@CompletionsRequest{}) = AppState DebugRunStateData
-> Request a -> AppContext (Maybe StateTransit)
forall s r.
StateActivityIF s r =>
AppState s -> Request r -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
s Request a
r
doActivity AppState DebugRunStateData
s (WrapRequest r :: Request a
r@InternalTransitRequest{}) = AppState DebugRunStateData
-> Request a -> AppContext (Maybe StateTransit)
forall s r.
StateActivityIF s r =>
AppState s -> Request r -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
s Request a
r
doActivity AppState DebugRunStateData
s (WrapRequest r :: Request a
r@InternalTerminateRequest{}) = AppState DebugRunStateData
-> Request a -> AppContext (Maybe StateTransit)
forall s r.
StateActivityIF s r =>
AppState s -> Request r -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
s Request a
r
doActivity AppState DebugRunStateData
s (WrapRequest r :: Request a
r@InternalLoadRequest{}) = AppState DebugRunStateData
-> Request a -> AppContext (Maybe StateTransit)
forall s r.
StateActivityIF s r =>
AppState s -> Request r -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
s Request a
r
instance StateActivityIF DebugRunStateData DAP.InitializeRequest
instance StateActivityIF DebugRunStateData DAP.LaunchRequest
instance StateActivityIF DebugRunStateData DAP.DisconnectRequest
instance StateActivityIF DebugRunStateData DAP.PauseRequest
goEntry :: AppContext ()
goEntry :: AppContext ()
goEntry = Getting Bool AppStores Bool -> AppStores -> Bool
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting Bool AppStores Bool
Lens' AppStores Bool
stopOnEntryAppStores (AppStores -> Bool)
-> StateT AppStores (ExceptT String IO) AppStores
-> StateT AppStores (ExceptT String IO) Bool
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> StateT AppStores (ExceptT String IO) AppStores
forall s (m :: * -> *). MonadState s m => m s
get StateT AppStores (ExceptT String IO) Bool
-> (Bool -> AppContext ()) -> AppContext ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
Bool
True -> AppContext ()
stopOnEntry
Bool
False -> AppContext ()
startDebug
stopOnEntry :: AppContext ()
stopOnEntry :: AppContext ()
stopOnEntry = do
String
startupFile <- Getting String AppStores String -> AppStores -> String
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting String AppStores String
Lens' AppStores String
startupAppStores (AppStores -> String)
-> StateT AppStores (ExceptT String IO) AppStores
-> StateT AppStores (ExceptT String IO) String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> StateT AppStores (ExceptT String IO) AppStores
forall s (m :: * -> *). MonadState s m => m s
get
String
startupFunc <- Getting String AppStores String -> AppStores -> String
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting String AppStores String
Lens' AppStores String
startupFuncAppStores (AppStores -> String)
-> StateT AppStores (ExceptT String IO) AppStores
-> StateT AppStores (ExceptT String IO) String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> StateT AppStores (ExceptT String IO) AppStores
forall s (m :: * -> *). MonadState s m => m s
get
let funcName :: String
funcName = if String -> Bool
forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
startupFunc then String
"main" else String
startupFunc
funcBp :: (String, FunctionBreakpoint)
funcBp = (String
startupFile, String -> Maybe String -> Maybe String -> FunctionBreakpoint
DAP.FunctionBreakpoint String
funcName Maybe String
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing)
cmd :: String
cmd = String
":dap-set-function-breakpoint " String -> String -> String
forall a. [a] -> [a] -> [a]
++ (String, FunctionBreakpoint) -> String
forall a. Show a => a -> String
U.showDAP (String, FunctionBreakpoint)
funcBp
String -> AppContext ()
P.command String
cmd
[String]
res <- AppContext [String]
P.expectPmpt
[String] -> AppContext ()
withAdhocAddDapHeader ([String] -> AppContext ()) -> [String] -> AppContext ()
forall a b. (a -> b) -> a -> b
$ (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
filter (String -> String -> Bool
U.startswith String
_DAP_HEADER) [String]
res
where
withAdhocAddDapHeader :: [String] -> AppContext ()
withAdhocAddDapHeader :: [String] -> AppContext ()
withAdhocAddDapHeader [] = do
String -> String -> AppContext ()
U.warnEV String
_LOG_APP (String -> AppContext ()) -> String -> AppContext ()
forall a b. (a -> b) -> a -> b
$ String
"can not set func breakpoint. no dap header found."
AppContext ()
startDebug
withAdhocAddDapHeader (String
str:[]) = case String -> Either String (Either String Breakpoint)
forall a. Read a => String -> Either String a
R.readEither (Int -> String -> String
forall a. Int -> [a] -> [a]
drop (String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
_DAP_HEADER) String
str) of
Left String
err -> do
String -> String -> AppContext ()
U.warnEV String
_LOG_APP (String -> AppContext ()) -> String -> AppContext ()
forall a b. (a -> b) -> a -> b
$ String
"read response body failed. " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
err String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" : " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
str
AppContext ()
startDebug
Right (Left String
err) -> do
String -> String -> AppContext ()
U.warnEV String
_LOG_APP (String -> AppContext ()) -> String -> AppContext ()
forall a b. (a -> b) -> a -> b
$ String
"set adhoc breakpoint failed. " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
err String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" : " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
str
AppContext ()
startDebug
Right (Right Breakpoint
bp) -> do
AppContext ()
startDebug
Breakpoint -> AppContext ()
adhocDelBreakpoint Breakpoint
bp
withAdhocAddDapHeader [String]
_ = do
String -> String -> AppContext ()
U.warnEV String
_LOG_APP (String -> AppContext ()) -> String -> AppContext ()
forall a b. (a -> b) -> a -> b
$ String
"can not set func breakpoint. ambiguous dap header found."
AppContext ()
startDebug
adhocDelBreakpoint :: DAP.Breakpoint -> AppContext ()
adhocDelBreakpoint :: Breakpoint -> AppContext ()
adhocDelBreakpoint Breakpoint
bp = do
let cmd :: String
cmd = String
":dap-delete-breakpoint " String -> String -> String
forall a. [a] -> [a] -> [a]
++ Breakpoint -> String
forall a. Show a => a -> String
U.showDAP Breakpoint
bp
String -> AppContext ()
P.command String
cmd
[String]
res <- AppContext [String]
P.expectPmpt
[String] -> AppContext ()
withAdhocDelDapHeader ([String] -> AppContext ()) -> [String] -> AppContext ()
forall a b. (a -> b) -> a -> b
$ (String -> Bool) -> [String] -> [String]
forall a. (a -> Bool) -> [a] -> [a]
filter (String -> String -> Bool
U.startswith String
_DAP_HEADER) [String]
res
withAdhocDelDapHeader :: [String] -> AppContext ()
withAdhocDelDapHeader :: [String] -> AppContext ()
withAdhocDelDapHeader [] = String -> AppContext ()
forall e (m :: * -> *) a. MonadError e m => e -> m a
throwError (String -> AppContext ()) -> String -> AppContext ()
forall a b. (a -> b) -> a -> b
$ String
"can not del func breakpoint. no dap header found."
withAdhocDelDapHeader (String
str:[]) = case String -> Either String (Either String ())
forall a. Read a => String -> Either String a
R.readEither (Int -> String -> String
forall a. Int -> [a] -> [a]
drop (String -> Int
forall (t :: * -> *) a. Foldable t => t a -> Int
length String
_DAP_HEADER) String
str) of
Left String
err -> String -> AppContext ()
forall e (m :: * -> *) a. MonadError e m => e -> m a
throwError (String -> AppContext ()) -> String -> AppContext ()
forall a b. (a -> b) -> a -> b
$ String
"read response body failed. " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
err String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" : " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
str
Right (Left String
err) -> String -> AppContext ()
forall e (m :: * -> *) a. MonadError e m => e -> m a
throwError (String -> AppContext ()) -> String -> AppContext ()
forall a b. (a -> b) -> a -> b
$ String
"del adhoc breakpoint failed. " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
err String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" : " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
str
Right (Right ()
res) -> () -> AppContext ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
res
withAdhocDelDapHeader [String]
_ = String -> AppContext ()
forall e (m :: * -> *) a. MonadError e m => e -> m a
throwError (String -> AppContext ()) -> String -> AppContext ()
forall a b. (a -> b) -> a -> b
$ String
"can not del func breakpoint. ambiguous dap header found."
startDebug :: AppContext ()
startDebug :: AppContext ()
startDebug = do
String
expr <- StateT AppStores (ExceptT String IO) String
getTraceExpr
let args :: ContinueRequestArguments
args = ContinueRequestArguments
DAP.defaultContinueRequestArguments {
exprContinueRequestArguments :: Maybe String
DAP.exprContinueRequestArguments = String -> Maybe String
forall a. a -> Maybe a
Just String
expr
}
ContinueRequestArguments -> AppContext ()
forall a. Show a => a -> AppContext ()
startDebugDAP ContinueRequestArguments
args
where
getTraceExpr :: StateT AppStores (ExceptT String IO) String
getTraceExpr = Getting String AppStores String -> AppStores -> String
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting String AppStores String
Lens' AppStores String
startupFuncAppStores (AppStores -> String)
-> StateT AppStores (ExceptT String IO) AppStores
-> StateT AppStores (ExceptT String IO) String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> StateT AppStores (ExceptT String IO) AppStores
forall s (m :: * -> *). MonadState s m => m s
get StateT AppStores (ExceptT String IO) String
-> (String -> StateT AppStores (ExceptT String IO) String)
-> StateT AppStores (ExceptT String IO) String
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= \case
[] -> String -> StateT AppStores (ExceptT String IO) String
forall (m :: * -> *) a. Monad m => a -> m a
return String
"main"
String
func -> do
String
funcArgs <- Getting String AppStores String -> AppStores -> String
forall s (m :: * -> *) a. MonadReader s m => Getting a s a -> m a
view Getting String AppStores String
Lens' AppStores String
startupArgsAppStores (AppStores -> String)
-> StateT AppStores (ExceptT String IO) AppStores
-> StateT AppStores (ExceptT String IO) String
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> StateT AppStores (ExceptT String IO) AppStores
forall s (m :: * -> *). MonadState s m => m s
get
String -> StateT AppStores (ExceptT String IO) String
forall (m :: * -> *) a. Monad m => a -> m a
return (String -> StateT AppStores (ExceptT String IO) String)
-> String -> StateT AppStores (ExceptT String IO) String
forall a b. (a -> b) -> a -> b
$ String -> String
U.strip (String -> String) -> String -> String
forall a b. (a -> b) -> a -> b
$ String
func String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
funcArgs
startDebugDAP :: a -> AppContext ()
startDebugDAP a
args = do
let dap :: String
dap = String
":dap-continue "
cmd :: String
cmd = String
dap String -> String -> String
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Show a => a -> String
U.showDAP a
args
dbg :: String
dbg = String
dap String -> String -> String
forall a. [a] -> [a] -> [a]
++ a -> String
forall a. Show a => a -> String
show a
args
String -> AppContext ()
P.command String
cmd
String -> String -> AppContext ()
U.debugEV String
_LOG_APP String
dbg
AppContext [String]
P.expectPmpt AppContext [String]
-> ([String] -> StateT AppStores (ExceptT String IO) String)
-> StateT AppStores (ExceptT String IO) String
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= [String] -> StateT AppStores (ExceptT String IO) String
SU.takeDapResult StateT AppStores (ExceptT String IO) String
-> (String -> AppContext ()) -> AppContext ()
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= String -> AppContext ()
dapHdl
() -> AppContext ()
forall (m :: * -> *) a. Monad m => a -> m a
return ()
dapHdl :: String -> AppContext ()
dapHdl :: String -> AppContext ()
dapHdl String
str = case String -> Either String (Either String StoppedEventBody)
forall a. Read a => String -> Either String a
R.readEither String
str of
Left String
err -> String -> String -> AppContext ()
errHdl String
str String
err
Right (Left String
err) -> String -> String -> AppContext ()
errHdl String
str String
err
Right (Right StoppedEventBody
body) -> StoppedEventBody -> AppContext ()
U.handleStoppedEventBody StoppedEventBody
body
errHdl :: String -> String -> AppContext()
errHdl :: String -> String -> AppContext ()
errHdl String
str String
err = do
let msg :: String
msg = String
"start debugging failed. " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
err String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
" : " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
str
IO () -> AppContext ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> AppContext ()) -> IO () -> AppContext ()
forall a b. (a -> b) -> a -> b
$ String -> String -> IO ()
L.errorM String
_LOG_APP String
msg
String -> AppContext ()
U.sendErrorEventLF String
msg
instance StateActivityIF DebugRunStateData DAP.SetBreakpointsRequest where
action :: AppState DebugRunStateData
-> Request SetBreakpointsRequest -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
_ (SetBreakpointsRequest SetBreakpointsRequest
req) = do
IO () -> AppContext ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> AppContext ()) -> IO () -> AppContext ()
forall a b. (a -> b) -> a -> b
$ String -> String -> IO ()
L.debugM String
_LOG_APP (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ String
"DebugRunState SetBreakpointsRequest called. " String -> String -> String
forall a. [a] -> [a] -> [a]
++ SetBreakpointsRequest -> String
forall a. Show a => a -> String
show SetBreakpointsRequest
req
SetBreakpointsRequest -> AppContext (Maybe StateTransit)
SU.setBreakpointsRequest SetBreakpointsRequest
req
instance StateActivityIF DebugRunStateData DAP.SetExceptionBreakpointsRequest where
action :: AppState DebugRunStateData
-> Request SetExceptionBreakpointsRequest
-> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
_ (SetExceptionBreakpointsRequest SetExceptionBreakpointsRequest
req) = do
IO () -> AppContext ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> AppContext ()) -> IO () -> AppContext ()
forall a b. (a -> b) -> a -> b
$ String -> String -> IO ()
L.debugM String
_LOG_APP (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ String
"DebugRunState SetExceptionBreakpointsRequest called. " String -> String -> String
forall a. [a] -> [a] -> [a]
++ SetExceptionBreakpointsRequest -> String
forall a. Show a => a -> String
show SetExceptionBreakpointsRequest
req
SetExceptionBreakpointsRequest -> AppContext (Maybe StateTransit)
SU.setExceptionBreakpointsRequest SetExceptionBreakpointsRequest
req
instance StateActivityIF DebugRunStateData DAP.SetFunctionBreakpointsRequest where
action :: AppState DebugRunStateData
-> Request SetFunctionBreakpointsRequest
-> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
_ (SetFunctionBreakpointsRequest SetFunctionBreakpointsRequest
req) = do
IO () -> AppContext ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> AppContext ()) -> IO () -> AppContext ()
forall a b. (a -> b) -> a -> b
$ String -> String -> IO ()
L.debugM String
_LOG_APP (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ String
"DebugRunState SetFunctionBreakpointsRequest called. " String -> String -> String
forall a. [a] -> [a] -> [a]
++ SetFunctionBreakpointsRequest -> String
forall a. Show a => a -> String
show SetFunctionBreakpointsRequest
req
SetFunctionBreakpointsRequest -> AppContext (Maybe StateTransit)
SU.setFunctionBreakpointsRequest SetFunctionBreakpointsRequest
req
instance StateActivityIF DebugRunStateData DAP.ConfigurationDoneRequest
instance StateActivityIF DebugRunStateData DAP.EvaluateRequest where
action :: AppState DebugRunStateData
-> Request EvaluateRequest -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
_ (EvaluateRequest EvaluateRequest
req) = do
IO () -> AppContext ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> AppContext ()) -> IO () -> AppContext ()
forall a b. (a -> b) -> a -> b
$ String -> String -> IO ()
L.debugM String
_LOG_APP (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ String
"DebugRunState EvaluateRequest called. " String -> String -> String
forall a. [a] -> [a] -> [a]
++ EvaluateRequest -> String
forall a. Show a => a -> String
show EvaluateRequest
req
EvaluateRequest -> AppContext (Maybe StateTransit)
SU.evaluateRequest EvaluateRequest
req
instance StateActivityIF DebugRunStateData DAP.CompletionsRequest where
action :: AppState DebugRunStateData
-> Request CompletionsRequest -> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
_ (CompletionsRequest CompletionsRequest
req) = do
IO () -> AppContext ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> AppContext ()) -> IO () -> AppContext ()
forall a b. (a -> b) -> a -> b
$ String -> String -> IO ()
L.debugM String
_LOG_APP (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ String
"DebugRunState CompletionsRequest called. " String -> String -> String
forall a. [a] -> [a] -> [a]
++ CompletionsRequest -> String
forall a. Show a => a -> String
show CompletionsRequest
req
CompletionsRequest -> AppContext (Maybe StateTransit)
SU.completionsRequest CompletionsRequest
req
instance StateActivityIF DebugRunStateData HdaInternalTransitRequest
instance StateActivityIF DebugRunStateData HdaInternalLoadRequest where
action :: AppState DebugRunStateData
-> Request HdaInternalLoadRequest
-> AppContext (Maybe StateTransit)
action AppState DebugRunStateData
_ (InternalLoadRequest HdaInternalLoadRequest
req) = do
IO () -> AppContext ()
forall (m :: * -> *) a. MonadIO m => IO a -> m a
liftIO (IO () -> AppContext ()) -> IO () -> AppContext ()
forall a b. (a -> b) -> a -> b
$ String -> String -> IO ()
L.debugM String
_LOG_APP (String -> IO ()) -> String -> IO ()
forall a b. (a -> b) -> a -> b
$ String
"DebugRunState InternalLoadRequest called. " String -> String -> String
forall a. [a] -> [a] -> [a]
++ HdaInternalLoadRequest -> String
forall a. Show a => a -> String
show HdaInternalLoadRequest
req
String -> AppContext ()
SU.loadHsFile (String -> AppContext ()) -> String -> AppContext ()
forall a b. (a -> b) -> a -> b
$ HdaInternalLoadRequest -> String
pathHdaInternalLoadRequest HdaInternalLoadRequest
req
Maybe StateTransit -> AppContext (Maybe StateTransit)
forall (m :: * -> *) a. Monad m => a -> m a
return (Maybe StateTransit -> AppContext (Maybe StateTransit))
-> Maybe StateTransit -> AppContext (Maybe StateTransit)
forall a b. (a -> b) -> a -> b
$ StateTransit -> Maybe StateTransit
forall a. a -> Maybe a
Just StateTransit
DebugRun_Contaminated