Skip to content

Faulty rule for not empty #230

Open
Open

Description

@macalimlim

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?

Activity

  1. danielcompton commented on Jul 1, 2019

    @danielcompton
    Member

    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.

  2. macalimlim commented on Jul 2, 2019

    @macalimlim
    Author

    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)

  3. danielcompton commented on Jul 2, 2019

    @danielcompton
    Member

    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.

  4. macalimlim commented on Jul 3, 2019

    @macalimlim
    Author

    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?

  5. danielcompton commented on Jul 4, 2019

    @danielcompton
    Member

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

  6. macalimlim commented on Jul 4, 2019

    @macalimlim
    Author

    what do the other maintainers think about my suggested change?

  7. macalimlim commented on Jul 11, 2019

    @macalimlim
    Author

    any update on this one?

  8. danielcompton commented on Jul 14, 2019

    @danielcompton
    Member

    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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions