diff options
author | Alexander Kiryukhin <a.kiryukhin@mail.ru> | 2021-03-22 02:27:33 +0300 |
---|---|---|
committer | Alexander Kiryukhin <a.kiryukhin@mail.ru> | 2021-03-22 02:27:33 +0300 |
commit | ff66c26ad4cf74524daa7696a1ec2bcd0bde7d9b (patch) | |
tree | 6fd8ebedd25b15389e999b6619bc1f5cc86f68de /src | |
parent | 7707ba49f6471478f95a3bd40d9992b051321c7a (diff) |
v0.0.2
Diffstat (limited to 'src')
-rw-r--r-- | src/extension.ts | 51 | ||||
-rw-r--r-- | src/test/runTest.ts | 23 | ||||
-rw-r--r-- | src/test/suite/extension.test.ts | 15 | ||||
-rw-r--r-- | src/test/suite/index.ts | 38 |
4 files changed, 127 insertions, 0 deletions
diff --git a/src/extension.ts b/src/extension.ts new file mode 100644 index 0000000..3a1de6b --- /dev/null +++ b/src/extension.ts @@ -0,0 +1,51 @@ +// The module 'vscode' contains the VS Code extensibility API +// Import the module and reference it with the alias vscode in your code below +import * as vscode from 'vscode'; + +// this method is called when your extension is activated +// your extension is activated the very first time the command is executed +export function activate(context: vscode.ExtensionContext) { + context.subscriptions.push(vscode.languages.registerCodeActionsProvider('go', new ErrorsWrapper(), { + providedCodeActionKinds: ErrorsWrapper.providedCodeActionKinds + })); + context.subscriptions.push( + vscode.commands.registerCommand('gotools.wrap-error', () => { + const editor = vscode.window.activeTextEditor; + + if (editor) { + const document = editor.document; + const selection = editor.selection; + const line = document.lineAt(editor.selection.start.line) + const idx = line.firstNonWhitespaceCharacterIndex + const word = document.getText(selection); + const space = "\t".repeat(idx) + let errPrefix = "" + if (word.indexOf("=") == -1) { + errPrefix = "err :=" + } + editor.edit(editBuilder => { + editBuilder.replace(selection, `if ${errPrefix}${word}; err != nil {\n${space}\rreturn err\n${space}}`); + }); + } + }) + ); + +} + +// this method is called when your extension is deactivated +export function deactivate() { } + +export class ErrorsWrapper implements vscode.CodeActionProvider { + + public static readonly providedCodeActionKinds = [ + vscode.CodeActionKind.RefactorRewrite + ]; + + public provideCodeActions(document: vscode.TextDocument, range: vscode.Range): vscode.CodeAction[] | undefined { + const action = new vscode.CodeAction('Wrap error', vscode.CodeActionKind.RefactorRewrite); + action.command = { command: 'gotools.wrap-error', title: 'Wrap with error block', tooltip: '' }; + return [ + action + ] + } +} diff --git a/src/test/runTest.ts b/src/test/runTest.ts new file mode 100644 index 0000000..1eabfa3 --- /dev/null +++ b/src/test/runTest.ts @@ -0,0 +1,23 @@ +import * as path from 'path'; + +import { runTests } from 'vscode-test'; + +async function main() { + try { + // The folder containing the Extension Manifest package.json + // Passed to `--extensionDevelopmentPath` + const extensionDevelopmentPath = path.resolve(__dirname, '../../'); + + // The path to test runner + // Passed to --extensionTestsPath + const extensionTestsPath = path.resolve(__dirname, './suite/index'); + + // Download VS Code, unzip it and run the integration test + await runTests({ extensionDevelopmentPath, extensionTestsPath }); + } catch (err) { + console.error('Failed to run tests'); + process.exit(1); + } +} + +main(); diff --git a/src/test/suite/extension.test.ts b/src/test/suite/extension.test.ts new file mode 100644 index 0000000..4ca0ab4 --- /dev/null +++ b/src/test/suite/extension.test.ts @@ -0,0 +1,15 @@ +import * as assert from 'assert'; + +// You can import and use all API from the 'vscode' module +// as well as import your extension to test it +import * as vscode from 'vscode'; +// import * as myExtension from '../../extension'; + +suite('Extension Test Suite', () => { + vscode.window.showInformationMessage('Start all tests.'); + + test('Sample test', () => { + assert.strictEqual(-1, [1, 2, 3].indexOf(5)); + assert.strictEqual(-1, [1, 2, 3].indexOf(0)); + }); +}); diff --git a/src/test/suite/index.ts b/src/test/suite/index.ts new file mode 100644 index 0000000..7029e38 --- /dev/null +++ b/src/test/suite/index.ts @@ -0,0 +1,38 @@ +import * as path from 'path'; +import * as Mocha from 'mocha'; +import * as glob from 'glob'; + +export function run(): Promise<void> { + // Create the mocha test + const mocha = new Mocha({ + ui: 'tdd', + color: true + }); + + const testsRoot = path.resolve(__dirname, '..'); + + return new Promise((c, e) => { + glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { + if (err) { + return e(err); + } + + // Add files to the test suite + files.forEach(f => mocha.addFile(path.resolve(testsRoot, f))); + + try { + // Run the mocha test + mocha.run(failures => { + if (failures > 0) { + e(new Error(`${failures} tests failed.`)); + } else { + c(); + } + }); + } catch (err) { + console.error(err); + e(err); + } + }); + }); +} |