Skip to content

Prevent equality checks as statements #59028

Closed
@jonmountjoy

Description

@jonmountjoy

Describe the rule you'd like to see added and to what rule set
I'd like to prevent this kind of bug:

...
itemState.learningAspect == LearningAspect.learnNumber;
...

In other words, I have a statement, and that statement is an equality check, the value of which I'm discarding.

It's almost always an error (for me, it's always an error), because what I invariably want to write is:

itemState.learningAspect = LearningAspect.learnNumber;

In other words, I've used an equality check (copy pasta or finger slip or whatever) instead of an assignment.

I can't imagine a scenario when anyone would want to write that kind of statement, but I guess it's possible. In other contexts (embedded as an expression), types would usually catch the error. But as a standalone statement, the type system is quite happy. I imagine at run time it performs the equality check and discards the boolean result.

In some ways I think it's similar to unawaited_futures. I wouldn't mind an "unused_boolean" - it would cover me in this situation and force me to think more about my other methods too.

Thoughts?

(thanks!)

Activity

eernstg

eernstg commented on Feb 3, 2023

@eernstg
Member

Perhaps this should be transferred to the linter repository? It seems to be a potential enhancement of existing checks for statements with no observable effect (e.g., 25; or print;). I thought we already had some linter support for flagging such statements, but I can't see any matching lints at this time.

@pq, did we have a diagnostic for "code has no effect" (some special cases of that), but it was dropped again?

bwilkerson

bwilkerson commented on Feb 3, 2023

@bwilkerson
Member

@srawlins Who might also remember whether we used to have such a diagnostic.

pq

pq commented on Feb 3, 2023

@pq
Member

@eernstg, you may be thinking of unnecessary_statements?

pq

pq commented on Feb 3, 2023

@pq
Member

In fact, @jonmountjoy: I think unnecessary_statements covers your case?

added
type-questionA question about expected behavior or functionality
P3A lower priority bug or feature request
on Feb 3, 2023
eernstg

eernstg commented on Feb 3, 2023

@eernstg
Member

Exactly, unnecessary_statements is what I was looking for, I just didn't come up with the right words to search for. ;-)

jonmountjoy

jonmountjoy commented on Feb 3, 2023

@jonmountjoy
Author

Ahhh that's fabulous @eernstg @pq @bwilkerson - that does the job!
I would seriously consider putting this in the default recommended lints.

This is so nice - thank you!

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

    P3A lower priority bug or feature requestdevexp-linterIssues with the analyzer's support for the linter packagelegacy-area-analyzerUse area-devexp instead.type-questionA question about expected behavior or functionality

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

      Development

      No branches or pull requests

        Participants

        @pq@jonmountjoy@devoncarew@bwilkerson@eernstg

        Issue actions

          Prevent equality checks as statements · Issue #59028 · dart-lang/sdk