Skip to content

Instantly share code, notes, and snippets.

@timsgardner
Created February 5, 2015 04:10
Show Gist options
  • Save timsgardner/dce84449c60eca59962b to your computer and use it in GitHub Desktop.
Save timsgardner/dce84449c60eca59962b to your computer and use it in GitHub Desktop.
fuzzy-finder-fn
(defn fuzzy-finder-fn [name-fn resource-fn]
(fn [string-or-regex]
(let [f (if (instance? System.Text.RegularExpressions.Regex string-or-regex)
#(re-find string-or-regex (name-fn %))
(let [^String s string-or-regex]
#(let [^String n (name-fn %)]
(.Contains n s))))]
(filter f (resource-fn)))))
;; example:
(def fuzzy-materials
(fuzzy-finder-fn
(fn [^Material m]
(.name m))
#(Resources/FindObjectsOfTypeAll Material)))
;; => (fuzzy-materials "Default")
;; (#<Material Sprites-Default (UnityEngine.Material)>
;; #<Material Default-Diffuse (UnityEngine.Material)>)
@timsgardner
Copy link
Author

more examples:

(defn fuzzy-methods [^Type t, sr]
  ((fuzzy-finder-fn
     (fn [^System.Reflection.MonoMethod m]
       (.Name m))
     #(.GetMethods t))
   sr))

(defn fuzzy-dir [ns s]
  (let [ns (cond
             (instance? clojure.lang.Namespace ns) ns
             (symbol? ns) (find-ns ns)
             (string? ns) (find-ns (symbol ns))
             :else (throw (Exception. "gimme an ns")))]
    ((fuzzy-finder-fn
       name
       #(sort (keys (ns-publics ns))))
     s)))

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment