aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAlexander Kiryukhin <a.kiryukhin@mail.ru>2021-03-22 02:27:33 +0300
committerAlexander Kiryukhin <a.kiryukhin@mail.ru>2021-03-22 02:27:33 +0300
commitff66c26ad4cf74524daa7696a1ec2bcd0bde7d9b (patch)
tree6fd8ebedd25b15389e999b6619bc1f5cc86f68de /src
parent7707ba49f6471478f95a3bd40d9992b051321c7a (diff)
v0.0.2
Diffstat (limited to 'src')
-rw-r--r--src/extension.ts51
-rw-r--r--src/test/runTest.ts23
-rw-r--r--src/test/suite/extension.test.ts15
-rw-r--r--src/test/suite/index.ts38
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);
+ }
+ });
+ });
+}