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 +7/−0
- README.md +1/−1
- app/Main.hs +22/−11
- haskell-debug-adapter.cabal +13/−14
- src/Haskell/Debug/Adapter/Application.hs +3/−47
- src/Haskell/Debug/Adapter/Control.hs +47/−5
- src/Haskell/Debug/Adapter/Request.hs +7/−7
- src/Haskell/Debug/Adapter/Response.hs +3/−1
- src/Haskell/Debug/Adapter/State/Contaminated.hs +0/−3
- src/Haskell/Debug/Adapter/State/DebugRun/Continue.hs +3/−1
- src/Haskell/Debug/Adapter/State/DebugRun/InternalTerminate.hs +0/−3
- src/Haskell/Debug/Adapter/State/DebugRun/Next.hs +3/−1
- src/Haskell/Debug/Adapter/State/DebugRun/StepIn.hs +3/−1
- src/Haskell/Debug/Adapter/State/DebugRun/Terminate.hs +0/−3
- src/Haskell/Debug/Adapter/State/Init/Launch.hs +0/−41
- src/Haskell/Debug/Adapter/State/Utility.hs +29/−5
- src/Haskell/Debug/Adapter/Thread.hs +0/−103
- src/Haskell/Debug/Adapter/Type.hs +89/−86
- src/Haskell/Debug/Adapter/Utility.hs +29/−15
- test/Haskell/Debug/Adapter/ControlSpec.hs +2/−1
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` ()