code: def recurse_tree(path, excludes, opts):
      """
      Look for every file in the directory tree and create the corresponding
      ReST files.
      """
      # use absolute path for root, as relative paths like '../../foo' cause
      # 'if "/." in root ...' to filter out *all* modules otherwise
      path = os.path.abspath(path)
      # check if the base directory is a package and get is name
      if INIT in os.listdir(path):
          package_name = path.split(os.path.sep)[-1]
      else:
          package_name = None
  
      toc = []
      tree = os.walk(path, False)
      for root, subs, files in tree:
          # keep only the Python script files
          py_files = sorted(
              [f for f in files if os.path.splitext(f)[1] == ".py"]
          )
          if INIT in py_files:
              py_files.remove(INIT)
              py_files.insert(0, INIT)
          # remove hidden ('.') and private ('_') directories
          subs = sorted(
              [sub for sub in subs if sub[0] not in [".", "_"]]
          )
          # check if there are valid files to process
          # TODO: could add check for windows hidden files
          if (
              "/." in root
              or "/_" in root
              or not py_files
              or is_excluded(root, excludes)
          ):
              continue
          if INIT in py_files and not root == path:
              # we are in package ...
              if (  # ... with subpackage(s)
                  subs
                  or
                  # ... with some module(s)
                  len(py_files) > 1
                  or
                  # ... with a not-to-be-skipped INIT file
                  not shall_skip(os.path.join(root, INIT))
              ):
                  subroot = (
                      root[len(path) :]
                      .lstrip(os.path.sep)
                      .replace(os.path.sep, ".")
                  )
                  create_package_file(
                      root, package_name, subroot, py_files, opts, subs
                  )
                  toc.append(makename(package_name, subroot))
          elif root == path:
              # if we are at the root level, we don't require it to be a package
              for py_file in py_files:
                  if not shall_skip(os.path.join(path, py_file)):
                      module = os.path.splitext(py_file)[0]
                      create_module_file(package_name, module, opts)
                      toc.append(makename(package_name, module))
  
      # create the module's index
      if not opts.notoc:
          create_modules_toc_file(package_name, toc, opts)
  
file_path: holoviews/doc/generate_modules.py
imports: import os
  import optparse
label_desc: Use image node_id 10 for calling a global function with example usage: recurse_tree(path, excludes, opts) without return types