Round 252: Haskell ext, Elixir ext, CIDER ext, Ensime (20 commands)

ober

def19b6d4a79171c17b1c7b45b73f172b96c0915

diff --git a/docs/jemacs-vs-emacs.md b/docs/jemacs-vs-emacs.md
index 0873575..5351d13 100644
--- a/docs/jemacs-vs-emacs.md
+++ b/docs/jemacs-vs-emacs.md
@@ -4583,6 +4583,31 @@ No remaining Tier 1 gaps. All core editing, completion, and navigation features 
 | ebib-import-file | :orange_circle: | Import file into Ebib |
 | ebib-push-citation | :orange_circle: | Push Ebib citation to buffer |
 
+### Round 252 — Haskell ext, Elixir ext, CIDER ext, Ensime
+
+| Command | Status | Description |
+|---------|--------|-------------|
+| haskell-process-type | :orange_circle: | Show type of Haskell expression |
+| haskell-check | :orange_circle: | Check current Haskell file |
+| haskell-compile | :orange_circle: | Compile Haskell project |
+| haskell-session-change | :orange_circle: | Change Haskell session |
+| elixir-mode-goto-definition | :orange_circle: | Go to Elixir definition |
+| alchemist-mix-run | :orange_circle: | Run Elixir mix task |
+| alchemist-mix-test | :orange_circle: | Run Elixir mix tests |
+| alchemist-compile-this-buffer | :orange_circle: | Compile Elixir buffer |
+| cider-find-dwim | :orange_circle: | CIDER find-dwim at point |
+| ensime-edit-definition | :orange_circle: | Jump to Scala definition |
+| ensime-type-at-point | :orange_circle: | Show Scala type at point |
+| ensime-import-type-at-point | :orange_circle: | Import Scala type at point |
+| ensime-search | :orange_circle: | Search Scala project |
+| ensime-show-hierarchy | :orange_circle: | Show Scala type hierarchy |
+| ensime-refactor-rename | :orange_circle: | Rename Scala symbol |
+| ensime-refactor-organize-imports | :orange_circle: | Organize Scala imports |
+| ensime-refactor-extract-method | :orange_circle: | Extract Scala method |
+| ensime-refactor-inline-local | :orange_circle: | Inline Scala local variable |
+| ensime-refactor-extract-local | :orange_circle: | Extract Scala local variable |
+| ensime-expand-selection | :orange_circle: | Expand Scala selection |
+
 ### Round 251 — Semantic ext, Python ext, Ruby ext, JS/TS/Go guru
 
 | Command | Status | Description |
diff --git a/src/jerboa-emacs/editor-extra-final.ss b/src/jerboa-emacs/editor-extra-final.ss
index ba9f596..bf28353 100644
--- a/src/jerboa-emacs/editor-extra-final.ss
+++ b/src/jerboa-emacs/editor-extra-final.ss
@@ -20610,3 +20610,52 @@
     (echo-read-string echo "Guru scope: "
       (lambda (scope)
         (echo-message! echo (str "Go guru: scope set to " scope))))))
+
+;; Round 252 — Ensime ext (10 in final)
+(def (cmd-ensime-type-at-point app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Ensime: showing type at point")))
+
+(def (cmd-ensime-import-type-at-point app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Ensime: importing type at point")))
+
+(def (cmd-ensime-search app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Search: "
+      (lambda (query)
+        (echo-message! echo (str "Ensime: searching for " query))))))
+
+(def (cmd-ensime-show-hierarchy app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Ensime: showing type hierarchy")))
+
+(def (cmd-ensime-refactor-rename app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "New name: "
+      (lambda (name)
+        (echo-message! echo (str "Ensime: renaming to " name))))))
+
+(def (cmd-ensime-refactor-organize-imports app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Ensime: organizing imports")))
+
+(def (cmd-ensime-refactor-extract-method app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Method name: "
+      (lambda (name)
+        (echo-message! echo (str "Ensime: extracted method " name))))))
+
+(def (cmd-ensime-refactor-inline-local app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Ensime: inlined local variable")))
+
+(def (cmd-ensime-refactor-extract-local app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Variable name: "
+      (lambda (name)
+        (echo-message! echo (str "Ensime: extracted local " name))))))
+
+(def (cmd-ensime-expand-selection app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Ensime: expanded selection")))
diff --git a/src/jerboa-emacs/editor-extra-modes.ss b/src/jerboa-emacs/editor-extra-modes.ss
index b6320d6..f8d5787 100644
--- a/src/jerboa-emacs/editor-extra-modes.ss
+++ b/src/jerboa-emacs/editor-extra-modes.ss
@@ -21250,3 +21250,46 @@
   (let* ((echo (app-state-echo app)))
     (echo-message! echo "Go guru: describing selected expression")))
 
+;; Round 252 — Haskell ext, Elixir ext, CIDER ext, Ensime (10 in modes)
+(def (cmd-haskell-process-type app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Haskell: showing type of expression")))
+
+(def (cmd-haskell-check app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Haskell: checking current file")))
+
+(def (cmd-haskell-compile app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Haskell: compiling project")))
+
+(def (cmd-haskell-session-change app)
+  (let* ((echo (app-state-echo app)))
+    (echo-read-string echo "Session: "
+      (lambda (sess)
+        (echo-message! echo (str "Haskell: changed session to " sess))))))
+
+(def (cmd-elixir-mode-goto-definition app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Elixir: going to definition")))
+
+(def (cmd-alchemist-mix-run app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Alchemist: running mix")))
+
+(def (cmd-alchemist-mix-test app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Alchemist: running mix test")))
+
+(def (cmd-alchemist-compile-this-buffer app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Alchemist: compiling buffer")))
+
+(def (cmd-cider-find-dwim app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "CIDER: find-dwim at point")))
+
+(def (cmd-ensime-edit-definition app)
+  (let* ((echo (app-state-echo app)))
+    (echo-message! echo "Ensime: jumping to definition")))
+
diff --git a/src/jerboa-emacs/editor-extra-regs2.ss b/src/jerboa-emacs/editor-extra-regs2.ss
index 35ca758..ea03ff8 100644
--- a/src/jerboa-emacs/editor-extra-regs2.ss
+++ b/src/jerboa-emacs/editor-extra-regs2.ss
@@ -6708,4 +6708,25 @@
   (register-command! 'go-guru-whicherrs cmd-go-guru-whicherrs)
   (register-command! 'go-guru-peers cmd-go-guru-peers)
   (register-command! 'go-guru-set-scope cmd-go-guru-set-scope)
+  ;; Round 252 — Haskell ext, Elixir ext, CIDER ext, Ensime
+  (register-command! 'haskell-process-type cmd-haskell-process-type)
+  (register-command! 'haskell-check cmd-haskell-check)
+  (register-command! 'haskell-compile cmd-haskell-compile)
+  (register-command! 'haskell-session-change cmd-haskell-session-change)
+  (register-command! 'elixir-mode-goto-definition cmd-elixir-mode-goto-definition)
+  (register-command! 'alchemist-mix-run cmd-alchemist-mix-run)
+  (register-command! 'alchemist-mix-test cmd-alchemist-mix-test)
+  (register-command! 'alchemist-compile-this-buffer cmd-alchemist-compile-this-buffer)
+  (register-command! 'cider-find-dwim cmd-cider-find-dwim)
+  (register-command! 'ensime-edit-definition cmd-ensime-edit-definition)
+  (register-command! 'ensime-type-at-point cmd-ensime-type-at-point)
+  (register-command! 'ensime-import-type-at-point cmd-ensime-import-type-at-point)
+  (register-command! 'ensime-search cmd-ensime-search)
+  (register-command! 'ensime-show-hierarchy cmd-ensime-show-hierarchy)
+  (register-command! 'ensime-refactor-rename cmd-ensime-refactor-rename)
+  (register-command! 'ensime-refactor-organize-imports cmd-ensime-refactor-organize-imports)
+  (register-command! 'ensime-refactor-extract-method cmd-ensime-refactor-extract-method)
+  (register-command! 'ensime-refactor-inline-local cmd-ensime-refactor-inline-local)
+  (register-command! 'ensime-refactor-extract-local cmd-ensime-refactor-extract-local)
+  (register-command! 'ensime-expand-selection cmd-ensime-expand-selection)
 )