Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 | 2x 2x 2x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 16x 8x 8x 8x 8x 8x 24x 24x 8x 8x 16x 8x | // Externals import { env, window, Uri, workspace, ExtensionContext } from "vscode"; import { join } from "path"; import { promises } from "fs"; import { writeFile as writeJSONFile } from "jsonfile"; // Internals import BaseCommand from "../../base-command"; import { getSingleFolder } from "../../helpers"; const { writeFile } = promises; interface SingleTemplateParams { name: string; template: string | Record<string, any>; templateFileName: string; docsLink: string; isConfig: boolean; keybinding: string; } export default class SingleTemplate extends BaseCommand { static readonly VIEW_TEMPLATE = "View Template"; static readonly VIEW_DOCS = "View Docs"; // Provided instance vars name: string; templateFileName: string; template: string | Record<string, any>; docsLink: string; isConfig: boolean; // Constructed instance vars onSuccess: string; constructor(params: SingleTemplateParams) { const { name, templateFileName, template, docsLink, isConfig, keybinding, } = params; super( `templates.create.${name}${isConfig ? "Config" : ""}`, `Create ${name}${isConfig ? " Configuration" : ""} Template`, keybinding ); this.name = name; this.templateFileName = templateFileName; this.template = template; this.docsLink = docsLink; this.isConfig = isConfig; this.onSuccess = `Created ${name}${ isConfig ? " Configuration" : "" } Template!`; } async handler(context: ExtensionContext, ...args: any[]): Promise<void> { await super.handler(context, ...args); const folderResult = await getSingleFolder(); if (folderResult) { const filePath = await this.writeTemplateFile(folderResult); await this.showSuccessMessage(filePath); } } async writeTemplateFile(folder: Uri): Promise<string> { const filePath = join(folder.fsPath, this.templateFileName); typeof this.template === "string" ? await writeFile(filePath, this.template, "utf-8") : await writeJSONFile(filePath, this.template, { EOL: "\n", spaces: 2, }); return filePath; } async showSuccessMessage(filePath: string): Promise<void> { const selected = await window.showInformationMessage( this.onSuccess, SingleTemplate.VIEW_TEMPLATE, SingleTemplate.VIEW_DOCS ); if (selected === SingleTemplate.VIEW_TEMPLATE) { const doc = await workspace.openTextDocument(filePath); await window.showTextDocument(doc); } else if (selected === SingleTemplate.VIEW_DOCS) await env.openExternal(Uri.parse(this.docsLink)); } } |