This commit is contained in:
Alexander Kiryukhin 2021-03-28 03:07:25 +03:00
parent 1e39924e41
commit b034d8519f
No known key found for this signature in database
GPG key ID: 6DF7A2910D0699E9
3 changed files with 44 additions and 37 deletions

View file

@ -2,7 +2,7 @@
"name": "gotools", "name": "gotools",
"displayName": "Golang Tools", "displayName": "Golang Tools",
"description": "Tools for productive work", "description": "Tools for productive work",
"version": "0.0.3", "version": "0.0.4",
"publisher": "neonxp", "publisher": "neonxp",
"author": { "author": {
"name": "Alexander NeonXP Kiryukhin", "name": "Alexander NeonXP Kiryukhin",

View file

@ -30,7 +30,7 @@
}, },
"Structure constructor": { "Structure constructor": {
"body": [ "body": [
"// New instance of $1 type.", "// New$1 returns new $1.",
"func New${1:type}(${2}) *$1 {", "func New${1:type}(${2}) *$1 {",
"\t$3", "\t$3",
"\treturn &$1{$4}", "\treturn &$1{$4}",

View file

@ -1,42 +1,17 @@
import * as vscode from 'vscode'; import * as vscode from 'vscode';
const fnRegex = /^(\t*)(.*)err(\s?):=(.+?)$/ const fnRegex = /^\t*(.*)err\s?:=.+?$/
export function activate(context: vscode.ExtensionContext) { export function activate(context: vscode.ExtensionContext) {
context.subscriptions.push(vscode.languages.registerCodeActionsProvider('go', new ErrorsWrapper(), {
providedCodeActionKinds: ErrorsWrapper.providedCodeActionKinds
}));
context.subscriptions.push( context.subscriptions.push(
vscode.commands.registerCommand('gotools.wrap-error', () => { vscode.languages.registerCodeActionsProvider(
const editor = vscode.window.activeTextEditor; 'go',
if (editor) { new ErrorsWrapper(),
const document = editor.document; { providedCodeActionKinds: ErrorsWrapper.providedCodeActionKinds }
const line = document.lineAt(editor.selection.start.line); )
const matches = line.text.match(fnRegex);
if (matches == null) {
return;
}
if (matches.length > 0) {
const intendation = matches[1];
const extravars = matches[2].split(',').map(x => x.trim()).filter(x => x);
const rest = matches[4].trim();
editor.edit(editBuilder => {
if (extravars.filter(x => x != "_").length > 0) {
editBuilder.insert(
new vscode.Position(line.lineNumber + 1, 0),
`${intendation}if err != nil {\n${intendation}\treturn err\n${intendation}}`
); );
} else { context.subscriptions.push(
extravars.push("err"); vscode.commands.registerCommand('gotools.wrap-error', wrapError)
editBuilder.replace(
line.range,
`${intendation}if ${extravars.join(", ")} := ${rest}; err != nil {\n${intendation}\treturn err\n${intendation}}`
);
}
});
}
}
})
); );
} }
@ -53,7 +28,6 @@ export class ErrorsWrapper implements vscode.CodeActionProvider {
if (!editor) { if (!editor) {
return undefined; return undefined;
} }
const selection = editor.selection;
const line = document.lineAt(editor.selection.start.line); const line = document.lineAt(editor.selection.start.line);
if (!fnRegex.test(line.text)) { if (!fnRegex.test(line.text)) {
return undefined; return undefined;
@ -65,3 +39,36 @@ export class ErrorsWrapper implements vscode.CodeActionProvider {
]; ];
} }
} }
const wrapError = () => {
const editor = vscode.window.activeTextEditor;
if (!editor) {
return;
}
const document = editor.document;
const line = document.lineAt(editor.selection.start.line);
const matches = line.text.match(fnRegex);
if (matches == null || matches.length == 0) {
return;
}
const extravars = matches[1].split(',').map(x => x.trim()).filter(x => x);
if (extravars.filter(x => x != "_").length > 0) {
editor.insertSnippet(
new vscode.SnippetString(`\nif err != nil {\n\t\${1:return \${2:nil, }\${3:err}}\n}\n`),
new vscode.Position(line.range.end.line, line.range.end.character + line.firstNonWhitespaceCharacterIndex),
)
} else {
editor.insertSnippet(
new vscode.SnippetString(`if `),
new vscode.Position(line.range.start.line, line.range.start.character + line.firstNonWhitespaceCharacterIndex),
)
editor.insertSnippet(
new vscode.SnippetString(`; err != nil {\n\t\${1:return \${2:nil, }\${3:err}}\n}\n`),
new vscode.Position(line.range.end.line, line.range.end.character + line.firstNonWhitespaceCharacterIndex + 3),
{
undoStopAfter: true,
undoStopBefore: false,
}
)
}
};