2022-08-03 02:46:13 +02:00
|
|
|
# -*- mode: doom-docs-org -*-
|
2022-03-28 15:03:21 +02:00
|
|
|
#+title: :lang ocaml
|
|
|
|
#+subtitle: An objective camel
|
|
|
|
#+created: June 27, 2017
|
|
|
|
#+since: 2.0.4 (#128)
|
2021-10-16 01:28:32 +02:00
|
|
|
|
|
|
|
* Description :unfold:
|
|
|
|
This module adds [[https://ocaml.org/][OCaml]] support to Doom Emacs, powered by [[doom-package:][tuareg-mode]].
|
|
|
|
|
|
|
|
- Code completion, documentation look-up, code navigation and refactoring
|
|
|
|
([[doom-package:][merlin]])
|
|
|
|
- Type, documentation and function argument display on idle ([[doom-package:][merlin-eldoc]])
|
|
|
|
- REPL ([[doom-package:][utop]])
|
|
|
|
- Syntax-checking ([[doom-package:][merlin]] with [[doom-package:][flycheck-ocaml]])
|
|
|
|
- Auto-indentation ([[doom-package:][ocp-indent]])
|
|
|
|
- Code formatting ([[doom-package:][ocamlformat]])
|
|
|
|
- Dune file format ([[doom-package:][dune]])
|
|
|
|
|
|
|
|
** Maintainers
|
|
|
|
*This module needs a maintainer.* [[doom-contrib-maintainer:][Become a maintainer?]]
|
|
|
|
|
|
|
|
** Module flags
|
|
|
|
- +lsp ::
|
|
|
|
Enable LSP support for ~tuareg-mode~. Requires [[doom-module:][:tools lsp]] and a langserver
|
|
|
|
(supports [[https://github.com/freebroccolo/ocaml-language-server][ocaml-language-server]]).
|
2022-04-09 18:38:04 +03:00
|
|
|
- +tree-sitter ::
|
|
|
|
Leverages tree-sitter for better syntax highlighting and structural text
|
|
|
|
editing. Requires [[doom-module:][:tools tree-sitter]].
|
2021-10-16 01:28:32 +02:00
|
|
|
|
|
|
|
** Packages
|
|
|
|
- [[doom-package:][dune]]
|
|
|
|
- [[doom-package:][ocamlformat]] if [[doom-module:][:editor format]]
|
|
|
|
- [[doom-package:][ocp-indent]]
|
|
|
|
- [[doom-package:][tuareg]]
|
|
|
|
- [[doom-package:][utop]] if [[doom-module:][:tools eval]]
|
|
|
|
- unless [[doom-module:][+lsp]]
|
|
|
|
- [[doom-package:][flycheck-ocaml]] if [[doom-module:][:checkers syntax]]
|
|
|
|
- [[doom-package:][merlin]]
|
|
|
|
- [[doom-package:][merlin-company]]
|
|
|
|
- [[doom-package:][merlin-eldoc]]
|
|
|
|
|
|
|
|
** 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
|
|
|
|
\lambda).
|
|
|
|
- ~tuareg-opam-update-env~ is called the first time [[doom-package:][tuareg]] is loaded
|
|
|
|
|
|
|
|
** TODO Changelog
|
|
|
|
# This section will be machine generated. Don't edit it by hand.
|
|
|
|
/This module does not have a changelog yet./
|
|
|
|
|
|
|
|
* Installation
|
|
|
|
[[id:01cffea4-3329-45e2-a892-95a384ab2338][Enable this module in your ~doom!~ block.]]
|
|
|
|
|
|
|
|
This module requires the following packages available through [[http://opam.ocaml.org/][opam]]:
|
|
|
|
- merlin
|
|
|
|
- utop
|
|
|
|
- ocp-indent
|
|
|
|
- dune
|
|
|
|
- ocamlformat
|
|
|
|
|
|
|
|
* TODO Usage
|
|
|
|
#+begin_quote
|
|
|
|
🔨 /This module's usage documentation is incomplete./ [[doom-contrib-module:][Complete it?]]
|
|
|
|
#+end_quote
|
|
|
|
|
|
|
|
- The following files should have syntax highlighting support: ~.ml{i,p,y,}~,
|
2019-09-13 22:04:53 -04:00
|
|
|
~.eliom{i,}~, ~jbuild~, ~dune~, ~opam~
|
2021-10-16 01:28:32 +02:00
|
|
|
- ~merlin-mode~ is activated whenever a =.merlin= file is found (including in a
|
2018-09-21 00:06:12 +01:00
|
|
|
parent directory) and =ocamlmerlin= executable is present
|
2021-10-16 01:28:32 +02:00
|
|
|
- Line-based auto-indentation is provided by =ocp-indent=, if it is available.
|
|
|
|
|
|
|
|
| Command | Key | Description |
|
|
|
|
|------------------------------+-----------------+-----------------------------------------------------------|
|
|
|
|
| ~merlin-type-enclosing~ | [[kbd:][<localleader> t]] | display type under point |
|
|
|
|
| ~tuareg-find-alternate-file~ | [[kbd:][<localleader> a]] | switch between =.ml= and =.mli= |
|
|
|
|
| ~merlin-locate~ | [[kbd:][g d]] | lookup definition |
|
|
|
|
| ~merlin-occurences~ | [[kbd:][SPC c D]] | lookup references |
|
|
|
|
| ~merlin-document~ | [[kbd:][K]] | lookup documentation |
|
|
|
|
| ~merlin-imenu~ | [[kbd:][SPC s i]] | symbol lookup in file |
|
|
|
|
| ~merlin-iedit-occurrences~ | [[kbd:][v R]] | visual refactor identifier under point (multiple cursors) |
|
|
|
|
| ~utop~ | [[kbd:][SPC o r]] | open =utop= as REPL |
|
|
|
|
| ~utop-eval-region~ | [[kbd:][SPC c e]] | evaluate selected region in =utop= |
|
|
|
|
|
|
|
|
* TODO Configuration
|
|
|
|
#+begin_quote
|
|
|
|
🔨 /This module's configuration documentation is incomplete./ [[doom-contrib-module:][Complete it?]]
|
|
|
|
#+end_quote
|
2018-09-21 00:06:12 +01:00
|
|
|
|
2021-10-16 01:28:32 +02:00
|
|
|
- If [[doom-module:][:completion company]] is enabled then autocomplete is provided by [[doom-package:][merlin]]
|
|
|
|
- When [[doom-module:][:checkers syntax]] is enabled then [[doom-package:][flycheck-ocaml]] is activated to do
|
|
|
|
on-the-fly syntax/type checking via [[doom-package:][merlin]], otherwise this is only done when
|
2019-02-22 00:20:29 -05:00
|
|
|
the file is saved.
|
2021-10-16 01:28:32 +02:00
|
|
|
- Spell checking is activated in comments if [[doom-module:][:checkers spell]] is active
|
|
|
|
- A REPL is provided if [[doom-package:][utop]] is installed and [[doom-module:][:tools eval]] is active
|
|
|
|
- If [[doom-module:][:editor format]] is enabled, the =ocamlformat= executable is available and
|
|
|
|
there is an =.ocamlformat= file present then ~format-all-buffer~ is bound to
|
2018-09-21 00:06:12 +01:00
|
|
|
=ocamlformat=, otherwise to =ocp-indent=
|
2021-10-16 01:28:32 +02:00
|
|
|
- If [[doom-module:][:editor multiple-cursors]] is enabled then identifiers can be refactored with
|
|
|
|
[[kbd:][v R]] and multiple cursors (this correctly matches identifier occurrences
|
2018-10-17 00:13:20 +01:00
|
|
|
according to scope, it is not purely a textual match)
|
2018-09-21 00:06:12 +01:00
|
|
|
|
2021-10-16 01:28:32 +02:00
|
|
|
Run ~$ doom sync~ to install all packages and ~$ doom doctor~ to diagnose
|
|
|
|
missing tools.
|
|
|
|
|
|
|
|
* Troubleshooting
|
|
|
|
/There are no known problems with this module./ [[doom-report:][Report one?]]
|
|
|
|
|
|
|
|
* Frequently asked questions
|
|
|
|
/This module has no FAQs yet./ [[doom-suggest-faq:][Ask one?]]
|
|
|
|
|
|
|
|
* TODO Appendix
|
|
|
|
#+begin_quote
|
|
|
|
🔨 This module has no appendix yet. [[doom-contrib-module:][Write one?]]
|
|
|
|
#+end_quote
|