mirror of
https://github.com/doomemacs/doomemacs
synced 2025-08-01 12:17:25 -05:00
200ok-ch/counsel-jq@f5bfed8 -> 200ok-ch/counsel-jq@153d70b Andersbakken/rtags@63a7d9b -> Andersbakken/rtags@aa4c827 MatthewFluet/company-mlton@b87e363 -> MatthewFluet/company-mlton@9b09d20 NixOS/nix-mode@e32c6bf -> NixOS/nix-mode@0023fc5 OmniSharp/omnisharp-emacs@e26ff8b -> OmniSharp/omnisharp-emacs@8ec5929 ProofGeneral/PG@702f5b9 -> ProofGeneral/PG@bdb6782 Wilfred/elisp-def@da1f763 -> Wilfred/elisp-def@dfca043 agda/agda@5070bd8 -> agda/agda@9d08edb ananthakumaran/exunit.el@c77b039 -> ananthakumaran/exunit.el@5bb115f ananthakumaran/tide@a43a37b -> ananthakumaran/tide@7f7334b asok/projectile-rails@7a256b1 -> asok/projectile-rails@8d6b373 brotzeit/rustic@f7d5ac0 -> brotzeit/rustic@61d600e clojure-emacs/cider@1a34f89 -> clojure-emacs/cider@815204f clojure-emacs/clj-refactor.el@9dcc50d -> clojure-emacs/clj-refactor.el@b24ce76 clojure-emacs/clojure-mode@53ef8ac -> clojure-emacs/clojure-mode@f26379b crystal-lang-tools/emacs-crystal-mode@f9e4db1 -> crystal-lang-tools/emacs-crystal-mode@1599814 cython/cython@17e03b8 -> cython/cython@9a761a6 dgutov/robe@f04dcc7 -> dgutov/robe@3ef165c diml/utop@7bc5117) -> diml/utop@a5ff52b) dominikh/go-mode.el@fdf46fe -> dominikh/go-mode.el@49a5380 elixir-editors/emacs-elixir@b78e7f7 -> elixir-editors/emacs-elixir@9de08c1 emacs-csharp/csharp-mode@4916829 -> emacs-csharp/csharp-mode@09b4d57 emacs-ess/ESS@d013616 -> emacs-ess/ESS@5169b0d emacs-lsp/lsp-dart@b81b1ec -> emacs-lsp/lsp-dart@71902ca emacs-lsp/lsp-haskell@4d85cb3 -> emacs-lsp/lsp-haskell@7efbef3 emacs-lsp/lsp-java@f43b00a -> emacs-lsp/lsp-java@5f6d357 emacs-lsp/lsp-metals@31dafff -> emacs-lsp/lsp-metals@c76eeb6 emacs-lsp/lsp-pyright@71ff088 -> emacs-lsp/lsp-pyright@65fb141 emacs-lsp/lsp-python-ms@5470ada -> emacs-lsp/lsp-python-ms@689f6cf emacs-lsp/lsp-sourcekit@948c3a3 -> emacs-lsp/lsp-sourcekit@ff204ed emacs-php/php-mode@7e5722c -> emacs-php/php-mode@8cdc727 emacs-straight/auctex@fb062a3 -> emacs-straight/auctex@384c4b9 emacs-straight/csv-mode@eb3ec00 -> emacs-straight/csv-mode@8da54e8 emacs-straight/org-mode@9e98e9a -> emacs-straight/org-mode@0b117f7 emacs-typescript/typescript.el@54f14c4 -> emacs-typescript/typescript.el@1043025 emacsmirror/cmake-mode@e58c411 -> emacsmirror/cmake-mode@d5d77de ericdallo/hover.el@3f07a18 -> ericdallo/hover.el@c9c0593 erlang/otp@8fc0641 -> erlang/otp@af06b43 eschulte/jump.el@e4f1372 -> eschulte/jump.el@55caa66 ethereum/emacs-solidity@d166a86 -> ethereum/emacs-solidity@b4fd719 factor/factor@94a922a -> factor/factor@1928e60 fsharp/emacs-fsharp-mode@13fbf4c -> fsharp/emacs-fsharp-mode@78898a1 fxbois/web-mode@890e837 -> fxbois/web-mode@8ef4793 godotengine/emacs-gdscript-mode@75fe658 -> godotengine/emacs-gdscript-mode@16c631c greghendershott/racket-mode@3563081 -> greghendershott/racket-mode@75ea8f6 haskell/haskell-mode@0d39c84 -> haskell/haskell-mode@3a019e6 hhvm/hack-mode@9079bc3) -> hhvm/hack-mode@847fd91) hvesalai/emacs-scala-mode@9d3b56e -> hvesalai/emacs-scala-mode@402d6df idris-hackers/idris-mode@b77eadd -> idris-hackers/idris-mode@80aabd2 immerrr/lua-mode@d2ff304 -> immerrr/lua-mode@2d9a468 iyefrat/evil-tex@ac313ef -> iyefrat/evil-tex@5f0d6fb jaor/geiser@cd00be6 -> jaor/geiser@26dd2f4 jcollard/elm-mode@363da4b -> jcollard/elm-mode@188b9c7 joaotavora/sly@3278819 -> joaotavora/sly@fb84318 jorgenschaefer/emacs-buttercup@2f24a44 -> jorgenschaefer/emacs-buttercup@1de6be4 jrblevin/markdown-mode@dcad557 -> jrblevin/markdown-mode@0517340 jwiegley/emacs-async@14f48de -> jwiegley/emacs-async@d7e7f79 jyp/attrap@9c88154 -> jyp/attrap@778382e jyp/dante@e2acbf6 -> jyp/dante@7b1ab64 kaushalmodi/ox-hugo@04f41ca -> kaushalmodi/ox-hugo@a05667e leanprover/lean-mode@cc1f5fa -> leanprover/lean-mode@15bee87 ledger/ledger-mode@805507f -> ledger/ledger-mode@3495d12 mooz/js2-mode@f7816bd -> mooz/js2-mode@29979e5 nonsequitur/inf-ruby@b012457 -> nonsequitur/inf-ruby@1fc972e ocaml-ppx/ocamlformat@860266b -> ocaml-ppx/ocamlformat@7db8d13 ocaml/dune@4d097cd -> ocaml/dune@f839fc1 ocaml/merlin@28193d5 -> ocaml/merlin@36d0aef pezra/rspec-mode@f1029ca -> pezra/rspec-mode@92ef785 polymode/poly-R@51ffeb6 -> polymode/poly-R@c42ff3a polymode/polymode@3284ff1 -> polymode/polymode@b3871e9 purescript-emacs/psc-ide-emacs@663f4e2 -> purescript-emacs/psc-ide-emacs@ce97d71 purescript-emacs/purescript-mode@154ad16 -> purescript-emacs/purescript-mode@8410baf pwalsh/pipenv.el@f516a1a -> pwalsh/pipenv.el@8f50c68 pythonic-emacs/anaconda-mode@b1875a5 -> pythonic-emacs/anaconda-mode@081f9d8 racer-rust/emacs-racer@a0bdf77 -> racer-rust/emacs-racer@f17f9d7 rubocop-hq/rubocop-emacs@03bf155 -> rubocop-hq/rubocop-emacs@1372ee3 seagle0128/grip-mode@91da46f -> seagle0128/grip-mode@1aebf9c senny/rvm.el@b2498a4 -> senny/rvm.el@c1f2642 swift-emacs/swift-mode@0bc8d8d -> swift-emacs/swift-mode@95ff004 takaxp/org-tree-slide@04b5a9d -> takaxp/org-tree-slide@c9487e5 technomancy/fennel-mode@fa56106 -> technomancy/fennel-mode@bebc9dd tpapp/julia-repl@d073acb -> tpapp/julia-repl@7ce38a9 wbolster/emacs-python-pytest@3fadf1f -> wbolster/emacs-python-pytest@31ae5e0 wwwjfy/emacs-fish@db257db -> wwwjfy/emacs-fish@a7c953b Fix #4695 Close #4529 Close #4576
lang/ocaml
Table of Contents TOC
Description
This module adds OCaml support to Doom Emacs, powered by tuareg-mode.
- Code completion, documentation look-up, code navigation and refactoring (merlin)
- Type, documentation and function argument display on idle (merlin-eldoc)
- REPL (utop)
- Syntax-checking (
merlin
with flycheck-ocaml) - Auto-indentation (ocp-indent)
- Code formatting (ocamlformat)
- Dune file format (dune)
Module Flags
This module provides no flags.
Plugins
Prerequisites
This module has no hard dependencies, but it is recommanded that you install opam and the following opam (optional) packages:
opam install merlin utop ocp-indent dune ocamlformat
Features
- The following files should have syntax highlighting support:
.ml{i,p,y,}
,.eliom{i,}
,jbuild
,dune
,opam
merlin-mode
is activated whenever a.merlin
file is found (including in a parent directory) andocamlmerlin
executable is present- Line-based auto-indentation is provided by
ocp-indent
, if it is available.
Configuration
- If
:completion company
is enabled then autocomplete is provided bymerlin
- When
:checkers syntax
is enabled thenflycheck-ocaml
is activated to do on-the-fly syntax/type checking viamerlin
, otherwise this is only done when the file is saved. - Spell checking is activated in comments if
:checkers spell
is active - A REPL is provided if
utop
is installed and:tools eval
is active - If
:editor format
is enabled, theocamlformat
executable is available and there is an.ocamlformat
file present thenformat-all-buffer
is bound toocamlformat
, otherwise toocp-indent
- If
:editor multiple-cursors
is enabled then identifiers can be refactored withv R
and multiple cursors (this correctly matches identifier occurrences according to scope, it is not purely a textual match) - If
:emacs imenu
is enabled then top level symbols (modules, type, functions, etc.) can be looked up usingSPC / i
Run doom sync
to install all packages and doom doctor
to diagnose missing
tools.
Appendix
Commands
Command | Key | Description |
---|---|---|
merlin-type-enclosing |
<localleader> t |
display type under point |
tuareg-find-alternate-file |
<localleader> a |
switch between .ml and .mli |
merlin-locate |
g d |
lookup definition |
merlin-occurences |
SPC c D |
lookup references |
merlin-document |
K |
lookup documentation |
merlin-imenu |
SPC s i |
symbol lookup in file |
merlin-iedit-occurrences |
v R |
visual refactor identifier under point (multiple cursors) |
utop |
SPC o r |
open utop as REPL |
utop-eval-region |
SPC c e |
evaluate selected region in utop |
Hacks
set-ligatures!
is called with the full tuareg prettify symbol list, this can cause columns to change as certain keywords are shortened (e.g.fun
becomes λ.tuareg-opam-update-env
is called the first timetuareg
is loaded