prefer-const doesn't handle deconstructing right
See original GitHub issueHello.
I’d like to request either a change in the prefer-const
rule to properly handle deconstructing, or have an option object where we can disable it, just like prefer-destructuring
.
Tell us about your environment
- ESLint Version: v4.19.1
- Node Version: 10.2.1
- npm Version: 6.1.0
What parser (default, Babel-ESLint, etc.) are you using?
Default
Please show your full configuration:
Configuration
module.exports = {
extends: "eslint:recommended",
env: {
node: true,
es6: true,
},
parserOptions: {
ecmaVersion: 9,
sourceType: "module",
ecmaFeatures: {
experimentalObjectRestSpread: true,
},
},
globals: {
winston: true,
Servers: true,
Users: true,
Gallery: true,
Blog: true,
Wiki: true,
Database: true,
Raw: true,
configJS: true,
configJSON: true,
},
plugins: [
"promise",
"node",
],
rules: {
"no-extra-parens": ["warn", "all", { nestedBinaryExpressions: false }],
"accessor-pairs": "warn",
"array-callback-return": "error",
"curly": ["error", "multi-line", "consistent"],
"dot-location": ["error", "property"],
"dot-notation": "error",
"eqeqeq": "error",
"no-console": "error",
"no-empty-function": "error",
"no-floating-decimal": "error",
"no-implied-eval": "error",
"no-invalid-this": "error",
"no-lone-blocks": "error",
"no-multi-spaces": "error",
"no-new-func": "error",
"no-new-wrappers": "error",
"no-new": "error",
"no-octal-escape": "error",
"no-return-assign": "error",
"no-return-await": "error",
"no-self-compare": "error",
"no-sequences": "error",
"no-unmodified-loop-condition": "error",
"no-unused-expressions": ["error", { "allowShortCircuit": true }],
"no-useless-call": "error",
"no-useless-concat": "error",
"no-useless-escape": "error",
"no-void": "error",
"no-warning-comments": "warn",
"wrap-iife": "error",
"yoda": "error",
"no-label-var": "error",
"no-shadow": "error",
"no-undef-init": "error",
"callback-return": "error",
"handle-callback-err": "error",
"no-mixed-requires": "error",
"no-new-require": "error",
"no-path-concat": "error",
"array-bracket-spacing": "error",
"block-spacing": "error",
"brace-style": ["error", "1tbs", { allowSingleLine: true }],
"comma-dangle": ["error", "always-multiline"],
"comma-spacing": "error",
"comma-style": "error",
"computed-property-spacing": "error",
"consistent-this": "error",
"eol-last": "error",
"func-names": "error",
"func-style": ["error", "declaration", { allowArrowFunctions: true }],
indent: ["error", "tab", { SwitchCase: 1 }],
"key-spacing": "error",
"keyword-spacing": "error",
"max-depth": ["error", 8],
"max-len": ["error", 200, 2],
"max-nested-callbacks": ["error", { max: 4 }],
"max-statements-per-line": ["error", { max: 2 }],
"new-cap": "off",
"newline-per-chained-call": ["error", { ignoreChainWithDepth: 3 }],
"no-array-constructor": "error",
"no-bitwise": "warn",
"no-inline-comments": "error",
"no-lonely-if": "error",
"no-mixed-operators": "error",
"no-multiple-empty-lines": ["error", { max: 2, maxEOF: 1, maxBOF: 0 }],
"no-new-object": "error",
"no-spaced-func": "error",
"no-trailing-spaces": "error",
"no-unneeded-ternary": "error",
"no-whitespace-before-property": "error",
"object-curly-newline": "error",
"object-curly-spacing": ["error", "always"],
"operator-assignment": "error",
"operator-linebreak": ["error", "after"],
"padded-blocks": ["error", "never"],
"quote-props": ["error", "as-needed"],
"quotes": ["error", "double", { avoidEscape: true, allowTemplateLiterals: true }],
"semi-spacing": "error",
"semi": "error",
"space-before-blocks": "error",
"space-before-function-paren": ["error", "always"],
"space-in-parens": "error",
"space-infix-ops": "error",
"space-unary-ops": "error",
"spaced-comment": "error",
"unicode-bom": "error",
"arrow-body-style": "error",
"arrow-spacing": "error",
"no-duplicate-imports": "error",
"no-useless-computed-key": "error",
"no-useless-constructor": "error",
"prefer-arrow-callback": "error",
"prefer-const": "error",
"prefer-destructuring": ["error", {
VariableDeclarator: {
array: false,
object: true,
},
AssignmentExpression: {
array: true,
object: true,
},
}, {
enforceForRenamedProperties: false,
}],
"prefer-rest-params": "error",
"prefer-spread": "error",
"prefer-template": "error",
"rest-spread-spacing": "error",
"template-curly-spacing": "error",
"yield-star-spacing": "error",
"promise/no-return-wrap": "error",
"promise/catch-or-return": "error",
"promise/no-native": "off",
"promise/no-nesting": "warn",
"promise/no-promise-in-callback": "warn",
"promise/no-callback-in-promise": "warn",
"promise/no-return-in-finally": "warn",
"node/no-missing-require": "off",
"node/no-unpublished-bin": "error",
"node/no-deprecated-api": "error",
"node/exports-style": ["error", "module.exports"],
"no-var": "error",
},
};
What did you do? Please include the actual source code causing the issue, as well as the command that you used to run ESLint.
let [variable1, ...numbers] = [1, 2, 3, 4, 5, 6];
numbers = numbers.reduce((a, number) => a + number, 0);
eslint ./file.js
What did you expect to happen? prefer-const would not complain that variable1 isn’t overwritten and would detect that it is deconstructed from an array.
What actually happened? Please include the actual, raw output from ESLint. It complains that variable1 should use const, but then I cannot overwrite numbers due to it being const.
PS C:\Users\Vlad\Desktop\Development\> eslint ./file.js
C:\Users\Vlad\Desktop\Development\file.js
56:8 error 'variable1' is never reassigned. Use 'const' instead prefer-const
✖ 1 problem (1 error, 0 warnings)
Issue Analytics
- State:
- Created 5 years ago
- Comments:5 (3 by maintainers)
Top GitHub Comments
I guess that’s true.
I’ll leave this up to you then if this issue can be closed or not, as my “problem” was solved. 😃
Closing this issue as it looks like the question has been answered. Please feel free to visit us in the ESLint Gitter if you have any other issues!