pylint/checkers/variables.py
def visit_global(self, node):
        """check names imported exists in the global scope"""
        frame = node.frame()
        if isinstance(frame, astroid.Module):
            self.add_message("global-at-module-level", node=node)
            return

        module = frame.root()
        default_message = True
        locals_ = node.scope().locals
        for name in node.names:
            try:
                assign_nodes = module.getattr(name)
            except astroid.NotFoundError:
                # unassigned global, skip
                assign_nodes = []

            not_defined_locally_by_import = not any(
                isinstance(local, astroid.node_classes.Import)
                for local in locals_.get(name, ())
            )
            if not assign_nodes and not_defined_locally_by_import:
                self.add_message("global-variable-not-assigned", args=name, node=node)
                default_message = False
                continue

            for anode in assign_nodes:
                if (
                    isinstance(anode, astroid.AssignName)
                    and anode.name in module.special_attributes
                ):
                    self.add_message("redefined-builtin", args=name, node=node)
                    break
                if anode.frame() is module:
                    # module level assignment
                    break
            else:
                if not_defined_locally_by_import:
                    # global undefined at the module scope
                    self.add_message("global-variable-undefined", args=name, node=node)
                    default_message = False

        if default_message:
            self.add_message("global-statement", node=node)
def visit_global(self, node):
        frame = node.frame()
        if isinstance(frame, astroid.Module):
            self.add_message("global-at-module-level", node=node)
            return

        module = frame.root()
        default_message = True
        locals_ = node.scope().locals
        for name in node.names:
            try:
                assign_nodes = module.getattr(name)
            except astroid.NotFoundError:
                # unassigned global, skip
                assign_nodes = []

            not_defined_locally_by_import = not any(
                isinstance(local, astroid.node_classes.Import)
                for local in locals_.get(name, ())
            )
            if not assign_nodes and not_defined_locally_by_import:
                self.add_message("global-variable-not-assigned", args=name, node=node)
                default_message = False
                continue

            for anode in assign_nodes:
                if (
                    isinstance(anode, astroid.AssignName)
                    and anode.name in module.special_attributes
                ):
                    self.add_message("redefined-builtin", args=name, node=node)
                    break
                if anode.frame() is module:
                    # module level assignment
                    break
            else:
                if not_defined_locally_by_import:
                    # global undefined at the module scope
                    self.add_message("global-variable-undefined", args=name, node=node)
                    default_message = False

        if default_message:
            self.add_message("global-statement", node=node)
def visit_global ( self , node ) : frame = node . frame ( ) if isinstance ( frame , astroid . Module ) : self . add_message ( "global-at-module-level" , node = node ) return module = frame . root ( ) default_message = True locals_ = node . scope ( ) . locals for name in node . names : try : assign_nodes = module . getattr ( name ) except astroid . NotFoundError : # unassigned global, skip assign_nodes = [ ] not_defined_locally_by_import = not any ( isinstance ( local , astroid . node_classes . Import ) for local in locals_ . get ( name , ( ) ) ) if not assign_nodes and not_defined_locally_by_import : self . add_message ( "global-variable-not-assigned" , args = name , node = node ) default_message = False continue for anode in assign_nodes : if ( isinstance ( anode , astroid . AssignName ) and anode . name in module . special_attributes ) : self . add_message ( "redefined-builtin" , args = name , node = node ) break if anode . frame ( ) is module : # module level assignment break else : if not_defined_locally_by_import : # global undefined at the module scope self . add_message ( "global-variable-undefined" , args = name , node = node ) default_message = False if default_message : self . add_message ( "global-statement" , node = node )
check names imported exists in the global scope
check names imported exists in the global scope