-
Notifications
You must be signed in to change notification settings - Fork 36
/
extension.js
53 lines (47 loc) · 1.42 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
const vscode = require('vscode');
const PromiseSeries = require('promise-series');
var activeContext;
var disposables = [];
function activate(context) {
loadMacros(context);
activeContext = context;
vscode.workspace.onDidChangeConfiguration(() => {
disposeMacros();
loadMacros(activeContext);
});
}
exports.activate = activate;
function deactivate() {
}
exports.deactivate = deactivate;
function loadMacros(context) {
const settings = vscode.workspace.getConfiguration('macros');
const macros = Object.keys(settings).filter((prop) => {
return prop !== 'has' && prop !== 'get' && prop !== 'update';
});
macros.forEach((name) => {
const disposable = vscode.commands.registerCommand(`macros.${name}`, function () {
const series = new PromiseSeries();
settings[name].forEach((action) => {
series.add(() => {
// support objects so that we can pass arguments from user settings to the commands
if (typeof action === "object"){
vscode.commands.executeCommand(action.command, action.args);
}
// support commands as strings (no args)
else{
vscode.commands.executeCommand(action);
}
})
})
return series.run();
})
context.subscriptions.push(disposable);
disposables.push(disposable);
});
}
function disposeMacros() {
for (var disposable of disposables) {
disposable.dispose();
}
}