#+TITLE:   lang/clojure
#+DATE:    May 30, 2017
#+SINCE:   v2.0
#+STARTUP: inlineimages nofold

* Table of Contents :TOC_3:noexport:
- [[#description][Description]]
  - [[#maintainers][Maintainers]]
  - [[#module-flags][Module Flags]]
  - [[#plugins][Plugins]]
  - [[#hacks][Hacks]]
- [[#prerequisites][Prerequisites]]
- [[#features][Features]]
  - [[#keybindings][Keybindings]]
- [[#configuration][Configuration]]
- [[#troubleshooting][Troubleshooting]]

* Description
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 ~:checkers syntax~
+ LSP support (~clojure-lsp~)

** Maintainers
This module has no dedicated maintainers.

** Module Flags
+ =+lsp= Enables LSP support, alongside Cider.

** Plugins
+ [[https://github.com/clojure-emacs/cider][cider]]
+ [[https://github.com/clojure-emacs/clj-refactor.el][clj-refactor]]
+ [[https://github.com/borkdude/flycheck-clj-kondo][flycheck-clj-kondo]]

** 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.

* Prerequisites
This module requires:

+ [[https://clojure.org/][clojure]]
+ [[https://leiningen.org/][leiningen]] (REPL)
+ [[https://github.com/borkdude/clj-kondo][clj-kondo]] (linter)
+ With =+lsp=
  + [[https://clojure-lsp.github.io/clojure-lsp/][clojure-lsp]]


* TODO Features
# An in-depth list of features, how to use them, and their dependencies.
** Keybindings
| Binding             | Description                                          |
|---------------------+------------------------------------------------------|
| =<localleader> '​=   | =cider-jack-in-clj=                                  |
| =<localleader> C=   | =cider-connect-cljs=                                 |
| =<localleader> M=   | =cider-macroexpand-all=                              |
| =<localleader> R=   | =hydra-cljr-help-menu/body=                          |
| =<localleader> c=   | =cider-connect-clj=                                  |
| =<localleader> e D= | =cider-insert-defun-in-repl=                         |
| =<localleader> e E= | =cider-insert-last-sexp-in-repl=                     |
| =<localleader> e R= | =cider-insert-region-in-repl=                        |
| =<localleader> e b= | =cider-eval-buffer=                                  |
| =<localleader> e d= | =cider-eval-defun-at-point=                          |
| =<localleader> e e= | =cider-eval-last-sexp=                               |
| =<localleader> e r= | =cider-eval-region=                                  |
| =<localleader> e u= | =cider-undef=                                        |
| =<localleader> g b= | =cider-pop-back=                                     |
| =<localleader> g g= | =cider-find-var=                                     |
| =<localleader> g n= | =cider-find-ns=                                      |
| =<localleader> h a= | =cider-apropos=                                      |
| =<localleader> h c= | =cider-clojuredocs=                                  |
| =<localleader> h d= | =cider-doc=                                          |
| =<localleader> h j= | =cider-javadoc=                                      |
| =<localleader> h n= | =cider-find-ns=                                      |
| =<localleader> h w= | =cider-clojuredocs-web=                              |
| =<localleader> i e= | =cider-enlighten-mode=                               |
| =<localleader> i i= | =cider-inspect=                                      |
| =<localleader> i r= | =cider-inspect-last-result=                          |
| =<localleader> m "​= | =cider-jack-in-cljs=                                 |
| =<localleader> m=   | =cider-macroexpand-1=                                |
| =<localleader> n N= | =cider-browse-ns-all=                                |
| =<localleader> n n= | =cider-browse-ns=                                    |
| =<localleader> n r= | =cider-ns-refresh=                                   |
| =<localleader> p d= | =cider-pprint-eval-defun-at-point=                   |
| =<localleader> p D= | =cider-pprint-eval-defun-to-comment=                 |
| =<localleader> p p= | =cider-pprint-eval-last-sexp=                        |
| =<localleader> p P= | =cider-pprint-eval-last-sexp-to-comment=             |
| =<localleader> p r= | =cider-pprint-eval-last-sexp-to-repl=                |
| =<localleader> r B= | =+clojure/cider-switch-to-repl-buffer-and-switch-ns= |
| =<localleader> r L= | =cider-load-buffer-and-switch-to-repl-buffer=        |
| =<localleader> r R= | =cider-restart=                                      |
| =<localleader> r b= | =cider-switch-to-repl-buffer=                        |
| =<localleader> r c= | =cider-find-and-clear-repl-output=                   |
| =<localleader> r l= | =cider-load-buffer=                                  |
| =<localleader> r n= | =cider-repl-set-ns=                                  |
| =<localleader> r q= | =cider-quit=                                         |
| =<localleader> r r= | =cider-ns-refresh=                                   |
| =<localleader> t a= | =cider-test-rerun-test=                              |
| =<localleader> t l= | =cider-test-run-loaded-tests=                        |
| =<localleader> t n= | =cider-test-run-ns-tests=                            |
| =<localleader> t p= | =cider-test-run-project-tests=                       |
| =<localleader> t r= | =cider-test-rerun-failed-tests=                      |
| =<localleader> t s= | =cider-test-run-ns-tests-with-filters=               |
| =<localleader> t t= | =cider-test-run-test=                                |

* TODO Configuration
# How to configure this module, including common problems and how to address them.

* TODO Troubleshooting
# Common issues and their solution, or places to look for help.
