def list_plugins(enabled=True, builtin=False, shadowed=False):
    """Lists available plugins.

    Args:
        enabled (True): whether to include only enabled plugins (True) or only
            disabled plugins (False) or all plugins ("all")
        builtin (False): whether to include only builtin plugins (True) or only
            non-builtin plugins (False) or all plugins ("all")
        shadowed (False): whether to include only "shadowed" duplicate plugins
            (True) or only usable plugins (False) or all plugins ("all")

    Returns:
        a list of :class:`PluginDefinition` instances
    """
    if enabled == "all":
        enabled = None

    if builtin == "all":
        builtin = None

    if shadowed == "all":
        shadowed = None

    plugins = []
    for p in _list_plugins(
        enabled=enabled, builtin=builtin, shadowed=shadowed
    ):
        try:
            plugins.append(_load_plugin_definition(plugin=p))
        except:
            logger.info(f"Failed to parse plugin at '{p.path}'")

    return plugins
Lists available plugins.

    Args:
        enabled (True): whether to include only enabled plugins (True) or only
            disabled plugins (False) or all plugins ("all")
        builtin (False): whether to include only builtin plugins (True) or only
            non-builtin plugins (False) or all plugins ("all")
        shadowed (False): whether to include only "shadowed" duplicate plugins
            (True) or only usable plugins (False) or all plugins ("all")

    Returns:
        a list of :class:`PluginDefinition` instances
    
fiftyone/plugins/core.py