@@ -88,10 +88,24 @@ getConfig = do
8888 let
8989 hostDefault = " 127.0.0.1"
9090 portDefault = 4711
91+ capabilities = defaultCapabilities
92+ { supportsConfigurationDoneRequest = True
93+ , supportsHitConditionalBreakpoints = True
94+ , supportsEvaluateForHovers = False
95+ , supportsModulesRequest = True
96+ , additionalModuleColumns = [ defaultColumnDescriptor
97+ { columnDescriptorAttributeName = " Extra"
98+ , columnDescriptorLabel = " Label"
99+ }
100+ ]
101+ , supportsValueFormattingOptions = True
102+ , supportTerminateDebuggee = True
103+ , supportsLoadedSourcesRequest = True
104+ }
91105 ServerConfig
92106 <$> do fromMaybe hostDefault <$> lookupEnv " DAP_HOST"
93107 <*> do fromMaybe portDefault . (readMaybe =<< ) <$> do lookupEnv " DAP_PORT"
94- <*> pure defaultCapabilities
108+ <*> pure capabilities
95109 <*> pure True
96110----------------------------------------------------------------------------
97111-- | VSCode arguments are custom for attach
@@ -211,15 +225,6 @@ handleDebuggerExceptions e = do
211225 sendTerminatedEvent (TerminatedEvent False )
212226 sendExitedEvent (ExitedEvent 1 )
213227
214- pathToName path =
215- case splitFileName (cs path) of
216- (init -> moduleName, takeExtension -> " .ghccore" ) ->
217- cs (moduleName <> " .core" )
218- (init -> moduleName, takeExtension -> " .stgbin" ) ->
219- cs (moduleName <> " .stg" )
220- (init -> moduleName, takeExtension -> ext) ->
221- cs (moduleName <> ext)
222-
223228----------------------------------------------------------------------------
224229-- | Clears the currently known breakpoint set
225230clearBreakpoints :: Adaptor ESTG ()
@@ -431,7 +436,6 @@ talk CommandSource = do
431436 sendSourceResponse (SourceResponse source Nothing )
432437----------------------------------------------------------------------------
433438talk CommandThreads = do
434- resetObjectLifetimes
435439 allThreads <- IntMap. toList . ssThreads <$> getStgState
436440 sendThreadsResponse
437441 [ Thread
@@ -481,6 +485,18 @@ talk CommandSetExceptionBreakpoints = sendSetExceptionBreakpointsResponse []
481485talk CommandSetFunctionBreakpoints = sendSetFunctionBreakpointsResponse []
482486talk CommandSetInstructionBreakpoints = sendSetInstructionBreakpointsResponse []
483487----------------------------------------------------------------------------
488+ talk CommandEvaluate = do
489+ EvaluateArguments {.. } <- getArguments
490+ sendEvaluateResponse EvaluateResponse
491+ { evaluateResponseResult = " evaluated value for " <> evaluateArgumentsExpression
492+ , evaluateResponseType = " evaluated type for " <> evaluateArgumentsExpression
493+ , evaluateResponsePresentationHint = Nothing
494+ , evaluateResponseVariablesReference = 1
495+ , evaluateResponseNamedVariables = Just 1
496+ , evaluateResponseIndexedVariables = Nothing
497+ , evaluateResponseMemoryReference = Nothing
498+ }
499+ ----------------------------------------------------------------------------
484500talk cmd = logInfo $ BL8. pack (" GOT cmd " <> show cmd)
485501----------------------------------------------------------------------------
486502
@@ -620,13 +636,15 @@ generateScopesForTopStackFrame frameIdDesc closureId env = do
620636 scopeVarablesRef <- getVariablesRef $ VariablesRef_StackFrameVariables frameIdDesc
621637 setVariables scopeVarablesRef
622638 [ defaultVariable
623- { variableName = cs binderName <> ( if binderScope == ModulePublic then " " else cs ( ' _ ' : show u))
639+ { variableName = displayName
624640 , variableValue = cs variableValue
625641 , variableType = Just (cs variableType)
642+ , variableEvaluateName = Just $ displayName <> " evaluate"
626643 }
627644 | (Id (Binder {.. }), (_, atom)) <- M. toList env
628645 , let (variableType, variableValue) = getAtomTypeAndValue atom
629646 BinderId u = binderId
647+ displayName = if binderScope == ModulePublic then cs binderName else cs (show u)
630648 ]
631649 pure
632650 [ defaultScope
@@ -656,13 +674,15 @@ generateScopes frameIdDesc stackCont@(CaseOf _ closureId env _ _ _) = do
656674 -- DMJ: for now everything is local.
657675 -- Inspect StaticOrigin to put things top-level, or as arguments, where applicable
658676 [ defaultVariable
659- { variableName = cs binderName <> ( if binderScope == ModulePublic then " " else cs ( ' _ ' : show u))
677+ { variableName = displayName
660678 , variableValue = cs variableValue
661679 , variableType = Just (cs variableType)
680+ , variableEvaluateName = Just $ displayName <> " evaluate"
662681 }
663682 | (Id (Binder {.. }), (_, atom)) <- M. toList env
664683 , let (variableType, variableValue) = getAtomTypeAndValue atom
665684 BinderId u = binderId
685+ displayName = if binderScope == ModulePublic then cs binderName else cs (show u)
666686 ]
667687 pure
668688 [ defaultScope
@@ -1101,7 +1121,7 @@ getSourceName qualifiedModuleName = \case
11011121 GhcStg -> cs qualifiedModuleName <> " .ghcstg"
11021122 Cmm -> cs qualifiedModuleName <> " .cmm"
11031123 Asm -> cs qualifiedModuleName <> " .s"
1104- ExtStg -> cs qualifiedModuleName <> " .stgbin"
1124+ ExtStg -> cs qualifiedModuleName <> " .stgbin.hs "
11051125 FFICStub -> cs qualifiedModuleName <> " _stub.c"
11061126 FFIHStub -> cs qualifiedModuleName <> " _stub.h"
11071127 ForeignC -> cs qualifiedModuleName
0 commit comments