docs: def visit_Assign(self, node):
          """Visit an assignment node."""
          line = self._code_lines[node.lineno - 1]
          if SIG_COMMENT in line:
              line = _RE_COMMENT_IN_STRING.sub("", line)
  
          if (SIG_COMMENT not in line) and (not self.generic):
              return
  
          if SIG_COMMENT in line:
              _, signature = line.split(SIG_COMMENT)
              _, return_type, requires = parse_signature(signature)
              self.required_types |= requires
  
          parent = self._parents[-1]
          for var in node.targets:
              if isinstance(var, ast.Name):
                  name, p = var.id, parent
              elif (
                  isinstance(var, ast.Attribute)
                  and isinstance(var.value, ast.Name)
                  and (var.value.id == "self")
              ):
                  name, p = var.attr, parent.parent
              else:
                  name, p = None, None
  
              if name is not None:
                  if self.generic:
                      return_type = "Any"
                      self.required_types.add(return_type)
                  stub_node = VariableNode(name, return_type)
                  p.add_variable(stub_node)