@@ -763,6 +763,28 @@ will be reversed."
763763 (dap-debug (dap--debug-session-launch-args debug-session)))
764764 (user-error " There is session to restart" )))
765765
766+ (defun dap--request-source-for-frame-by-reference (debug-session stack-frame line column name )
767+ " Request source string for a STACK-FRAME using the sourceReference."
768+ (with-lsp-workspace (dap--debug-session-workspace debug-session)
769+ (-when-let* ((source (gethash " source" stack-frame))
770+ (sourceReference (gethash " sourceReference" source ))
771+ (sourceReferenceKey (format " %s -%s " name sourceReference)))
772+ (select-window (get-mru-window (selected-frame ) nil ))
773+ (if-let* ((existing-buffer (get-buffer sourceReferenceKey)))
774+ (switch-to-buffer existing-buffer)
775+ (dap--send-message
776+ (dap--make-request " source" (list :sourceReference sourceReference))
777+ (dap--resp-handler
778+ (-lambda ((&hash " body" (&hash " content" content)))
779+ (switch-to-buffer (generate-new-buffer sourceReferenceKey))
780+ (insert content)
781+ (goto-char (point-min ))
782+ (forward-line (1- line))
783+ (forward-char column))
784+ (lambda (errmsg )
785+ (message " No source code for %s . Cursor at %s :%s . Error: %s . " name line column errmsg)))
786+ debug-session)))))
787+
766788(defun dap--get-path-for-frame (stack-frame )
767789 " Get file path for a STACK-FRAME."
768790 (-when-let* ((source (gethash " source" stack-frame))
@@ -788,7 +810,7 @@ will be reversed."
788810 (goto-char (point-min ))
789811 (forward-line (1- line))
790812 (forward-char column))
791- (message " No source code for %s . Cursor at %s : %s . " name line column))))
813+ (dap--request- source- for-frame-by-reference debug-session stack-frame line column name ))))
792814 (run-hook-with-args 'dap-stack-frame-changed-hook debug-session)))
793815
794816(defun dap--select-thread-id (debug-session thread-id &optional force )
0 commit comments