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.

Improve no-func-assign docs and add tests

See original GitHub issue

Tell us about your environment

Eslint demo page with Eslint v7.9.0 - Demo URL

  • ESLint Version: v7.9.0
  • Node Version: Doesn’t matter (web hosted)
  • npm Version: Doesn’t matter (web hosted)

What parser (default, @babel/eslint-parser, @typescript-eslint/parser, etc.) are you using? - default

Please show your full configuration:

Configuration
{
    "parserOptions": {
        "ecmaVersion": 12,
        "sourceType": "script",
        "ecmaFeatures": {}
    },
    "rules": {
        "constructor-super": 2,
        "for-direction": 2,
        "getter-return": 2,
        "no-async-promise-executor": 2,
        "no-case-declarations": 2,
        "no-class-assign": 2,
        "no-compare-neg-zero": 2,
        "no-cond-assign": 2,
        "no-const-assign": 2,
        "no-constant-condition": 2,
        "no-control-regex": 2,
        "no-debugger": 2,
        "no-delete-var": 2,
        "no-dupe-args": 2,
        "no-dupe-class-members": 2,
        "no-dupe-else-if": 2,
        "no-dupe-keys": 2,
        "no-duplicate-case": 2,
        "no-empty": 2,
        "no-empty-character-class": 2,
        "no-empty-pattern": 2,
        "no-ex-assign": 2,
        "no-extra-boolean-cast": 2,
        "no-extra-semi": 2,
        "no-fallthrough": 2,
        "no-global-assign": 2,
        "no-import-assign": 2,
        "no-inner-declarations": 2,
        "no-invalid-regexp": 2,
        "no-irregular-whitespace": 2,
        "no-misleading-character-class": 2,
        "no-mixed-spaces-and-tabs": 2,
        "no-new-symbol": 2,
        "no-obj-calls": 2,
        "no-octal": 2,
        "no-prototype-builtins": 2,
        "no-redeclare": 2,
        "no-regex-spaces": 2,
        "no-self-assign": 2,
        "no-setter-return": 2,
        "no-shadow-restricted-names": 2,
        "no-sparse-arrays": 2,
        "no-this-before-super": 2,
        "no-undef": 2,
        "no-unexpected-multiline": 2,
        "no-unreachable": 2,
        "no-unsafe-finally": 2,
        "no-unsafe-negation": 2,
        "no-unused-labels": 2,
        "no-unused-vars": 2,
        "no-useless-catch": 2,
        "no-useless-escape": 2,
        "no-with": 2,
        "require-yield": 2,
        "use-isnan": 2,
        "valid-typeof": 2
    },
    "env": {}
}

Only actual change from default config is - disabled “no-func-assign”

What did you do? Please include the actual source code causing the issue, as well as the command that you used to run ESLint.

var a = function hello() {
  'use strict';
  hello = 123; // should throw error here
};
a()

Ran demo web version - Demo URL

What did you expect to happen?

I have disabled “no-func-assign” rule.
On the line “hello = 123” within named function expression, this will always throw a runtime JS error saying TypeError: Assignment to constant variable. That means, this is a assignment to a (implicitly created) immutable binding for the function name “hello”. “no-const-assign” rule should also catch this error, irrespective of “no-func-assign” - because this is a const reassignment.

The spec says that for named function expressions, there is a implicitly created extra scope above the function local scope which has immutable binding for funcName = funcObject. So, this means -

A. This code should not be allowed

var a = function hello() {
  'use strict';
  hello = 123; // reassign const
};

B. but this should be allowed -

var a = function hello() {
  'use strict';
  const hello = 123; // creates new const
};

What actually happened? Please include the actual, raw output from ESLint.

No lint error or warning (lint-free)

Are you willing to submit a pull request to fix this bug?

Yes

Issue Analytics

  • State:closed
  • Created 3 years ago
  • Comments:12 (6 by maintainers)

github_iconTop GitHub Comments

2reactions
mdjermanoviccommented, Sep 20, 2020

Only suggestion in that case is to add more strict words to no-func-assign doc saying that it can throw error also, not just a clean code issue

Sounds good to me!

Marked as an accepted issue to improve documentation for no-func-assign. In particular, to add named function expressions.

The actual document doesn’t even mention named function expressions and doesn’t have any examples with them. Also, there are no test cases, so it’s possible that the original intention was to check only function declarations:

This rule disallows reassigning function declarations.

Either way, this rule checks function expressions from the start (v0.0.9), this behavior does make sense, so we should update the docs to reflect the actual behavior.

1reaction
bendtherulescommented, Oct 15, 2020

Feel free to pick it up. I have not done any work on this. (in case you meant to ask me)

Read more comments on GitHub >

github_iconTop Results From Across the Web

Best practices for writing unit tests - .NET - Microsoft Learn
There are numerous benefits of writing unit tests; they help with regression, provide documentation, and facilitate good design.
Read more >
Testing best practices - GitLab Docs
Avoid scenario titles that add no information, such as “successfully”. Avoid scenario titles that repeat the feature title. Create only the necessary records...
Read more >
Unit testing tutorial | CLion Documentation - JetBrains
This tutorial gives an overview of the unit testing approach and discusses four frameworks supported by CLion: Google Test, Boost.Test, Catch2, and Doctest....
Read more >
DevOps tech: Continuous testing - Google Cloud
How to implement continuous testing; Common pitfalls; Ways to improve continuous ... the pipeline must be improved, perhaps by adding or updating tests....
Read more >
unittest — Unit testing framework — Python 3.11.1 ...
The remainder of the documentation explores the full feature set from first ... than a test failure (thus increasing the total number of...
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