Skip to content

Enhancement: [no-unnecessary-condition] Make allowConstantLoopConditions more granular #7047

@JoshuaKGoldberg

Description

@JoshuaKGoldberg

Before You File a Proposal Please Confirm You Have Done The Following...

My proposal is suitable for this project

  • I believe my proposal would be useful to the broader TypeScript community (meaning it is not a niche proposal).

Link to the rule's documentation

https://typescript-eslint.io/rules/no-unnecessary-condition

Description

The allowConstantLoopConditions option is disabled by default, because cases like while (shouldRun = true) are likely errors. But that means the rule option also flags cases like while (true). Which is more of a stylistic preference, I think.

How about making the option more granular:

  • 'never': same as today's false
  • 'only-simple': allow "simple" cases like true (a better name would be nice!)
  • 'always': same as today's true

...and in future major version, breaking change to:

  • current: 'never' is be the default value and aliased by false (to not be a breaking change)
  • next: 'only-simple' becomes the default value

Fail

let shouldRun = true;

while (shouldRun = true) { /* ... */ }

Pass

while (true) { /* ... */ }

Additional Info

I stumbled onto this in https://github.com/JoshuaKGoldberg/template-typescript-node-package/pull/469/files#diff-e1ce717e1179a0db14e90ec5374768a206651ca807db58352991eb7895ed7c9cR64

Metadata

Metadata

Assignees

No one assigned

    Labels

    accepting prsGo ahead, send a pull request that resolves this issueenhancement: plugin rule optionNew rule option for an existing eslint-plugin rulelocked due to agePlease open a new issue if you'd like to say more. See https://typescript-eslint.io/contributing.package: eslint-pluginIssues related to @typescript-eslint/eslint-plugin

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions