-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.js
98 lines (82 loc) · 2.53 KB
/
main.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
"use strict";
const { minimatch } = require("minimatch");
const { window, workspace, Position, WorkspaceEdit } = require("vscode");
const { EOL } = require("os");
const { pattern } = require("./constants");
const getUseStrictStatement = () => {
const config = workspace.getConfiguration("insertUseStrict");
const QUOTE = config.useDoubleQuote ? '"' : "'";
const TAIL = config.addTrailingSemicolon ? ";" : "";
return `${QUOTE}use strict${QUOTE}${TAIL}`;
};
const needToInsert = async (file) => {
const document = await workspace.openTextDocument(file);
const content = document.getText();
return !pattern.test(content);
};
const applyToWorkspace = async () => {
const config = workspace.getConfiguration("insertUseStrict");
const files = await workspace.findFiles(
config.globPattern,
"**/node_modules/**"
);
const USE_STRICT_STATEMENT = getUseStrictStatement();
const startPosition = new Position(0, 0);
const workSpaceEdit = new WorkspaceEdit();
if (!files.length) {
window.showErrorMessage("Your workspace contains no JavaScript files.");
return;
}
await Promise.all(
files.map(async (file) => {
if (await needToInsert(file)) {
workSpaceEdit.insert(
file,
startPosition,
`${USE_STRICT_STATEMENT}${EOL}${EOL}`
);
}
})
);
await workspace.applyEdit(workSpaceEdit);
if (config.autoSave) {
await workspace.saveAll();
}
window.showInformationMessage(`Done. ${workSpaceEdit.size} file(s) updated.`);
};
const applyToNewFiles = async (event) => {
const config = workspace.getConfiguration("insertUseStrict");
if (config.autoApplyToNewFiles) {
const USE_STRICT_STATEMENT = getUseStrictStatement();
const startPosition = new Position(0, 0);
const workSpaceEdit = new WorkspaceEdit();
const files = event.files.filter((file) =>
minimatch(file.path, config.globPattern)
);
await Promise.all(
files.map(async (file) => {
if (await needToInsert(file)) {
workSpaceEdit.insert(
file,
startPosition,
`${USE_STRICT_STATEMENT}${EOL}${EOL}`
);
}
})
);
await workspace.applyEdit(workSpaceEdit);
if (config.autoSave) {
await workspace.saveAll();
}
window.showInformationMessage(`${workSpaceEdit.size} new file(s) updated.`);
}
};
module.exports = {
applyToWorkspace: () => {
window.setStatusBarMessage(
'Inserting "use strict" to workspace...',
applyToWorkspace()
);
},
applyToNewFiles,
};