{-# LANGUAGE GADTs #-}
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Haskell.Debug.Adapter.State.GHCiRun where
import Control.Monad.IO.Class
import qualified System.Log.Logger as L
import qualified Haskell.DAP as DAP
import Haskell.Debug.Adapter.Constant
import Haskell.Debug.Adapter.Type
import Haskell.Debug.Adapter.State.GHCiRun.ConfigurationDone()
import qualified Haskell.Debug.Adapter.State.Utility as SU
import qualified Haskell.Debug.Adapter.Utility as U
instance AppStateIF GHCiRunState where
entryAction GHCiRunState = do
liftIO $ L.debugM _LOG_APP "GHCiRunState entryAction called."
return ()
exitAction GHCiRunState = do
liftIO $ L.debugM _LOG_APP "GHCiRunState exitAction called."
return ()
getStateRequest GHCiRunState (WrapRequest (InitializeRequest req)) = SU.unsupported $ show req
getStateRequest GHCiRunState (WrapRequest (LaunchRequest req)) = SU.unsupported $ show req
getStateRequest GHCiRunState (WrapRequest (DisconnectRequest req)) = SU.unsupported $ show req
getStateRequest GHCiRunState (WrapRequest (PauseRequest req)) = SU.unsupported $ show req
getStateRequest GHCiRunState (WrapRequest (TerminateRequest req)) = return . WrapStateRequest $ GHCiRun_Terminate req
getStateRequest GHCiRunState (WrapRequest (SetBreakpointsRequest req)) = return . WrapStateRequest $ GHCiRun_SetBreakpoints req
getStateRequest GHCiRunState (WrapRequest (SetFunctionBreakpointsRequest req)) = return . WrapStateRequest $ GHCiRun_SetFunctionBreakpoints req
getStateRequest GHCiRunState (WrapRequest (SetExceptionBreakpointsRequest req)) = return . WrapStateRequest $ GHCiRun_SetExceptionBreakpoints req
getStateRequest GHCiRunState (WrapRequest (ConfigurationDoneRequest req)) = return . WrapStateRequest $ GHCiRun_ConfigurationDone req
getStateRequest GHCiRunState (WrapRequest (ThreadsRequest req)) = return . WrapStateRequest $ GHCiRun_Threads req
getStateRequest GHCiRunState (WrapRequest (StackTraceRequest req)) = return . WrapStateRequest $ GHCiRun_StackTrace req
getStateRequest GHCiRunState (WrapRequest (ScopesRequest req)) = return . WrapStateRequest $ GHCiRun_Scopes req
getStateRequest GHCiRunState (WrapRequest (VariablesRequest req)) = return . WrapStateRequest $ GHCiRun_Variables req
getStateRequest GHCiRunState (WrapRequest (ContinueRequest req)) = return . WrapStateRequest $ GHCiRun_Continue req
getStateRequest GHCiRunState (WrapRequest (NextRequest req)) = return . WrapStateRequest $ GHCiRun_Next req
getStateRequest GHCiRunState (WrapRequest (StepInRequest req)) = return . WrapStateRequest $ GHCiRun_StepIn req
getStateRequest GHCiRunState (WrapRequest (EvaluateRequest req)) = return . WrapStateRequest $ GHCiRun_Evaluate req
getStateRequest GHCiRunState (WrapRequest (CompletionsRequest req)) = return . WrapStateRequest $ GHCiRun_Completions req
getStateRequest GHCiRunState (WrapRequest (InternalTransitRequest req)) = SU.unsupported $ show req
getStateRequest GHCiRunState (WrapRequest (InternalTerminateRequest req)) = return . WrapStateRequest $ GHCiRun_InternalTerminate req
getStateRequest GHCiRunState (WrapRequest (InternalLoadRequest req)) = return . WrapStateRequest $ GHCiRun_InternalLoad req
instance StateRequestIF GHCiRunState DAP.SetBreakpointsRequest where
action (GHCiRun_SetBreakpoints req) = do
liftIO $ L.debugM _LOG_APP $ "GHCiRunState SetBreakpointsRequest called. " ++ show req
SU.setBreakpointsRequest req
instance StateRequestIF GHCiRunState DAP.SetExceptionBreakpointsRequest where
action (GHCiRun_SetExceptionBreakpoints req) = do
liftIO $ L.debugM _LOG_APP $ "GHCiRunState SetExceptionBreakpointsRequest called. " ++ show req
SU.setExceptionBreakpointsRequest req
instance StateRequestIF GHCiRunState DAP.SetFunctionBreakpointsRequest where
action (GHCiRun_SetFunctionBreakpoints req) = do
liftIO $ L.debugM _LOG_APP $ "GHCiRunState SetFunctionBreakpointsRequest called. " ++ show req
SU.setFunctionBreakpointsRequest req
instance StateRequestIF GHCiRunState DAP.TerminateRequest where
action (GHCiRun_Terminate req) = do
liftIO $ L.debugM _LOG_APP $ "GHCiRunState TerminateRequest called. " ++ show req
SU.terminateRequest req
return $ Just GHCiRun_Shutdown
instance StateRequestIF GHCiRunState DAP.ThreadsRequest where
action (GHCiRun_Threads req) = do
liftIO $ L.debugM _LOG_APP $ "GHCiRunState ThreadsRequest called. " ++ show req
resSeq <- U.getIncreasedResponseSequence
let res = DAP.defaultThreadsResponse {
DAP.seqThreadsResponse = resSeq
, DAP.request_seqThreadsResponse = DAP.seqThreadsRequest req
, DAP.successThreadsResponse = False
, DAP.messageThreadsResponse = "GHCiRun State. debugging not started."
}
U.addResponse $ ThreadsResponse res
return Nothing
instance StateRequestIF GHCiRunState DAP.StackTraceRequest where
action (GHCiRun_StackTrace req) = do
liftIO $ L.debugM _LOG_APP $ "GHCiRunState StackTraceRequest called. " ++ show req
resSeq <- U.getIncreasedResponseSequence
let res = DAP.defaultStackTraceResponse {
DAP.seqStackTraceResponse = resSeq
, DAP.request_seqStackTraceResponse = DAP.seqStackTraceRequest req
, DAP.successStackTraceResponse = False
, DAP.messageStackTraceResponse = "GHCiRun State. debugging not started."
}
U.addResponse $ StackTraceResponse res
return Nothing
instance StateRequestIF GHCiRunState DAP.ScopesRequest where
action (GHCiRun_Scopes req) = do
liftIO $ L.debugM _LOG_APP $ "GHCiRunState ScopesRequest called. " ++ show req
resSeq <- U.getIncreasedResponseSequence
let res = DAP.defaultScopesResponse {
DAP.seqScopesResponse = resSeq
, DAP.request_seqScopesResponse = DAP.seqScopesRequest req
, DAP.successScopesResponse = False
, DAP.messageScopesResponse = "GHCiRun State. debugging not started."
}
U.addResponse $ ScopesResponse res
return Nothing
instance StateRequestIF GHCiRunState DAP.VariablesRequest where
action (GHCiRun_Variables req) = do
liftIO $ L.debugM _LOG_APP $ "GHCiRunState VariablesRequest called. " ++ show req
resSeq <- U.getIncreasedResponseSequence
let res = DAP.defaultVariablesResponse {
DAP.seqVariablesResponse = resSeq
, DAP.request_seqVariablesResponse = DAP.seqVariablesRequest req
, DAP.successVariablesResponse = False
, DAP.messageVariablesResponse = "GHCiRun State. debugging not started."
}
U.addResponse $ VariablesResponse res
return Nothing
instance StateRequestIF GHCiRunState DAP.ContinueRequest where
action (GHCiRun_Continue req) = do
liftIO $ L.debugM _LOG_APP $ "GHCiRunState ContinueRequest called. " ++ show req
resSeq <- U.getIncreasedResponseSequence
let res = DAP.defaultContinueResponse {
DAP.seqContinueResponse = resSeq
, DAP.request_seqContinueResponse = DAP.seqContinueRequest req
, DAP.successContinueResponse = True
}
U.addResponse $ ContinueResponse res
return $ Just GHCiRun_DebugRun
instance StateRequestIF GHCiRunState DAP.NextRequest where
action (GHCiRun_Next req) = do
liftIO $ L.debugM _LOG_APP $ "GHCiRunState NextRequest called. " ++ show req
resSeq <- U.getIncreasedResponseSequence
let res = DAP.defaultNextResponse {
DAP.seqNextResponse = resSeq
, DAP.request_seqNextResponse = DAP.seqNextRequest req
, DAP.successNextResponse = True
}
U.addResponse $ NextResponse res
return $ Just GHCiRun_DebugRun
instance StateRequestIF GHCiRunState DAP.StepInRequest where
action (GHCiRun_StepIn req) = do
liftIO $ L.debugM _LOG_APP $ "GHCiRunState StepInRequest called. " ++ show req
resSeq <- U.getIncreasedResponseSequence
let res = DAP.defaultStepInResponse {
DAP.seqStepInResponse = resSeq
, DAP.request_seqStepInResponse = DAP.seqStepInRequest req
, DAP.successStepInResponse = True
}
U.addResponse $ StepInResponse res
return $ Just GHCiRun_DebugRun
instance StateRequestIF GHCiRunState DAP.EvaluateRequest where
action (GHCiRun_Evaluate req) = do
liftIO $ L.debugM _LOG_APP $ "GHCiRunState EvaluateRequest called. " ++ show req
SU.evaluateRequest req
instance StateRequestIF GHCiRunState DAP.CompletionsRequest where
action (GHCiRun_Completions req) = do
liftIO $ L.debugM _LOG_APP $ "GHCiRunState CompletionsRequest called. " ++ show req
SU.completionsRequest req
instance StateRequestIF GHCiRunState HdaInternalTerminateRequest where
action (GHCiRun_InternalTerminate req) = do
liftIO $ L.debugM _LOG_APP $ "GHCiRunState InternalTerminateRequest called. " ++ show req
SU.internalTerminateRequest
return $ Just GHCiRun_Shutdown
instance StateRequestIF GHCiRunState HdaInternalLoadRequest where
action (GHCiRun_InternalLoad req) = do
liftIO $ L.debugM _LOG_APP $ "GHCiRunState InternalLoadRequest called. " ++ show req
SU.loadHsFile $ pathHdaInternalLoadRequest req
return $ Just GHCiRun_Contaminated