Skip to content

Commit e6d0474

Browse files
authored
Merge pull request #23 from PraneshASP/feat/bulloak-scaffold
♻️ Bulloak `scaffold` support for test stub generation
2 parents 7daf3be + 791421b commit e6d0474

File tree

3 files changed

+92
-0
lines changed

3 files changed

+92
-0
lines changed

package.json

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,16 @@
8787
"command": "vscode-solidity-inspector.contextMenu.generateDeploymentReport",
8888
"title": "SolidityInspector: generate deployment report",
8989
"category": "Solidity Inspector"
90+
},
91+
{
92+
"command": "vscode-solidity-inspector.activeFile.scaffold",
93+
"title": "Scaffold",
94+
"category": "Solidity Inspector"
95+
},
96+
{
97+
"command": "vscode-solidity-inspector.contextMenu.scaffold",
98+
"title": "Solidity Inspector: scaffold",
99+
"category": "Solidity Inspector"
90100
}
91101
],
92102
"configuration": {
@@ -120,6 +130,11 @@
120130
"group": "solidity",
121131
"command": "vscode-solidity-inspector.contextMenu.generateDeploymentReport",
122132
"when": "resourceFilename =~ /\\.json/"
133+
},
134+
{
135+
"group": "solidity",
136+
"command": "vscode-solidity-inspector.contextMenu.scaffold",
137+
"when": "resourceFilename =~ /\\.tree/"
123138
}
124139
]
125140
},

src/commands/bulloak-scaffold.js

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
const vscode = require("vscode");
2+
const cp = require("child_process");
3+
const { newWindowBeside } = require("../helpers");
4+
5+
async function scaffoldActiveFile(args) {
6+
let activeDoc = vscode.window.activeTextEditor.document;
7+
let activeFile = activeDoc.fileName;
8+
if (activeFile.endsWith(".tree")) {
9+
const filePathArray = activeFile.split("/");
10+
let fileName = filePathArray[filePathArray.length - 1];
11+
fileName = fileName.substring(0, fileName.length - 4);
12+
filePathArray.pop();
13+
let activeFileDirArray = activeFile.split('/');
14+
activeFileDirArray.pop();
15+
let activeFileDir = activeFileDirArray.join("/");
16+
cp.exec(
17+
`cd ${activeFileDir} && bulloak scaffold ${fileName}tree`,
18+
(err, stdout, stderr) => {
19+
if (err) {
20+
vscode.window.showErrorMessage(
21+
`[Operation failed] \n${err.message}\n\nNOTE: Please make sure to install 'bulloak' before using this command`
22+
);
23+
console.error(err);
24+
}
25+
newWindowBeside(stdout);
26+
}
27+
);
28+
} else {
29+
vscode.window.showErrorMessage(
30+
`[Operation failed] ${activeFile}\n\nOnly .tree files are supported.`
31+
);
32+
}
33+
}
34+
35+
async function scaffoldContextMenu(clickedFile, selectedFiles) {
36+
for (let index = 0; index < selectedFiles.length; index++) {
37+
const activeFile = selectedFiles[index].path;
38+
if (!activeFile.endsWith(".tree")) continue;
39+
const filePathArray = activeFile.split("/");
40+
let fileName = filePathArray[filePathArray.length - 1];
41+
fileName = fileName.substring(0, fileName.length - 4);
42+
43+
filePathArray.pop();
44+
45+
let activeFileDirArray = activeFile.split('/');
46+
activeFileDirArray.pop();
47+
let activeFileDir = activeFileDirArray.join("/");
48+
cp.exec(
49+
`cd ${activeFileDir} && bulloak scaffold ${fileName}tree`,
50+
(err, stdout, stderr) => {
51+
if (err) {
52+
vscode.window.showErrorMessage(
53+
`[Operation failed] \n${err.message}\n\nNOTE: Please make sure to install 'bulloak' before using this command`
54+
);
55+
}
56+
newWindowBeside(stdout);
57+
}
58+
);
59+
}
60+
}
61+
62+
module.exports = { scaffoldActiveFile, scaffoldContextMenu };

src/extension.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,8 @@ const {
3737
const { treeFilesCodeActionProvider, treeFilesDiagnosticCollection } = require("./commands/parse-tree");
3838

3939

40+
const { scaffoldActiveFile, scaffoldContextMenu } = require("./commands/bulloak-scaffold");
41+
4042
/** global vars */
4143
const EXTENSION_PREFIX = "vscode-solidity-inspector";
4244

@@ -96,6 +98,16 @@ const generateDeploymentReportContextMenuSubscription = vscode.commands.register
9698
generateDeploymentReportContextMenu
9799
);
98100

101+
const scaffoldActiveFileSubscription = vscode.commands.registerCommand(
102+
EXTENSION_PREFIX + ".activeFile.scaffold",
103+
scaffoldActiveFile
104+
);
105+
106+
const scaffoldContextMenuSubscription = vscode.commands.registerCommand(
107+
EXTENSION_PREFIX + ".contextMenu.scaffold",
108+
scaffoldContextMenu
109+
);
110+
99111
/** event funcs */
100112
function onActivate(context) {
101113
vscode.window.onDidChangeActiveTextEditor(editor => {
@@ -133,6 +145,9 @@ function onActivate(context) {
133145
context.subscriptions.push(treeFilesCodeActionProvider);
134146
context.subscriptions.push(treeFilesDiagnosticCollection);
135147

148+
context.subscriptions.push(scaffoldActiveFileSubscription);
149+
context.subscriptions.push(scaffoldContextMenuSubscription);
150+
136151
vscode.window.visibleTextEditors.map(editor => {
137152
if (editor && editor.document && editor.document.languageId == "solidity") {
138153
unusedImportsActiveFile(editor);

0 commit comments

Comments
 (0)