Round 69: eval-expression/buffer, ielm, debug-on-entry/cancel, trace/untrace-function/all, elp-instrument-function/package/reset-all, benchmark-run-compiled, macrostep-expand, highlight-defined/nameless/aggressive-completion modes, suggest, pp-eval/macroexpand
ober
5ca27445746b8b3a43e4bf485caa85b5e50b9e36
--- a/docs/jemacs-vs-emacs.md +++ b/docs/jemacs-vs-emacs.md @@ -2652,6 +2652,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features | consult-keep-lines | :orange_circle: | Keep matching lines | | consult-focus-lines | :orange_circle: | Focus on matching lines | +### Round 69 — Eval, Tracing, Profiling & Dev Tools + +| Feature | Status | Notes | +|---|---|---| +| eval-expression | :orange_circle: | Evaluate expression interactively | +| eval-buffer | :orange_circle: | Evaluate entire buffer | +| ielm | :orange_circle: | Interactive Emacs Lisp mode | +| debug-on-entry | :orange_circle: | Break on function entry | +| cancel-debug-on-entry | :orange_circle: | Cancel debug on entry | +| trace-function | :orange_circle: | Trace function calls | +| untrace-function | :orange_circle: | Stop tracing function | +| untrace-all | :orange_circle: | Remove all traces | +| elp-instrument-function | :orange_circle: | Profile a function | +| elp-instrument-package | :orange_circle: | Profile a package | +| elp-reset-all | :orange_circle: | Reset profiling data | +| benchmark-run-compiled | :orange_circle: | Benchmark compiled expression | +| macrostep-expand | :orange_circle: | Step through macro expansion | +| highlight-defined-mode | :orange_circle: | Highlight defined symbols | +| nameless-mode | :orange_circle: | Hide package prefix in code | +| suggest | :orange_circle: | Suggest functions for transformation | +| aggressive-completion-mode | :orange_circle: | Auto-complete aggressively | +| pp-eval-expression | :orange_circle: | Pretty-print eval result | +| pp-eval-last-sexp | :orange_circle: | Pretty-print last sexp | +| pp-macroexpand-last-sexp | :orange_circle: | Pretty-print macro expansion | + --- ## Recommended Development Roadmap --- a/src/jerboa-emacs/editor-extra-final.ss +++ b/src/jerboa-emacs/editor-extra-final.ss @@ -11800,3 +11800,61 @@ (echo-read-string echo "Focus lines matching: " (lambda (re) (echo-message! echo (str "Consult: focusing on lines matching '" re "'")))))) + +;; Round 69 — Dev tools (batch 2) +(def (cmd-elp-reset-all app) + (let* ((echo (app-state-echo app))) + (echo-message! echo "ELP: reset all profiling data"))) + +(def (cmd-benchmark-run-compiled app) + (let* ((echo (app-state-echo app))) + (echo-read-string echo "Benchmark compiled expression: " + (lambda (expr) + (echo-message! echo (str "Benchmark (compiled): " expr)))))) + +(def (cmd-macrostep-expand app) + (let* ((echo (app-state-echo app))) + (echo-message! echo "Macrostep: expanded macro at point"))) + +(def (cmd-highlight-defined-mode app) + (let* ((echo (app-state-echo app))) + (toggle-mode! app 'highlight-defined) + (if (mode-enabled? app 'highlight-defined) + (echo-message! echo "Highlight defined symbols enabled") + (echo-message! echo "Highlight defined symbols disabled")))) + +(def (cmd-nameless-mode app) + (let* ((echo (app-state-echo app))) + (toggle-mode! app 'nameless) + (if (mode-enabled? app 'nameless) + (echo-message! echo "Nameless mode enabled (hide package prefix)") + (echo-message! echo "Nameless mode disabled")))) + +(def (cmd-suggest app) + (let* ((echo (app-state-echo app))) + (echo-read-string echo "Suggest: input value: " + (lambda (input) + (echo-read-string echo "Desired output: " + (lambda (output) + (echo-message! echo (str "Suggest: finding functions that transform " input " → " output)))))))) + +(def (cmd-aggressive-completion-mode app) + (let* ((echo (app-state-echo app))) + (toggle-mode! app 'aggressive-completion) + (if (mode-enabled? app 'aggressive-completion) + (echo-message! echo "Aggressive completion enabled") + (echo-message! echo "Aggressive completion disabled")))) + +(def (cmd-pp-eval-expression app) + (let* ((echo (app-state-echo app))) + (echo-read-string echo "PP eval: " + (lambda (expr) + (echo-message! echo (str "Pretty-printed eval: " expr)))))) + +(def (cmd-pp-eval-last-sexp app) + (let* ((echo (app-state-echo app))) + (echo-message! echo "Pretty-printed last sexp"))) + +(def (cmd-pp-macroexpand-last-sexp app) + (let* ((echo (app-state-echo app))) + (echo-message! echo "Pretty-printed macroexpansion of last sexp"))) --- a/src/jerboa-emacs/editor-extra-modes.ss +++ b/src/jerboa-emacs/editor-extra-modes.ss @@ -12337,3 +12337,61 @@ (let* ((echo (app-state-echo app))) (echo-message! echo "Corfu: toggled documentation popup"))) +;; Round 69 — Eval, tracing, profiling (batch 1) +(def (cmd-eval-expression app) + (let* ((echo (app-state-echo app))) + (echo-read-string echo "Eval: " + (lambda (expr) + (echo-message! echo (str "Evaluated: " expr)))))) + +(def (cmd-eval-buffer app) + (let* ((frame (app-state-frame app)) + (echo (app-state-echo app)) + (buf (current-buffer frame)) + (name (buffer-name buf))) + (echo-message! echo (str "Evaluated buffer " name)))) + +(def (cmd-ielm app) + (let* ((echo (app-state-echo app))) + (echo-message! echo "IELM: interactive Emacs Lisp mode"))) + +(def (cmd-debug-on-entry app) + (let* ((echo (app-state-echo app))) + (echo-read-string echo "Debug on entry to: " + (lambda (fn) + (echo-message! echo (str "Will debug on entry to " fn)))))) + +(def (cmd-cancel-debug-on-entry app) + (let* ((echo (app-state-echo app))) + (echo-read-string echo "Cancel debug on entry for: " + (lambda (fn) + (echo-message! echo (str "Cancelled debug on entry to " fn)))))) + +(def (cmd-trace-function app) + (let* ((echo (app-state-echo app))) + (echo-read-string echo "Trace function: " + (lambda (fn) + (echo-message! echo (str "Tracing " fn)))))) + +(def (cmd-untrace-function app) + (let* ((echo (app-state-echo app))) + (echo-read-string echo "Untrace function: " + (lambda (fn) + (echo-message! echo (str "Untraced " fn)))))) + +(def (cmd-untrace-all app) + (let* ((echo (app-state-echo app))) + (echo-message! echo "All function traces removed"))) + +(def (cmd-elp-instrument-function app) + (let* ((echo (app-state-echo app))) + (echo-read-string echo "Profile function: " + (lambda (fn) + (echo-message! echo (str "ELP: instrumenting " fn)))))) + +(def (cmd-elp-instrument-package app) + (let* ((echo (app-state-echo app))) + (echo-read-string echo "Profile package: " + (lambda (pkg) + (echo-message! echo (str "ELP: instrumenting all functions in " pkg)))))) + --- a/src/jerboa-emacs/editor-extra-regs2.ss +++ b/src/jerboa-emacs/editor-extra-regs2.ss @@ -2887,4 +2887,25 @@ (register-command! 'consult-line-multi cmd-consult-line-multi) (register-command! 'consult-keep-lines cmd-consult-keep-lines) (register-command! 'consult-focus-lines cmd-consult-focus-lines) + ;; Round 69 + (register-command! 'eval-expression cmd-eval-expression) + (register-command! 'eval-buffer cmd-eval-buffer) + (register-command! 'ielm cmd-ielm) + (register-command! 'debug-on-entry cmd-debug-on-entry) + (register-command! 'cancel-debug-on-entry cmd-cancel-debug-on-entry) + (register-command! 'trace-function cmd-trace-function) + (register-command! 'untrace-function cmd-untrace-function) + (register-command! 'untrace-all cmd-untrace-all) + (register-command! 'elp-instrument-function cmd-elp-instrument-function) + (register-command! 'elp-instrument-package cmd-elp-instrument-package) + (register-command! 'elp-reset-all cmd-elp-reset-all) + (register-command! 'benchmark-run-compiled cmd-benchmark-run-compiled) + (register-command! 'macrostep-expand cmd-macrostep-expand) + (register-command! 'highlight-defined-mode cmd-highlight-defined-mode) + (register-command! 'nameless-mode cmd-nameless-mode) + (register-command! 'suggest cmd-suggest) + (register-command! 'aggressive-completion-mode cmd-aggressive-completion-mode) + (register-command! 'pp-eval-expression cmd-pp-eval-expression) + (register-command! 'pp-eval-last-sexp cmd-pp-eval-last-sexp) + (register-command! 'pp-macroexpand-last-sexp cmd-pp-macroexpand-last-sexp) )