Skip to content

Commit

Permalink
add doc-from-ns-form to bultitude.core
Browse files Browse the repository at this point in the history
  • Loading branch information
ryantm committed Dec 21, 2013
1 parent 628dd0e commit 430caf9
Show file tree
Hide file tree
Showing 2 changed files with 43 additions and 0 deletions.
10 changes: 10 additions & 0 deletions src/bultitude/core.clj
Expand Up @@ -123,3 +123,13 @@
(.replace \- \_)
(.replace \. \/))
".clj"))

(defn doc-from-ns-form
"Extract the docstring from a given ns form without evaluating the form. The docstring returned should be the return value of (:doc (meta namespace-symbol)) if the ns-form were to be evaluated."
[ns-form]
(let [meta-docstring (:doc (meta (second ns-form)))
references (next (next ns-form))
docstring (when (string? (first references)) (first references))
references (if docstring (next references) references)
attribute-docstring (:doc (when (map? (first references)) (first references)))]
(or attribute-docstring docstring meta-docstring)))
33 changes: 33 additions & 0 deletions test/bultitude/core_test.clj
Expand Up @@ -22,3 +22,36 @@
(is (=
#{'bulti-tude.test}
(set (namespaces-on-classpath :prefix "bulti-tude"))))))

(defn test-doc-from-ns-form-helper
[docstring ns-form]
(eval ns-form)
(is (= docstring
(:doc (meta *ns*))
(doc-from-ns-form ns-form))))

(deftest doc-from-ns-form-test
(testing "doc-from-ns-form"
(let [callee-ns-name (ns-name *ns*)]
(test-doc-from-ns-form-helper
nil
'(ns no-doc-namespace-name))
(test-doc-from-ns-form-helper
"Docstring"
'(ns regular-doc-namespace-name "Docstring"))
(test-doc-from-ns-form-helper
"Attribute-Docstring"
'(ns attribute-doc-namepsace-name {:doc "Attribute-Docstring"}))
(test-doc-from-ns-form-helper
"Meta-Docstring"
'(ns ^{:doc "Meta-Docstring"} meta-doc-namespace-name))
(test-doc-from-ns-form-helper
"Docstring"
'(ns ^{:doc "Meta-Docstring"} meta-and-reg-doc-namespace-name "Docstring"))
(test-doc-from-ns-form-helper
"Attribute-Docstring"
'(ns reg-and-attribute-doc-namespace-name "Docstring" {:doc "Attribute-Docstring"}))
(test-doc-from-ns-form-helper
"Attribute-Docstring"
'(ns ^{:doc "Meta-Docstring"} all-doc-namespace-name "Docstring" {:doc "Attribute-Docstring"}))
(in-ns callee-ns-name))))

0 comments on commit 430caf9

Please sign in to comment.