@@ -763,6 +763,28 @@ will be reversed."
763
763
(dap-debug (dap--debug-session-launch-args debug-session)))
764
764
(user-error " There is session to restart" )))
765
765
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
+
766
788
(defun dap--get-path-for-frame (stack-frame )
767
789
" Get file path for a STACK-FRAME."
768
790
(-when-let* ((source (gethash " source" stack-frame))
@@ -788,7 +810,7 @@ will be reversed."
788
810
(goto-char (point-min ))
789
811
(forward-line (1- line))
790
812
(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 ))))
792
814
(run-hook-with-args 'dap-stack-frame-changed-hook debug-session)))
793
815
794
816
(defun dap--select-thread-id (debug-session thread-id &optional force )
0 commit comments