[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[elpa] externals/dape 7b1168ddb1 3/8: Add support for modules and loaded
From: |
ELPA Syncer |
Subject: |
[elpa] externals/dape 7b1168ddb1 3/8: Add support for modules and loaded sources |
Date: |
Thu, 28 Dec 2023 18:58:20 -0500 (EST) |
branch: externals/dape
commit 7b1168ddb119b019c6ffa1a19b60545fa1b6439f
Author: Daniel Pettersson <daniel@dpettersson.net>
Commit: Daniel Pettersson <daniel@dpettersson.net>
Add support for modules and loaded sources
---
dape.el | 165 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 156 insertions(+), 9 deletions(-)
diff --git a/dape.el b/dape.el
index ad8ab53f20..edcfa4bee8 100644
--- a/dape.el
+++ b/dape.el
@@ -284,7 +284,8 @@ Functions and symbols in configuration:
;; TODO Add more defaults, don't know which adapters support
;; sourceReference
-(defcustom dape-mime-mode-alist '(("text/x-lldb.disassembly" . asm-mode))
+(defcustom dape-mime-mode-alist '(("text/x-lldb.disassembly" . asm-mode)
+ ("text/javascript" . js-mode))
"Alist of MIME types vs corresponding major mode functions.
Each element should look like (MIME-TYPE . MODE) where
MIME-TYPE is a string and MODE is the major mode function to
@@ -487,6 +488,10 @@ The hook is run with one argument, the compilation buffer."
"List of available exceptions as plists.")
(defvar dape--watched nil
"List of watched expressions.")
+(defvar dape--modules nil
+ "List of modules.")
+(defvar dape--sources nil
+ "List of loaded sources.")
(defvar dape--server-process nil
"Debug adapter server process.")
(defvar dape--process nil
@@ -595,7 +600,7 @@ Accepted FORMAT values is `local' and `remote'."
"Create marker from dap PLIST containing source information.
Note requires `dape--source-ensure' if source is by reference."
(when-let ((source (plist-get plist :source))
- (line (plist-get plist :line))
+ (line (or (plist-get plist :line) 1))
(buffer
(or (when-let* ((source-reference
(plist-get source :sourceReference))
@@ -1193,7 +1198,8 @@ See `dape--callback' for expected CB signature."
"Update the stack trace in THREAD plist by adapter PROCESS.
See `dape--callback' for expected CB signature."
(cond
- ((or (plist-get thread :stackFrames)
+ ((or (not (equal (plist-get thread :status) "stopped"))
+ (plist-get thread :stackFrames)
(not (integerp (plist-get thread :id))))
(funcall cb process))
(t
@@ -1426,6 +1432,42 @@ Starts a new process as per request of the debug
adapter."
(dape--debug 'info "Capabailities recived")
(dape--configure-exceptions process (dape--callback nil)))
+(cl-defmethod dape-handle-event (_process (_event (eql module)) body)
+ "Handle module events."
+ (let ((reason (plist-get body :reason))
+ (id (thread-first body (plist-get :module) (plist-get :id))))
+ (pcase reason
+ ("new"
+ (setq dape--modules
+ (push (plist-get body :module) dape--modules)))
+ ("changed"
+ (cl-loop with plist = (cl-find id dape--modules
+ :key (lambda (module)
+ (plist-get module :id)))
+ for (key value) on body by 'cddr
+ do (plist-put plist key value)))
+ ("removed"
+ (cl-delete id (lambda (module) (= (plist-get module :id) id))
+ :key (lambda (module) (plist-get module :id)))))))
+
+(cl-defmethod dape-handle-event (_process (_event (eql loadedSource)) body)
+ "Handle loadedSource events."
+ (let ((reason (plist-get body :reason))
+ (id (thread-first body (plist-get :source) (plist-get :id))))
+ (pcase reason
+ ("new"
+ (setq dape--sources
+ (push (plist-get body :source) dape--sources)))
+ ("changed"
+ (cl-loop with plist = (cl-find id dape--sources
+ :key (lambda (source)
+ (plist-get source :id)))
+ for (key value) on body by 'cddr
+ do (plist-put plist key value)))
+ ("removed"
+ (cl-delete id (lambda (source) (= (plist-get source :id) id))
+ :key (lambda (source) (plist-get source :id)))))))
+
(cl-defmethod dape-handle-event (_process (_event (eql process)) body)
"Handle process events."
(let ((start-method (format "%sed"
@@ -1528,6 +1570,8 @@ Starts a new process as per request of the debug adapter."
dape--thread-id nil
dape--capabilities nil
dape--threads nil
+ dape--modules nil
+ dape--sources nil
dape--stack-id nil
dape--source-buffers nil
dape--process process
@@ -2134,7 +2178,7 @@ See `dape--callback' for expected CB signature."
(source-reference (plist-get source :sourceReference))
(buffer (plist-get dape--source-buffers source-reference)))
(cond
- ((or path
+ ((or (and path (file-exists-p (dape--path path 'local)))
(and buffer (buffer-live-p buffer)))
(funcall cb process))
((and (numberp source-reference) (> source-reference 0))
@@ -2143,6 +2187,8 @@ See `dape--callback' for expected CB signature."
(list
:source source
:sourceReference source-reference))
+ (unless success
+ (dape--repl-message (format "%s" msg) 'warning))
(when-let ((content (plist-get body :content))
(buffer
(generate-new-buffer (format "*dape-source %s*"
@@ -2160,7 +2206,8 @@ See `dape--callback' for expected CB signature."
dape--source source)
(let ((inhibit-read-only t))
(erase-buffer)
- (insert content)))
+ (insert content))
+ (goto-char (point-min)))
(funcall cb process)))))))
@@ -2592,6 +2639,8 @@ with ARGS."
('dape-info-threads-mode "Threads")
('dape-info-exceptions-mode "Exceptions")
('dape-info-stack-mode "Stack")
+ ('dape-info-modules-mode "Modules")
+ ('dape-info-sources-mode "Sources")
('dape-info-watch-mode "Watch")
;; FIXME If scope is named Scope <%s> there is trouble
('dape-info-scope-mode (format "Scope <%s>" identifier))
@@ -2664,8 +2713,15 @@ FN is executed on mouse-2 and ?r, BODY is executed
inside of let stmt."
(dape--display-buffer
(dape--info-buffer 'dape-info-breakpoints-mode 'skip-update)))
;; Open and update stack buffer
- (dape--display-buffer
- (dape--info-buffer 'dape-info-stack-mode 'skip-update))
+ (unless (seq-find (lambda (buffer)
+ (and (get-buffer-window buffer)
+ (with-current-buffer buffer
+ (or (dape--info-buffer-p 'dape-info-stack-mode)
+ (dape--info-buffer-p
'dape-info-modules-mode)
+ (dape--info-buffer-p
'dape-info-sources-mode)))))
+ (dape--info-buffer-list))
+ (dape--display-buffer
+ (dape--info-buffer 'dape-info-stack-mode 'skip-update)))
;; Open stack 0 if not group-2 buffer displayed
(unless (seq-find (lambda (buffer)
(and (get-buffer-window buffer)
@@ -2806,7 +2862,8 @@ FN is executed on mouse-2 and ?r, BODY is executed inside
of let stmt."
(defun dape--info-threads-fetch (cb)
"Fetches data for `dape--info-threads-update'.
CB is expected to be `dape--info-threads-update'."
- (if-let ((process (dape--live-process t)))
+ (if-let ((process (dape--live-process t))
+ ((eq dape--state 'stopped)))
(dape--with dape--inactive-threads-stack-trace (process)
(funcall cb (dape--current-thread)))
(funcall cb nil)))
@@ -2881,7 +2938,9 @@ CB is expected to be `dape--info-threads-update'."
dape--info-stack-position (make-marker)
dape--info-buffer-fetch-fn #'dape--info-stack-fetch
dape--info-buffer-update-fn #'dape--info-stack-update
- dape--info-buffer-related '((dape-info-stack-mode nil "Stack")))
+ dape--info-buffer-related '((dape-info-stack-mode nil "Stack")
+ (dape-info-modules-mode nil "Modules")
+ (dape-info-sources-mode nil "Sources")))
(add-to-list 'overlay-arrow-variable-list 'dape--info-stack-position))
(defun dape--info-stack-fetch (cb)
@@ -2937,6 +2996,94 @@ Updates from CURRENT-STACK-FRAME STACK-FRAMES."
finally (gdb-mark-line line dape--info-stack-position)))))
+;;; Info modules buffer
+
+(defvar dape--info-modules-font-lock-keywords
+ '(("^\\([^ ]+\\) " (1 font-lock-function-name-face)))
+ "Font lock keywords used in `gdb-frames-mode'.")
+
+(dape--info-buffer-command dape-info-modules-goto (dape--info-module)
+ "Goto source."
+ (if-let ((path (plist-get dape--info-module :path)))
+ (pop-to-buffer (find-file-noselect path))
+ (user-error "No path associated with module.")))
+
+(dape--info-buffer-map dape-info-module-line-map dape-info-modules-goto)
+
+(define-derived-mode dape-info-modules-mode dape-info-parent-mode "Modules"
+ "Major mode for Dape info modules."
+ :interactive nil
+ (setq font-lock-defaults '(dape--info-modules-font-lock-keywords)
+ dape--info-buffer-update-fn #'dape--info-modules-update
+ dape--info-buffer-related '((dape-info-stack-mode nil "Stack")
+ (dape-info-modules-mode nil "Modules")
+ (dape-info-sources-mode nil "Sources"))))
+
+(defun dape--info-modules-update ()
+ "Updates `dape-info-modules-mode' buffer."
+ (cl-loop with table = (make-gdb-table)
+ for module in (reverse dape--modules)
+ do
+ (gdb-table-add-row
+ table
+ (list
+ (concat
+ (plist-get module :name)
+ (when-let ((path (plist-get module :path)))
+
+ (concat " of " (dape--format-file-line path nil)))
+ (when-let ((address-range (plist-get module :addressRange)))
+ (concat " at "
+ address-range nil))
+ " "))
+ (list
+ 'dape--info-module module
+ 'mouse-face 'highlight
+ 'help-echo (format "mouse-2: goto module")
+ 'keymap dape-info-module-line-map))
+ finally (insert (gdb-table-string table " "))))
+
+
+;;; Info sources buffer
+
+(dape--info-buffer-command dape-info-sources-goto (dape--info-source)
+ "Goto source."
+ (dape--with dape--source-ensure ((dape--live-process)
+ (list :source dape--info-source))
+ (if-let ((marker
+ (dape--object-to-marker (list :source dape--info-source))))
+ (pop-to-buffer (marker-buffer marker))
+ (user-error "Unable to get source."))))
+
+(dape--info-buffer-map dape-info-sources-line-map dape-info-sources-goto)
+
+(define-derived-mode dape-info-sources-mode dape-info-parent-mode "Sources"
+ "Major mode for Dape info sources."
+ :interactive nil
+ (setq dape--info-buffer-update-fn #'dape--info-sources-update
+ dape--info-buffer-related '((dape-info-stack-mode nil "Stack")
+ (dape-info-modules-mode nil "Modules")
+ (dape-info-sources-mode nil "Sources"))))
+
+(defun dape--info-sources-update ()
+ "Updates `dape-info-modules-mode' buffer."
+ (cl-loop with table = (make-gdb-table)
+ for source in (reverse dape--sources)
+ do
+ (gdb-table-add-row
+ table
+ (list
+ (concat
+ (plist-get source :name)
+ " "))
+ (list
+ 'dape--info-source source
+ 'mouse-face 'highlight
+ 'keymap dape-info-sources-line-map
+ 'help-echo "mouse-2, RET: goto source"))
+ finally (insert (gdb-table-string table " "))))
+
+
;;; Info scope buffer
(defvar dape--info-expanded-p (make-hash-table :test 'equal)
- [elpa] externals/dape updated (53560932c3 -> 00b226369c), ELPA Syncer, 2023/12/28
- [elpa] externals/dape 7b54a23ec0 1/8: Fix set variable on js-debug, ELPA Syncer, 2023/12/28
- [elpa] externals/dape 7b1168ddb1 3/8: Add support for modules and loaded sources,
ELPA Syncer <=
- [elpa] externals/dape 571df6faeb 6/8: Add new modes to dape display buffer, ELPA Syncer, 2023/12/28
- [elpa] externals/dape 00b226369c 8/8: Fix spelling of arrangement #41, ELPA Syncer, 2023/12/28
- [elpa] externals/dape 790d360712 2/8: Update info buffers on repl evaluation, ELPA Syncer, 2023/12/28
- [elpa] externals/dape 279444ac94 5/8: Refactor dape info buffer fetch and update, ELPA Syncer, 2023/12/28
- [elpa] externals/dape 4597ee6300 4/8: Add dape-commands custom, ELPA Syncer, 2023/12/28
- [elpa] externals/dape 4de787ca66 7/8: Initial erc tests (#35), ELPA Syncer, 2023/12/28