kibit icon indicating copy to clipboard operation
kibit copied to clipboard

Faulty rule for not empty

Open macalimlim opened this issue 5 years ago • 8 comments

There is a faulty rule for (not (empty? coll)). it suggests (seq coll)... Am I right to say that these two expressions should be referential transparent?

macalimlim avatar Jul 01 '19 03:07 macalimlim

You're correct that these two expressions will return different things. The theory behind this is that in usage, (seq coll) still returns a truthy value like (not (empty? coll)).

The docstring for empty? says:

Returns true if coll has no items - same as (not (seq coll)). Please use the idiom (seq x) rather than (not (empty? x))

which is where the rule probably came from.

danielcompton avatar Jul 01 '19 19:07 danielcompton

I can raise a PR to fix this rule.. this rule only works if the expression is used inside a conditional (e.g. if, when, etc.). but when it is used outside a conditional then it will not be same result..

inside a conditional... (when (not (empty? coll)) "mike") is same as (when (seq coll) "mike")

outside a conditional... (let [is-empty (not (empty? coll))] is-empty) is not same as (let [is-empty (seq coll)] is-empty)

macalimlim avatar Jul 02 '19 04:07 macalimlim

I think this would probably need to be a configurable rule, there are also lots of conditionals to check for (including custom ones). I'm probably more inclined to leave it for now, but do you have a real-world example you could show? That might help give me some more context.

danielcompton avatar Jul 02 '19 20:07 danielcompton

I don't currently have a real world example to show, but I think the example I gave above commonly happen in day to day work. I just found it strange that kibit suggested it. Would replacing line 17 of collections.clj with [(when (not (empty? ?x)) . ?y) (when (seq ?x) . ?y)] be enough?

macalimlim avatar Jul 03 '19 08:07 macalimlim

Maybe? I'm a little bit conflicted here TBH.

danielcompton avatar Jul 04 '19 01:07 danielcompton

what do the other maintainers think about my suggested change?

macalimlim avatar Jul 04 '19 03:07 macalimlim

any update on this one?

macalimlim avatar Jul 11 '19 03:07 macalimlim

I'm going to have put this in the hammock to think about. I don't have a lot of time to put into kibit at the moment.

danielcompton avatar Jul 14 '19 21:07 danielcompton