code: def _iter_plugin_metadata_files(root_dir=None):
      if root_dir is None:
          root_dir = fo.config.plugins_dir
  
      if not root_dir or not os.path.isdir(root_dir):
          return
  
      for root, dirs, files in os.walk(root_dir, followlinks=True):
          # Ignore hidden directories
          dirs[:] = [d for d in dirs if not d.startswith(".")]
          for file in files:
              if _is_plugin_metadata_file(file):
                  yield os.path.join(root, file)
                  dirs[
                      :
                  ] = []  # stop traversing `root` once we find a plugin
                  break
  
imports: from collections import Counter
  from dataclasses import dataclass
  import json
  import logging
  import os
  from packaging.requirements import Requirement
  import re
  import shutil
  import yaml
  import eta.core.utils
  import eta.core.web
  import fiftyone
  import fiftyone.constants
  from fiftyone.core.config import locate_app_config
  import fiftyone.core.utils
  from fiftyone.plugins.definitions import PluginDefinition
  from fiftyone.utils.github import GitHubRepository
label_desc: Use image node_id 23 for calling a global function with example usage: _iter_plugin_metadata_files(root_dir) without return types