-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathextension.js
71 lines (62 loc) · 2.36 KB
/
extension.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
const vscode = require('vscode');
function findClosestElixirModule(editor, position) {
let line = position.line;
let acc = [];
while (line >= 0) {
let text = editor.document.lineAt(line).text;
let moduleNameMatch = text.match(/^(\s*)(defmodule|defprotocol)\s+([\w.]+)\s+do$/);
if (moduleNameMatch) {
const moduleName = moduleNameMatch[3];
const identation = moduleNameMatch[1].length;
if (acc.length === 0) {
acc.push([identation, moduleName]);
} else if (identation < acc[acc.length - 1][0]) {
acc.push([identation, moduleName]);
}
}
line--;
}
if (acc.length === 0) {
return null;
} else {
return acc.map(elem => elem[1]).reverse().join('.');
}
}
function activate(context) {
let copyShortModuleName = vscode.commands.registerCommand('elixir-module.copyShortModuleName', function () {
let editor = vscode.window.activeTextEditor;
if (editor) {
let position = editor.selection.active;
let moduleName = findClosestElixirModule(editor, position);
if (moduleName) {
moduleName = moduleName.split('.').pop();
vscode.env.clipboard.writeText(moduleName);
vscode.window.setStatusBarMessage(`${moduleName} copied to clipboard`, 2000);
} else {
vscode.window.setStatusBarMessage(`No Elixir module found`, 2000);
}
}
});
let copyFullModuleName = vscode.commands.registerCommand('elixir-module.copyFullModuleName', function () {
let editor = vscode.window.activeTextEditor;
if (editor) {
let position = editor.selection.active;
let moduleName = findClosestElixirModule(editor, position);
if (moduleName) {
vscode.env.clipboard.writeText(moduleName);
vscode.window.setStatusBarMessage(`${moduleName} copied to clipboard`, 2000);
} else {
vscode.window.setStatusBarMessage(`No Elixir module found`, 2000);
}
}
});
context.subscriptions.push(copyShortModuleName);
context.subscriptions.push(copyFullModuleName);
}
exports.activate = activate;
function deactivate() { }
exports.deactivate = deactivate;
module.exports = {
activate,
deactivate
}