canMangle(oldName, binding, scope) {
      const cannotMangle =
        // arguments - for non-strict mode
        oldName === "arguments" ||
        // labels
        binding.path.isLabeledStatement() ||
        // ClassDeclaration has binding in two scopes
        //   1. The scope in which it is declared
        //   2. The class's own scope
        (binding.path.isClassDeclaration() && binding.path === scope.path) ||
        // excluded
        this.isExcluded(oldName) ||
        // function names
        (this.keepFnName ? isFunction(binding.path) : false) ||
        // class names
        (this.keepClassName ? isClass(binding.path) : false) ||
        // named export
        this.isExportedWithName(binding);

      return !cannotMangle;
    }
Tells if the name can be mangled in the current observed scope with
the input binding

@param {string} oldName the old name that needs to be mangled
@param {Binding} binding Binding of the name
@param {Scope} scope The current scope the mangler is run