generateCodeSnippet method
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);
}