settingsSpecGenerator function

Future<FigSubcommand> settingsSpecGenerator(
  1. List<String> tokens,
  2. ExecuteCommandFunction? executeShellCommand, [
  3. FigGeneratorContext? context
])

Implementation

Future<FigSubcommand> settingsSpecGenerator(
    List<String> tokens, ExecuteCommandFunction? executeShellCommand,
    [FigGeneratorContext? context]) async {
  if (executeShellCommand == null) {
    return FigSubcommand(name: "settings");
  }

  final out = await executeShellCommand(ExecuteCommandInput(
    command: "fig",
    args: ["_", "request", "--method", "GET", "--route", "/settings/all"],
  ));

  final json = jsonDecode(out.stdout);
  final settings =
      (json['settings'] as List).map((e) => Setting.fromJson(e)).toList();
  final actions =
      (json['actions'] as List).map((e) => Action.fromJson(e)).toList();

  final actionSuggestions = actions
      .map((action) => FigSuggestion(
            name: action.identifier.startsWith("autocomplete.")
                ? action.identifier.substring(13)
                : action.identifier,
            description: action.description,
            icon: "⚡️",
          ))
      .toList();

  return FigSubcommand(
    name: "settings",
    subcommands: settings.map((setting) {
      final suggestions = setting.type == "boolean"
          ? ["true", "false"].map((e) => FigSuggestion(name: e)).toList()
          : setting.settingName.startsWith("autocomplete.keybindings.")
              ? actionSuggestions
              : setting.options?.map((option) {
                  if (option is Map) {
                    return FigSuggestion(
                      name: option["name"],
                      description: option["description"] ?? "",
                    );
                  }
                  return FigSuggestion(name: option.toString());
                }).toList();

      final generators = settingsGeneratorsMap[setting.settingName];

      return FigSubcommand(
        name: setting.settingName,
        description: setting.description,
        icon: "fig://icon?type=commandkey",
        args: [
          FigArg(
            name: setting.type,
            defaultValue: setting.defaultValue,
            suggestions: generators != null ? [] : suggestions,
            generators: generators != null ? [generators] : null,
          )
        ],
      );
    }).toList(),
  );
}