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/extension.ts | |
parent | 7707ba49f6471478f95a3bd40d9992b051321c7a (diff) |
v0.0.2
Diffstat (limited to 'src/extension.ts')
-rw-r--r-- | src/extension.ts | 51 |
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 + ] + } +} |