Make isReferenced return false for method parameter name (#11089)

* Change isReferenced to return false for object/class method parameter names.

* use indexOf instead of for-of loop

* replace `.indexOf` check with `.includes` and assume `parent.params` exists

Co-Authored-By: Justin Ridgewell <justin@ridgewell.name>

* check .params within case block for ClassMethod/ClassPrivateMethod/ObjectMethod only

* add comment clarifying that case clause fall-through is intentional

Co-authored-by: Justin Ridgewell <justin@ridgewell.name>
This commit is contained in:
Jacob Williams
2020-02-05 15:59:16 -08:00
committed by GitHub
parent 0ae61f060a
commit 761563571c
2 changed files with 79 additions and 5 deletions

View File

@@ -45,6 +45,17 @@ export default function isReferenced(
case "PrivateName":
return false;
// no: class { NODE() {} }
// yes: class { [NODE]() {} }
// no: class { foo(NODE) {} }
case "ClassMethod":
case "ClassPrivateMethod":
case "ObjectMethod":
if (parent.params.includes(node)) {
return false;
}
// Fall-through to next case clause to check whether the node is the method's name.
// yes: { [NODE]: "" }
// no: { NODE: "" }
// depends: { NODE }
@@ -55,11 +66,6 @@ export default function isReferenced(
// yes: class { key = NODE; }
case "ClassProperty":
case "ClassPrivateProperty":
// no: class { NODE() {} }
// yes: class { [NODE]() {} }
case "ClassMethod":
case "ClassPrivateMethod":
case "ObjectMethod":
if (parent.key === node) {
return !!parent.computed;
}