commit bb9633fb9bc8f4fced333b444cddb045402d50ba Author: Ade Attwood Date: Sun Sep 2 18:29:15 2018 +0100 Initial commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..10686ce --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +node_modules +.vscode-test/ +*.vsix diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 0000000..8314737 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,28 @@ +// A launch configuration that launches the extension inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Extension", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}" + ] + }, + { + "name": "Extension Tests", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}", + "--extensionTestsPath=${workspaceFolder}/test" + ] + } + ] +} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..20af2f6 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +// Place your settings in this file to overwrite default and user settings. +{ +} \ No newline at end of file diff --git a/.vscodeignore b/.vscodeignore new file mode 100644 index 0000000..499648c --- /dev/null +++ b/.vscodeignore @@ -0,0 +1,7 @@ +.vscode/** +.vscode-test/** +test/** +.gitignore +jsconfig.json +vsc-extension-quickstart.md +.eslintrc.json diff --git a/README.md b/README.md new file mode 100644 index 0000000..ff0bc0e --- /dev/null +++ b/README.md @@ -0,0 +1,65 @@ +# code-gen-vscode README + +This is the README for your extension "code-gen-vscode". After writing up a brief description, we recommend including the following sections. + +## Features + +Describe specific features of your extension including screenshots of your extension in action. Image paths are relative to this README file. + +For example if there is an image subfolder under your extension project workspace: + +\!\[feature X\]\(images/feature-x.png\) + +> Tip: Many popular extensions utilize animations. This is an excellent way to show off your extension! We recommend short, focused animations that are easy to follow. + +## Requirements + +If you have any requirements or dependencies, add a section describing those and how to install and configure them. + +## Extension Settings + +Include if your extension adds any VS Code settings through the `contributes.configuration` extension point. + +For example: + +This extension contributes the following settings: + +* `myExtension.enable`: enable/disable this extension +* `myExtension.thing`: set to `blah` to do something + +## Known Issues + +Calling out known issues can help limit users opening duplicate issues against your extension. + +## Release Notes + +Users appreciate release notes as you update your extension. + +### 1.0.0 + +Initial release of ... + +### 1.0.1 + +Fixed issue #. + +### 1.1.0 + +Added features X, Y, and Z. + +----------------------------------------------------------------------------------------------------------- + +## Working with Markdown + +**Note:** You can author your README using Visual Studio Code. Here are some useful editor keyboard shortcuts: + +* Split the editor (`Cmd+\` on macOS or `Ctrl+\` on Windows and Linux) +* Toggle preview (`Shift+CMD+V` on macOS or `Shift+Ctrl+V` on Windows and Linux) +* Press `Ctrl+Space` (Windows, Linux) or `Cmd+Space` (macOS) to see a list of Markdown snippets + +### For more information + +* [Visual Studio Code's Markdown Support](http://code.visualstudio.com/docs/languages/markdown) +* [Markdown Syntax Reference](https://help.github.com/articles/markdown-basics/) + +**Enjoy!** diff --git a/extension.js b/extension.js new file mode 100644 index 0000000..7682d40 --- /dev/null +++ b/extension.js @@ -0,0 +1,106 @@ +const vscode = require('vscode'); +const CodeGenCLI = require('code-gen/src/cli'); + +const extension = { + + actions: {}, + + hasActions: false, + + init() { + process.chdir(vscode.workspace.rootPath); + for (let command of CodeGenCLI.commands) { + if (typeof command.vsCodeCallback === 'function') { + this.hasActions = true; + this.actions[command.name()] = command; + } + } + }, + + prosesOptions(options, i, args, cb) { + if(options.length === i) { + cb(args); + return; + } + + let option = options[i]; + let next = (value) => { + args[option.name] = value; + this.prosesOptions(options, (i + 1), args, cb); + }; + + switch(option.type) { + case 'input': + vscode.window + .showInputBox(option.options || {}) + .then(next); + break; + case 'dropdown': + vscode.window + .showQuickPick(option.items, option.options || {}) + .then(next); + break; + } + }, + + generate(item) { + let command = extension.actions[item]; + let callback = () => {}; + let args = { + workspaceRoot: vscode.workspace.rootPath + }; + + if (typeof command.vsCodeCallback === 'function') { + callback = (args) => { + Object.assign(command, args); + let message = command.vsCodeCallback.apply(command, args); + switch(message.type) { + case 'info': + vscode.window.showInformationMessage( + message.message, + message.options || {} + ); + break; + case 'error': + vscode.window.showErrorMessage( + message.message, + message.options || {} + ); + break; + } + } + } + + if (typeof command.vsCodeOptions === 'object') { + extension.prosesOptions( + command.vsCodeOptions, + 0, + args, + callback + ); + } else { + callback(args); + } + } + +}; + +exports.activate = (context) => { + extension.init(); + + let disposable = vscode.commands.registerCommand('code-gen.generate', function () { + if (extension.hasActions === false) { + return; + } + + vscode.window + .showQuickPick(Object.keys(extension.actions)) + .then(extension.generate); + }); + + context.subscriptions.push(disposable); +} + +exports.deactivate = () => { + console.log('CodeGen Deactivated'); +}; \ No newline at end of file diff --git a/package.json b/package.json new file mode 100644 index 0000000..de8bcf7 --- /dev/null +++ b/package.json @@ -0,0 +1,35 @@ +{ + "name": "code-gen-vscode", + "displayName": "code-gen-vscode", + "description": "CodeGen vscode extension for extending the code gen cli tool", + "version": "0.0.1", + "publisher": "Ade Attwood", + "engines": { + "vscode": "^1.26.0" + }, + "categories": [ + "Other" + ], + "activationEvents": [ + "onCommand:code-gen.generate" + ], + "main": "./extension", + "contributes": { + "commands": [{ + "command": "code-gen.generate", + "title": "Generate", + "category": "Code Gen" + }] + }, + "scripts": { + "postinstall": "node ./node_modules/vscode/bin/install", + "test": "node ./node_modules/vscode/bin/test" + }, + "devDependencies": { + "typescript": "^2.6.1", + "vscode": "^1.1.21", + "eslint": "^4.11.0", + "@types/node": "^8.10.25", + "@types/mocha": "^2.2.42" + } +} \ No newline at end of file diff --git a/test/extension.test.js b/test/extension.test.js new file mode 100644 index 0000000..f9e915b --- /dev/null +++ b/test/extension.test.js @@ -0,0 +1,24 @@ +/* global suite, test */ + +// +// Note: This example test is leveraging the Mocha test framework. +// Please refer to their documentation on https://mochajs.org/ for help. +// + +// The module 'assert' provides assertion methods from node +const assert = require('assert'); + +// You can import and use all API from the 'vscode' module +// as well as import your extension to test it +// const vscode = require('vscode'); +// const myExtension = require('../extension'); + +// Defines a Mocha test suite to group tests of similar kind together +suite("Extension Tests", function() { + + // Defines a Mocha unit test + test("Something 1", function() { + assert.equal(-1, [1, 2, 3].indexOf(5)); + assert.equal(-1, [1, 2, 3].indexOf(0)); + }); +}); \ No newline at end of file diff --git a/test/index.js b/test/index.js new file mode 100644 index 0000000..a0c8b63 --- /dev/null +++ b/test/index.js @@ -0,0 +1,22 @@ +// +// PLEASE DO NOT MODIFY / DELETE UNLESS YOU KNOW WHAT YOU ARE DOING +// +// This file is providing the test runner to use when running extension tests. +// By default the test runner in use is Mocha based. +// +// You can provide your own test runner if you want to override it by exporting +// a function run(testRoot: string, clb: (error:Error) => void) that the extension +// host can call to run the tests. The test runner is expected to use console.log +// to report the results back to the caller. When the tests are finished, return +// a possible error to the callback or null if none. + +const testRunner = require('vscode/lib/testrunner'); + +// You can directly control Mocha options by uncommenting the following lines +// See https://github.com/mochajs/mocha/wiki/Using-mocha-programmatically#set-options for more info +testRunner.configure({ + ui: 'tdd', // the TDD UI is being used in extension.test.js (suite, test, etc.) + useColors: true // colored output from test results +}); + +module.exports = testRunner; \ No newline at end of file