This is a follow-up to my previous post What’s the Best Clojure IDE? I’ll show you my usual Clojure development workflow using Spacemacs+CIDER as primary tools.
I’ve already described my tour through the various Clojure IDEs/editors and why I’ve chosen the Spacemacs. If you haven’t read the previous post, you may want to go back and read at least the Spacemacs to the rescue part.
In this post, I’ll try to dig deeper and show you the complete development workflow. I’ve chosen video screencast as a primary format for this because I think it’s more useful to see everything in action.
We’ll create a simple clojure-repl project containing the jmethods function for listing all public methods of java classes.
You can find the video in the Curious Programmer YouTube channel.
Below is a brief summary of topics/tips presented in the screencast.
Generate new leiningen project: lein new clojure-repl
Create new layout:
SPC l 2;
enter layout name: clojure-repl
Open clojure-repl/__project.clj by pressing
SPC f f and looking up the file on a file system
Open Neotree buffer via
SPC p t to explore project structure
You can navigate in this buffer via standard vim key bindings:
j, k, l, h.
You can also press
? to open the help
Clean the initial project skeleton and commit them via magit:
SPC g s
Expand/collapse the changes by pressing
Stage the changes for commit by pressing
Commit the staged changes by
Create java.clj file in the Neotree buffer by pressing
c ("create") and entering the name of the file.
Run cider-jack-in by
Switch between REPL and java.clj buffer using
Evaluate the java.clj buffer via
, e b
Evaluate the function at a point by
, e f
Send results from java.clj buffer to the REPL using
, s e while keeping cursor right after the form you want to evaluate
Use clojure.core/bean function to examine the properties of java class
Reformat a buffer with
, = to make sure that your code is compliant with Clojure style guide
SPC k s for "forward slurp"
, r a m to add a require unknown symbols (e.g.
Show documentation popup with
, h h
Navigate to source code by
, g g
works both for Clojure functions and Java classes
make sure that you have JDK sources installed on your system - CIDER will add them automatically to the classpath
Additional tips mentioned at the end of the video:
Describe key bindings via
M-x and type in the "cider-" and/or use menu bar (F10) to search for CIDER commands and explore CIDER capabilities
Add new dependencies to project.clj and hot-load them into the REPL via
, r a p
press ENTER to deep dive
C-z to switch into the Emacs mode and then
l to go up
SPC / for a quick search within the project
You can also use
C-c C-e to enter the edit mode and replace the text
* for a quick search/highlight of a symbol under the cursor
Display online java doc for Java class with
, h j
Add Clojure sources to the project.clj/profiles.clj to be able to navigate to clojure.core java classes, e.g. clojure.lang.PersistentVector
Not covered in video
, h n to list all the functions in given namespace together with a documentation preview
, s x to test everything in a fresh environment
CIDER debugger - debug function at the point:
, d b
clojure-repl project on GitHub
besides the jmethods function, there are also jconstructors and jinfo functions which are not shown in the video
F(by) 2016 - Bozhidar Batsov - Speech 2 - Deep Dive into CIDER - Bozhidar’s talk demonstrating many cool CIDER’s features
Spacemacs - From First Install to Clojure programming without manual configuration - very good and short Spacemacs introductory video
Development Workflow with Spacemacs - quick video introduction with generic spacemacs tips; shows more "git magic" using magit