|
29 | 29 | (require 'dap-utils) |
30 | 30 |
|
31 | 31 | (require 'lsp-dart-project) |
| 32 | +(require 'lsp-dart-flutter-daemon) |
32 | 33 |
|
33 | 34 | (defcustom lsp-dart-dap-extension-version "3.9.1" |
34 | 35 | "The extension version." |
@@ -85,24 +86,36 @@ Required to support 'Inspect Widget'." |
85 | 86 | :group 'lsp-dart |
86 | 87 | :type 'string) |
87 | 88 |
|
| 89 | +(defcustom lsp-dart-dap-flutter-verbose-log nil |
| 90 | + "Whether to enable logs from Flutter DAP." |
| 91 | + :group 'lsp-dart |
| 92 | + :type 'boolean) |
88 | 93 |
|
89 | 94 |
|
90 | 95 | ;;; Internal |
91 | 96 |
|
92 | 97 | (defconst lsp-dart-dap--devtools-buffer-name "*LSP Dart - DevTools*") |
93 | 98 | (defconst lsp-dart-dap--pub-list-pacakges-buffer-name "*LSP Dart - Pub list packages*") |
94 | 99 |
|
| 100 | +(defun lsp-dart-dap-log (msg &rest args) |
| 101 | + "Log MSG with ARGS adding lsp-dart-dap prefix." |
| 102 | + (lsp-dart-project-log (concat |
| 103 | + (propertize "[DAP] " |
| 104 | + 'face 'font-lock-function-name-face) |
| 105 | + msg |
| 106 | + args))) |
| 107 | + |
95 | 108 | (defun lsp-dart-dap--setup-extension () |
96 | 109 | "Setup dart debugger extension to run `lsp-dart-dap-dart-debugger-program`." |
97 | | - (lsp-dart-project-log "Setting up DAP...") |
| 110 | + (lsp-dart-dap-log "Setting up debugger...") |
98 | 111 | (lsp-async-start-process |
99 | 112 | (lambda () |
100 | 113 | (lsp-async-start-process |
101 | | - (lambda () (lsp-dart-project-log "DAP setup done!")) |
102 | | - (lambda (_) (lsp-dart-project-log "Error setting up lsp-dart-dap, check if `npm` is on $PATH")) |
| 114 | + (lambda () (lsp-dart-dap-log "Setup done!")) |
| 115 | + (lambda (_) (lsp-dart-dap-log "Error setting up DAP, check if `npm` is on $PATH")) |
103 | 116 | (f-join lsp-dart-dap-debugger-path "extension/node_modules/typescript/bin/tsc") |
104 | 117 | "--project" (f-join lsp-dart-dap-debugger-path "extension"))) |
105 | | - (lambda (_) (lsp-dart-project-log "Error setting up lsp-dart-dap, check if `npm` is on $PATH")) |
| 118 | + (lambda (_) (lsp-dart-dap-log "Error setting up DAP, check if `npm` is on $PATH")) |
106 | 119 | "npm" "install" "--prefix" (f-join lsp-dart-dap-debugger-path "extension") |
107 | 120 | "--no-package-lock" "--silent" "--no-save")) |
108 | 121 |
|
@@ -134,8 +147,17 @@ Required to support 'Inspect Widget'." |
134 | 147 |
|
135 | 148 | (defun lsp-dart-dap--flutter-get-or-create-device () |
136 | 149 | "Return the device to debug or prompt to start it." |
137 | | - (ht ('id "emulator-5554") |
138 | | - ('name "device"))) |
| 150 | + (-let* ((devices (lsp-dart-flutter-daemon-get-emulators)) |
| 151 | + (chosen-device (dap--completing-read "Select a device to use: " |
| 152 | + devices |
| 153 | + (-lambda ((&hash "id" "name" "category" "platformType" platform)) |
| 154 | + (format "%s - %s" platform (if name name id))) |
| 155 | + nil |
| 156 | + t)) |
| 157 | + (emulator (lsp-dart-flutter-daemon-launch chosen-device))) |
| 158 | + (ht ('id "emulator-5554") |
| 159 | + ('name "device")) |
| 160 | + )) |
139 | 161 |
|
140 | 162 | (defun lsp-dart-dap--populate-flutter-start-file-args (conf) |
141 | 163 | "Populate CONF with the required arguments for Flutter debug." |
@@ -163,6 +185,60 @@ Required to support 'Inspect Widget'." |
163 | 185 | :flutterPlatform "default" |
164 | 186 | :name "Flutter")) |
165 | 187 |
|
| 188 | +(defvar lsp-dart-dap--flutter-progress-reporter nil) |
| 189 | + |
| 190 | +(cl-defmethod dap-handle-event ((_event (eql dart.log)) _session params) |
| 191 | + "Handle debugger uris EVENT for SESSION with PARAMS." |
| 192 | + (when lsp-dart-dap-flutter-verbose-log |
| 193 | + (-let* (((&hash "message") params) |
| 194 | + (msg (replace-regexp-in-string (regexp-quote "\n") "" message nil 'literal))) |
| 195 | + (lsp-dart-dap-log msg)))) |
| 196 | + |
| 197 | +(cl-defmethod dap-handle-event ((_event (eql dart.launching)) _session params) |
| 198 | + "Handle debugger uris EVENT for SESSION with PARAMS." |
| 199 | + (let ((prefix (concat (propertize "[LSP Dart] " |
| 200 | + 'face 'font-lock-keyword-face) |
| 201 | + (propertize "[DAP] " |
| 202 | + 'face 'font-lock-function-name-face)))) |
| 203 | + (setq lsp-dart-dap--flutter-progress-reporter |
| 204 | + (make-progress-reporter (concat prefix (gethash "message" params)))))) |
| 205 | + |
| 206 | +(cl-defmethod dap-handle-event ((_event (eql dart.launched)) _session _params) |
| 207 | + "Handle debugger uris EVENT for SESSION with PARAMS." |
| 208 | + (when lsp-dart-dap--flutter-progress-reporter |
| 209 | + (progress-reporter-done lsp-dart-dap--flutter-progress-reporter)) |
| 210 | + (lsp-dart-dap-log "Loading app...")) |
| 211 | + |
| 212 | +(cl-defmethod dap-handle-event ((_event (eql dart.progress)) _session params) |
| 213 | + "Handle debugger uris EVENT for SESSION with PARAMS." |
| 214 | + (-let (((&hash "message") params) |
| 215 | + (prefix (concat (propertize "[LSP Dart] " |
| 216 | + 'face 'font-lock-keyword-face) |
| 217 | + (propertize "[DAP] " |
| 218 | + 'face 'font-lock-function-name-face)))) |
| 219 | + (when (and message lsp-dart-dap--flutter-progress-reporter) |
| 220 | + (progress-reporter-force-update lsp-dart-dap--flutter-progress-reporter nil (concat prefix message))))) |
| 221 | + |
| 222 | +(cl-defmethod dap-handle-event ((_event (eql dart.flutter.firstFrame)) _session _params) |
| 223 | + "Handle debugger uris EVENT for SESSION with PARAMS." |
| 224 | + (setq lsp-dart-dap--flutter-progress-reporter nil) |
| 225 | + (lsp-dart-dap-log "App ready!")) |
| 226 | + |
| 227 | +(cl-defmethod dap-handle-event ((_event (eql dart.serviceRegistered)) _session _params) |
| 228 | + "Handle debugger uris EVENT for SESSION with PARAMS.") |
| 229 | +(cl-defmethod dap-handle-event ((_event (eql dart.serviceExtensionAdded)) _session _params) |
| 230 | + "Handle debugger uris EVENT for SESSION with PARAMS.") |
| 231 | +(cl-defmethod dap-handle-event ((_event (eql dart.flutter.serviceExtensionStateChanged)) _session _params) |
| 232 | + "Handle debugger uris EVENT for SESSION with PARAMS.") |
| 233 | +(cl-defmethod dap-handle-event ((_event (eql dart.hotRestartRequest)) _session _params) |
| 234 | + "Handle debugger uris EVENT for SESSION with PARAMS.") |
| 235 | +(cl-defmethod dap-handle-event ((_event (eql dart.hotReloadRequest)) _session _params) |
| 236 | + "Handle debugger uris EVENT for SESSION with PARAMS.") |
| 237 | +(cl-defmethod dap-handle-event ((_event (eql dart.debugMetrics)) _session _params) |
| 238 | + "Handle debugger uris EVENT for SESSION with PARAMS.") |
| 239 | +(cl-defmethod dap-handle-event ((_event (eql dart.navigate)) _session _params) |
| 240 | + "Handle debugger uris EVENT for SESSION with PARAMS.") |
| 241 | + |
166 | 242 | ;; DevTools |
167 | 243 |
|
168 | 244 | (cl-defmethod dap-handle-event ((_event (eql dart.debuggerUris)) _session params) |
@@ -208,13 +284,13 @@ If URI is not found on buffer, schedule re-check." |
208 | 284 |
|
209 | 285 | (defun lsp-dart-dap--activate-devtools (callback) |
210 | 286 | "Activate Dart Devtools via pub then call CALLBACK." |
211 | | - (lsp-dart-project-log "Activating DevTools...") |
| 287 | + (lsp-dart-dap-log "Activating DevTools...") |
212 | 288 | (let ((pub (lsp-dart-project-get-pub-command))) |
213 | 289 | (lsp-async-start-process |
214 | 290 | (lambda () |
215 | | - (lsp-dart-project-log "DevTools activated successfully!") |
| 291 | + (lsp-dart-dap-log "DevTools activated successfully!") |
216 | 292 | (funcall callback)) |
217 | | - (lambda (_) (lsp-dart-project-log "Could not Activate DevTools. \ |
| 293 | + (lambda (_) (lsp-dart-dap-log "Could not Activate DevTools. \ |
218 | 294 | Try to activate manually running 'pub global activate devtools'")) |
219 | 295 | pub "global" "activate" "devtools"))) |
220 | 296 |
|
@@ -275,7 +351,7 @@ If it is already activated or after activated successfully, call CALLBACK." |
275 | 351 | (when (and session vm-service-uri) |
276 | 352 | (lsp-dart-dap--start-devtools |
277 | 353 | (lambda (uri) |
278 | | - (lsp-dart-project-log "Openning DevTools at browser...") |
| 354 | + (lsp-dart-dap-log "Openning DevTools at browser...") |
279 | 355 | (lsp-dart-dap--open-devtools uri vm-service-uri)))))) |
280 | 356 |
|
281 | 357 | (provide 'lsp-dart-dap) |
|
0 commit comments