isValidName(newName, binding, scope) {
      return (
        t.isValidIdentifier(newName) &&
        !this.scopeTracker.hasBinding(scope, newName) &&
        !scope.hasGlobal(newName) &&
        !this.scopeTracker.hasReference(scope, newName) &&
        this.scopeTracker.canUseInReferencedScopes(binding, newName)
      );
    }
Tells if the newName can be used as a valid name for the input binding
in the input scope

@param {string} newName the old name that needs to be mangled
@param {Binding} binding Binding of the name that this new name will replace
@param {Scope} scope The current scope the mangler is run