+reason.el 1.2 KB

123456789101112131415161718192021222324252627282930
  1. ;;; -*- lexical-binding: t; -*-
  2. (def-package! reason-mode
  3. :mode "\\.rei?$"
  4. :commands (reason-mode)
  5. :config
  6. (let* (
  7. (refmt-bin (executable-find "refmt"))
  8. (merlin-bin (executable-find "ocamlmerlin"))
  9. (merlin-base-dir (when merlin-bin
  10. (replace-regexp-in-string "bin/ocamlmerlin$" "" merlin-bin))))
  11. ;; Add npm merlin.el to the emacs load path and tell emacs where to find ocamlmerlin
  12. (when merlin-bin
  13. (add-to-list 'load-path (concat merlin-base-dir "share/emacs/site-lisp/"))
  14. (setq merlin-command merlin-bin))
  15. (when refmt-bin
  16. (setq refmt-command refmt-bin))
  17. (require 'merlin)
  18. (add-hook! reason-mode
  19. (add-hook 'before-save-hook #'refmt-before-save nil t)
  20. (merlin-mode))
  21. (setq-hook! reason-mode
  22. indent-region-function #'apply-refmt)
  23. (set-electric! 'some-mode :chars '(?|))
  24. (set-lookup-handlers! 'reason-mode
  25. :definition #'merlin-locate
  26. :references #'merlin-occurrences
  27. :documentation #'merlin-document)
  28. (set-company-backend! 'reason-mode 'merlin-company-backend)))