Thanks, I'll definitely take a look at those libraries, I actually didn't 
do too much searching for prior art, I'll have to start now. 

You're dead on with whitespace and reader macros being a problem. I know I 
heard of someone working on trying to build a clojure formatter, so maybe 
something like that will come to fruition, otherwise I was just going to 
return something formatted in a super basic way and punt that problem to 
the user.  The reader macros though is a bigger problem that I have no idea 
how to deal with.  I ran into that with the cycle-privacy refactor.  If you 
try to read '(def ^:private a), you always get back '(def a).  I ended up 
evaling the form and calling meta on it to get the privacy, but that felt 
wrong and now that you point out #_, it's clear it's not going to work in a 
lot of cases.  I'll have to take a look at clj.tools.analyzer, thought I 
was hoping there might be some way to just turn off reader macros.  I think 
I might make a separate list post and see if anyone has ideas there. 

On Friday, February 7, 2014 3:10:49 PM UTC-8, John Hume wrote:
>
> I haven't attempted any code manipulation, just analysis and indexing, but 
> I embarked on a similar idea here: 
> https://github.com/duelinmarkers/insfactor and here: 
> http://github.com/duelinmarkers/insfactor.el. (Nothing Vim-related there, 
> the similar part is trying to put as much as possible of the smarts into 
> the same JVM as the project.) It indexes a simple clojure project and 
> provides a find-usages command, the idea being that find-usages is the 
> first useful step toward rename-var and move-var commands. (I say "simple" 
> because it still barfs on some common stuff, including defprotocol, IIRC.)
>
> Focusing on what you're doing in http://github.com/cgag/nrepl-refactor, 
> the mess I came upon and backed away from when I initially played with 
> transforming code in Clojure is that the forms are easy to manipulate but 
> formatting is hard to maintain. There are also several non-whitespace bits 
> of source that the reader will hide away from you (including comments and 
> #_ forms) but that a proper refactoring tool won't clobber.
>
> If you haven't already, you might take a look at 
> https://github.com/cgrand/sjacket.
>
> I've been hoping that the new 
> https://github.com/clojure/tools.analyzer<https://www.google.com/url?q=https%3A%2F%2Fgithub.com%2Fclojure%2Ftools.analyzer&sa=D&sntz=1&usg=AFQjCNGdQqvOgv4UWDokQ46-YhCAp7AqLQ>
>  work 
> will support some of what source manipulation tools are likely to need, but 
> I haven't looked into it. For example, one hassle with 
> jvm.tools.analyzer (at least the now outdated version I've been using) is 
> that the reader doesn't provide line and column metadata in many places 
> where you'd expect to find it. Another is that it can only show you the 
> post-macro-expansion view of the world.
>
>
>
> On Fri, Feb 7, 2014 at 3:51 PM, Curtis Gagliardi 
> <gagliard...@gmail.com<javascript:>
> > wrote:
>
>> Hey everyone, I just wanted to get some feedback on whether or not this 
>> is a good idea.  I've seen clj-refactor.el recommended a decent amount, but 
>> as a dyed-in-the-wool take-no-prisoners vim user, I can't use it.  I've 
>> always thought it was weird that refactoring was so tightly coupled to 
>> editors and IDEs, so I thought I'd try writing some refactors as an nrepl 
>> middleware, that would ideally be able to be used across editors.  I've 
>> only re-implemented the threading and some of the cycling refactors from 
>> clj-refactor.el, but it's to the point where I'm going to investigate 
>> actually integrating with vim or light table.  I've never written any 
>> plugins for either of these editors so I might discover there are good 
>> reasons I haven't seen refactoring done as a client/server type thing.  
>> Anyway, the code is here: https://github.com/cgag/nrepl-refactor , if 
>> anyone has any has any feedback I'd love to hear it, and if anyone has 
>> vimscript or lighttable plugin experience and wants to help, that'd be 
>> great as well.
>>
>> Curtis
>>
>> -- 
>> You received this message because you are subscribed to the Google
>> Groups "Clojure" group.
>> To post to this group, send email to clo...@googlegroups.com<javascript:>
>> Note that posts from new members are moderated - please be patient with 
>> your first post.
>> To unsubscribe from this group, send email to
>> clojure+u...@googlegroups.com <javascript:>
>> 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+u...@googlegroups.com <javascript:>.
>> 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.

Reply via email to