@bronsa I’m sort of looking into speeding up Eastwood, and not surprising, analysis is where most time is spent. So I’m wondering wrt tools.analyzer: When analyzing an ns, does it also need to analyze the required ns’s, and if so, is this analysis available to be cached in any way?
bronsa can answer more authoritatively than I can, but if namespace A contains a definition of a macro, and namespace B requires A, and uses that macro, analyzing B requires the macro in A to be callable during B's analysis.
So unless I am missing something (likely), caching the results of analyzing B across different JVM runs seems like it would require serializing and deserializing a function definition.
The same is true if B contains a normal function definition for function 'foo', and 'foo' is called during macro-expansion time of a macro defined in namespace A.
I believe a substantial portion of Eastwood's functionality could be implemented without doing any macro expansion at all (I suspect that Cursive may do many kinds of code analysis without expanding macros, for example, but Colin Fleming would know best) -- I haven't expended any effort or thinking into what that might look like.
Expanding macros certainly does fairly often lead to false positives in linter warnings, which I have in many cases added ad hoc checks for to try to reduce.