docs: async def process_feed(self, url, send_mentions=True):
          """ process a feed """
  
          self._feed_domains.add(utils.get_domain(url))
  
          if url in self._processed_feeds:
              LOGGER.debug("Skipping already processed feed %s", url)
              return
          self._processed_feeds.add(url)
  
          LOGGER.debug("++WAIT: %s: get feed", url)
          feed, previous, updated = await feeds.get_feed(self, url)
          LOGGER.debug("++DONE: %s: get feed", url)
  
          if updated:
              LOGGER.info("Feed %s has been updated", url)
  
          if not feed:
              return
  
          LOGGER.debug("--- starting process_feed %s %s", url, send_mentions)
  
          pending = []
  
          try:
              for link in feed.links:
                  href = link['href']
                  if not href:
                      continue
  
                  #  RFC5005 archive links
                  if self.args.archive and link.get('rel') in ('prev-archive',
                                                               'next-archive',
                                                               'prev-page',
                                                               'next-page'):
                      LOGGER.debug("Found archive link %s", link)
                      pending.append(
                          ("process feed " + href, self.process_feed(href, send_mentions)))
  
                  # WebSub notification
                  if updated and link.get('rel') == 'hub' and not feed.is_archive:
                      LOGGER.debug("Found WebSub hub %s", link)
                      pending.append(
                          ("update websub " + href, feed.update_websub(self, href)))
          except (AttributeError, KeyError):
              LOGGER.debug("Feed %s has no links", url)
  
          # Schedule the entries
          items = set(feed.entry_links)
          if previous:
              items |= set(previous.entry_links)
          for entry in items:
              pending.append(("process entry " + entry,
                              self.process_entry(entry, send_mentions=send_mentions)))
  
          LOGGER.debug("--- finish process_feed %s %s", url, send_mentions)
  
          if pending:
              LOGGER.debug("+++WAIT: process_feed(%s): %d subtasks",
                           url, len(pending))
              LOGGER.debug("%s", [name for (name, _) in pending])
              await asyncio.wait([task for (_, task) in pending])
              LOGGER.debug("+++DONE: process_feed(%s): %d subtasks",
                           url, len(pending))