Just for background, Steve Yegge's grok project seems relevant. It is a cross-language static analysis system intended to be useable on a large scale. (And is intended to be open sourced, when it's done.) http://www.youtube.com/watch?v=KTJs-0EInW8
On Wed, Dec 18, 2013 at 8:27 AM, juan.facorro <juan.faco...@gmail.com>wrote: > Hi Clojurers, > > I'm building a tool for Clojure and I've been hitting the same bump for > quite some time now, namely auto-completion and finding the definition of a > symbol. After doing some research I've found that some tools rely on a > running REPL to figure out where a symbol might be coming from; these > include emacs [1], Counter-Clockwise, clooj and maybe others I don't know > about (like Nightcode or Cursive). This seems the natural thing to do since > while developing we always have a REPL running to try out what we code, > after all this is one of the best LISP features. This approach results in > very accurate locations for global symbol definitions, but locals are not > found since they are not accesible form the REPL. > > Another approach I've seen used for auto-completion in Clojure is the > token-based, which involves looking for tokens in the code base associated > with the current project and then providing the nearest match regardless of > context; these include J Editor [2], Light Table (which I think uses > inter-buffer token matching [3]) and emacs when it uses dictionary files > (maybe not specifically in existing Clojure modes but it's something that > emacs can do). Although this approach resolves the auto-completion, it is > not very accurate when locating symbol definitions. > > From what I've read this is not a trivial problem so I was wondering if > there's some implementation that actually resolves symbols statically (I > mean without having a running REPL) in an accurate way or, if there's no > implementation, maybe someone could point me in the right direction (or any > direction) as to what would ease the pain to accomplish such a task. > Building something on my own to do this "static symbol resolution" is out > of the question, since that sounds like a whole project on its own and I'm > currently trying to build something else entirely. > > There are parsing libraries which provide good parse trees (i.e. Parsley, > Instaparse), but my understanding is that what needs to be mantained is a > full abstract syntax tree for the whole code base and although > clojure.tools.analyzer [4] does the job of creating an AST, generating and > mantaining all these trees sounds very costly and not the right way to do > it. > > If the running REPL approach is the saner one, then I would have no > problem with going down that road, but I just wanted to make sure what the > viable options were. > > If you got this far, thank you for your time. :) > > Any help, thoughts or comments will be greatly appreciated! > > Juan > > [1] https://github.com/clojure-emacs/ac-nrepl > [2] http://armedbear-j.sourceforge.net/ > [3] > https://groups.google.com/forum/#!msg/light-table-discussion/Q-ZvOJSr1qo/-D6tAV_XiMUJ > [4] https://github.com/clojure/tools.analyzer > > -- > -- > 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.