Fork me on GitHub

Is there a linter that catches cases such as dispatching a non-existent event or subscribing to a non-existent subscription? I guess it'd be fairly straightforward to build something on top of e.g., but I was just wondering whether something like that already exists.


FWIW, I've never seen anything like that being mentioned. I'm not sure it would be that straightforward given that event/sub IDs can be anything and not just keywords. And you can dynamically create them, even if they're just keywords.


Right, good point. I think it might be possible to catch most cases, but you're right that a static analysis type of approach wouldn't catch everything.


It's just a very easy bug to make to forget to update the event names in dispatch calls when moving things around.

👍 1

If it's a problem you could def symbols for every reframe sub and event by convention (I'd put them all in one namespace) and get compile time assistance / potentially better refactoring support from your editor.

👌 1

Hmm, interesting idea, thanks. Might get a bit boilerplatey, but it might work. I'll consider it.

David Pham18:11:33

When you deref a non existing subscription it throws an error?


It does, but you’ll have to open the console to see that. Of course, could maybe make it throw an error to make it more visible. :thinking_face:


In so many instances I’ve had nil subscriptions completely blank the page so it was hard for them to go unnoticed 😂

sheepy 1

Sometime ago someone linked here a neat def-sub macro:

(defmacro def-sub [name & args]
  {:pre [(symbol? name)]}
  (let [kw (keyword (ns-name *ns*) (str name "|sub"))]
       (def ~name ~kw)
       ~(macroexpand `(rf/reg-sub ~kw [email protected])))))


And that can be done for event handlers also. I'm seriously considering starting to use that. I think the benefits are quite big: Easier code navigation (jump to definition), linter warnings when trying to use undefined event/subscription etc.


That macro looks like the answer to my issues with code navigation in emacs for events/subs. It would also enable using imenu, since it starts with def . Are there any drawbacks to using this macro instead of directly using reg-sub, for example?

parrot 1