Clojure, Cursive - Resolving "cannot be resolved"
Recently I’ve been using http-kit quite a bit when working with Clojure. The main things I like about it are the sensible defaults, async by default, and being able to set a timeout.
Aside from this I also use Cursive. As such I had a small issue where when using
httpkit.client functions, cursive was unable to figure out what the functions under
client are. The reason for this looks to be because
httpkit.client uses a macro to generate it’s functions relating to requests called
defreq is something that Cursive doesn’t seem to recognise as generating a function, so as such you end up with this error:
org.httpkit.client/get cannot be resolved although the function will work as expected.
This annoyed me for a little while so I looked into it a bit further and asked around on the lovely Clojurians slack, which is a great community.
It wasn’t long before someone was able to give me an answer on how to resolve this.
You can see the conversation here in the Clojurians slack archive, but I’ve also replicated the instructions below in case that gets lost for whatever reason.
To fix it:
- Go to the defreq macro definition in
- Put the cursor on the defreq and
alt-enterto bring up the suggestions
- Choose “Resolve defreq as…”
- Select “Specify” and then type in “Declare” in the var name, picking the one from
This should then resolve it. You can see a list of your definitions in the settings, too, under Settings → Languages & Frameworks → Clojure → Symbol Resolution
All in all this was another nice interaction with the Clojure community.