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.
@adam678 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: https://github.com/clj-kondo/clj-kondo/issues/1165 Thanks!
Why don't you suppress unresolved symbol linting for this macro?
{:linters
{:unresolved-symbol
{: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
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