docs: def crawl(plugin):
      '''Performs a breadth-first crawl of all possible routes from the
      starting path. Will only visit a URL once, even if it is referenced
      multiple times in a plugin. Requires user interaction in between each
      fetch.
      '''
      # TODO: use OrderedSet?
      paths_visited = set()
      paths_to_visit = set(item.get_path() for item in once(plugin))
  
      while paths_to_visit and continue_or_quit():
          path = paths_to_visit.pop()
          paths_visited.add(path)
  
          # Run the new listitem
          patch_plugin(plugin, path)
          new_paths = set(item.get_path() for item in once(plugin))
  
          # Filter new items by checking against urls_visited and
          # urls_tovisit
          paths_to_visit.update(path for path in new_paths
                                if path not in paths_visited)