Clojure imparity: ns-publics returns different arglists for macros

Description

;; test-sources/codox_test/macro.cljc (ns codox-test.macro) (defmacro test2 [a & xs] `(reduce + ~a ~(vec xs)))
(let [file (java.io.File. "test-sources/codox_test/macro.cljc")] (let [state (cljs.analyzer.api/empty-state)] (binding [cljs.analyzer/*analyze-deps* false] (cljs.analyzer.api/analyze-file state file {})) (->> (cljs.analyzer.api/ns-publics state 'codox-test.macro) (map (fn [[name m]] [name (:arglists m)])) (into {}))))

returns

{test2 ([&form &env a & xs])}

contrary, clojure's ns-publics:

(->> (vals (ns-publics 'codox-test.macro)) (map meta) (map (fn [m] [(:name m) (:arglists m)])) (into {}))
{test2 ([a & xs])}

I didn't notice this issue with macros that don't use {& rest} style arglists.

Environment

None

Attachments

1
  • 31 Jul 2018, 06:59 PM

Activity

Show:

Martin KlepschJuly 30, 2018 at 9:14 PM

This also results in different arglists metadata for clj/cljs

(doto (defmacro with-config-override [opts & body] `(with-config-override* ~opts (fn [] ~@body))) (alter-meta! assoc :arglists '([{:keys [switches secret-keys override-switches] :as opts-override} & body])))
Completed

Details

Assignee

Reporter

Approval

Accepted

Patch

Code and Test

Priority

Created July 30, 2018 at 2:28 PM
Updated August 3, 2018 at 8:57 PM
Resolved August 3, 2018 at 8:57 PM

Flag notifications