I have occasionally been frustrated by the behavior of apropos because
it returns a list of matching symbols, but with no clue as to which
namespace those symbols are in.  I wrote a couple of functions to help
with this, apropos2 and unresolve.

https://gist.github.com/1757414

apropos2 is like apropos, except it returns a list of symbols that
include a namespace qualification, if one is needed to use the symbol
from the current namespace.  The symbols returned can be used in that
namespace in code, or as arguments to 'doc' or 'source', unlike some
of the return values from 'apropos'.

unresolve is like resolve in reverse: given a Var, it constructs a
list of all symbols that resolve to that Var from the current
namespace.  Examples of use are given below.  apropos2 uses unresolve
to find the shortest symbol that resolves to a given Var.

Do similar functions already exist in a published library?  Does
anyone have bug fixes or other suggested enhancements to the code?

Andy


Example use of apropos2:

user=> (apropos "replace")
(postwalk-replace prewalk-replace replace)
user=> (doc postwalk-replace)
nil
user=> (apropos2 "replace")
(clojure.walk/prewalk-replace replace clojure.walk/postwalk-replace)
user=> (use 'clojure.walk)
nil
user=> (apropos2 "replace")
(prewalk-replace replace postwalk-replace)


Example use of unresolve:

user=> (unresolve #'replace)
(replace clojure.core/replace)
user=> (use 'clojure.string)
WARNING: replace already refers to: #'clojure.core/replace in namespace:
user, being replaced by: #'clojure.string/replace
WARNING: reverse already refers to: #'clojure.core/reverse in namespace:
user, being replaced by: #'clojure.string/reverse
nil
user=> (unresolve #'replace)
(replace clojure.string/replace)
user=> (unresolve #'clojure.core/replace)
(clojure.core/replace)

-- 
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

Reply via email to