├── .gitignore ├── .prettierrc ├── .vscode ├── extensions.json ├── launch.json ├── settings.json ├── snipsnap.code-snippets └── tasks.json ├── .vscodeignore ├── CHANGELOG.md ├── LICENSE ├── README.md ├── images ├── icon.png ├── screenshot.gif └── screenshot01.gif ├── package-lock.json ├── package.json ├── src ├── extension.ts ├── lib │ ├── JsonContentReader.ts │ └── ReadmeWriter.ts └── test │ ├── extension.test.ts │ └── index.ts ├── templates ├── Bot.md ├── Hackathon.md ├── Minimal.md └── Standard.md ├── tsconfig.json ├── tslint.json └── vsc-extension-quickstart.md /.gitignore: -------------------------------------------------------------------------------- 1 | out 2 | node_modules 3 | .vscode-test/ 4 | *.vsix 5 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "printWidth": 100, 3 | "singleQuote": true 4 | } 5 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See http://go.microsoft.com/fwlink/?LinkId=827846 3 | // for the documentation about the extensions.json format 4 | "recommendations": [ 5 | "ms-vscode.vscode-typescript-tslint-plugin" 6 | ] 7 | } -------------------------------------------------------------------------------- /.vscode/launch.json: -------------------------------------------------------------------------------- 1 | // A launch configuration that compiles the extension and then opens it inside a new window 2 | // Use IntelliSense to learn about possible attributes. 3 | // Hover to view descriptions of existing attributes. 4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 5 | { 6 | "version": "0.2.0", 7 | "configurations": [{ 8 | "name": "Run Extension", 9 | "type": "extensionHost", 10 | "request": "launch", 11 | "runtimeExecutable": "${execPath}", 12 | "args": [ 13 | "--extensionDevelopmentPath=${workspaceFolder}" 14 | ], 15 | "outFiles": [ 16 | "${workspaceFolder}/out/**/*.js" 17 | ], 18 | "preLaunchTask": "npm: watch" 19 | }, 20 | { 21 | "name": "Extension Tests", 22 | "type": "extensionHost", 23 | "request": "launch", 24 | "runtimeExecutable": "${execPath}", 25 | "args": [ 26 | "--extensionDevelopmentPath=${workspaceFolder}", 27 | "--extensionTestsPath=${workspaceFolder}/out/test" 28 | ], 29 | "outFiles": [ 30 | "${workspaceFolder}/out/test/**/*.js" 31 | ], 32 | "preLaunchTask": "npm: watch" 33 | } 34 | ] 35 | } 36 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | // Place your settings in this file to overwrite default and user settings. 2 | { 3 | "files.exclude": { 4 | "out": false // set this to true to hide the "out" folder with the compiled JS files 5 | }, 6 | "search.exclude": { 7 | "out": true // set this to false to include "out" folder in search results 8 | }, 9 | // Turn off tsc task auto detection since we have the necessary tasks as npm scripts 10 | "typescript.tsc.autoDetect": "off" 11 | } -------------------------------------------------------------------------------- /.vscode/snipsnap.code-snippets: -------------------------------------------------------------------------------- 1 | {"var-assignment-411b622":{"prefix":["base var"],"body":["var ${1:name} = ${2:value};"],"description":"var assignment","scope":"javascript,javascriptreact,typescript,typescriptreact"},"let-assignment-5ec2f75":{"prefix":["base let"],"body":["let ${1:name} = ${2:value};"],"description":"let assignment","scope":"javascript,javascriptreact,typescript,typescriptreact"},"destructuring-let-assignment-cb4b3f2":{"prefix":["base let destruct object"],"body":["let {${1:name}} = ${2:value};"],"description":"Object destructing","scope":"javascript,javascriptreact,typescript,typescriptreact"},"destructuring-let-array-d693a16":{"prefix":["base let destruct array"],"body":["let [${1:name}] = ${2:value};"],"description":"Array destructing","scope":"javascript,javascriptreact,typescript,typescriptreact"},"const-assignment-3882230":{"prefix":["base const"],"body":["const ${1:name} = ${2:value};"],"description":"const assignment","scope":"javascript,javascriptreact,typescript,typescriptreact"},"destructuring-const-assignment-3bedb18":{"prefix":["base const destruct object"],"body":["const {${1:name}} = ${2:value};"],"description":"Object destructing","scope":"javascript,javascriptreact,typescript,typescriptreact"},"destructingarray-ff5c0be":{"prefix":["base const destruct array"],"body":["const [${2:propertyName}] = ${1:arrayToDestruct};"],"description":"Array destructing","scope":"javascript,javascriptreact,typescript,typescriptreact"},"if-statement-4f7664a":{"prefix":["base if"],"body":["if (${1:condition}) {\n\t${0}\n}"],"description":"if statement","scope":"javascript,javascriptreact,typescript,typescriptreact"},"else-statement-8019679":{"prefix":["base else"],"body":["else {\n\t${0}\n}"],"description":"else statement","scope":"javascript,javascriptreact,typescript,typescriptreact"},"if-else-statement-0da01e0":{"prefix":["base if else"],"body":["if (${1:condition}) {\n\t${0}\n} else {\n\t\n}"],"description":"if/else statement","scope":"javascript,javascriptreact,typescript,typescriptreact"},"else-if-statement-3bf0944":{"prefix":["base else if"],"body":["else if (${1:condition}) {\n\t${0}\n}"],"description":"else if statement","scope":"javascript,javascriptreact,typescript,typescriptreact"},"ternary-operator-d577c8d":{"prefix":["base ternary operator"],"body":["${1:condition} ? ${2:expression} : ${3:expression};"],"description":"ternary operator","scope":"javascript,javascriptreact,typescript,typescriptreact"},"for-loop-45777a2":{"prefix":["base for"],"body":["for (let ${1:i} = 0, ${2:len} = ${3:iterable}.length; ${1:i} < ${2:len}; ${1:i}++) {\n\t${0}\n}"],"description":"for loop","scope":"javascript,javascriptreact,typescript,typescriptreact"},"reverse-for-loop-5a7dc59":{"prefix":["base for reverse"],"body":["for (let ${1:i} = ${2:iterable}.length - 1; ${1:i} >= 0; ${1:i}--) {\n\t${0}\n}"],"description":"reverse for loop","scope":"javascript,javascriptreact,typescript,typescriptreact"},"for-in-loop-f4b42c5":{"prefix":["base for in"],"body":["for (let ${1:key} in ${2:array}) {\n\tif (${2:array}.hasOwnProperty(${1:key})) {\n\t\t${0}\n\t}\n}"],"description":"for in loop","scope":"javascript,javascriptreact,typescript,typescriptreact"},"for-of-loop-es6--7d51361":{"prefix":["base for of"],"body":["for (let ${1:key} of ${2:array}) {\n\t${0}\n}"],"description":"for of loop (ES6)","scope":"javascript,javascriptreact,typescript,typescriptreact"},"while-loop-a72bb64":{"prefix":["base while"],"body":["while (${1:condition}) {\n\t${0}\n}"],"description":"while loop","scope":"javascript,javascriptreact,typescript,typescriptreact"},"try-catch-2f4efee":{"prefix":["base try catch"],"body":["try {\n\t${0}\n} catch (${1:err}) {\n\t\n}"],"description":"try/catch","scope":"javascript,javascriptreact,typescript,typescriptreact"},"try-finally-9ba26a6":{"prefix":["base try finally"],"body":["try {\n\t${0}\n} finally {\n\t\n}"],"description":"try/finally","scope":"javascript,javascriptreact,typescript,typescriptreact"},"try-catch-finally-f6535e6":{"prefix":["base try catch finally"],"body":["try {\n\t${0}\n} catch (${1:err}) {\n\t\n} finally {\n\t\n}"],"description":"try/catch/finally","scope":"javascript,javascriptreact,typescript,typescriptreact"},"switch-case-5f707c3":{"prefix":["base switch case"],"body":["switch (${1:expr}) {\n\tcase ${2:value}:\n\t\treturn $0;\n\tdefault:\n\t\treturn;\n}"],"description":"switch case","scope":"javascript,javascriptreact,typescript,typescriptreact"},"anonymous-function-8b88a03":{"prefix":["base function anonymous"],"body":["function (${1:arguments}) {\n\t${0}\n}"],"description":"anonymous function","scope":"javascript,javascriptreact,typescript,typescriptreact"},"named-function-d25eaf4":{"prefix":["base function named"],"body":["function ${1:name}(${2:arguments}) {\n\t${0}\n}"],"description":"named function","scope":"javascript,javascriptreact,typescript,typescriptreact"},"immediately-invoked-function-expression-iife--0c9a12f":{"prefix":["base function immediate"],"body":["((${1:arguments}) => {\n\t${0}\n})(${2});"],"description":"immediately-invoked function expression (IIFE)","scope":"javascript,javascriptreact,typescript,typescriptreact"},"function-apply-0e4ee66":{"prefix":["base function apply"],"body":["${1:fn}.apply(${2:this}, ${3:arguments})"],"description":"function apply","scope":"javascript,javascriptreact,typescript,typescriptreact"},"function-call-4c8e482":{"prefix":["base function call"],"body":["${1:fn}.call(${2:this}, ${3:arguments})"],"description":"function call","scope":"javascript,javascriptreact,typescript,typescriptreact"},"function-bind-07ab16e":{"prefix":["base function bind"],"body":["${1:fn}.bind(${2:this}, ${3:arguments})"],"description":"function bind","scope":"javascript,javascriptreact,typescript,typescriptreact"},"arrow-function-es6--82bc5b9":{"prefix":["base function arrow"],"body":["(${1:arguments}) => ${2:statement}"],"description":"arrow function (ES6)","scope":"javascript,javascriptreact,typescript,typescriptreact"},"arrow-function-with-body-es6--1419255":{"prefix":["base function arrow body"],"body":["(${1:arguments}) => {\n\t${0}\n}"],"description":"arrow function with body (ES6)","scope":"javascript,javascriptreact,typescript,typescriptreact"},"generator-function-es6--0663b6b":{"prefix":["base function generator"],"body":["function* (${1:arguments}) {\n\t${0}\n}"],"description":"generator function (ES6)","scope":"javascript,javascriptreact,typescript,typescriptreact"},"named-generator-function-es6--1410553":{"prefix":["base function generator named"],"body":["function* ${1:name}(${2:arguments}) {\n\t${0}\n}"],"description":"named generator function (ES6)","scope":"javascript,javascriptreact,typescript,typescriptreact"},"sequence-of-0-n-4e0409d":{"prefix":["base sequence of"],"body":["[...Array(${1:length}).keys()]${0}"],"description":"sequence of 0..n","scope":"javascript,javascriptreact,typescript,typescriptreact"},"foreach-loop-481be63":{"prefix":["base foreach"],"body":["${1}.forEach((${2:item}) => {\n\t${0}\n});"],"description":"forEach loop","scope":"javascript,javascriptreact,typescript,typescriptreact"},"map-a1ee187":{"prefix":["base map"],"body":["${1}.map((${2:item}) => {\n\t${0}\n});"],"description":"map","scope":"javascript,javascriptreact,typescript,typescriptreact"},"reduce-5c10859":{"prefix":["base reduce"],"body":["${1}.reduce((${2:previous}, ${3:current}) => {\n\t${0}\n}${4:, initial});"],"description":"reduce","scope":"javascript,javascriptreact,typescript,typescriptreact"},"filter-4496b0f":{"prefix":["base filter"],"body":["${1}.filter(${2:item} => {\n\t${0}\n});"],"description":"filter","scope":"javascript,javascriptreact,typescript,typescriptreact"},"find-8795af4":{"prefix":["base find"],"body":["${1}.find(${2:item} => {\n\t${0}\n});"],"description":"find","scope":"javascript,javascriptreact,typescript,typescriptreact"},"class-es6--231af3c":{"prefix":["base class"],"body":["class ${1:name} {\n\tconstructor(${2:arguments}) {\n\t\t${0}\n\t}\n}"],"description":"class (ES6)","scope":"javascript,javascriptreact,typescript,typescriptreact"},"child-class-es6--49cfcee":{"prefix":["base child class"],"body":["class ${1:name} extends ${2:base} {\n\tconstructor(${3:arguments}) {\n\t\tsuper(${3:arguments});\n\t\t${0}\n\t}\n}"],"description":"child class (ES6)","scope":"javascript,javascriptreact,typescript,typescriptreact"},"class-constructor-es6--e84a3e1":{"prefix":["base class constructor"],"body":["constructor(${1:arguments}) {\n\tsuper(${1:arguments});${0}\n}"],"description":"class constructor (ES6)","scope":"javascript,javascriptreact,typescript,typescriptreact"},"method-es6-syntax--2967249":{"prefix":["base method"],"body":["${1:method}(${2:arguments}) {\n\t${0}\n}"],"description":"method (ES6 syntax)","scope":"javascript,javascriptreact,typescript,typescriptreact"},"getter-es6-syntax--90c9824":{"prefix":["base getter"],"body":["get ${1:property}() {\n\t${0}\n}"],"description":"getter (ES6 syntax)","scope":"javascript,javascriptreact,typescript,typescriptreact"},"setter-es6-syntax--447e460":{"prefix":["base setter"],"body":["set ${1:property}(${2:value}) {\n\t${0}\n}"],"description":"setter (ES6 syntax)","scope":"javascript,javascriptreact,typescript,typescriptreact"},"getter-and-setter-es6-syntax--c12be7d":{"prefix":["base getter setter"],"body":["get ${1:property}() {\n\t${0}\n}\nset ${1:property}(${2:value}) {\n\t\n}"],"description":"getter and setter (ES6 syntax)","scope":"javascript,javascriptreact,typescript,typescriptreact"},"prototype-method-dcec465":{"prefix":["base prototype method"],"body":["${1:Class}.prototype.${2:method} = function(${3:arguments}) {\n\t${0}\n};"],"description":"prototype method","scope":"javascript,javascriptreact,typescript,typescriptreact"},"object-assign-10c91f2":{"prefix":["base object assign"],"body":["Object.assign(${1:dest}, ${2:source})"],"description":"Object.assign","scope":"javascript,javascriptreact,typescript,typescriptreact"},"object-assign-copy-shallow-clone--72fede8":{"prefix":["base object assign copy"],"body":["Object.assign({}, ${1:original}, ${2:source})"],"description":"Object.assign copy (shallow clone)","scope":"javascript,javascriptreact,typescript,typescriptreact"},"return-0c23964":{"prefix":["base return"],"body":["return ${0};"],"description":"return","scope":"javascript,javascriptreact,typescript,typescriptreact"},"return-promise-es6--fd35485":{"prefix":["base return promise"],"body":["return new Promise((resolve, reject) => {\n\t${0}\n});"],"description":"return Promise (ES6)","scope":"javascript,javascriptreact,typescript,typescriptreact"},"return-complex-value-such-as-jsx-components--782bfcc":{"prefix":["base return complex value"],"body":["return (\n\t${0}\n);"],"description":"return complex value (such as JSX components)","scope":"javascript,javascriptreact,typescript,typescriptreact"},"typeof-19ce7c6":{"prefix":["base typeof"],"body":["typeof ${1:source} === '${2:undefined}'"],"description":"typeof","scope":"javascript,javascriptreact,typescript,typescriptreact"},"instanceof-8bb3070":{"prefix":["base instanceof"],"body":["${1:source} instanceof ${2:Object}"],"description":"instanceof","scope":"javascript,javascriptreact,typescript,typescriptreact"},"promise-es6--f34bc97":{"prefix":["base promise"],"body":["new Promise((resolve, reject) => {\n\t${0}\n})"],"description":"Promise (ES6)","scope":"javascript,javascriptreact,typescript,typescriptreact"},"promise-then-e996760":{"prefix":["base promise then"],"body":["${1:promise}.then((${2:value}) => {\n\t${0}\n})"],"description":"Promise.then","scope":"javascript,javascriptreact,typescript,typescriptreact"},"promise-catch-f342220":{"prefix":["base promise catch"],"body":["${1:promise}.catch((${2:err}) => {\n\t${0}\n})"],"description":"Promise.catch","scope":"javascript,javascriptreact,typescript,typescriptreact"},"exportnamedvariable-78bb381":{"prefix":["base export named variable"],"body":["export const ${1:exportVariable} = ${2:localVariable};\n"],"description":"Export named variable in ES6 syntax","scope":"javascript,javascriptreact,typescript,typescriptreact"},"exportnamedfunction-181a9c8":{"prefix":["base export named function"],"body":["export const ${1:functionName} = (${2:params}) => {\n\t$0\n};\n"],"description":"Export named function in ES6 syntax","scope":"javascript,javascriptreact,typescript,typescriptreact"},"exportdefaultfunction-30a2855":{"prefix":["base export default function"],"body":["export default function ${1:${TM_FILENAME_BASE}}(${2:params}) {\n\t$0\n};\n"],"description":"Export default function in ES6 syntax","scope":"javascript,javascriptreact,typescript,typescriptreact"},"exportclass-b3bf75f":{"prefix":["base export class"],"body":["export default class ${1:className} {\n\t$0\n};\n"],"description":"Export default class in ES6 syntax","scope":"javascript,javascriptreact,typescript,typescriptreact"},"exportclassextends-97fc7f4":{"prefix":["base export class extends"],"body":["export default class ${1:className} extends ${2:baseclassName} {\n\t$0\n};\n"],"description":"Export default class which extends a base one in ES6 syntax","scope":"javascript,javascriptreact,typescript,typescriptreact"},"import-a1eb24c":{"prefix":["base import"],"body":["import ${2:moduleName} from '${1:module}';$0"],"description":"Imports entire module statement in ES6 syntax","scope":"javascript,javascriptreact,typescript,typescriptreact"},"importnomodulename-ef6ff1d":{"prefix":["base import no module name"],"body":["import '${1:module}';$0"],"description":"Imports entire module in ES6 syntax without module name","scope":"javascript,javascriptreact,typescript,typescriptreact"},"importdestructing-d98cd10":{"prefix":["base import destructing"],"body":["import { $2 } from '${1:module}';$0"],"description":"Imports only a portion of the module in ES6 syntax","scope":"javascript,javascriptreact,typescript,typescriptreact"},"importeverything-254070b":{"prefix":["base import everything"],"body":["import * as ${2:alias} from '${1:module}';$0"],"description":"Imports everything as alias from the module in ES6 syntax","scope":"javascript,javascriptreact,typescript,typescriptreact"},"importas-9e11ffa":{"prefix":["base import as"],"body":["import { ${2:originalName} as ${3:alias} } from '${1:module}';$0"],"description":"Imports a specific portion of the module by assigning a local alias in ES6 syntax","scope":"javascript,javascriptreact,typescript,typescriptreact"},"require-542391c":{"prefix":["base require"],"body":["require('${1:module}');"],"description":"require","scope":"javascript,javascriptreact,typescript,typescriptreact"},"require-local-8efd416":{"prefix":["base require local"],"body":["require('./${1:module}');"],"description":"require local","scope":"javascript,javascriptreact,typescript,typescriptreact"},"require-assignment-b360ddf":{"prefix":["base require assignment"],"body":["const ${1:module} = require('${1:module}');"],"description":"require assignment","scope":"javascript,javascriptreact,typescript,typescriptreact"},"require-assignment-local-1f4f925":{"prefix":["base require assignment local"],"body":["const ${1:module} = require('./${1:module}');"],"description":"require assignment local","scope":"javascript,javascriptreact,typescript,typescriptreact"},"destructuring-require-assignment-3246472":{"prefix":["base require assignment"],"body":["const {${1:module}} = require('${1:module}');"],"description":"destructuring require assignment","scope":"javascript,javascriptreact,typescript,typescriptreact"},"destructuring-require-assignment-local-6e9014c":{"prefix":["base require assignment local destruct"],"body":["const {${1:module}} = require('./${1:module}');"],"description":"destructuring require assignment local","scope":"javascript,javascriptreact,typescript,typescriptreact"},"exports-member-c1002a1":{"prefix":["base exports member"],"body":["exports.${1:member} = ${2:value};"],"description":"exports.member","scope":"javascript,javascriptreact,typescript,typescriptreact"},"module-exports-7a7a786":{"prefix":["base module exports"],"body":["module.exports = ${1:name};"],"description":"module.exports","scope":"javascript,javascriptreact,typescript,typescriptreact"},"module-exports-object-943f52d":{"prefix":["base module exports object"],"body":["module.exports = {\n\t${1:member}\n};"],"description":"module exports object","scope":"javascript,javascriptreact,typescript,typescriptreact"},"event-handler-37f565f":{"prefix":["base event handler"],"body":["${1:emitter}.on('${2:event}', (${3:arguments}) => {\n\t${0}\n});"],"description":"event handler","scope":"javascript,javascriptreact,typescript,typescriptreact"},"consoleassert-a5f4e69":{"prefix":["base console assert"],"body":["console.assert(${1:expression}, ${2:object});"],"description":"If the specified expression is false, the message is written to the console along with a stack trace","scope":"javascript,javascriptreact,typescript,typescriptreact"},"consoleclear-d9e0118":{"prefix":["base console clear"],"body":["console.clear();"],"description":"Clears the console","scope":"javascript,javascriptreact,typescript,typescriptreact"},"consolecount-9c5f7ea":{"prefix":["base console count"],"body":["console.count(${1:label});"],"description":"Writes the the number of times that count() has been invoked at the same line and with the same label","scope":"javascript,javascriptreact,typescript,typescriptreact"},"consoledebug-edf85f8":{"prefix":["base console debug"],"body":["console.debug(${1:object});"],"description":"Displays a message in the console. Also display a blue right arrow icon along with the logged message in Safari","scope":"javascript,javascriptreact,typescript,typescriptreact"},"consoledir-faf0292":{"prefix":["base console dir"],"body":["console.dir(${1:object});"],"description":"Prints a JavaScript representation of the specified object","scope":"javascript,javascriptreact,typescript,typescriptreact"},"consoleerror-1c4c6bc":{"prefix":["base console error"],"body":["console.error(${1:object});"],"description":"Displays a message in the console and also includes a stack trace from where the method was called","scope":"javascript,javascriptreact,typescript,typescriptreact"},"consolegroup-7ad240a":{"prefix":["base console group"],"body":["console.group('${1:label}');"],"description":"Groups and indents all following output by an additional level, until console.groupEnd() is called.","scope":"javascript,javascriptreact,typescript,typescriptreact"},"consolegroupend-fe2f5e4":{"prefix":["base console group end"],"body":["console.groupEnd();"],"description":"Closes out the corresponding console.group().","scope":"javascript,javascriptreact,typescript,typescriptreact"},"consolelog-a7a4472":{"prefix":["base console log"],"body":["console.log(${1:object});"],"description":"Displays a message in the console","scope":"javascript,javascriptreact,typescript,typescriptreact"},"consolelogobject-2197f96":{"prefix":["base console log object"],"body":["console.log('${1:object} :>> ', ${1:object});"],"description":"Displays an object in the console with its name","scope":"javascript,javascriptreact,typescript,typescriptreact"},"consoletrace-33e4543":{"prefix":["base console trace"],"body":["console.trace(${1:object});"],"description":"Prints a stack trace from the point where the method was called","scope":"javascript,javascriptreact,typescript,typescriptreact"},"consolewarn-1ddec9c":{"prefix":["base console warn"],"body":["console.warn(${1:object});"],"description":"Displays a message in the console but also displays a yellow warning icon along with the logged message","scope":"javascript,javascriptreact,typescript,typescriptreact"},"consoleinfo-9aaf424":{"prefix":["base console info"],"body":["console.info(${1:object});"],"description":"Displays a message in the console but also displays a blue information icon along with the logged message","scope":"javascript,javascriptreact,typescript,typescriptreact"},"consoletable-35c244f":{"prefix":["base console table"],"body":["console.table(${1:object});"],"description":"Displays tabular data as a table.","scope":"javascript,javascriptreact,typescript,typescriptreact"},"consoletime-c352d2d":{"prefix":["base console time"],"body":["console.time(${1:object});"],"description":"Sets starting point for execution time measurement","scope":"javascript,javascriptreact,typescript,typescriptreact"},"consoletimeend-edc0765":{"prefix":["base console time end"],"body":["console.timeEnd(${1:object});"],"description":"Sets end point for execution time measurement","scope":"javascript,javascriptreact,typescript,typescriptreact"},"settimeout-1eb369f":{"prefix":["base set timeout"],"body":["setTimeout(() => {\n\t${0}\n}, ${1:delay});"],"description":"setTimeout","scope":"javascript,javascriptreact,typescript,typescriptreact"},"setinterval-25bbd90":{"prefix":["base set interval"],"body":["setInterval(() => {\n\t${0}\n}, ${1:delay});"],"description":"setInterval","scope":"javascript,javascriptreact,typescript,typescriptreact"},"setimmediate-44177fa":{"prefix":["base set immediate"],"body":["setImmediate(() => {\n\t${0}\n});"],"description":"setImmediate","scope":"javascript,javascriptreact,typescript,typescriptreact"},"process-nexttick-9043b4d":{"prefix":["base process next tick"],"body":["process.nextTick(() => {\n\t${0}\n});"],"description":"process nextTick","scope":"javascript,javascriptreact,typescript,typescriptreact"},"insert-use-strict-statement-dbe202c":{"prefix":["base use strict"],"body":["'use strict';"],"description":"insert 'use strict' statement","scope":"javascript,javascriptreact,typescript,typescriptreact"}} -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | // See https://go.microsoft.com/fwlink/?LinkId=733558 2 | // for the documentation about the tasks.json format 3 | { 4 | "version": "2.0.0", 5 | "tasks": [ 6 | { 7 | "type": "npm", 8 | "script": "watch", 9 | "problemMatcher": "$tsc-watch", 10 | "isBackground": true, 11 | "presentation": { 12 | "reveal": "never" 13 | }, 14 | "group": { 15 | "kind": "build", 16 | "isDefault": true 17 | } 18 | } 19 | ] 20 | } 21 | -------------------------------------------------------------------------------- /.vscodeignore: -------------------------------------------------------------------------------- 1 | .vscode/** 2 | .vscode-test/** 3 | out/test/** 4 | src/** 5 | .gitignore 6 | vsc-extension-quickstart.md 7 | **/tsconfig.json 8 | **/tslint.json 9 | **/*.map 10 | **/*.ts -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Change Log 2 | 3 | ## [1.2.0] 4 | 5 | - Feature: Support composer.json (#2) 6 | 7 | ## [1.1.0] 8 | 9 | - Use vscode.workspace.fs instead 10 | 11 | ## [1.0.1] 12 | 13 | - Fix: does nothing on MacOS (#1) 14 | 15 | ## [1.0.0] 16 | 17 | - Initial release 18 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Thomascsd 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Readme Pattern 2 | 3 | > A VSCode extension that generates README.md files 4 | 5 | ![Visual Studio Marketplace Version](https://img.shields.io/visual-studio-marketplace/v/thomascsd.vscode-readme-pattern) 6 | ![Visual Studio Marketplace Downloads](https://img.shields.io/visual-studio-marketplace/d/thomascsd.vscode-readme-pattern) 7 | ![Visual Studio Marketplace Installs](https://img.shields.io/visual-studio-marketplace/i/thomascsd.vscode-readme-pattern) 8 | 9 | ![Screenshot](https://raw.githubusercontent.com/thomascsd/vscode-readme-pattern/master/images/screenshot.gif) 10 | 11 | ![Screenshot](https://raw.githubusercontent.com/thomascsd/vscode-readme-pattern/master/images/screenshot01.gif) 12 | 13 | ## Features 14 | 15 | - Includes 4 readme templates: Bot, Hackathon, Minimal, Standard, based on [The-Documentation-Compendium](https://github.com/kylelobo/The-Documentation-Compendium) 16 | - Creates README.md with context menu 17 | - Supports package.json and composer.json 18 | - Creates project name by reading config 19 | 20 | ## Logo 21 | 22 | Created my free logo at [LogoMakr.com](https://logomakr.com/) 23 | -------------------------------------------------------------------------------- /images/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thomascsd/vscode-readme-pattern/40a5aef8ca987062776b6255f5b53ed5cebbfd33/images/icon.png -------------------------------------------------------------------------------- /images/screenshot.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thomascsd/vscode-readme-pattern/40a5aef8ca987062776b6255f5b53ed5cebbfd33/images/screenshot.gif -------------------------------------------------------------------------------- /images/screenshot01.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thomascsd/vscode-readme-pattern/40a5aef8ca987062776b6255f5b53ed5cebbfd33/images/screenshot01.gif -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vscode-readme-pattern", 3 | "version": "1.3.0", 4 | "lockfileVersion": 1, 5 | "requires": true, 6 | "dependencies": { 7 | "@babel/code-frame": { 8 | "version": "7.10.4", 9 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz", 10 | "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==", 11 | "dev": true, 12 | "requires": { 13 | "@babel/highlight": "^7.10.4" 14 | } 15 | }, 16 | "@babel/helper-validator-identifier": { 17 | "version": "7.10.4", 18 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz", 19 | "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==", 20 | "dev": true 21 | }, 22 | "@babel/highlight": { 23 | "version": "7.10.4", 24 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", 25 | "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", 26 | "dev": true, 27 | "requires": { 28 | "@babel/helper-validator-identifier": "^7.10.4", 29 | "chalk": "^2.0.0", 30 | "js-tokens": "^4.0.0" 31 | } 32 | }, 33 | "@types/mocha": { 34 | "version": "2.2.48", 35 | "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-2.2.48.tgz", 36 | "integrity": "sha512-nlK/iyETgafGli8Zh9zJVCTicvU3iajSkRwOh3Hhiva598CMqNJ4NcVCGMTGKpGpTYj/9R8RLzS9NAykSSCqGw==", 37 | "dev": true 38 | }, 39 | "@types/node": { 40 | "version": "10.14.10", 41 | "resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.10.tgz", 42 | "integrity": "sha512-V8wj+w2YMNvGuhgl/MA5fmTxgjmVHVoasfIaxMMZJV6Y8Kk+Ydpi1z2whoShDCJ2BuNVoqH/h1hrygnBxkrw/Q==", 43 | "dev": true 44 | }, 45 | "@types/vscode": { 46 | "version": "1.37.0", 47 | "resolved": "https://registry.npmjs.org/@types/vscode/-/vscode-1.37.0.tgz", 48 | "integrity": "sha512-PRfeuqYuzk3vjf+puzxltIUWC+AhEGYpFX29/37w30DQSQnpf5AgMVf7GDBAdmTbWTBou+EMFz/Ne6XCM/KxzQ==", 49 | "dev": true 50 | }, 51 | "agent-base": { 52 | "version": "4.3.0", 53 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", 54 | "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", 55 | "dev": true, 56 | "requires": { 57 | "es6-promisify": "^5.0.0" 58 | } 59 | }, 60 | "ansi-styles": { 61 | "version": "3.2.1", 62 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 63 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 64 | "dev": true, 65 | "requires": { 66 | "color-convert": "^1.9.0" 67 | } 68 | }, 69 | "argparse": { 70 | "version": "1.0.10", 71 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", 72 | "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", 73 | "dev": true, 74 | "requires": { 75 | "sprintf-js": "~1.0.2" 76 | } 77 | }, 78 | "balanced-match": { 79 | "version": "1.0.0", 80 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 81 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 82 | "dev": true 83 | }, 84 | "brace-expansion": { 85 | "version": "1.1.11", 86 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 87 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 88 | "dev": true, 89 | "requires": { 90 | "balanced-match": "^1.0.0", 91 | "concat-map": "0.0.1" 92 | } 93 | }, 94 | "builtin-modules": { 95 | "version": "1.1.1", 96 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", 97 | "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", 98 | "dev": true 99 | }, 100 | "chalk": { 101 | "version": "2.4.2", 102 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 103 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 104 | "dev": true, 105 | "requires": { 106 | "ansi-styles": "^3.2.1", 107 | "escape-string-regexp": "^1.0.5", 108 | "supports-color": "^5.3.0" 109 | } 110 | }, 111 | "color-convert": { 112 | "version": "1.9.3", 113 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 114 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 115 | "dev": true, 116 | "requires": { 117 | "color-name": "1.1.3" 118 | } 119 | }, 120 | "color-name": { 121 | "version": "1.1.3", 122 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 123 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 124 | "dev": true 125 | }, 126 | "commander": { 127 | "version": "2.20.3", 128 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 129 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 130 | "dev": true 131 | }, 132 | "concat-map": { 133 | "version": "0.0.1", 134 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 135 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 136 | "dev": true 137 | }, 138 | "debug": { 139 | "version": "3.1.0", 140 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", 141 | "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", 142 | "dev": true, 143 | "requires": { 144 | "ms": "2.0.0" 145 | } 146 | }, 147 | "diff": { 148 | "version": "4.0.2", 149 | "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", 150 | "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", 151 | "dev": true 152 | }, 153 | "es6-promise": { 154 | "version": "4.2.8", 155 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", 156 | "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", 157 | "dev": true 158 | }, 159 | "es6-promisify": { 160 | "version": "5.0.0", 161 | "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", 162 | "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", 163 | "dev": true, 164 | "requires": { 165 | "es6-promise": "^4.0.3" 166 | } 167 | }, 168 | "escape-string-regexp": { 169 | "version": "1.0.5", 170 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 171 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 172 | "dev": true 173 | }, 174 | "esprima": { 175 | "version": "4.0.1", 176 | "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", 177 | "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", 178 | "dev": true 179 | }, 180 | "fs.realpath": { 181 | "version": "1.0.0", 182 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 183 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 184 | "dev": true 185 | }, 186 | "glob": { 187 | "version": "7.1.4", 188 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", 189 | "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", 190 | "dev": true, 191 | "requires": { 192 | "fs.realpath": "^1.0.0", 193 | "inflight": "^1.0.4", 194 | "inherits": "2", 195 | "minimatch": "^3.0.4", 196 | "once": "^1.3.0", 197 | "path-is-absolute": "^1.0.0" 198 | } 199 | }, 200 | "has-flag": { 201 | "version": "3.0.0", 202 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 203 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 204 | "dev": true 205 | }, 206 | "http-proxy-agent": { 207 | "version": "2.1.0", 208 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", 209 | "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", 210 | "dev": true, 211 | "requires": { 212 | "agent-base": "4", 213 | "debug": "3.1.0" 214 | } 215 | }, 216 | "https-proxy-agent": { 217 | "version": "2.2.4", 218 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", 219 | "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", 220 | "dev": true, 221 | "requires": { 222 | "agent-base": "^4.3.0", 223 | "debug": "^3.1.0" 224 | } 225 | }, 226 | "inflight": { 227 | "version": "1.0.6", 228 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 229 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 230 | "dev": true, 231 | "requires": { 232 | "once": "^1.3.0", 233 | "wrappy": "1" 234 | } 235 | }, 236 | "inherits": { 237 | "version": "2.0.4", 238 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 239 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 240 | "dev": true 241 | }, 242 | "js-tokens": { 243 | "version": "4.0.0", 244 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 245 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 246 | "dev": true 247 | }, 248 | "js-yaml": { 249 | "version": "3.14.0", 250 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz", 251 | "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==", 252 | "dev": true, 253 | "requires": { 254 | "argparse": "^1.0.7", 255 | "esprima": "^4.0.0" 256 | } 257 | }, 258 | "minimatch": { 259 | "version": "3.0.4", 260 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 261 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 262 | "dev": true, 263 | "requires": { 264 | "brace-expansion": "^1.1.7" 265 | } 266 | }, 267 | "minimist": { 268 | "version": "1.2.6", 269 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", 270 | "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", 271 | "dev": true 272 | }, 273 | "mkdirp": { 274 | "version": "0.5.5", 275 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", 276 | "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", 277 | "dev": true, 278 | "requires": { 279 | "minimist": "^1.2.5" 280 | } 281 | }, 282 | "ms": { 283 | "version": "2.0.0", 284 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", 285 | "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", 286 | "dev": true 287 | }, 288 | "once": { 289 | "version": "1.4.0", 290 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 291 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 292 | "dev": true, 293 | "requires": { 294 | "wrappy": "1" 295 | } 296 | }, 297 | "path-is-absolute": { 298 | "version": "1.0.1", 299 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 300 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 301 | "dev": true 302 | }, 303 | "path-parse": { 304 | "version": "1.0.7", 305 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 306 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 307 | "dev": true 308 | }, 309 | "resolve": { 310 | "version": "1.17.0", 311 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz", 312 | "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==", 313 | "dev": true, 314 | "requires": { 315 | "path-parse": "^1.0.6" 316 | } 317 | }, 318 | "rimraf": { 319 | "version": "2.7.1", 320 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 321 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 322 | "dev": true, 323 | "requires": { 324 | "glob": "^7.1.3" 325 | } 326 | }, 327 | "semver": { 328 | "version": "5.7.1", 329 | "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", 330 | "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", 331 | "dev": true 332 | }, 333 | "sprintf-js": { 334 | "version": "1.0.3", 335 | "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", 336 | "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", 337 | "dev": true 338 | }, 339 | "supports-color": { 340 | "version": "5.5.0", 341 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 342 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 343 | "dev": true, 344 | "requires": { 345 | "has-flag": "^3.0.0" 346 | } 347 | }, 348 | "tslib": { 349 | "version": "1.13.0", 350 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", 351 | "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", 352 | "dev": true 353 | }, 354 | "tslint": { 355 | "version": "6.1.3", 356 | "resolved": "https://registry.npmjs.org/tslint/-/tslint-6.1.3.tgz", 357 | "integrity": "sha512-IbR4nkT96EQOvKE2PW/djGz8iGNeJ4rF2mBfiYaR/nvUWYKJhLwimoJKgjIFEIDibBtOevj7BqCRL4oHeWWUCg==", 358 | "dev": true, 359 | "requires": { 360 | "@babel/code-frame": "^7.0.0", 361 | "builtin-modules": "^1.1.1", 362 | "chalk": "^2.3.0", 363 | "commander": "^2.12.1", 364 | "diff": "^4.0.1", 365 | "glob": "^7.1.1", 366 | "js-yaml": "^3.13.1", 367 | "minimatch": "^3.0.4", 368 | "mkdirp": "^0.5.3", 369 | "resolve": "^1.3.2", 370 | "semver": "^5.3.0", 371 | "tslib": "^1.13.0", 372 | "tsutils": "^2.29.0" 373 | } 374 | }, 375 | "tsutils": { 376 | "version": "2.29.0", 377 | "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-2.29.0.tgz", 378 | "integrity": "sha512-g5JVHCIJwzfISaXpXE1qvNalca5Jwob6FjI4AoPlqMusJ6ftFE7IkkFoMhVLRgK+4Kx3gkzb8UZK5t5yTTvEmA==", 379 | "dev": true, 380 | "requires": { 381 | "tslib": "^1.8.1" 382 | } 383 | }, 384 | "typescript": { 385 | "version": "3.5.3", 386 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.5.3.tgz", 387 | "integrity": "sha512-ACzBtm/PhXBDId6a6sDJfroT2pOWt/oOnk4/dElG5G33ZL776N3Y6/6bKZJBFpd+b05F3Ct9qDjMeJmRWtE2/g==", 388 | "dev": true 389 | }, 390 | "vscode-test": { 391 | "version": "1.2.0", 392 | "resolved": "https://registry.npmjs.org/vscode-test/-/vscode-test-1.2.0.tgz", 393 | "integrity": "sha512-aowqgc8gZe0eflzVUXsBjBrlsJ8eC35kfgfSEeHu9PKA1vQKm/3rVK43TlbxGue8hKtZBElNAJ5QuYklR/vLJA==", 394 | "dev": true, 395 | "requires": { 396 | "http-proxy-agent": "^2.1.0", 397 | "https-proxy-agent": "^2.2.1", 398 | "rimraf": "^2.6.3" 399 | } 400 | }, 401 | "wrappy": { 402 | "version": "1.0.2", 403 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 404 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 405 | "dev": true 406 | } 407 | } 408 | } 409 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vscode-readme-pattern", 3 | "displayName": "Readme Pattern", 4 | "description": "A VSCode extension that generates README.md files", 5 | "version": "1.3.0", 6 | "publisher": "thomascsd", 7 | "author": "Thomas Chang", 8 | "license": "MIT", 9 | "engines": { 10 | "vscode": "^1.37.0" 11 | }, 12 | "categories": [ 13 | "Other" 14 | ], 15 | "keywords": [ 16 | "readme", 17 | "Markdown" 18 | ], 19 | "repository": { 20 | "type": "git", 21 | "url": "https://github.com/thomascsd/vscode-readme-pattern.git" 22 | }, 23 | "bugs": { 24 | "url": "https://github.com/thomascsd/vscode-readme-pattern.git/issues" 25 | }, 26 | "homepage": "https://github.com/thomascsd/vscode-readme-pattern", 27 | "activationEvents": [ 28 | "onCommand:extension.readme", 29 | "onCommand:extension.readmeOnExplorer" 30 | ], 31 | "main": "./out/extension.js", 32 | "contributes": { 33 | "commands": [ 34 | { 35 | "command": "extension.readme", 36 | "title": "readme: Generates README.md" 37 | }, 38 | { 39 | "command": "extension.readmeOnExplorer", 40 | "title": "Generates README.md on here" 41 | } 42 | ], 43 | "menus": { 44 | "explorer/context": [ 45 | { 46 | "command": "extension.readmeOnExplorer", 47 | "when": "explorerResourceIsFolder" 48 | } 49 | ] 50 | } 51 | }, 52 | "icon": "images/icon.png", 53 | "scripts": { 54 | "vscode:prepublish": "npm run compile", 55 | "compile": "tsc -p ./", 56 | "watch": "tsc -watch -p ./", 57 | "test": "npm run compile && node ./node_modules/vscode/bin/test", 58 | "build": "vsce package", 59 | "deploy": "vsce publish" 60 | }, 61 | "devDependencies": { 62 | "@types/mocha": "^2.2.42", 63 | "@types/node": "^10.12.21", 64 | "@types/vscode": "^1.37.0", 65 | "tslint": "^6.1.3", 66 | "typescript": "^3.5.3", 67 | "vscode-test": "^1.2.0" 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /src/extension.ts: -------------------------------------------------------------------------------- 1 | // The module 'vscode' contains the VS Code extensibility API 2 | // Import the module and reference it with the alias vscode in your code below 3 | import * as vscode from 'vscode'; 4 | import { ReadmeWriter } from './lib/ReadmeWriter'; 5 | 6 | // this method is called when your extension is activated 7 | // your extension is activated the very first time the command is executed 8 | export function activate(context: vscode.ExtensionContext) { 9 | // Use the console to output diagnostic information (console.log) and errors (console.error) 10 | // This line of code will only be executed once when your extension is activated 11 | console.log('Congratulations, your extension "readme-pattern" is now active!'); 12 | 13 | context.subscriptions.push( 14 | vscode.commands.registerCommand('extension.readme', () => insertReadMe(context)) 15 | ); 16 | 17 | context.subscriptions.push( 18 | vscode.commands.registerCommand('extension.readmeOnExplorer', (e) => 19 | insertReadmeOnExplorer(context, e.path) 20 | ) 21 | ); 22 | 23 | function insertReadMe(context: vscode.ExtensionContext) { 24 | const writer = new ReadmeWriter(context); 25 | writer.insertReadme(); 26 | } 27 | 28 | function insertReadmeOnExplorer(context: vscode.ExtensionContext, url: string) { 29 | const writer = new ReadmeWriter(context); 30 | writer.insertReadmeOnExplorer(url); 31 | } 32 | } 33 | 34 | // this method is called when your extension is deactivated 35 | export function deactivate() {} 36 | -------------------------------------------------------------------------------- /src/lib/JsonContentReader.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | import * as path from 'path'; 3 | import { existsSync } from 'fs'; 4 | 5 | export class JsonContentReader { 6 | async getProjectTitle() { 7 | let projectTitle = 'Project Title'; 8 | let content = ''; 9 | const names = ['package.json', 'composer.json']; 10 | 11 | for (let name of names) { 12 | content = await this.getPackageContent(name); 13 | 14 | if (content) { 15 | break; 16 | } 17 | } 18 | 19 | if (content) { 20 | const pkg = JSON.parse(content); 21 | projectTitle = pkg.name; 22 | } 23 | return projectTitle; 24 | } 25 | 26 | async getPackageContent(packageName: string) { 27 | const fs = vscode.workspace.fs; 28 | const folders = vscode.workspace.workspaceFolders; 29 | let content = ''; 30 | 31 | if (folders) { 32 | const url = folders[0].uri; 33 | const pkgUrl = path.join(url.fsPath, packageName); 34 | const hasFile = existsSync(pkgUrl); 35 | 36 | if (hasFile) { 37 | const pkgUri = vscode.Uri.file(pkgUrl); 38 | const packageBuff = await fs.readFile(pkgUri); 39 | content = packageBuff.toString(); 40 | } 41 | } 42 | 43 | return content; 44 | } 45 | 46 | async replaceContent(content: string) { 47 | const projectTitle = await this.getProjectTitle(); 48 | 49 | content = content.replace(/@Project Title@/gi, projectTitle); 50 | 51 | return content; 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /src/lib/ReadmeWriter.ts: -------------------------------------------------------------------------------- 1 | import * as vscode from 'vscode'; 2 | import * as path from 'path'; 3 | import { JsonContentReader } from './JsonContentReader'; 4 | 5 | export class ReadmeWriter { 6 | fs = vscode.workspace.fs; 7 | constructor(private context: vscode.ExtensionContext) {} 8 | 9 | async insertReadme() { 10 | const selectedItem = await this.getQuickPickItem(); 11 | 12 | if (selectedItem) { 13 | await this.createFile(selectedItem); 14 | } 15 | } 16 | 17 | async insertReadmeOnExplorer(url: string) { 18 | const selectedItem = await this.getQuickPickItem(); 19 | 20 | if (selectedItem) { 21 | await this.createFile(selectedItem, url); 22 | } 23 | } 24 | 25 | private async createFile(selectedItem: string, url?: string) { 26 | const tempPath = this.context.asAbsolutePath(path.join('templates', `${selectedItem}.md`)); 27 | const buffer = await this.fs.readFile(vscode.Uri.file(tempPath)); 28 | const reader = new JsonContentReader(); 29 | let content = ''; 30 | const filePath = this.getFilePath(url); 31 | 32 | console.log(`selectedItem:${selectedItem}`); 33 | console.log(`url:${filePath}`); 34 | 35 | if (filePath) { 36 | content = await reader.replaceContent(buffer.toString()); 37 | await this.fs.writeFile(vscode.Uri.file(filePath), Buffer.from(content)); 38 | } 39 | } 40 | 41 | private async getQuickPickItem() { 42 | const items: string[] = ['Bot', 'Hackathon', 'Minimal', 'Standard']; 43 | const selectedItem = await vscode.window.showQuickPick(items, { 44 | placeHolder: 'Select readme pattern that you want', 45 | }); 46 | return selectedItem; 47 | } 48 | 49 | private getFilePath(url?: string) { 50 | const folders = vscode.workspace.workspaceFolders; 51 | const fileName = 'README.md'; 52 | let filePath = ''; 53 | 54 | if (url) { 55 | filePath = path.join(url, fileName); 56 | } else if (folders) { 57 | console.log(`folders:${JSON.stringify(folders)}`); 58 | 59 | const folderUrl = folders[0].uri; 60 | filePath = path.join(folderUrl.fsPath, fileName); 61 | } 62 | 63 | return filePath; 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/test/extension.test.ts: -------------------------------------------------------------------------------- 1 | // 2 | // Note: This example test is leveraging the Mocha test framework. 3 | // Please refer to their documentation on https://mochajs.org/ for help. 4 | // 5 | 6 | // The module 'assert' provides assertion methods from node 7 | import * as assert from 'assert'; 8 | 9 | // You can import and use all API from the 'vscode' module 10 | // as well as import your extension to test it 11 | // import * as vscode from 'vscode'; 12 | // import * as myExtension from '../extension'; 13 | 14 | // Defines a Mocha test suite to group tests of similar kind together 15 | suite("Extension Tests", function () { 16 | 17 | // Defines a Mocha unit test 18 | test("Something 1", function() { 19 | assert.equal(-1, [1, 2, 3].indexOf(5)); 20 | assert.equal(-1, [1, 2, 3].indexOf(0)); 21 | }); 22 | }); -------------------------------------------------------------------------------- /src/test/index.ts: -------------------------------------------------------------------------------- 1 | import * as path from 'path'; 2 | 3 | import { runTests } from 'vscode-test'; 4 | 5 | async function main() { 6 | try { 7 | // The folder containing the Extension Manifest package.json 8 | // Passed to `--extensionDevelopmentPath` 9 | const extensionDevelopmentPath = path.resolve(__dirname, '../../'); 10 | 11 | // The path to the extension test script 12 | // Passed to --extensionTestsPath 13 | const extensionTestsPath = path.resolve(__dirname, './suite/index'); 14 | 15 | // Download VS Code, unzip it and run the integration test 16 | await runTests({ extensionDevelopmentPath, extensionTestsPath }); 17 | } catch (err) { 18 | console.error('Failed to run tests'); 19 | process.exit(1); 20 | } 21 | } 22 | 23 | main(); 24 | -------------------------------------------------------------------------------- /templates/Bot.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | Bot logo 4 |

5 | 6 |

@Project Title@

7 | 8 |
9 | 10 | [![Status](https://img.shields.io/badge/status-active-success.svg)]() 11 | [![Platform](https://img.shields.io/badge/platform-reddit-orange.svg)](https://www.reddit.com/user/Wordbook_Bot) 12 | [![GitHub Issues](https://img.shields.io/github/issues/kylelobo/The-Documentation-Compendium.svg)](https://github.com/kylelobo/The-Documentation-Compendium/issues) 13 | [![GitHub Pull Requests](https://img.shields.io/github/issues-pr/kylelobo/The-Documentation-Compendium.svg)](https://github.com/kylelobo/The-Documentation-Compendium/pulls) 14 | [![License](https://img.shields.io/badge/license-MIT-blue.svg)](/LICENSE) 15 | 16 |
17 | 18 | --- 19 | 20 |

🤖 Few lines describing what your bot does. 21 |
22 |

23 | 24 | ## 📝 Table of Contents 25 | 26 | - [About](#about) 27 | - [Demo / Working](#demo) 28 | - [How it works](#working) 29 | - [Usage](#usage) 30 | - [Getting Started](#getting_started) 31 | - [Deploying your own bot](#deployment) 32 | - [Built Using](#built_using) 33 | - [TODO](../TODO.md) 34 | - [Contributing](../CONTRIBUTING.md) 35 | - [Authors](#authors) 36 | - [Acknowledgments](#acknowledgement) 37 | 38 | ## 🧐 About 39 | 40 | Write about 1-2 paragraphs describing the purpose of your bot. 41 | 42 | ## 🎥 Demo / Working 43 | 44 | ![Working](https://media.giphy.com/media/20NLMBm0BkUOwNljwv/giphy.gif) 45 | 46 | ## 💭 How it works 47 | 48 | The bot first extracts the word from the comment and then fetches word definitions, part of speech, example and source from the Oxford Dictionary API. 49 | 50 | If the word does not exist in the Oxford Dictionary, the Oxford API then returns a 404 response upon which the bot then tries to fetch results form the Urban Dictionary API. 51 | 52 | The bot uses the Pushshift API to fetch comments, PRAW module to reply to comments and Heroku as a server. 53 | 54 | The entire bot is written in Python 3.6 55 | 56 | ## 🎈 Usage 57 | 58 | To use the bot, type: 59 | 60 | ``` 61 | !dict word 62 | ``` 63 | 64 | The first part, i.e. "!dict" **is not** case sensitive. 65 | 66 | The bot will then give you the Oxford Dictionary (or Urban Dictionary; if the word does not exist in the Oxford Dictionary) definition of the word as a comment reply. 67 | 68 | ### Example: 69 | 70 | > !dict what is love 71 | 72 | **Definition:** 73 | 74 | Baby, dont hurt me~ 75 | Dont hurt me~ no more. 76 | 77 | **Example:** 78 | 79 | Dude1: Bruh, what is love? 80 | Dude2: Baby, dont hurt me, dont hurt me- no more! 81 | Dude1: dafuq? 82 | 83 | **Source:** https://www.urbandictionary.com/define.php?term=what%20is%20love 84 | 85 | --- 86 | 87 | Beep boop. I am a bot. If there are any issues, contact my [Master](https://www.reddit.com/message/compose/?to=PositivePlayer1&subject=/u/Wordbook_Bot) 88 | 89 | Want to make a similar reddit bot? Check out: [GitHub](https://github.com/kylelobo/Reddit-Bot) 90 | 91 | ## 🏁 Getting Started 92 | 93 | These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See [deployment](#deployment) for notes on how to deploy the project on a live system. 94 | 95 | ### Prerequisites 96 | 97 | What things you need to install the software and how to install them. 98 | 99 | ``` 100 | Give examples 101 | ``` 102 | 103 | ### Installing 104 | 105 | A step by step series of examples that tell you how to get a development env running. 106 | 107 | Say what the step will be 108 | 109 | ``` 110 | Give the example 111 | ``` 112 | 113 | And repeat 114 | 115 | ``` 116 | until finished 117 | ``` 118 | 119 | End with an example of getting some data out of the system or using it for a little demo. 120 | 121 | ## 🚀 Deploying your own bot 122 | 123 | To see an example project on how to deploy your bot, please see my own configuration: 124 | 125 | - **Heroku**: https://github.com/kylelobo/Reddit-Bot#deploying_the_bot 126 | 127 | ## ⛏️ Built Using 128 | 129 | - [PRAW](https://praw.readthedocs.io/en/latest/) - Python Reddit API Wrapper 130 | - [Heroku](https://www.heroku.com/) - SaaS hosting platform 131 | 132 | ## ✍️ Authors 133 | 134 | - [@kylelobo](https://github.com/kylelobo) - Idea & Initial work 135 | 136 | See also the list of [contributors](https://github.com/kylelobo/The-Documentation-Compendium/contributors) who participated in this project. 137 | 138 | ## 🎉 Acknowledgements 139 | 140 | - Hat tip to anyone whose code was used 141 | - Inspiration 142 | - References 143 | -------------------------------------------------------------------------------- /templates/Hackathon.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | Project logo 4 |

5 |

@Project Title@

6 | 7 |
8 | 9 | [![Hackathon](https://img.shields.io/badge/hackathon-name-orange.svg)](http://hackathon.url.com) 10 | [![Status](https://img.shields.io/badge/status-active-success.svg)]() 11 | [![GitHub Issues](https://img.shields.io/github/issues/kylelobo/The-Documentation-Compendium.svg)](https://github.com/kylelobo/The-Documentation-Compendium/issues) 12 | [![GitHub Pull Requests](https://img.shields.io/github/issues-pr/kylelobo/The-Documentation-Compendium.svg)](https://github.com/kylelobo/The-Documentation-Compendium/pulls) 13 | [![License](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE.md) 14 | 15 |
16 | 17 | --- 18 | 19 |

Few lines describing your project. 20 |
21 |

22 | 23 | ## 📝 Table of Contents 24 | 25 | - [Problem Statement](#problem_statement) 26 | - [Idea / Solution](#idea) 27 | - [Dependencies / Limitations](#limitations) 28 | - [Future Scope](#future_scope) 29 | - [Setting up a local environment](#getting_started) 30 | - [Usage](#usage) 31 | - [Technology Stack](#tech_stack) 32 | - [Contributing](../CONTRIBUTING.md) 33 | - [Authors](#authors) 34 | - [Acknowledgments](#acknowledgments) 35 | 36 | ## 🧐 Problem Statement 37 | 38 | It is useful to design and follow a specific format when writing a problem statement. While there are several options 39 | for doing this, the following is a simple and straightforward template often used in Business Analysis to maintain 40 | focus on defining the problem. 41 | 42 | - IDEAL: This section is used to describe the desired or “to be” state of the process or product. At large, this section 43 | should illustrate what the expected environment would look like once the solution is implemented. 44 | - REALITY: This section is used to describe the current or “as is” state of the process or product. 45 | - CONSEQUENCES: This section is used to describe the impacts on the business if the problem is not fixed or improved upon. 46 | This includes costs associated with loss of money, time, productivity, competitive advantage, and so forth. 47 | 48 | Following this format will result in a workable document that can be used to understand the problem and elicit 49 | requirements that will lead to a winning solution. 50 | 51 | ## 💡 Idea / Solution 52 | 53 | This section is used to describe potential solutions. 54 | 55 | Once the ideal, reality, and consequences sections have been 56 | completed, and understood, it becomes easier to provide a solution for solving the problem. 57 | 58 | ## ⛓️ Dependencies / Limitations 59 | 60 | - What are the dependencies of your project? 61 | - Describe each limitation in detailed but concise terms 62 | - Explain why each limitation exists 63 | - Provide the reasons why each limitation could not be overcome using the method(s) chosen to acquire. 64 | - Assess the impact of each limitation in relation to the overall findings and conclusions of your project, and if 65 | appropriate, describe how these limitations could point to the need for further research. 66 | 67 | ## 🚀 Future Scope 68 | 69 | Write about what you could not develop during the course of the Hackathon; and about what your project can achieve 70 | in the future. 71 | 72 | ## 🏁 Getting Started 73 | 74 | These instructions will get you a copy of the project up and running on your local machine for development 75 | and testing purposes. See [deployment](#deployment) for notes on how to deploy the project on a live system. 76 | 77 | ### Prerequisites 78 | 79 | What things you need to install the software and how to install them. 80 | 81 | ``` 82 | Give examples 83 | ``` 84 | 85 | ### Installing 86 | 87 | A step by step series of examples that tell you how to get a development env running. 88 | 89 | Say what the step will be 90 | 91 | ``` 92 | Give the example 93 | ``` 94 | 95 | And repeat 96 | 97 | ``` 98 | until finished 99 | ``` 100 | 101 | ## 🎈 Usage 102 | 103 | Add notes about how to use the system. 104 | 105 | ## ⛏️ Built With 106 | 107 | - [MongoDB](https://www.mongodb.com/) - Database 108 | - [Express](https://expressjs.com/) - Server Framework 109 | - [VueJs](https://vuejs.org/) - Web Framework 110 | - [NodeJs](https://nodejs.org/en/) - Server Environment 111 | 112 | ## ✍️ Authors 113 | 114 | - [@kylelobo](https://github.com/kylelobo) - Idea & Initial work 115 | 116 | See also the list of [contributors](https://github.com/kylelobo/The-Documentation-Compendium/contributors) 117 | who participated in this project. 118 | 119 | ## 🎉 Acknowledgments 120 | 121 | - Hat tip to anyone whose code was used 122 | - Inspiration 123 | - References 124 | -------------------------------------------------------------------------------- /templates/Minimal.md: -------------------------------------------------------------------------------- 1 | # @Project Title@ 2 | 3 | ## Table of Contents 4 | 5 | - [About](#about) 6 | - [Getting Started](#getting_started) 7 | - [Usage](#usage) 8 | - [Contributing](../CONTRIBUTING.md) 9 | 10 | ## About 11 | 12 | Write about 1-2 paragraphs describing the purpose of your project. 13 | 14 | ## Getting Started 15 | 16 | These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See [deployment](#deployment) for notes on how to deploy the project on a live system. 17 | 18 | ### Prerequisites 19 | 20 | What things you need to install the software and how to install them. 21 | 22 | ``` 23 | Give examples 24 | ``` 25 | 26 | ### Installing 27 | 28 | A step by step series of examples that tell you how to get a development env running. 29 | 30 | Say what the step will be 31 | 32 | ``` 33 | Give the example 34 | ``` 35 | 36 | And repeat 37 | 38 | ``` 39 | until finished 40 | ``` 41 | 42 | End with an example of getting some data out of the system or using it for a little demo. 43 | 44 | ## Usage 45 | 46 | Add notes about how to use the system. 47 | -------------------------------------------------------------------------------- /templates/Standard.md: -------------------------------------------------------------------------------- 1 |

2 | 3 | Project logo 4 |

5 | 6 |

@Project Title@

7 | 8 |
9 | 10 | [![Status](https://img.shields.io/badge/status-active-success.svg)]() 11 | [![GitHub Issues](https://img.shields.io/github/issues/kylelobo/The-Documentation-Compendium.svg)](https://github.com/kylelobo/The-Documentation-Compendium/issues) 12 | [![GitHub Pull Requests](https://img.shields.io/github/issues-pr/kylelobo/The-Documentation-Compendium.svg)](https://github.com/kylelobo/The-Documentation-Compendium/pulls) 13 | [![License](https://img.shields.io/badge/license-MIT-blue.svg)](/LICENSE) 14 | 15 |
16 | 17 | --- 18 | 19 |

Few lines describing your project. 20 |
21 |

22 | 23 | ## 📝 Table of Contents 24 | 25 | - [About](#about) 26 | - [Getting Started](#getting_started) 27 | - [Deployment](#deployment) 28 | - [Usage](#usage) 29 | - [Built Using](#built_using) 30 | - [TODO](../TODO.md) 31 | - [Contributing](../CONTRIBUTING.md) 32 | - [Authors](#authors) 33 | - [Acknowledgments](#acknowledgement) 34 | 35 | ## 🧐 About 36 | 37 | Write about 1-2 paragraphs describing the purpose of your project. 38 | 39 | ## 🏁 Getting Started 40 | 41 | These instructions will get you a copy of the project up and running on your local machine for development and testing purposes. See [deployment](#deployment) for notes on how to deploy the project on a live system. 42 | 43 | ### Prerequisites 44 | 45 | What things you need to install the software and how to install them. 46 | 47 | ``` 48 | Give examples 49 | ``` 50 | 51 | ### Installing 52 | 53 | A step by step series of examples that tell you how to get a development env running. 54 | 55 | Say what the step will be 56 | 57 | ``` 58 | Give the example 59 | ``` 60 | 61 | And repeat 62 | 63 | ``` 64 | until finished 65 | ``` 66 | 67 | End with an example of getting some data out of the system or using it for a little demo. 68 | 69 | ## 🔧 Running the tests 70 | 71 | Explain how to run the automated tests for this system. 72 | 73 | ### Break down into end to end tests 74 | 75 | Explain what these tests test and why 76 | 77 | ``` 78 | Give an example 79 | ``` 80 | 81 | ### And coding style tests 82 | 83 | Explain what these tests test and why 84 | 85 | ``` 86 | Give an example 87 | ``` 88 | 89 | ## 🎈 Usage 90 | 91 | Add notes about how to use the system. 92 | 93 | ## 🚀 Deployment 94 | 95 | Add additional notes about how to deploy this on a live system. 96 | 97 | ## ⛏️ Built Using 98 | 99 | - [MongoDB](https://www.mongodb.com/) - Database 100 | - [Express](https://expressjs.com/) - Server Framework 101 | - [VueJs](https://vuejs.org/) - Web Framework 102 | - [NodeJs](https://nodejs.org/en/) - Server Environment 103 | 104 | ## ✍️ Authors 105 | 106 | - [@kylelobo](https://github.com/kylelobo) - Idea & Initial work 107 | 108 | See also the list of [contributors](https://github.com/kylelobo/The-Documentation-Compendium/contributors) who participated in this project. 109 | 110 | ## 🎉 Acknowledgements 111 | 112 | - Hat tip to anyone whose code was used 113 | - Inspiration 114 | - References 115 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "module": "commonjs", 4 | "target": "es6", 5 | "outDir": "out", 6 | "lib": [ 7 | "es6" 8 | ], 9 | "sourceMap": true, 10 | "rootDir": "src", 11 | "strict": true /* enable all strict type-checking options */ 12 | /* Additional Checks */ 13 | // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ 14 | // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ 15 | // "noUnusedParameters": true, /* Report errors on unused parameters. */ 16 | }, 17 | "exclude": [ 18 | "node_modules", 19 | ".vscode-test" 20 | ] 21 | } 22 | -------------------------------------------------------------------------------- /tslint.json: -------------------------------------------------------------------------------- 1 | { 2 | "rules": { 3 | "no-string-throw": true, 4 | "no-unused-expression": true, 5 | "no-duplicate-variable": true, 6 | "curly": true, 7 | "class-name": true, 8 | "semicolon": [ 9 | true, 10 | "always" 11 | ], 12 | "triple-equals": true 13 | }, 14 | "defaultSeverity": "warning" 15 | } 16 | -------------------------------------------------------------------------------- /vsc-extension-quickstart.md: -------------------------------------------------------------------------------- 1 | # Welcome to your VS Code Extension 2 | 3 | ## What's in the folder 4 | 5 | * This folder contains all of the files necessary for your extension. 6 | * `package.json` - this is the manifest file in which you declare your extension and command. 7 | * The sample plugin registers a command and defines its title and command name. With this information VS Code can show the command in the command palette. It doesn’t yet need to load the plugin. 8 | * `src/extension.ts` - this is the main file where you will provide the implementation of your command. 9 | * The file exports one function, `activate`, which is called the very first time your extension is activated (in this case by executing the command). Inside the `activate` function we call `registerCommand`. 10 | * We pass the function containing the implementation of the command as the second parameter to `registerCommand`. 11 | 12 | ## Get up and running straight away 13 | 14 | * Press `F5` to open a new window with your extension loaded. 15 | * Run your command from the command palette by pressing (`Ctrl+Shift+P` or `Cmd+Shift+P` on Mac) and typing `Hello World`. 16 | * Set breakpoints in your code inside `src/extension.ts` to debug your extension. 17 | * Find output from your extension in the debug console. 18 | 19 | ## Make changes 20 | 21 | * You can relaunch the extension from the debug toolbar after changing code in `src/extension.ts`. 22 | * You can also reload (`Ctrl+R` or `Cmd+R` on Mac) the VS Code window with your extension to load your changes. 23 | 24 | ## Explore the API 25 | 26 | * You can open the full set of our API when you open the file `node_modules/vscode/vscode.d.ts`. 27 | 28 | ## Run tests 29 | 30 | * Open the debug viewlet (`Ctrl+Shift+D` or `Cmd+Shift+D` on Mac) and from the launch configuration dropdown pick `Extension Tests`. 31 | * Press `F5` to run the tests in a new window with your extension loaded. 32 | * See the output of the test result in the debug console. 33 | * Make changes to `test/extension.test.ts` or create new test files inside the `test` folder. 34 | * By convention, the test runner will only consider files matching the name pattern `**.test.ts`. 35 | * You can create folders inside the `test` folder to structure your tests any way you want. 36 | 37 | ## Go further 38 | 39 | * Reduce the extension size and improve the startup time by [bundling your extension](https://code.visualstudio.com/api/working-with-extensions/testing-extension). 40 | * [Publish your extension](https://code.visualstudio.com/api/working-with-extensions/publishing-extension) on the VSCode extension marketplace. 41 | * Automate builds by setting up [Continuous Integration](https://code.visualstudio.com/api/working-with-extensions/continuous-integration). 42 | --------------------------------------------------------------------------------