Re: [ANN] clj-refactor.el - A few Clojure refactorings for Emacs.

2014-01-02 Thread Magnar Sveen
Thanks mate, I'm glad to hear that. And thanks for your contributions too!

Your post reminded me that renaming has an annoying bug - it suggests 
replacing substrings of namespaces too. So I fixed that just now. :-)

- Magnar

On Monday, December 30, 2013 6:30:49 PM UTC+1, Alex Baranosky wrote:

 Hi Magnar,

 I've been using this library for maybe a month.  The refactorings I use by 
 far the most are renaming files, and threading/unthreading. Thanks for your 
 work on this. 


-- 
-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
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 clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


[ANN] clj-refactor.el - A few Clojure refactorings for Emacs.

2013-12-30 Thread Magnar Sveen


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--unwindThread 
/ 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-letIntroduce
 
/ 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-declarationAutomatic
 
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-stuffMore 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-summaryIn 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 clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
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 clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Re: [ANN] clj-refactor.el - A few Clojure refactorings for Emacs.

2013-12-30 Thread Alex Baranosky
Hi Magnar,

I've been using this library for maybe a month.  The refactorings I use by
far the most are renaming files, and threading/unthreading. Thanks for your
work on this.


On Mon, Dec 30, 2013 at 7:52 AM, Magnar Sveen magn...@gmail.com wrote:

 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--unwindThread
 / 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-letIntroduce
 / 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-declarationAutomatic
 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-stuffMore
 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-summaryIn
 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 clojure@googlegroups.com
 Note that posts from new members are moderated - please be patient with
 your first post.
 To unsubscribe from this group, send email to
 clojure+unsubscr...@googlegroups.com
 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 clojure+unsubscr...@googlegroups.com.
 For more options, visit https://groups.google.com/groups/opt_out.


-- 
-- 
You received this message because you are subscribed to the Google
Groups Clojure group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
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 clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.