Fork me on GitHub
#re-frame
<
2020-11-30
>
flowthing08:11:57

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. https://github.com/jpmonettas/clindex, but I was just wondering whether something like that already exists.

p-himik08:11:59

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.

flowthing08:11:10

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.

flowthing08:11:10

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

👍 3
rutledgepaulv11:11:40

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.

👌 3
flowthing11:11:02

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?

flowthing18:11:58

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:

Lu19:11:43

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

sheepy 3
rap1ds06:12:34

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"))]
    `(do
       (def ~name ~kw)
       ~(macroexpand `(rf/reg-sub ~kw [email protected])))))

rap1ds06:12:34

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.

jhacks15:12:36

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 3