{ // Place your aspm workspace snippets here. Each snippet is defined under a snippet name and has a scope, prefix, body and // description. Add comma separated ids of the languages where the snippet is applicable in the scope field. If scope // is left empty or omitted, the snippet gets applied to all languages. The prefix is what is // used to trigger the snippet and the body will be expanded and inserted. Possible variables are: // $1, $2 for tab stops, $0 for the final cursor position, and ${1:label}, ${2:another} for placeholders. // Placeholders with the same ids are connected. // Example: // "Print to console": { // "scope": "javascript,typescript", // "prefix": "log", // "body": [ // "console.log('$1');", // "$2" // ], // "description": "Log output to console" // } "Create aspm subcommand": { "scope": "rust", "prefix": "subcommand", "body": [ "use clap::Parser;", "", "use crate::commands::AspmSubcommand;", "", "/// $2", "#[derive(Parser, Debug)]", "pub struct $1Command { }", "", "#[async_trait::async_trait]", "impl AspmSubcommand for $1Command {", "\tasync fn execute(&self, state: crate::AspmState) -> Result<(), anyhow::Error> {", "\t\t", "\t\t", "\t\tOk(())", "\t}", "}", ], "description": "Create a template for an aspm subcommand" } }