in src/language/legacy/goOutline.ts [74:126]
export function runGoOutline(
options: GoOutlineOptions,
token?: vscode.CancellationToken
): Promise<GoOutlineDeclaration[]> {
return new Promise((resolve, reject) => {
const gooutline = getBinPath('go-outline');
const gooutlineFlags = ['-f', options.fileName];
if (options.importsOption === GoOutlineImportsOptions.Only) {
gooutlineFlags.push('-imports-only');
}
if (options.document) {
gooutlineFlags.push('-modified');
}
let p: cp.ChildProcess | null | undefined;
if (token) {
token.onCancellationRequested(() => p && killProcess(p));
}
// Spawn `go-outline` process
p = cp.execFile(gooutline, gooutlineFlags, { env: toolExecutionEnvironment() }, (err, stdout, stderr) => {
try {
if (err && (<any>err).code === 'ENOENT') {
promptForMissingTool('go-outline');
}
if (stderr && stderr.startsWith('flag provided but not defined: ')) {
promptForUpdatingTool('go-outline');
if (stderr.startsWith('flag provided but not defined: -imports-only')) {
options.importsOption = GoOutlineImportsOptions.Include;
}
if (stderr.startsWith('flag provided but not defined: -modified')) {
options.document = undefined;
}
p = null;
return runGoOutline(options, token).then((results) => {
return resolve(results);
});
}
if (err) {
return resolve([]);
}
const result = stdout.toString();
const decls = <GoOutlineDeclaration[]>JSON.parse(result);
return resolve(decls);
} catch (e) {
reject(e);
}
});
if (options.document && p.pid) {
p.stdin?.end(getFileArchive(options.document));
}
});
}