You can easily achieve this by creating a CLJS namespace that self-requires the macros. Having dedicated .macros namespaces is generally not recommended.
pixi/something.cljs (ns pixi.something (:require-macros [pixi.something])) pixi/something.clj (ns pixi.something) (defmacro foo [..] ..) user/code.cljs (ns user.code (:require [pixi.something :refer (foo))) (foo) The user code does not need to worry about whether foo is a macro or not, it is handled transparently by the compiler. You never need to :refer-macros or :require-macros in the user code this way. And you can manage dependent CLJS namespaces that only the macro uses by requiring them in the .cljs companion file. HTH, /thomas On Monday, July 17, 2017 at 4:54:38 PM UTC+2, cri...@procrustes.net wrote: > > Hi there, > > I have a macro for use in cljs that injects code to make a function call > to a function in a cljs namespace. Now when I use that macro I have to > :require the corresponding cljs namespace or during compilation I am > flooded with superfluous: "WARNING: Use of undeclared Var > mycljsnamespace/func at line ...." messages. > > Is there a way to make the use of the macro in a cljs namespace add the > cljs require statement to ensure that these warnings are suppressed? > > The function call in the macro is here: > https://github.com/infinitelives/infinitelives.pixi/blob/master/src/clj/infinitelives/pixi/macros.clj#L36 > > and when using it, the compilation looks like: > > WARNING: Use of undeclared Var > infinitelives.pixi.canvas/get-default-canvas at line 15 src/cljs/... > WARNING: Use of undeclared Var > infinitelives.pixi.canvas/get-default-canvas at line 15 src/cljs/... > WARNING: Use of undeclared Var > infinitelives.pixi.canvas/get-default-canvas at line 11 src/cljs/... > ... > > at this stage in my present project its at least 50 lines of these. > > if I require that name space in the client code that warning disappears > but that requires the user of the macro to know that in advance, and be > disciplined enough to do it. > > How do I *auto require* the namespace, when the macro is used? > > I found this thread from 2013: > https://groups.google.com/forum/#!searchin/clojurescript/require$20in$20macro%7Csort:relevance/clojurescript/FNwwN87B2EE/lLF-Tel977AJ > > In it, Jozef Wagner states: "AFAIK there is no way to do this > automatically" > > Is this still the case? > > I see CLJS has supported since 1.9.293 : CLJS-1346: Support require > outside of ns > > Can I make the macro inject the require into its output code so the > "WARNING: Use of undeclared Var" is not emmitted? > > I have experimented with this but have been unable to make it work. > > Is this possible to do? If so, how can this be done? > > Regards > > Crispin > -- Note that posts from new members are moderated - please be patient with your first post. --- You received this message because you are subscribed to the Google Groups "ClojureScript" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojurescript+unsubscr...@googlegroups.com. To post to this group, send email to clojurescript@googlegroups.com. Visit this group at https://groups.google.com/group/clojurescript.