docs: def search_for_parent_dir(start_at: str=None, with_files: set=None,
                            with_dirs: set=None) -> str:
      """Return absolute path of first parent directory of `start_at` that
         contains all files `with_files` and all dirs `with_dirs`
         (including `start_at`).
  
      If `start_at` not specified, start at current working directory.
  
      :param start_at: Initial path for searching for the project build file.
  
      Returns `None` upon reaching FS root without finding a project buildfile.
      """
      if not start_at:
          start_at = os.path.abspath(os.curdir)
      if not with_files:
          with_files = set()
      if not with_dirs:
          with_dirs = set()
      exp_hits = len(with_files) + len(with_dirs)
      while start_at:
          num_hits = 0
          for entry in scandir(start_at):
              if ((entry.is_file() and entry.name in with_files) or
                      (entry.is_dir() and entry.name in with_dirs)):
                  num_hits += 1
              if num_hits == exp_hits:
                  return start_at
          cur_level = start_at
          start_at = os.path.split(cur_level)[0]
          if os.path.realpath(cur_level) == os.path.realpath(start_at):
              # looped on root once
              break