Depurando ActionScript no Emacs

Graças ao projeto vscode-swf-debug e a extensão dap-mode, descobri que é possível depurar .swf no Emacs.

A comunicação com o dap-mode é simples - o módulo Java swf-debug-adapter do vscode-swf-debug cuidará do servidor DAP, a partir daí basta integrar com a extensão.

;;; dap-as3.el --- DAP mode for ActionScript -*- lexical-binding: t; -*-

(require 'dap-mode)

(defcustom dap-swf-adapter-jar
  ""
  "Caminho do arquivo jar do swf-debug-adapter.
Exemplo:
  /home/user/vscode-swf-debug/swf-debug-adapter/target/swf-debug-adapter.jar"
  :type 'string
  :group 'dap-mode)

(defcustom dap-swf-runtime-executable
  ""
  "Caminho do executável do runtime do SWF (adl).
Exemplo:
  /home/user/airsdk/bin/adl"
  :type 'string
  :group 'dap-mode)

(defun dap-swf-start-adapter-command (port)
  (format "java -jar %s --server=%d" dap-swf-adapter-jar port))

(defun dap-as3--populate-start-args (conf)
  (let ((port (dap--find-available-port)))
    (-> conf
        (dap--put-if-absent :program-to-start (dap-swf-start-adapter-command port))
        (dap--put-if-absent :type "swf")
        (dap--put-if-absent :debugServer port)
        (dap--put-if-absent :profile "desktop")
        (dap--put-if-absent :request "launch")
        (dap--put-if-absent :runtimeExecutable dap-swf-runtime-executable)
        (dap--put-if-absent :name "SWF Debug"))))

(dap-register-debug-provider "as3" #'dap-as3--populate-start-args)

(provide 'dap-as3)

Agora só definir as variáveis dap-swf-adapter-jar e dap-swf-runtime-executable, e estamos pronto para criar uma configuração de depuração:

(dap-register-debug-template
 "Debug example"
 (list :type "as3"
       :name "example"
       :program "/home/user/as3-example/bin-debug/example-app.xml"))