in src/goTest/resolve.ts [71:138]
async resolve(item?: TestItem) {
// Expand the root item - find all modules and workspaces
if (!item) {
// Dispose of package entries at the root if they are now part of a workspace folder
this.ctrl.items.forEach((item) => {
const { kind } = GoTest.parseId(item.id);
if (kind !== 'package') {
return;
}
if (item.uri && this.workspace.getWorkspaceFolder(item.uri)) {
dispose(this, item);
}
});
if (!this.shouldIndexAll) return;
// Create entries for all modules and workspaces
for (const folder of this.workspace.workspaceFolders || []) {
const found = await walkWorkspaces(this.workspace.fs, folder.uri);
let needWorkspace = false;
for (const [uri, isMod] of found.entries()) {
if (!isMod) {
needWorkspace = true;
continue;
}
await this.getModule(Uri.parse(uri));
}
// If the workspace folder contains any Go files not in a module, create a workspace entry
if (needWorkspace) {
await this.getWorkspace(folder);
}
}
return;
}
const { kind } = GoTest.parseId(item.id);
if (!item.uri) return;
// The user expanded a module or workspace - find all packages
// Always skipped if not indexing the entire workspace
if ((kind === 'module' || kind === 'workspace') && this.shouldIndexAll) {
await walkPackages(this.workspace.fs, item.uri, async (uri) => {
await this.getPackage(uri);
});
}
// The user expanded a module or package - find all files
if (kind === 'module' || kind === 'package') {
for (const [file, type] of await this.workspace.fs.readDirectory(item.uri)) {
if (type !== FileType.File || !file.endsWith('_test.go')) {
continue;
}
await this.getFile(Uri.joinPath(item.uri, file));
}
}
// The user expanded a file - find all functions
if (kind === 'file') {
const doc = await this.workspace.openTextDocument(item.uri);
await this.processDocument(doc);
}
// TODO(firelizzard18): If uri.query is test or benchmark, this is where we
// would discover sub tests or benchmarks, if that is feasible.
}