Skip to content

Commit 84c83b4

Browse files
committed
multi-workspace findfiles requires RelativePattern
1 parent 34df063 commit 84c83b4

File tree

1 file changed

+76
-46
lines changed

1 file changed

+76
-46
lines changed

src/extension.js

+76-46
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,11 @@ function exportCurrentAsHtml(context, webView) {
9090

9191
previewPanels.forEach(p => {
9292
let msgValue = p.getContextData();
93-
93+
let wsfolder = vscode.workspace.workspaceFolders.length > 0 ? vscode.workspace.workspaceFolders[0].uri.fsPath : ""
9494
//export report to workspace
9595

9696
vscode.window.showSaveDialog({
97-
defaultUri: vscode.Uri.file(path.join(vscode.workspace.workspaceFolders[0].uri.fsPath, "solidity-metrics.html")),
97+
defaultUri: vscode.Uri.file(path.join(wsfolder, "solidity-metrics.html")),
9898
saveLabel: "Export"
9999
}).then(fileUri => {
100100
if (!fileUri) {
@@ -168,14 +168,15 @@ function onActivate(context) {
168168

169169
let document = vscode.window.activeTextEditor.document;
170170
let selectedWorkspace = vscode.workspace.getWorkspaceFolder(document.uri);
171+
let wsPath = selectedWorkspace ? selectedWorkspace.uri.fsPath : path.dirname(document.uri.fsPath);
171172

172-
let metrics = new SolidityMetricsContainer(selectedWorkspace.name, {
173-
basePath: selectedWorkspace.uri.fsPath + "/",
173+
let metrics = new SolidityMetricsContainer(selectedWorkspace ? selectedWorkspace.name : vscode.workspace.name, {
174+
basePath: wsPath + "/",
174175
inputFileGlobExclusions: settings.extensionConfig().file.exclusions.glob,
175176
inputFileGlob: undefined,
176177
inputFileGlobLimit: settings.extensionConfig().file.limit,
177178
debug: settings.extensionConfig().debug,
178-
repoInfo: getWsGitInfo(selectedWorkspace.uri.fsPath)
179+
repoInfo: getWsGitInfo(wsPath)
179180
});
180181
metrics.inputFileGlob = document.fileName.replace(metrics.basePath, "");
181182

@@ -231,34 +232,43 @@ function onActivate(context) {
231232
console.log("User canceled the long running operation");
232233
});
233234

234-
await vscode.workspace.findFiles(metrics.inputFileGlob, metrics.inputFileGlobExclusions, metrics.inputFileGlobLimit)
235-
.then(uris => {
236-
uris.forEach(uri => {
237-
metrics.analyze(uri.fsPath);
238-
progress.report({ increment: 1 });
239-
});
235+
await vscode.workspace.findFiles(
236+
new vscode.RelativePattern(selectedWorkspace, metrics.inputFileGlob),
237+
new vscode.RelativePattern(selectedWorkspace, metrics.inputFileGlobExclusions),
238+
metrics.inputFileGlobLimit
239+
).then(uris => {
240+
uris.forEach(uri => {
241+
metrics.analyze(uri.fsPath);
242+
progress.report({ increment: 1 });
240243
});
244+
});
241245

242-
await vscode.workspace.findFiles("**/truffle*.js", metrics.inputFileGlobExclusions, metrics.inputFileGlobLimit)
243-
.then(uris => {
244-
uris.forEach(uri => {
245-
if (uri.fsPath.endsWith(".js")) {
246-
metrics.addTruffleProjectLocation(uri.fsPath);
247-
progress.report({ increment: 1 });
248-
}
249-
});
246+
await vscode.workspace.findFiles(
247+
new vscode.RelativePattern(selectedWorkspace, "**/truffle*.js"),
248+
new vscode.RelativePattern(selectedWorkspace, metrics.inputFileGlobExclusions),
249+
metrics.inputFileGlobLimit
250+
).then(uris => {
251+
uris.forEach(uri => {
252+
if (uri.fsPath.endsWith(".js")) {
253+
metrics.addTruffleProjectLocation(uri.fsPath);
254+
progress.report({ increment: 1 });
255+
}
250256
});
257+
});
251258

252259
// {**/node_modules,**/mock*,**/test*,**/migrations,**/Migrations.sol}
253260
let excludeFilesGlobArray = metrics.inputFileGlobExclusions.replace("{", "").replace("}", "").split(",").map(g => g.endsWith(".sol") ? g : g + "/**/*.sol");
254261

255-
await vscode.workspace.findFiles("{" + excludeFilesGlobArray.join(",") + "}", undefined, metrics.excludeFileGlobLimit)
256-
.then(uris => {
257-
uris.forEach(uri => {
258-
metrics.addExcludedFile(uri.fsPath);
259-
progress.report({ increment: 1 });
260-
});
262+
await vscode.workspace.findFiles(
263+
new vscode.RelativePattern(selectedWorkspace, "{" + excludeFilesGlobArray.join(",") + "}"),
264+
undefined,
265+
metrics.excludeFileGlobLimit
266+
).then(uris => {
267+
uris.forEach(uri => {
268+
metrics.addExcludedFile(uri.fsPath);
269+
progress.report({ increment: 1 });
261270
});
271+
});
262272

263273
if (!metrics.seenFiles.length) {
264274
vscode.window.showWarningMessage("No valid solidity source files found.");
@@ -272,7 +282,6 @@ function onActivate(context) {
272282
console.log(error);
273283
}
274284
progress.report({ increment: 10 });
275-
console.log("YO?")
276285
metrics.generateReportMarkdown().then(markdown => {
277286
progress.report({ increment: 1 });
278287
previewHtml(webView,
@@ -291,18 +300,29 @@ function onActivate(context) {
291300
context.subscriptions.push(
292301
vscode.commands.registerCommand('solidity-metrics.contextMenu.report', async (clickedFileUri, selectedFiles) => {
293302

303+
if (!clickedFileUri) {
304+
return; // no file selected, skip
305+
}
294306
let selectedWorkspace = vscode.workspace.getWorkspaceFolder(clickedFileUri);
307+
let wsPath = selectedWorkspace ? selectedWorkspace.uri.fsPath : fs.statSync(clickedFileUri.fsPath).isDirectory() ? clickedFileUri.fsPath : path.dirname(clickedFileUri.fsPath);
295308

296-
let metrics = new SolidityMetricsContainer(selectedWorkspace.name, {
297-
basePath: selectedWorkspace.uri.fsPath + "/",
309+
let metrics = new SolidityMetricsContainer(selectedWorkspace ? selectedWorkspace.name : vscode.workspace.name, {
310+
basePath: wsPath + "/",
298311
inputFileGlobExclusions: settings.extensionConfig().file.exclusions.glob,
299312
inputFileGlob: undefined,
300313
inputFileGlobLimit: settings.extensionConfig().file.limit,
301314
debug: settings.extensionConfig().debug,
302-
repoInfo: getWsGitInfo(selectedWorkspace.uri.fsPath)
315+
repoInfo: getWsGitInfo(wsPath)
303316
});
304-
metrics.inputFileGlob = "{" + selectedFiles.map(x => x.fsPath.endsWith(".sol") ? x.fsPath.replace(metrics.basePath, "") : x.fsPath.replace(metrics.basePath, "") + "/**/*.sol").join(",") + "}";
305-
317+
metrics.inputFileGlob = "{" + selectedFiles.map(x => {
318+
if (x.fsPath.endsWith(".sol")) {
319+
return x.fsPath.replace(metrics.basePath, "");
320+
}
321+
else if (x.fsPath == wsPath || x.fsPath == metrics.basePath) {
322+
return "**/*.sol"; //special case: workspace selected
323+
}
324+
return x.fsPath.replace(metrics.basePath, "") + "/**/*.sol";
325+
}).join(",") + "}";
306326

307327
vscode.window.withProgress({
308328
location: vscode.ProgressLocation.Notification,
@@ -314,7 +334,10 @@ function onActivate(context) {
314334
});
315335

316336
//progress.report({ increment: 0 });
317-
await vscode.workspace.findFiles(metrics.inputFileGlob, metrics.inputFileGlobExclusions, metrics.inputFileGlobLimit)
337+
await vscode.workspace.findFiles(
338+
new vscode.RelativePattern(selectedWorkspace, metrics.inputFileGlob),
339+
new vscode.RelativePattern(selectedWorkspace, metrics.inputFileGlobExclusions),
340+
metrics.inputFileGlobLimit)
318341
.then(uris => {
319342
uris.forEach(uri => {
320343
metrics.analyze(uri.fsPath);
@@ -325,15 +348,19 @@ function onActivate(context) {
325348
//discover truffle projects
326349
let truffleFileGlob = "{" + selectedFiles.map(x => x.fsPath.endsWith(".sol") ? x.fsPath.replace(metrics.basePath, "") : x.fsPath.replace(metrics.basePath, "") + "/**/truffle*.js").join(",") + "}";
327350

328-
await vscode.workspace.findFiles(truffleFileGlob, metrics.inputFileGlobExclusions, metrics.inputFileGlobLimit)
329-
.then(uris => {
330-
uris.forEach(uri => {
331-
if (uri.fsPath.endsWith(".js")) {
332-
metrics.addTruffleProjectLocation(uri.fsPath);
333-
progress.report({ increment: 1 });
334-
}
335-
});
351+
352+
await vscode.workspace.findFiles(
353+
new vscode.RelativePattern(selectedWorkspace, truffleFileGlob),
354+
new vscode.RelativePattern(selectedWorkspace, metrics.inputFileGlobExclusions),
355+
metrics.inputFileGlobLimit
356+
).then(uris => {
357+
uris.forEach(uri => {
358+
if (uri.fsPath.endsWith(".js")) {
359+
metrics.addTruffleProjectLocation(uri.fsPath);
360+
progress.report({ increment: 1 });
361+
}
336362
});
363+
});
337364
//list excluded files
338365

339366
// {**/node_modules,**/mock*,**/test*,**/migrations,**/Migrations.sol}
@@ -350,13 +377,16 @@ function onActivate(context) {
350377
}
351378
}
352379
if (excludeFilesGlob.length) {
353-
await vscode.workspace.findFiles("{" + excludeFilesGlob.join(",") + "}", undefined, metrics.excludeFileGlobLimit)
354-
.then(uris => {
355-
uris.forEach(uri => {
356-
metrics.addExcludedFile(uri.fsPath);
357-
progress.report({ increment: 1 });
358-
});
380+
await vscode.workspace.findFiles(
381+
new vscode.RelativePattern(selectedWorkspace, "{" + excludeFilesGlob.join(",") + "}"),
382+
undefined,
383+
metrics.excludeFileGlobLimit
384+
).then(uris => {
385+
uris.forEach(uri => {
386+
metrics.addExcludedFile(uri.fsPath);
387+
progress.report({ increment: 1 });
359388
});
389+
});
360390
}
361391

362392
if (!metrics.seenFiles.length) {

0 commit comments

Comments
 (0)