diff --git a/src/babashka/pods/impl.clj b/src/babashka/pods/impl.clj index 688b9e2..1d5ad40 100644 --- a/src/babashka/pods/impl.clj +++ b/src/babashka/pods/impl.clj @@ -122,7 +122,13 @@ #(Boolean/parseBoolean %)) name-sym (symbol name) sym (symbol ns-name-str name) - code (get-maybe-string var "code")] + code (get-maybe-string var "code") + vmeta (some-> (get var "meta") + bytes->string + edn/read-string) + name-sym (if vmeta + (with-meta name-sym vmeta) + name-sym)] [name-sym (or code (fn [& args] diff --git a/src/babashka/pods/sci.clj b/src/babashka/pods/sci.clj index dfb84aa..437aea5 100644 --- a/src/babashka/pods/sci.clj +++ b/src/babashka/pods/sci.clj @@ -11,11 +11,11 @@ (swap! env update-in [:namespaces ns-name] (fn [ns-map] (if ns-map ns-map {:obj sci-ns}))) - (doseq [[var-name var-value] vars] + (doseq [[var-name var-value :as var] vars] (cond (ifn? var-value) (swap! env assoc-in [:namespaces ns-name var-name] (sci/new-var - (symbol (str ns-name) (str var-name)) var-value)) + (symbol (str ns-name) (str var-name)) var-value (meta var-name))) (string? var-value) (sci/eval-string* ctx var-value)))))) diff --git a/test-pod/pod/test_pod.clj b/test-pod/pod/test_pod.clj index d834de8..cc81ccd 100644 --- a/test-pod/pod/test_pod.clj +++ b/test-pod/pod/test_pod.clj @@ -110,7 +110,8 @@ "my/other-tag" "pod.test-pod/read-other-tag"} "namespaces" [{"name" "pod.test-pod" - "vars" (into [{"name" "add-sync"} + "vars" (into [{"name" "add-sync" + "meta" "{:doc \"add the arguments\"}"} {"name" "range-stream" "async" "true"} {"name" "assoc"} @@ -127,7 +128,8 @@ {"name" "other-tag"} ;; reads thing with other tag {"name" "read-other-tag" - "code" "(defn read-other-tag [x] [x x])"} + "code" "(defn read-other-tag [x] [x x])" + "meta" "{:doc \"unread\"}"} {"name" "-local-date-time"} {"name" "transit-stuff" "code" " diff --git a/test-resources/test_program.clj b/test-resources/test_program.clj index bb728a6..de22ce3 100644 --- a/test-resources/test_program.clj +++ b/test-resources/test_program.clj @@ -55,6 +55,10 @@ (def add-result (pod.test-pod/add-sync 1 2 3)) (def nil-result (pod.test-pod/return-nil)) +(def add-sync-meta (:doc (meta #'pod.test-pod/add-sync))) +(def error-meta (:doc (meta #'pod.test-pod/error))) +(def read-other-tag-meta (:doc (meta #'pod.test-pod/read-other-tag))) + (def x9 pod.test-pod/x9) (def tagged (if (= "edn" fmt) @@ -108,4 +112,7 @@ fn-called local-date-time assoc-string-array - should-be-1] + should-be-1 + add-sync-meta + error-meta + read-other-tag-meta] diff --git a/test/babashka/pods/test_common.clj b/test/babashka/pods/test_common.clj index 760c097..ad4a1eb 100644 --- a/test/babashka/pods/test_common.clj +++ b/test/babashka/pods/test_common.clj @@ -28,7 +28,10 @@ 3 true ;; local-date true ;; roundtrip string array - 1] + 1 + "add the arguments" + nil + nil] (concat ret (repeat ::nil)))] (if (instance? java.util.regex.Pattern expected) (is (re-find expected actual))