Fork me on GitHub

I have a special macro which is essentially about executing given forms as Clojure code no matter the target platform. (In CLJS, they are evaled during the compilation stage) Is there a way to write a hook for that very special use case? Forcing linting as Clojure? The problem is that in a CLJC file, Clj-kondo will complain if those forms refer to something that is Clojure specific (eg. a call to alter-var-root) because as such, it doesn't know that they will never execute as CLJS.


@UCFG3SDFV Is it an option to put this code in a :clj reader conditional?


If not, please make a small repro which clarifies the problem


I tried to make my case here but feel free to close it if you find it to be too narrow of a use case: Thanks!


Why don't you suppress unresolved symbol linting for this macro?


    {:exclude [(your-ns/eval-as-clojure)]}}}


I have another feature in the works to only lint .cljc as one language, e.g. only consider the :clj branches and unbranched code as only clj and ignore the rest.


Would that also fit your use case?


This would disable cljs linting for .cljc


The thing is, forms passed to such a macro are Clojure forms which should be linted as usual. In that example, Clj-kondo will end up complaining about format because it thinks it is going to be called from CLJS as well. It is essentially about forcing to lint as Clojure in a context where a reader conditional cannot be used. Unfortunately, forcing linting to Clojure in a whole CLJC file would be a heavy price to pay since you would become blind regarding the CLJS side.


so the macro is always executed by clojure on the JVM side right? so expanding the macro into #?(:clj the-forms) in a hook would be the correct interpretation?


this is currently not possible I think but could be an appropriate solution


Exactly so


I guess you didn't have many people requesting that. Outside of tooling, I admit I am not sure how useful that would be in "day to day" code


yes, but adding the possibility of creating reader conditionals to hook code might be generally useful

👍 3

although still a bit niche maybe


Unfortunately I can't help you much since I am not very aware of the inner workings. I've started writing hooks and taking a deeper look only recently


I'll leave the issue open and will think about it for a while

metal 3