generateCodeSnippet method

Future<void> generateCodeSnippet(
  1. String directory, {
  2. String filter(
    1. String value
    )?,
})

Create a code snippet file for VSCode in directory/name.code-snippets.

You can edit the data inside with filter.

directory/name.code-snippetsにVSCode用のコードスニペットファイルを作成します。

filterで中身のデータを編集することができます。

Implementation

Future<void> generateCodeSnippet(
  String directory, {
  String Function(String value)? filter,
}) async {
  if (directory.isNotEmpty) {
    final dir = Directory(directory);
    if (!dir.existsSync()) {
      await dir.create(recursive: true);
    }
  }
  final fileName = name.toSnakeCase();
  final json = {
    name: {
      "prefix": "m${prefix.toPascalCase()}",
      "description": description,
      "body":
          "${import(_baseName, _baseName, _className)}\n${header(_baseName, _baseName, _className)}\n${body(_baseName, _baseName, _className)}\n"
              .replaceAll("\r\n", "\n")
              .replaceAll("\r", "\n")
              .split("\n")
    },
    "${name}_import": {
      "prefix": "i${prefix.toPascalCase()}",
      "description": description,
      "body": "${import(_baseName, _baseName, _className)}\n"
          .replaceAll("\r\n", "\n")
          .replaceAll("\r", "\n")
          .split("\n")
    },
    "${name}_header": {
      "prefix": "h${prefix.toPascalCase()}",
      "description": description,
      "body": "${header(_baseName, _baseName, _className)}\n"
          .replaceAll("\r\n", "\n")
          .replaceAll("\r", "\n")
          .split("\n")
    },
    "${name}_body": {
      "prefix": "b${prefix.toPascalCase()}",
      "description": description,
      "body": "${body(_baseName, _baseName, _className)}\n"
          .replaceAll("\r\n", "\n")
          .replaceAll("\r", "\n")
          .split("\n")
    }
  };
  final output = jsonEncode(json);
  await File(
    "${directory.isNotEmpty ? "$directory/" : ""}$fileName.code-snippets",
  ).writeAsString(filter?.call(output) ?? output);
}