question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

no-unneeded-ternary incorrect documentation for defaultAssignment option

See original GitHub issue

This is a “documentation bug”.

The version of ESLint you are using.

6.1.0

The problem you want to solve.

Documentation for defaultAssignment option of the no-unneeded-ternary rule is incorrect.

defaultAssignment = true means don’t report expressions such as x ? x : y.

defaultAssignment = false means report expressions such as x ? x : y.

Default is true.

The rule doesn’t actually check if the expression is in an assignment context. That’s by design from the start (#3232 and #3260). It simply searches for all ternary expressions where test and consequent are same identifier.

Incorrect parts of the documentation are:

  1. The incorrect example:
/*eslint no-unneeded-ternary: "error"*/

var a = x === 2 ? true : false;

var a = x ? true : false;

var a = f(x ? x : 1);

The example is wrong, var a = f(x ? x : 1); is not a warning because of the default option value.

  1. The correct example:
/*eslint no-unneeded-ternary: "error"*/

var a = x === 2 ? "Yes" : "No";

var a = x !== false;

var a = x ? "Yes" : "No";

var a = x ? y : x;

var a = x ? x : 1;  // Note that this is only allowed as it on the right hand side of an assignment; this type of ternary is disallowed everywhere else. See defaultAssignment option below for more details.

The comment is wrong.

  1. defaultAssignment section

The defaultAssignment option allows expressions of the form x ? x : expr (where x is any identifier and expr is any expression) as the right hand side of assignments (but nowhere else).

The option (when true) allows such expressions everywhere.

Your take on the correct solution to problem.

Fix the documentation.

Perhaps also consider changing the name of the option for two reasons:

  • The Assignment part is confusing.
  • When the option name doesn’t have an explicit prefix, true ususally means “enforce on”, rather than “allow”.

Maybe allowSameConsequent or allowSameIfTrue.

Are you willing to submit a pull request to implement this change?

Yes, I would be glad to do it.

Issue Analytics

  • State:closed
  • Created 4 years ago
  • Reactions:1
  • Comments:6 (6 by maintainers)

github_iconTop GitHub Comments

1reaction
mdjermanoviccommented, Oct 11, 2019

Marking as accepted based on this Online Demo

The code is copy & paste from the ‘incorrect’ example in the docs. In this example, the rule doesn’t report error for the third statement.

To avoid confusion, I removed the part about changing the option’s name from the original post.

This is now just an issue to fix the docs to match the current behavior.

1reaction
samrae7commented, Oct 11, 2019

I would like to make the doc change. I will verify at the same time

Read more comments on GitHub >

github_iconTop Results From Across the Web

no-unneeded-ternary - ESLint - Pluggable JavaScript Linter
This rule has an object option: "defaultAssignment": true (default) allows the conditional expression as a default assignment pattern; "defaultAssignment": ...
Read more >
no-unneeded-ternary - Rules - ESLint中文文档
Options. This rule has an object option: "defaultAssignment": true (default) allows the conditional expression as a default assignment pattern ...
Read more >
No-unneeded-ternary - ESLint - W3cubDocs
This rule has an object option: "defaultAssignment": true (default) allows the conditional expression as a default assignment pattern; "defaultAssignment": ...
Read more >
ESLint error no-unneeded-ternary - javascript - Stack Overflow
... me this error message inside my JS module: error no-unneeded-ternary Unnecessary use of conditional expression for default assignment.
Read more >
eslint-config-mcecode - npm Package Health Analysis - Snyk
Please refer to Prettier's documentation linked above which ... the defaultAssignment option to true for the no-unneeded-ternary rule is ...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found