def visit_Attribute(self, node):
        chainOrNone = _memberAccessChainOrNone(node)
        if chainOrNone is not None:
            if chainOrNone[0] not in self._boundValues:
                self._freeVariableMemberAccessChainsWithPos.add(
                    VarWithPosition(
                        var=chainOrNone,
                        pos=NodeVisitorBases.PositionInFile(
                            lineno=node.lineno,
                            col_offset=node.col_offset
                            )
                        )
                    )
        else:
            #required to recurse deeper into the AST, but only do it if
            #_freeVariableMemberAccessChain was None, indicating that it
            #doesn't want to consume the whole expression
            self.generic_visit(node.value)
dataset/ETHPy150Open ufora/ufora/packages/python/pyfora/pyAst/PyAstFreeVariableAnalyses.py/_FreeVariableMemberAccessChainsVisitor.visit_Attribute/original