function getSupportInfo({ plugins = [], showDeprecated = false } = {}) {
  const languages = plugins.flatMap((plugin) => plugin.languages ?? []);

  const options = [];
  for (const option of normalizeOptionSettings(
    Object.assign({}, ...plugins.map(({ options }) => options), coreOptions),
  )) {
    if (!showDeprecated && option.deprecated) {
      continue;
    }

    if (Array.isArray(option.choices)) {
      if (!showDeprecated) {
        option.choices = option.choices.filter((choice) => !choice.deprecated);
      }

      if (option.name === "parser") {
        option.choices = [
          ...option.choices,
          ...collectParsersFromLanguages(option.choices, languages, plugins),
        ];
      }
    }

    option.pluginDefaults = Object.fromEntries(
      plugins
        .filter((plugin) => plugin.defaultOptions?.[option.name] !== undefined)
        .map((plugin) => [plugin.name, plugin.defaultOptions[option.name]]),
    );

    options.push(option);
  }

  return { languages, options };
}
Strings in `plugins` are handled by a wrapped version
of this function created by `withPlugins`. Don't pass them here directly.
@param {object} param0
@param {(string | object)[]=} param0.plugins Strings are resolved by `withPlugins`.
@param {boolean=} param0.showDeprecated
@return {{ languages: Array<any>, options: Array<NamedOptionInfo> }}