clj-refactor.el <https://github.com/magnars/clj-refactor.el> provides a set
of simple refactorings for Clojure in Emacs. It doesn't tackle the hard
problems, like cross-namespace renaming. Instead it gives you a little
quality of life while we're waiting.
<https://gist.github.com/magnars/51ccab2b478d97b9aa17#thread--unwind>Thread
/ unwind
Given this:
(map square (filter even? [1 2 3 4 5]))
Start by wrapping it in a threading macro:
(->> (map square (filter even? [1 2 3 4 5])))
And start threading away, using cljr-thread:
(->> (filter even? [1 2 3 4 5])
(map square))
And again:
(->> [1 2 3 4 5]
(filter even?)
(map square))
To revert this, there's cljr-unwind. Just read the examples in the other
direction.
<https://gist.github.com/magnars/51ccab2b478d97b9aa17#introduce--expand-let>Introduce
/ expand let
Given this:
(defn handle-request
{:status 200
:body (find-body abc)})
With the cursor in front of (find-body abc), I do cljr-introduce-let:
(defn handle-request
{:status 200
:body (let [X (find-body abc)]
X)})
Now I have two cursors where the Xes are. Just type out the name, and press
enter. Of course, that's not where I wanted the let statement. So I do
cljr-expand-let:
(defn handle-request
(let [body (find-body abc)]
{:status 200
:body body}))
Yay.
<https://gist.github.com/magnars/51ccab2b478d97b9aa17#automatic-insertion-of-namespace-declaration>Automatic
insertion of namespace declaration
When you open a blank .clj-file, clj-refactor inserts the namespace
declaration for you.
It will also add the relevant :use clauses in test files, normally using
clojure.test, but if you're depending on midje in your project.clj it uses
that instead.
<https://gist.github.com/magnars/51ccab2b478d97b9aa17#more-stuff>More stuff
- When you rename a file, it will update the ns-declaration and then
query-replace new ns in project.
- You can add :require and :import to the ns, and when you're done it
jumps back to where you were.
<https://gist.github.com/magnars/51ccab2b478d97b9aa17#in-summary>In summary
This isn't the big refactoring lib that we're all waiting for. That would
require connecting to nREPL, analyzing ASTs, expanding macros, and a whole
lot of other problems.
Instead it adds a few helpful functions that are available right now.
And if you want to contribute, and maybe grow this into the refactorer's
dream - do let me know. I'm all for that. :-)
- Magnar
--
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.