Re: [ANN] clj-refactor.el - A few Clojure refactorings for Emacs.
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.
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.
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.