aboutsummaryrefslogtreecommitdiff
path: root/src/extension.ts
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/extension.ts
parent7707ba49f6471478f95a3bd40d9992b051321c7a (diff)
v0.0.2
Diffstat (limited to 'src/extension.ts')
-rw-r--r--src/extension.ts51
1 files changed, 51 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
+ ]
+ }
+}