Apropos melhorado

Eu gosto de apropos. Eu realmente quero. Apenas descreva o seu problema, e apropos apresentará uma solução. As vezes.

Exemplo? (apropos “reflexão”) retorna advertência sobre reflexão .

O que eu não gosto sobre o clojure padrão a propósito, que ele não retorna nenhuma informação sobre os namespaces. Então, no meu projeto atual, quando eu executo (a propósito “filtro”), eu obtenho (filtro filtro-chaves-por-val filtro-vals filtro-chaves). Mas onde está esse filtro-chaves-por-val? A qual namespace devo me referir ao chamá-lo?

Então eu fiz apropos +. Ele retorna (# ‘clojure.core / filter #’ utilize.map / filter-keys-by-val # ‘utilize.map / filter-vals #’ utilize.map / filter-keys).

(ns dev.apropos)

(defn apropos+
"Given a regular expression or stringable thing, return a seq of
all definitions in all currently-loaded namespaces that match the

str-or-pattern."

[str-or-pattern]
(let [matches? (if (instance? java.util.regex.Pattern str-or-pattern)
#(re-find str-or-pattern (str (key %)))
#(.contains (str (key %)) (str str-or-pattern)))]
(for [ns (all-ns)
public (ns-publics ns)
:when (matches? public)]
(second public)
)))

;; (in-ns 'user)
;; (use '
dev.apropos)
;; (apropos+ "*warn")

(consulte https://gist.github.com/2873882 ) para uma Síntese.