-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathextension.js
120 lines (107 loc) · 5.13 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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
/* jshint esversion: 6 */
var fs = require('fs');
var path = require('path');
var vscode = require('vscode');
var axios = require('axios');
var errorEx = require('error-ex');
function activate(context) {
console.log('Extension "gi" is now active!');
var disposable = vscode.commands.registerCommand('extension.gi', function () {
var giURL = 'https://www.gitignore.io/api/';
var giError = new errorEx('giError');
axios.get(giURL + 'list')
.then(function (response) {
var rawList = response.data;
rawList = rawList.replace(/(\r\n|\n|\r)/gm, ",");
var formattedList = rawList.split(',');
const options = {
ignoreFocusOut: false,
placeHolder: 'Search Operating Systems, IDEs, or Programming Languages',
};
vscode.window.showQuickPick(formattedList, options)
.then(function (val) {
if (val === undefined) {
vscode.window.setStatusBarMessage('gi escaped', 3000);
var err = new giError('EscapeException');
throw err;
}
vscode.window.setStatusBarMessage('You picked ' + val, 3000);
axios.get(giURL + val)
.then(function (response) {
makeFile(response.data);
})
.catch(function (err) {
console.log(err);
});
});
function makeFile(content) {
const choices = [{
label: 'Append',
description: 'Append to current .gitignore'
}, {
label: 'Overwrite',
description: `Overwrite current .gitignore`
}];
const options = {
matchOnDescription: true,
placeHolder: "A .gitignore file already exists in your current working directory. What would you like to do?"
};
var giFile = path.join(vscode.workspace.rootPath, '.gitignore');
fs.access(giFile, fs.F_OK, function (err) {
if (!err) {
console.log('.gitignore already exists');
vscode.window.showQuickPick(choices, options)
.then(function (val) {
if (!val || val === undefined) {
var err = new giError('EscapeException');
vscode.window.setStatusBarMessage('gi escaped', 3000);
throw err;
}
if (val.label === 'Overwrite') {
writeToFile(content, true);
vscode.window.showInformationMessage('.gitignore overwritten');
return;
}
if (val.label === 'Append') {
writeToFile(content, false);
vscode.window.showInformationMessage('.gitignore appended');
return;
}
});
} else {
console.log('.gitignore does not exist');
writeToFile(content, true);
vscode.window.showInformationMessage('.gitignore created');
return;
}
});
function writeToFile(content, flag) {
if (flag === true) {
fs.writeFileSync(giFile, content, 'utf-8', function (err) {
if (err) {
console.log('Failed to write to .gitignore');
} else {
console.log('.gitignore created');
}
});
} else {
fs.appendFileSync(giFile, content, 'utf-8', function (err) {
if (err) {
console.log('Failed to append to .gitignore');
} else {
console.log('.gitignore appended');
}
});
}
}
}
})
.catch(function (err) {
console.log(err);
});
});
context.subscriptions.push(disposable);
}
exports.activate = activate;
function deactivate() {}
exports.deactivate = deactivate;