#+title: :lang clojure #+subtitle: Java with a lisp #+created: May 30, 2017 #+since: 2.0.3 * Description :unfold: This module adds support for the Clojure(Script) language. - Interactive development environment (~cider~): REPL, compilation, debugging, running tests, definitions & documentation lookup, code completion, and much more - Refactoring (~clj-refactor~) - Linting (~clj-kondo~), requires [[doom-module::checkers syntax]] - LSP support (~clojure-lsp~), required [[doom-module:+lsp]] ** Maintainers - [[doom-user:][@elken]] ** Module flags - +lsp :: Enable LSP support for ~clojure-mode~ (alongside Cider). Requires [[doom-module::tools lsp]] and a langserver (supports [[https://clojure-lsp.io/][clojure-lsp]]). - +tree-sitter :: Leverages tree-sitter for better syntax highlighting and structural text editing. Requires [[doom-module::tools tree-sitter]]. ** Packages - [[doom-package:cider]] - [[doom-package:clj-refactor]] - [[doom-package:flycheck-clj-kondo]] if [[doom-module::checkers syntax]] ** Hacks - Error messages emitted from CIDER are piped into the REPL buffer when it is first opened, to make them easier to notice. - Disabled the help banner when opening the cider REPL. ** 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: - [[https://clojure.org/][clojure]] This module optionally requires: - [[https://github.com/borkdude/clj-kondo][clj-kondo]], for linting code (if [[doom-module::checkers syntax]]) - [[https://clojure-lsp.github.io/clojure-lsp/][clojure-lsp]], for LSP support (if [[doom-module:+lsp]]) - [[https://github.com/babashka/neil][neil]] for the ability to add packages to your Clojure project from Emacs - [[https://github.com/borkdude/jet][jet]] for jet integration - [[https://github.com/weavejester/cljfmt][cljfmt]], for formatting code (if [[doom-module::editor format]]) * Usage Below is a listing of the various keybinds provided by the module. ** REPL management For the most part, general usage should fall into: - Open a Clojure project - Open/connect to a REPL As such, these bindings are most likely to be used. | Keybind | Command | |-----------------------------+----------------------------------------------------| | [[kbd:][ ']] | ~cider-jack-in-clj~ | | [[kbd:][ c]] | ~cider-connect-clj~ | | [[kbd:][ C]] | ~cider-connect-cljs~ | | [[kbd:][ m "]] | ~cider-jack-in-cljs~ | | [[kbd:][ r R]] | ~cider-restart~ | | [[kbd:][ r q]] | ~cider-quit~ | | [[kbd:][ r B]] | ~+clojure/cider-switch-to-repl-buffer-and-switch-ns~ | | [[kbd:][ r L]] | ~cider-load-buffer-and-switch-to-repl-buffer~ | | [[kbd:][ r b]] | ~cider-switch-to-repl-buffer~ | | [[kbd:][ r c]] | ~cider-find-and-clear-repl-output~ | | [[kbd:][ r l]] | ~cider-load-buffer~ | | [[kbd:][ r n]] | ~cider-repl-set-ns~ | | [[kbd:][ r r]] | ~cider-ns-refresh~ | ** Tests The module also provides support for running tests through cider, including a nicely formatted output. | Keybind | Command | |-----------------------------+--------------------------------------| | [[kbd:][ t a]] | ~cider-test-rerun-test~ | | [[kbd:][ t l]] | ~cider-test-run-loaded-tests~ | | [[kbd:][ t n]] | ~cider-test-run-ns-tests~ | | [[kbd:][ t p]] | ~cider-test-run-project-tests~ | | [[kbd:][ t r]] | ~cider-test-rerun-failed-tests~ | | [[kbd:][ t s]] | ~cider-test-run-ns-tests-with-filters~ | | [[kbd:][ t t]] | ~cider-test-run-test~ | ** Search/navigation Some useful bindings for navigating around namespaces and symbols. When using [[doom-module:+lsp]], the bindings in [[doom-module::tools lsp]] are supported. | Keybind | Command | |-----------------------------+---------------------| | [[kbd:][ g b]] | ~cider-pop-back~ | | [[kbd:][ g g]] | ~cider-find-var~ | | [[kbd:][ g n]] | ~cider-find-ns~ | | [[kbd:][ h n]] | ~cider-find-ns~ | | [[kbd:][ n N]] | ~cider-browse-ns-all~ | | [[kbd:][ n n]] | ~cider-browse-ns~ | | [[kbd:][ h a]] | ~cider-apropos~ | ** Evaluation Outside of the [[kbd:][SPC m e]] bindings for evaluating forms, the following are also available; including some to pretty-print the results. | Keybind | Command | |-----------------------------+----------------------------------------| | [[kbd:][ e D]] | ~cider-insert-defun-in-repl~ | | [[kbd:][ e E]] | ~cider-insert-last-sexp-in-repl~ | | [[kbd:][ e R]] | ~cider-insert-region-in-repl~ | | [[kbd:][ e b]] | ~cider-eval-buffer~ | | [[kbd:][ e d]] | ~cider-eval-defun-at-point~ | | [[kbd:][ e e]] | ~cider-eval-last-sexp~ | | [[kbd:][ e r]] | ~cider-eval-region~ | | [[kbd:][ p d]] | ~cider-pprint-eval-defun-at-point~ | | [[kbd:][ p D]] | ~cider-pprint-eval-defun-to-comment~ | | [[kbd:][ p p]] | ~cider-pprint-eval-last-sexp~ | | [[kbd:][ p P]] | ~cider-pprint-eval-last-sexp-to-comment~ | | [[kbd:][ p r]] | ~cider-pprint-eval-last-sexp-to-repl~ | ** Debugging A number of bindings to provide useful overlays that help during debugging. ~cider-enlighten-mode~ is a mode that will highlight the results of a function evaluation, /including the locals/. See a demo [[https://www.youtube.com/watch?v=tCu2AewBTR4][here]]. | Keybind | Command | |-----------------------------+---------------------------| | [[kbd:][ M]] | ~cider-macroexpand-all~ | | [[kbd:][ R]] | ~hydra-cljr-help-menu/body~ | | [[kbd:][ e u]] | ~cider-undef~ | | [[kbd:][ i e]] | ~cider-enlighten-mode~ | | [[kbd:][ i i]] | ~cider-inspect~ | | [[kbd:][ i r]] | ~cider-inspect-last-result~ | | [[kbd:][ m]] | ~cider-macroexpand-1~ | ** Help Several bindings used for viewing documentation for various functions, both inside and outside of both a REPL and Emacs ([[kbd:][K]] for example uses the sources and a cached version of clojuredocs) | Keybind | Command | |-----------------------------+-----------------------| | [[kbd:][ h c]] | ~cider-clojuredocs~ | | [[kbd:][ h d]] | ~cider-doc~ | | [[kbd:][ h j]] | ~cider-javadoc~ | | [[kbd:][ h w]] | ~cider-clojuredocs-web~ | | [[kbd:][K]] | ~+lookup/documentation~ | * Configuration ** =enrich-classpath= In recent versions, an option has been introduced that attempts to improve the experience of CIDER by accessing java source & javadocs, though this option is still currently considered beta. In order to opt into this, add the following to your =config.el= #+begin_src emacs-lisp (setq cider-enrich-classpath t) #+end_src See [[https://docs.cider.mx/cider/config/basic_config.html#use-enrich-classpath][the docs]] for more * 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