From 2e202948fa6d0cdd81313e35c475633ca13a84da Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Wed, 11 Mar 2020 17:58:15 +0800 Subject: [PATCH] `prevent-abbreviations`: Fix inappropriate suggestion (#592) --- rules/prevent-abbreviations.js | 8 +++++--- test/prevent-abbreviations.js | 37 ++++++++++++++++++++++++++++++++-- 2 files changed, 40 insertions(+), 5 deletions(-) diff --git a/rules/prevent-abbreviations.js b/rules/prevent-abbreviations.js index 5b110cf852..eaa9705204 100644 --- a/rules/prevent-abbreviations.js +++ b/rules/prevent-abbreviations.js @@ -668,6 +668,9 @@ const create = context => { } const scopes = variable.references.map(reference => reference.from).concat(variable.scope); + variableReplacements.samples = variableReplacements.samples.map( + name => avoidCapture(name, scopes, ecmaVersion, isSafeName) + ); const problem = { node: definition.name, @@ -676,7 +679,6 @@ const create = context => { if (variableReplacements.total === 1 && shouldFix(variable)) { const [replacement] = variableReplacements.samples; - const captureAvoidingReplacement = avoidCapture(replacement, scopes, ecmaVersion, isSafeName); for (const scope of scopes) { if (!scopeToNamesGeneratedByFixer.has(scope)) { @@ -684,12 +686,12 @@ const create = context => { } const generatedNames = scopeToNamesGeneratedByFixer.get(scope); - generatedNames.add(captureAvoidingReplacement); + generatedNames.add(replacement); } problem.fix = fixer => { return variableIdentifiers(variable) - .map(fixIdentifier(fixer, captureAvoidingReplacement)); + .map(fixIdentifier(fixer, replacement)); }; } diff --git a/test/prevent-abbreviations.js b/test/prevent-abbreviations.js index 3d49f49bf9..2c6972aa72 100644 --- a/test/prevent-abbreviations.js +++ b/test/prevent-abbreviations.js @@ -775,7 +775,7 @@ ruleTester.run('prevent-abbreviations', rule, { { code: 'class Err {}', output: 'class Error_ {}', - errors: createErrors('The variable `Err` should be named `Error`. A more descriptive name will do too.') + errors: createErrors('The variable `Err` should be named `Error_`. A more descriptive name will do too.') }, { code: 'class Cb {}', @@ -828,7 +828,40 @@ ruleTester.run('prevent-abbreviations', rule, { "use strict"; let package_; `, - errors: createErrors() + errors: createErrors('The variable `pkg` should be named `package_`. A more descriptive name will do too.') + }, + { + code: outdent` + "use strict"; + let pkg = 1; + let package_ = 2; + `, + output: outdent` + "use strict"; + let package__ = 1; + let package_ = 2; + `, + errors: createErrors('The variable `pkg` should be named `package__`. A more descriptive name will do too.') + }, + { + code: outdent` + "use strict"; + function foo() { + const args = [...arguments]; + const pkg = 1; + } + `, + output: outdent` + "use strict"; + function foo() { + const arguments_ = [...arguments]; + const package_ = 1; + } + `, + errors: [ + ...createErrors('The variable `args` should be named `arguments_`. A more descriptive name will do too.'), + ...createErrors('The variable `pkg` should be named `package_`. A more descriptive name will do too.') + ] }, {