docs: def is_generator(self, node):
          """Checks whether a function is a generator by looking for a yield
          statement or expression."""
          if not isinstance(node.body, list):
              # lambdas can not be generators
              return False
          for item in node.body:
              if isinstance(item, (ast.Assign, ast.Expr)):
                  if isinstance(item.value, ast.Yield):
                      return True
              elif not isinstance(item, ast.FunctionDef) and hasattr(item, 'body'):
                  if self.is_generator(item):
                      return True
          return False