packages feed

haskell-debug-adapter 0.0.33.0 → 0.0.34.0

raw patch · 20 files changed

+261/−349 lines, 20 filesdep ~ghci-dapdep ~haskell-dapPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: ghci-dap, haskell-dap

API changes (from Hackage documentation)

+ Haskell.Debug.Adapter.Control: [_stdioLogFileArgData] :: ArgData -> Maybe FilePath
- Haskell.Debug.Adapter.Control: ArgData :: Maybe String -> ArgData
+ Haskell.Debug.Adapter.Control: ArgData :: Maybe String -> Maybe FilePath -> ArgData

Files

Changelog.md view
@@ -1,3 +1,10 @@+20210131 haskell-debug-adapter-0.0.34.0+  * [FIX] issue#11 Test fails to run+  * [FIX] issue#12 Debugger Freezing/Debug Actions Not Working in Visual Studio+  * [FIX] issue#16 stack.exe and ghci-dap.exe Leak When IDE Not Stopped Properly+  * [FIX][hdx4vim] issue#4 Vimspector official support++ 20200209 haskell-debug-adapter-0.0.33.0   * [INFO] support ghci-dap-0.0.14.0. 
README.md view
@@ -42,7 +42,7 @@ # Limitation Currently this project is an __experimental__ design and implementation. -* Developed and tested on windows10 ghc-8.6+* Developed and tested on windows10 ghc-8.10.3 * The source file extension must be ".hs" * Can not use STDIN handle while debugging.  
app/Main.hs view
@@ -3,7 +3,6 @@ import System.Exit import System.IO import Control.Exception.Safe-import Data.Default import Options.Applicative import Paths_haskell_debug_adapter (version) import Data.Version (showVersion)@@ -32,28 +31,22 @@ getArgs :: IO ArgData getArgs = execParser parseInfo + -- | -- parseInfo :: ParserInfo ArgData-parseInfo = info options $ mconcat+parseInfo = info (helper <*> verOpt <*> options) $ mconcat   [ fullDesc   , header ""   , footer ""   , progDesc "Please see README.md"   ] --- |----options :: Parser ArgData-options = (<*>) helper-  $ def-  <$> verOption-  <*> hackageOption  -- | ---verOption :: Parser (a -> a)-verOption = infoOption msg $ mconcat+verOpt :: Parser (a -> a)+verOpt = infoOption msg $ mconcat   [ short 'v'   , long  "version"   , help  "Show version"@@ -61,11 +54,29 @@   where     msg = "haskell-debug-adapter-" ++ showVersion version + -- | --+options  :: Parser ArgData+options  = ArgData+  <$> hackageOption+  <*> stdioLogFileOption+++-- |+-- hackageOption :: Parser (Maybe String) hackageOption = optional $ strOption $ mconcat   [ long "hackage-version"   , help "hackage version"+  ]+++-- |+--+stdioLogFileOption :: Parser (Maybe FilePath)+stdioLogFileOption = optional $ strOption $ mconcat+  [ long "stdio-log-file"+  , help "stdio log file"   ] 
haskell-debug-adapter.cabal view
@@ -1,13 +1,13 @@ cabal-version: 1.12
 --- This file has been generated from package.yaml by hpack version 0.31.2.+-- This file has been generated from package.yaml by hpack version 0.33.0. -- -- see: https://github.com/sol/hpack ----- hash: da77e0a33d754f6f5d7c7f1c43908127b950c2399a352febb7a7d8203d324a5d+-- hash: 759e4fd20245e808dfc294c1f45d3a9d75b6d46b0332c670ccbed8462ac86894  name:           haskell-debug-adapter-version:        0.0.33.0+version:        0.0.34.0 synopsis:       Haskell Debug Adapter. description:    Please see README.md category:       Development@@ -15,7 +15,7 @@ bug-reports:    https://github.com/phoityne/haskell-debug-adapter/issues author:         phoityne_hs maintainer:     phoityne.hs@gmail.com-copyright:      2016-2020 phoityne_hs+copyright:      2016-2021 phoityne_hs license:        BSD3 license-file:   LICENSE build-type:     Simple@@ -52,7 +52,6 @@       Haskell.Debug.Adapter.State.Shutdown       Haskell.Debug.Adapter.State.Utility       Haskell.Debug.Adapter.TH.Utility-      Haskell.Debug.Adapter.Thread       Haskell.Debug.Adapter.Type       Haskell.Debug.Adapter.Utility       Haskell.Debug.Adapter.Watch@@ -75,8 +74,8 @@     , directory     , filepath     , fsnotify-    , ghci-dap >=0.0.14.0-    , haskell-dap >=0.0.14.0+    , ghci-dap >=0.0.15.0+    , haskell-dap >=0.0.15.0     , hslogger     , lens     , mtl@@ -86,7 +85,7 @@     , resourcet     , safe-exceptions     , text-  if impl(ghc < 8.4.0)+  if impl(ghc < 8.6.0)     buildable: False   default-language: Haskell2010 @@ -112,8 +111,8 @@     , directory     , filepath     , fsnotify-    , ghci-dap >=0.0.14.0-    , haskell-dap >=0.0.14.0+    , ghci-dap >=0.0.15.0+    , haskell-dap >=0.0.15.0     , haskell-debug-adapter     , hslogger     , lens@@ -124,7 +123,7 @@     , resourcet     , safe-exceptions     , text-  if impl(ghc < 8.4.0)+  if impl(ghc < 8.6.0)     buildable: False   default-language: Haskell2010 @@ -153,8 +152,8 @@     , directory     , filepath     , fsnotify-    , ghci-dap >=0.0.14.0-    , haskell-dap >=0.0.14.0+    , ghci-dap >=0.0.15.0+    , haskell-dap >=0.0.15.0     , haskell-debug-adapter     , hslogger     , hspec@@ -166,6 +165,6 @@     , resourcet     , safe-exceptions     , text-  if impl(ghc < 8.4.0)+  if impl(ghc < 8.6.0)     buildable: False   default-language: Haskell2010
src/Haskell/Debug/Adapter/Application.hs view
@@ -2,8 +2,6 @@  module Haskell.Debug.Adapter.Application where -import Paths_haskell_debug_adapter (version)-import Data.Version (showVersion) import Control.Monad.IO.Class import Data.Conduit import Control.Lens@@ -12,11 +10,11 @@ import Control.Monad.State.Lazy import Control.Monad.Except import qualified System.Log.Logger as L-import qualified System.IO as S  import Haskell.Debug.Adapter.Type import Haskell.Debug.Adapter.Utility import Haskell.Debug.Adapter.Constant+import Haskell.Debug.Adapter.State.Utility import Haskell.Debug.Adapter.State.Init() import Haskell.Debug.Adapter.State.GHCiRun() import Haskell.Debug.Adapter.State.DebugRun()@@ -26,49 +24,6 @@  -- | ---defaultAppStores :: S.Handle -> S.Handle -> IO AppStores-defaultAppStores inHdl outHdl = do-  reqStore <- newMVar []-  resStore <- newMVar []-  evtStore <- newMVar []-  wsStore  <- newMVar ""-  logPRStore <- newMVar L.WARNING-  procStore <- newEmptyMVar-  verStore <- newEmptyMVar-  return AppStores {-    -- Read Only-      _appNameAppStores     = "haskell-debug-adapter"-    , _appVerAppStores      = showVersion version-    , _inHandleAppStores    = inHdl-    , _outHandleAppStores   = outHdl-    , _asyncsAppStores      = []--    -- Read/Write from Application-    , _appStateWAppStores   = WrapAppState InitState-    , _resSeqAppStores      = 0-    , _startupAppStores     = ""-    , _startupFuncAppStores = ""-    , _startupArgsAppStores = ""-    , _stopOnEntryAppStores = False-    , _ghciPmptAppStores    = _GHCI_PROMPT_HDA-    , _mainArgsAppStores    = ""-    , _launchReqSeqAppStores = -1-    , _debugReRunableAppStores = False---    -- Read/Write ASync-    , _reqStoreAppStores    = reqStore-    , _resStoreAppStores    = resStore-    , _eventStoreAppStores  = evtStore-    , _workspaceAppStores   = wsStore-    , _logPriorityAppStores = logPRStore-    , _ghciProcAppStores    = procStore-    , _ghciVerAppStores     = verStore-    }----- |--- run :: AppStores -> IO () run appData = do   L.debugM _LOG_APP "satrt application app"@@ -144,8 +99,9 @@       return ()     Just (WrapRequest (DisconnectRequest req)) -> do       liftIO $ L.debugM _LOG_APP $ show req-      liftIO $ L.infoM _LOG_APP $ "disconnect. end of application thread."+      liftIO $ L.infoM _LOG_APP $ "disconnect."       lift $ sendDisconnectResponse req+      sink     Just (WrapRequest (PauseRequest req)) -> do       liftIO $ L.debugM _LOG_APP $ show req       lift $ sendConsoleEventLF $ "pause request is not supported."
src/Haskell/Debug/Adapter/Control.hs view
@@ -10,13 +10,16 @@ import qualified System.Log.Logger as L import qualified Control.Exception.Safe as E import Control.Concurrent.Async+import Control.Concurrent.MVar+import Data.Version (showVersion)+import Paths_haskell_debug_adapter (version)+import Control.Lens  import Haskell.Debug.Adapter.Type import Haskell.Debug.Adapter.Constant import qualified Haskell.Debug.Adapter.Application as A import qualified Haskell.Debug.Adapter.Request as RQ import qualified Haskell.Debug.Adapter.Response as RP-import qualified Haskell.Debug.Adapter.Thread as TD import qualified Haskell.Debug.Adapter.Watch as W  @@ -50,7 +53,7 @@     -> Handle  -- ^IN handle. used to get request from the debug adapter client.     -> Handle  -- ^OUT handle. used to response to the debug adapter client.     -> IO ()-run _ inHdl outHdl = E.bracket initialize finalize go+run argDat inHdl outHdl = E.bracket initialize finalize go    where     -- |@@ -64,8 +67,45 @@       hSetBuffering outHdl NoBuffering       hSetEncoding  outHdl utf8 -      A.defaultAppStores inHdl outHdl+      reqStore <- newMVar []+      resStore <- newMVar []+      evtStore <- newMVar []+      wsStore  <- newMVar ""+      logPRStore <- newMVar L.WARNING+      procStore  <- newEmptyMVar+      verStore   <- newEmptyMVar +      return AppStores {+        -- Read Only+          _appNameAppStores     = "haskell-debug-adapter"+        , _appVerAppStores      = showVersion version+        , _inHandleAppStores    = inHdl+        , _outHandleAppStores   = outHdl+        , _asyncsAppStores      = []+        , _stdioLogFileAppStores = argDat^.stdioLogFileArgData++        -- Read/Write from Application+        , _appStateWAppStores   = WrapAppState InitState+        , _resSeqAppStores      = 0+        , _startupAppStores     = ""+        , _startupFuncAppStores = ""+        , _startupArgsAppStores = ""+        , _stopOnEntryAppStores = False+        , _ghciPmptAppStores    = _GHCI_PROMPT_HDA+        , _mainArgsAppStores    = ""+        , _launchReqSeqAppStores = -1+        , _debugReRunableAppStores = False++        -- Read/Write ASync+        , _reqStoreAppStores    = reqStore+        , _resStoreAppStores    = resStore+        , _eventStoreAppStores  = evtStore+        , _workspaceAppStores   = wsStore+        , _logPriorityAppStores = logPRStore+        , _ghciProcAppStores    = procStore+        , _ghciVerAppStores     = verStore+        }+     -- |     --     finalize _ = do@@ -85,6 +125,8 @@                 , W.run  appData    -- file watch                 ] -      TD.start appData ths >>= wait-+      as <- mapM async ths+      waitAnyCatchCancel as >>= \case+        (_, Right _) -> L.infoM _LOG_NAME $ "some threads stopped. exit."+        (_, Left e)  -> L.criticalM _LOG_NAME $ "some threads stopped. " ++ show e 
src/Haskell/Debug/Adapter/Request.hs view
@@ -54,7 +54,10 @@    where     goApp :: AppContext B.ByteString-    goApp = getContentLength >>= getContent+    goApp = do+      bs <- getContentLength >>= getContent+      stdinLogging bs+      return bs   -- |@@ -68,7 +71,7 @@ -- getContentLength :: AppContext Int getContentLength = go B.empty-  where    +  where     go :: B.ByteString -> AppContext Int     go buf = updateBuf buf >>= findLength @@ -76,7 +79,7 @@     updateBuf buf = do       hdl <- view inHandleAppStores <$> get       B.append buf <$> readCharL hdl-    +     findLength :: B.ByteString -> AppContext Int     findLength buf = case parse parser "find ContentLength parser" (lbs2str buf) of       Left _  -> go buf@@ -125,7 +128,7 @@ -- | -- createWrapRequest :: B.ByteString -> DAP.Request -> AppContext WrapRequest-createWrapRequest bs req +createWrapRequest bs req   | "initialize" == DAP.commandRequest req = WrapRequest . InitializeRequest <$> (liftEither (eitherDecode bs))   | "launch"     == DAP.commandRequest req = WrapRequest . LaunchRequest <$> (liftEither (eitherDecode bs))   | "disconnect" == DAP.commandRequest req = WrapRequest . DisconnectRequest <$> (liftEither (eitherDecode bs))@@ -157,9 +160,6 @@     Nothing  -> do       throwError $ "unexpected Nothing."       return ()-    Just req@(WrapRequest DisconnectRequest{}) -> do-      lift $ goApp req-      liftIO $ L.infoM _LOG_REQUEST $ "disconnect. end of request thread."     Just req -> do       lift $ goApp req       sink
src/Haskell/Debug/Adapter/Response.hs view
@@ -107,7 +107,7 @@       bs <- lift $ goApp res       yield bs       res2lbs-  +   where     goApp :: Response -> AppContext B.ByteString     goApp = return . encode@@ -131,6 +131,7 @@   where     goApp bs = do       wHdl <- view outHandleAppStores <$> get+      stdoutLogging bs       liftIO $ sendResponse wHdl bs      cont str@@ -142,6 +143,7 @@ -- _KEY_DISCONNECT_RESPONCE :: String _KEY_DISCONNECT_RESPONCE = "\"command\":\"disconnect\""+  -- | --
src/Haskell/Debug/Adapter/State/Contaminated.hs view
@@ -4,9 +4,7 @@ module Haskell.Debug.Adapter.State.Contaminated where  import Control.Monad.IO.Class---import Control.Monad.Except import qualified System.Log.Logger as L-import Control.Concurrent (threadDelay)  import qualified Haskell.DAP as DAP import Haskell.Debug.Adapter.Type@@ -282,7 +280,6 @@ restartEvent :: AppContext () restartEvent = do   SU.terminateGHCi-  liftIO $ threadDelay _1_SEC    U.sendConsoleEventLF ""   U.sendConsoleEventLF "restarting debug adapter."
src/Haskell/Debug/Adapter/State/DebugRun/Continue.hs view
@@ -35,7 +35,7 @@    P.command cmd   U.debugEV _LOG_APP dbg-  P.expectPmpt >>= SU.takeDapResult >>= dapHdl+  outStr <- P.expectPmpt    resSeq <- U.getIncreasedResponseSequence   let res = DAP.defaultContinueResponse {@@ -45,6 +45,8 @@           }    U.addResponse $ ContinueResponse res++  SU.takeDapResult outStr >>= dapHdl    return Nothing 
src/Haskell/Debug/Adapter/State/DebugRun/InternalTerminate.hs view
@@ -5,7 +5,6 @@  import Control.Monad.IO.Class import qualified System.Log.Logger as L-import Control.Concurrent (threadDelay)  import Haskell.Debug.Adapter.Type import Haskell.Debug.Adapter.Constant@@ -25,8 +24,6 @@ app :: HdaInternalTerminateRequest -> AppContext (Maybe StateTransit) app _ = do   SU.terminateGHCi--  liftIO $ threadDelay _1_SEC    U.sendTerminatedEvent   U.sendExitedEvent
src/Haskell/Debug/Adapter/State/DebugRun/Next.hs view
@@ -35,7 +35,7 @@    P.command cmd   U.debugEV _LOG_APP dbg-  P.expectPmpt >>= SU.takeDapResult >>= dapHdl+  outStr <- P.expectPmpt    resSeq <- U.getIncreasedResponseSequence   let res = DAP.defaultNextResponse {@@ -45,6 +45,8 @@           }    U.addResponse $ NextResponse res++  SU.takeDapResult outStr >>= dapHdl    return Nothing 
src/Haskell/Debug/Adapter/State/DebugRun/StepIn.hs view
@@ -35,7 +35,7 @@    P.command cmd   U.debugEV _LOG_APP dbg-  P.expectPmpt >>= SU.takeDapResult >>= dapHdl+  outStr <- P.expectPmpt    resSeq <- U.getIncreasedResponseSequence   let res = DAP.defaultStepInResponse {@@ -45,6 +45,8 @@           }    U.addResponse $ StepInResponse res++  SU.takeDapResult outStr >>= dapHdl    return Nothing 
src/Haskell/Debug/Adapter/State/DebugRun/Terminate.hs view
@@ -5,7 +5,6 @@  import Control.Monad.IO.Class import qualified System.Log.Logger as L-import Control.Concurrent (threadDelay)  import qualified Haskell.DAP as DAP import Haskell.Debug.Adapter.Type@@ -26,8 +25,6 @@ app :: DAP.TerminateRequest -> AppContext (Maybe StateTransit) app req = do   SU.terminateGHCi--  liftIO $ threadDelay _1_SEC    resSeq <- U.getIncreasedResponseSequence 
src/Haskell/Debug/Adapter/State/Init/Launch.hs view
@@ -8,8 +8,6 @@ import Control.Monad.State import Control.Concurrent import Control.Lens-import System.Directory-import System.FilePath import Text.Parsec import qualified Text.Read as R import qualified System.Log.Logger as L@@ -43,7 +41,6 @@    setUpConfig req   setUpLogger req-  createTasksJsonFile    U.sendStdoutEvent "Configuration read.\n"   U.sendConsoleEvent "Starting GHCi.\n"@@ -128,44 +125,6 @@   logPR <- liftIO $ readMVar $ ctx^.logPriorityAppStores    liftIO $ L.setUpLogger (DAP.logFileLaunchRequestArguments args) logPR----- |----createTasksJsonFile :: AppContext ()-createTasksJsonFile = do-  ctx <- get-  wsPath <- liftIO $ readMVar $ ctx^.workspaceAppStores-  let jsonDir  = wsPath </> ".vscode"-      jsonFile = jsonDir </> "tasks.json"--  catchError-    (checkDir jsonDir >> checkFile jsonFile >> createFile jsonFile)-    errHdl--  where--    -- |-    ---    errHdl msg = liftIO $ L.debugM _LOG_APP msg--    -- |-    ---    checkDir jsonDir = liftIO (doesDirectoryExist jsonDir) >>= \case-      False -> throwError $ "setting folder not found. skip saveing tasks.json. DIR:" ++ jsonDir-      True -> return ()--    -- |-    ---    checkFile jsonFile = liftIO (doesFileExist jsonFile) >>= \case-      True -> throwError $ "tasks.json file exists. " ++ jsonFile-      False -> return ()--    -- |-    ---    createFile jsonFile = do-      liftIO $ U.saveFileBSL jsonFile _TASKS_JSON_FILE_CONTENTS-      U.sendConsoleEvent $ "create tasks.json file. " ++ jsonFile ++ "\n"   -- |
src/Haskell/Debug/Adapter/State/Utility.hs view
@@ -6,7 +6,9 @@ import qualified System.Log.Logger as L import qualified Text.Read as R import Control.Monad.Except-import Control.Concurrent (threadDelay)+import Control.Lens+import Control.Monad.State.Lazy+import Control.Concurrent.MVar  import qualified Haskell.DAP as DAP import Haskell.Debug.Adapter.Type@@ -165,6 +167,32 @@  -- | --+sendDisconnectResponse :: DAP.DisconnectRequest -> AppContext ()+sendDisconnectResponse req = do++  tryTerminateGHCi++  resSeq <- U.getIncreasedResponseSequence++  let res = DAP.defaultDisconnectResponse {+            DAP.seqDisconnectResponse         = resSeq+          , DAP.request_seqDisconnectResponse = DAP.seqDisconnectRequest req+          , DAP.successDisconnectResponse     = True+          }++  U.addResponse $ DisconnectResponse res++  where+    tryTerminateGHCi :: AppContext ()+    tryTerminateGHCi = do+      mver <- view ghciProcAppStores <$> get+      U.liftIOE (isEmptyMVar mver) >>= \case+        True -> return ()+        False -> catchError terminateGHCi (\_->return ())+++-- |+-- evaluateRequest :: DAP.EvaluateRequest -> AppContext (Maybe StateTransit) evaluateRequest req = do @@ -306,8 +334,6 @@ terminateRequest req = do   terminateGHCi -  liftIO $ threadDelay _1_SEC-   resSeq <- U.getIncreasedResponseSequence    let res = DAP.defaultTerminateResponse {@@ -326,8 +352,6 @@ internalTerminateRequest = do      terminateGHCi--    liftIO $ threadDelay _1_SEC      U.sendTerminatedEvent     U.sendExitedEvent
− src/Haskell/Debug/Adapter/Thread.hs
@@ -1,103 +0,0 @@-module Haskell.Debug.Adapter.Thread where--import Control.Monad.IO.Class-import Control.Concurrent.Async-import Control.Concurrent-import qualified System.Log.Logger as L-import Data.Maybe-import qualified Data.List as L-import Control.Monad.State.Lazy-import Control.Lens-import Control.Monad.Except--import Haskell.Debug.Adapter.Type-import Haskell.Debug.Adapter.Utility-import Haskell.Debug.Adapter.Constant----- |----start :: AppStores -> [IO ()] -> IO (Async ())-start dat acts = do-  as <- mapM async acts-  async $ run dat {_asyncsAppStores = as}------ |----run :: AppStores -> IO ()-run appData = do-  L.debugM _LOG_THREAD_MGR "satrt thread manager"-  runApp appData app-  L.debugM _LOG_THREAD_MGR "stop thread manager"----- |----app :: AppContext ()-app = catchError go errHdl-  where-    errHdl msg = do-      criticalEV _LOG_THREAD_MGR msg-      criticalEV _LOG_THREAD_MGR "stopping all threads."-      as <- view asyncsAppStores <$> get-      liftIO $ mapM_ cancel as-      -    go = isStop >>= \case-      True  -> return ()-      False -> do-        takeEvent >>= \case-          Nothing -> return ()-          Just ev -> runEvent ev-        liftIO $ threadDelay _1_SEC-        go----- |----isStop :: AppContext Bool-isStop = do-  as <- view asyncsAppStores <$> get-  res <- liftIO $ mapM poll as-  when (L.any isJust res) $-    liftIO $ L.debugM _LOG_THREAD_MGR $ "thread status." ++ show res--  return $ L.all isJust res----- |----takeEvent :: AppContext (Maybe Event)-takeEvent = do-  appDat <- get-  let mvar = appDat^.eventStoreAppStores-  liftIO $ goIO mvar---  where-    goIO mvar = isExists mvar >>= \case-      False -> return Nothing-      True  -> take1 mvar--    isExists mvar = readMVar mvar >>= \case-      [] -> return False-      _  -> return True--    take1 mvar = takeMVar mvar >>= \case-      [] -> do-        putMVar mvar []-        return Nothing-      (x:xs) -> do-        putMVar mvar xs-        return $ Just x----- |----runEvent :: Event -> AppContext ()-runEvent CriticalExitEvent = do-  liftIO $ L.criticalM _LOG_THREAD_MGR "Critical exit started."-  as <- view asyncsAppStores <$> get-  liftIO $ mapM_ cancel as-  
src/Haskell/Debug/Adapter/Type.hs view
@@ -31,6 +31,7 @@ -- data ArgData = ArgData {     _hackageVersionArgData :: Maybe String   -- ^deprecated.+  , _stdioLogFileArgData   :: Maybe FilePath -- stdio log file.   } deriving (Data, Typeable, Show, Read, Eq)  makeLenses ''ArgData@@ -47,6 +48,7 @@ instance Default ArgData where   def = ArgData {         _hackageVersionArgData = Nothing+      , _stdioLogFileArgData   = Nothing       }  @@ -130,72 +132,72 @@ --  -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "Source"} ''DAP.Source)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SourceBreakpoint"} ''DAP.SourceBreakpoint)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "Breakpoint"} ''DAP.Breakpoint)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "FunctionBreakpoint"} ''DAP.FunctionBreakpoint)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "Thread"} ''DAP.Thread)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "StackFrame"} ''DAP.StackFrame)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "Scope"} ''DAP.Scope)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "Variable"} ''DAP.Variable)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "VariablePresentationHint"} ''DAP.VariablePresentationHint)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "CompletionsItem"} ''DAP.CompletionsItem)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "Source", omitNothingFields = True} ''DAP.Source)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SourceBreakpoint", omitNothingFields = True} ''DAP.SourceBreakpoint)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "Breakpoint", omitNothingFields = True} ''DAP.Breakpoint)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "FunctionBreakpoint", omitNothingFields = True} ''DAP.FunctionBreakpoint)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "Thread", omitNothingFields = True} ''DAP.Thread)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "StackFrame", omitNothingFields = True} ''DAP.StackFrame)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "Scope", omitNothingFields = True} ''DAP.Scope)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "Variable", omitNothingFields = True} ''DAP.Variable)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "VariablePresentationHint", omitNothingFields = True} ''DAP.VariablePresentationHint)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "CompletionsItem", omitNothingFields = True} ''DAP.CompletionsItem)   -- jsonize-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "Request"} ''DAP.Request)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "Request", omitNothingFields = True} ''DAP.Request) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "InitializeRequest"} ''DAP.InitializeRequest)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "InitializeRequestArguments"} ''DAP.InitializeRequestArguments)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "InitializeRequest", omitNothingFields = True} ''DAP.InitializeRequest)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "InitializeRequestArguments", omitNothingFields = True} ''DAP.InitializeRequestArguments) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "LaunchRequest"} ''DAP.LaunchRequest)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "LaunchRequestArguments"} ''DAP.LaunchRequestArguments)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "LaunchRequest", omitNothingFields = True} ''DAP.LaunchRequest)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "LaunchRequestArguments", omitNothingFields = True} ''DAP.LaunchRequestArguments) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "DisconnectRequest"} ''DAP.DisconnectRequest)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "DisconnectRequestArguments"} ''DAP.DisconnectRequestArguments)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "DisconnectRequest", omitNothingFields = True} ''DAP.DisconnectRequest)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "DisconnectRequestArguments", omitNothingFields = True} ''DAP.DisconnectRequestArguments) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "PauseRequest"} ''DAP.PauseRequest)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "PauseRequestArguments"} ''DAP.PauseRequestArguments)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "PauseRequest", omitNothingFields = True} ''DAP.PauseRequest)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "PauseRequestArguments", omitNothingFields = True} ''DAP.PauseRequestArguments) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "TerminateRequest"} ''DAP.TerminateRequest)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "TerminateRequestArguments"} ''DAP.TerminateRequestArguments)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "TerminateRequest", omitNothingFields = True} ''DAP.TerminateRequest)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "TerminateRequestArguments", omitNothingFields = True} ''DAP.TerminateRequestArguments) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SetBreakpointsRequest"} ''DAP.SetBreakpointsRequest)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SetBreakpointsRequestArguments"} ''DAP.SetBreakpointsRequestArguments)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SetBreakpointsRequest", omitNothingFields = True} ''DAP.SetBreakpointsRequest)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SetBreakpointsRequestArguments", omitNothingFields = True} ''DAP.SetBreakpointsRequestArguments) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SetFunctionBreakpointsRequest"} ''DAP.SetFunctionBreakpointsRequest)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SetFunctionBreakpointsRequestArguments"} ''DAP.SetFunctionBreakpointsRequestArguments)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SetFunctionBreakpointsRequest", omitNothingFields = True} ''DAP.SetFunctionBreakpointsRequest)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SetFunctionBreakpointsRequestArguments", omitNothingFields = True} ''DAP.SetFunctionBreakpointsRequestArguments) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SetExceptionBreakpointsRequest"} ''DAP.SetExceptionBreakpointsRequest)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SetExceptionBreakpointsRequestArguments"} ''DAP.SetExceptionBreakpointsRequestArguments)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SetExceptionBreakpointsRequest", omitNothingFields = True} ''DAP.SetExceptionBreakpointsRequest)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SetExceptionBreakpointsRequestArguments", omitNothingFields = True} ''DAP.SetExceptionBreakpointsRequestArguments) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ConfigurationDoneRequest"} ''DAP.ConfigurationDoneRequest)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ConfigurationDoneRequest", omitNothingFields = True} ''DAP.ConfigurationDoneRequest) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ThreadsRequest"} ''DAP.ThreadsRequest)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ThreadsRequest", omitNothingFields = True} ''DAP.ThreadsRequest) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "StackTraceRequest"} ''DAP.StackTraceRequest)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "StackTraceRequestArguments"} ''DAP.StackTraceRequestArguments)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "StackTraceRequest", omitNothingFields = True} ''DAP.StackTraceRequest)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "StackTraceRequestArguments", omitNothingFields = True} ''DAP.StackTraceRequestArguments) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ScopesRequest"} ''DAP.ScopesRequest)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ScopesRequestArguments"} ''DAP.ScopesRequestArguments)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ScopesRequest", omitNothingFields = True} ''DAP.ScopesRequest)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ScopesRequestArguments", omitNothingFields = True} ''DAP.ScopesRequestArguments) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "VariablesRequest"} ''DAP.VariablesRequest)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "VariablesRequestArguments"} ''DAP.VariablesRequestArguments)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "VariablesRequest", omitNothingFields = True} ''DAP.VariablesRequest)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "VariablesRequestArguments", omitNothingFields = True} ''DAP.VariablesRequestArguments) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ContinueRequest"} ''DAP.ContinueRequest)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ContinueRequestArguments"} ''DAP.ContinueRequestArguments)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ContinueRequest", omitNothingFields = True} ''DAP.ContinueRequest)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ContinueRequestArguments", omitNothingFields = True} ''DAP.ContinueRequestArguments) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "NextRequest"} ''DAP.NextRequest)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "NextRequestArguments"} ''DAP.NextRequestArguments)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "NextRequest", omitNothingFields = True} ''DAP.NextRequest)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "NextRequestArguments", omitNothingFields = True} ''DAP.NextRequestArguments) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "StepInRequest"} ''DAP.StepInRequest)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "StepInRequestArguments"} ''DAP.StepInRequestArguments)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "StepInRequest", omitNothingFields = True} ''DAP.StepInRequest)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "StepInRequestArguments", omitNothingFields = True} ''DAP.StepInRequestArguments) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "EvaluateRequest"} ''DAP.EvaluateRequest)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "EvaluateRequestArguments"} ''DAP.EvaluateRequestArguments)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "EvaluateRequest", omitNothingFields = True} ''DAP.EvaluateRequest)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "EvaluateRequestArguments", omitNothingFields = True} ''DAP.EvaluateRequestArguments) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "CompletionsRequest"} ''DAP.CompletionsRequest)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "CompletionsRequestArguments"} ''DAP.CompletionsRequestArguments)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "CompletionsRequest", omitNothingFields = True} ''DAP.CompletionsRequest)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "CompletionsRequestArguments", omitNothingFields = True} ''DAP.CompletionsRequestArguments)   -- request@@ -231,71 +233,71 @@ --  -- jsonize-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "Response"} ''DAP.Response)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ColumnDescriptor"} ''DAP.ColumnDescriptor)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ExceptionBreakpointsFilter"} ''DAP.ExceptionBreakpointsFilter)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "Response", omitNothingFields = True} ''DAP.Response)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ColumnDescriptor", omitNothingFields = True} ''DAP.ColumnDescriptor)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ExceptionBreakpointsFilter", omitNothingFields = True} ''DAP.ExceptionBreakpointsFilter) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "InitializeResponse"} ''DAP.InitializeResponse)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "InitializeResponseBody"} ''DAP.InitializeResponseBody)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "InitializeResponse", omitNothingFields = True} ''DAP.InitializeResponse)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "InitializeResponseBody", omitNothingFields = True} ''DAP.InitializeResponseBody) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "LaunchResponse"} ''DAP.LaunchResponse)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "LaunchResponse", omitNothingFields = True} ''DAP.LaunchResponse) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "OutputEvent"} ''DAP.OutputEvent)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "OutputEventBody"} ''DAP.OutputEventBody)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "OutputEvent", omitNothingFields = True} ''DAP.OutputEvent)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "OutputEventBody", omitNothingFields = True} ''DAP.OutputEventBody) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "StoppedEvent"} ''DAP.StoppedEvent)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "StoppedEventBody"} ''DAP.StoppedEventBody)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "StoppedEvent", omitNothingFields = True} ''DAP.StoppedEvent)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "StoppedEventBody", omitNothingFields = True} ''DAP.StoppedEventBody) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "InitializedEvent"} ''DAP.InitializedEvent)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "InitializedEvent", omitNothingFields = True} ''DAP.InitializedEvent) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "DisconnectResponse"} ''DAP.DisconnectResponse)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "DisconnectResponse", omitNothingFields = True} ''DAP.DisconnectResponse) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "PauseResponse"} ''DAP.PauseResponse)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "PauseResponse", omitNothingFields = True} ''DAP.PauseResponse) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "TerminateResponse"} ''DAP.TerminateResponse)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "TerminateResponse", omitNothingFields = True} ''DAP.TerminateResponse) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SetBreakpointsResponse"} ''DAP.SetBreakpointsResponse)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SetBreakpointsResponseBody"} ''DAP.SetBreakpointsResponseBody)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SetBreakpointsResponse", omitNothingFields = True} ''DAP.SetBreakpointsResponse)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SetBreakpointsResponseBody", omitNothingFields = True} ''DAP.SetBreakpointsResponseBody) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SetFunctionBreakpointsResponse"} ''DAP.SetFunctionBreakpointsResponse)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SetFunctionBreakpointsResponseBody"} ''DAP.SetFunctionBreakpointsResponseBody)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SetFunctionBreakpointsResponse", omitNothingFields = True} ''DAP.SetFunctionBreakpointsResponse)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SetFunctionBreakpointsResponseBody", omitNothingFields = True} ''DAP.SetFunctionBreakpointsResponseBody) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SetExceptionBreakpointsResponse"} ''DAP.SetExceptionBreakpointsResponse)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "SetExceptionBreakpointsResponse", omitNothingFields = True} ''DAP.SetExceptionBreakpointsResponse) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ConfigurationDoneResponse"} ''DAP.ConfigurationDoneResponse)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ConfigurationDoneResponse", omitNothingFields = True} ''DAP.ConfigurationDoneResponse) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ThreadsResponse"} ''DAP.ThreadsResponse)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ThreadsResponseBody"} ''DAP.ThreadsResponseBody)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ThreadsResponse", omitNothingFields = True} ''DAP.ThreadsResponse)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ThreadsResponseBody", omitNothingFields = True} ''DAP.ThreadsResponseBody) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "StackTraceResponse"} ''DAP.StackTraceResponse)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "StackTraceResponseBody"} ''DAP.StackTraceResponseBody)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "StackTraceResponse", omitNothingFields = True} ''DAP.StackTraceResponse)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "StackTraceResponseBody", omitNothingFields = True} ''DAP.StackTraceResponseBody) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ScopesResponse"} ''DAP.ScopesResponse)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ScopesResponseBody"} ''DAP.ScopesResponseBody)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ScopesResponse", omitNothingFields = True} ''DAP.ScopesResponse)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ScopesResponseBody", omitNothingFields = True} ''DAP.ScopesResponseBody) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "VariablesResponse"} ''DAP.VariablesResponse)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "VariablesResponseBody"} ''DAP.VariablesResponseBody)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "VariablesResponse", omitNothingFields = True} ''DAP.VariablesResponse)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "VariablesResponseBody", omitNothingFields = True} ''DAP.VariablesResponseBody) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ContinueResponse"} ''DAP.ContinueResponse)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ContinueResponse", omitNothingFields = True} ''DAP.ContinueResponse) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "NextResponse"} ''DAP.NextResponse)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "NextResponse", omitNothingFields = True} ''DAP.NextResponse) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "StepInResponse"} ''DAP.StepInResponse)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "StepInResponse", omitNothingFields = True} ''DAP.StepInResponse) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "EvaluateResponse"} ''DAP.EvaluateResponse)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "EvaluateResponseBody"} ''DAP.EvaluateResponseBody)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "EvaluateResponse", omitNothingFields = True} ''DAP.EvaluateResponse)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "EvaluateResponseBody", omitNothingFields = True} ''DAP.EvaluateResponseBody) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "CompletionsResponse"} ''DAP.CompletionsResponse)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "CompletionsResponseBody"} ''DAP.CompletionsResponseBody)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "CompletionsResponse", omitNothingFields = True} ''DAP.CompletionsResponse)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "CompletionsResponseBody", omitNothingFields = True} ''DAP.CompletionsResponseBody) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "TerminatedEvent"} ''DAP.TerminatedEvent)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "TerminatedEventBody"} ''DAP.TerminatedEventBody)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "TerminatedEvent", omitNothingFields = True} ''DAP.TerminatedEvent)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "TerminatedEventBody", omitNothingFields = True} ''DAP.TerminatedEventBody) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ExitedEvent"} ''DAP.ExitedEvent)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ExitedEventBody"} ''DAP.ExitedEventBody)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ExitedEvent", omitNothingFields = True} ''DAP.ExitedEvent)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ExitedEventBody", omitNothingFields = True} ''DAP.ExitedEventBody) -$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ContinuedEvent"} ''DAP.ContinuedEvent)-$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ContinuedEventBody"} ''DAP.ContinuedEventBody)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ContinuedEvent", omitNothingFields = True} ''DAP.ContinuedEvent)+$(deriveJSON defaultOptions {fieldLabelModifier = rdrop "ContinuedEventBody", omitNothingFields = True} ''DAP.ContinuedEventBody)   -- response@@ -408,6 +410,7 @@   , _inHandleAppStores    :: S.Handle   , _outHandleAppStores   :: S.Handle   , _asyncsAppStores      :: [Async ()]+  , _stdioLogFileAppStores :: Maybe FilePath    -- Read/Write from Application   , _appStateWAppStores   :: WrapAppState
src/Haskell/Debug/Adapter/Utility.hs view
@@ -20,7 +20,6 @@ import qualified Data.List as L import qualified Control.Exception.Safe as E - import qualified Haskell.DAP as DAP import Haskell.Debug.Adapter.Type import Haskell.Debug.Adapter.Constant@@ -237,21 +236,7 @@     sendStdoutEvent $ "[" ++ show pr ++ "][" ++ name ++ "] " ++ msg'  --- |----sendDisconnectResponse :: DAP.DisconnectRequest -> AppContext ()-sendDisconnectResponse req = do-  resSeq <- getIncreasedResponseSequence -  let res = DAP.defaultDisconnectResponse {-            DAP.seqDisconnectResponse         = resSeq-          , DAP.request_seqDisconnectResponse = DAP.seqDisconnectRequest req-          , DAP.successDisconnectResponse     = True-          }--  addResponse $ DisconnectResponse res-- -- | -- sendPauseResponse :: DAP.PauseRequest -> AppContext ()@@ -548,4 +533,33 @@ -- startswith :: String -> String -> Bool startswith a b = T.isPrefixOf (T.pack a) (T.pack b)+++-- |+--+stdioLogging :: BSL.ByteString -> AppContext ()+stdioLogging bs = do+  logFile <- view stdioLogFileAppStores <$> get+  go logFile++  where+    go :: Maybe FilePath -> AppContext ()+    go Nothing  = return ()+    go (Just f) = liftIOE $ BSL.appendFile f bs+++-- |+--+stdinLogging :: BSL.ByteString -> AppContext ()+stdinLogging bs = do+  stdioLogging $ str2lbs "[ IN]" `BSL.append` bs `BSL.append` str2lbs "\n"+++-- |+--+stdoutLogging :: BSL.ByteString -> AppContext ()+stdoutLogging bs = do+  stdioLogging $ str2lbs "[OUT]" `BSL.append` bs `BSL.append` str2lbs "\n"++ 
test/Haskell/Debug/Adapter/ControlSpec.hs view
@@ -7,6 +7,7 @@ import Control.Concurrent (threadDelay) import qualified System.IO as S import Control.Concurrent.Async+import Data.Default  import Spec.Utility @@ -50,7 +51,7 @@             (fromServer, toServer) <- createPipe              (res, _) <- runConcurrently $ (,)-              <$> Concurrently (run fromClient toClient)+              <$> Concurrently (run def fromClient toClient)               <*> Concurrently (client toServer)              res `shouldBe` ()