From 8519f6fed249f12d177fdeda08255471683b9b00 Mon Sep 17 00:00:00 2001 From: Henrik Lissner Date: Tue, 13 Aug 2024 16:32:59 -0400 Subject: [PATCH] refactor(ocaml): entry points into ocp-indent & opam-switch-mode Reduces edge cases, in the case the user eagerly loads any of these packages. Also replaces all hardcoded paths to ocp-indent and opam's executables with variables, respecting user configuration. --- modules/lang/ocaml/config.el | 40 +++++++++++++++++++--------------- modules/lang/ocaml/packages.el | 10 ++++----- 2 files changed, 27 insertions(+), 23 deletions(-) diff --git a/modules/lang/ocaml/config.el b/modules/lang/ocaml/config.el index de338bcdd..75beb8645 100644 --- a/modules/lang/ocaml/config.el +++ b/modules/lang/ocaml/config.el @@ -98,33 +98,39 @@ (use-package! ocp-indent - ;; must be careful to always defer this, it has autoloads that adds hooks - ;; which we do not want if the executable can't be found - :hook (tuareg-mode-local-vars . +ocaml-init-ocp-indent-h) + :hook (tuareg-mode-local-vars . ocp-setup-indent) + :hook (caml-mode-local-vars . ocp-indent-caml-mode-setup) + :init + (defadvice! +ocaml--init-ocp-indent-maybe-h (fn &rest args) + "Run `ocp-setup-indent' only if the ocp-indent binary is found." + :around #'ocp-setup-indent + (when (executable-find ocp-indent-path) + (apply fn args))) :config - (defun +ocaml-init-ocp-indent-h () - "Run `ocp-setup-indent', so long as the ocp-indent binary exists." - (when (executable-find "ocp-indent") - (ocp-setup-indent)))) - + ;; HACK: The package adds these hooks, but they're redundant (even + ;; counter-productive) with the hooks I add above. + (remove-hook 'tuareg-mode-hook #'ocp-setup-indent) + (remove-hook 'caml-mode-hook #'ocp-indent-caml-mode-setup)) (use-package! opam-switch-mode - :hook (tuareg-mode-local-vars . +ocaml-init-opam-switch-h) - :init - (map! :localleader + :hook (tuareg-mode-local-vars . opam-switch-mode) + :preface + (map! :after tuareg + :localleader :map tuareg-mode-map "w" #'opam-switch-set-switch) - - (defun +ocaml-init-opam-switch-h () + :init + (defadvice! +ocaml--init-opam-switch-mode-maybe-h (fn &rest args) "Activate `opam-switch-mode' if the opam executable exists." - (when (executable-find "opam") - (opam-switch-mode))) + :around #'opam-switch-mode + (when (executable-find opam-switch-program-name) + (apply fn args))) :config ;; Use opam to set environment (setq tuareg-opam-insinuate t) (opam-switch-set-switch (tuareg-opam-current-compiler))) -;; Tree sitter + (eval-when! (modulep! +tree-sitter) - (add-hook! 'tuareg-mode-local-vars-hook #'tree-sitter!)) + (add-hook 'tuareg-mode-local-vars-hook #'tree-sitter!)) diff --git a/modules/lang/ocaml/packages.el b/modules/lang/ocaml/packages.el index 6bb5a5a20..ef2711c2a 100644 --- a/modules/lang/ocaml/packages.el +++ b/modules/lang/ocaml/packages.el @@ -2,8 +2,11 @@ ;;; lang/ocaml/packages.el (package! tuareg :pin "1d53723e39f22ab4ab76d31f2b188a2879305092") - (package! opam-switch-mode :pin "1069e56a662f23ea09d4e05611bdedeb99257012") +(package! ocp-indent :pin "f38578c25d62701847b1bcb45099a9020e2032fe") +(package! dune + :recipe (:host github :repo "ocaml/dune" :files ("editor-integration/emacs/*.el")) + :pin "aac3d84f1d5abdf276d72be3dccac23bf99b3c7c") (unless (modulep! +lsp) (package! merlin :pin "b6ff2d4d569c23dd8fa91639d26fb984e9411862") @@ -13,11 +16,6 @@ (not (modulep! :checkers syntax +flymake))) (package! flycheck-ocaml :pin "77f8ddbd9bfc3a11957ac7ec7e45d5fa9179b192"))) -(package! ocp-indent :pin "f38578c25d62701847b1bcb45099a9020e2032fe") - (when (modulep! :tools eval) (package! utop :pin "384b3098c8c4a2e26b87167053952b753aa8a63a")) -(package! dune - :recipe (:host github :repo "ocaml/dune" :files ("editor-integration/emacs/*.el")) - :pin "aac3d84f1d5abdf276d72be3dccac23bf99b3c7c")