code: def _find_statement_by_line(node, line):
      
      if isinstance(node, (nodes.ClassDef, nodes.FunctionDef)):
          # This is an inaccuracy in the AST: the nodes that can be
          # decorated do not carry explicit information on which line
          # the actual definition (class/def), but .fromline seems to
          # be close enough.
          node_line = node.fromlineno
      else:
          node_line = node.lineno
  
      if node_line == line:
          return node
  
      for child in node.get_children():
          result = _find_statement_by_line(child, line)
          if result:
              return result
  
      return None
docs: Extracts the statement on a specific line from an AST.
  
      If the line number of node matches line, it will be returned;
      otherwise its children are iterated and the function is called
      recursively.
  
      :param node: An astroid node.
      :type node: astroid.bases.NodeNG
      :param line: The line number of the statement to extract.
      :type line: int
      :returns: The statement on the line, or None if no statement for the line
        can be found.
      :rtype:  astroid.bases.NodeNG or None