in src/language/legacy/goSuggest.ts [494:571]
private ensureGoCodeConfigured(fileuri: vscode.Uri, goConfig: vscode.WorkspaceConfiguration): Thenable<void> {
const currentFile = fileuri.fsPath;
let checkModSupport = Promise.resolve(this.isGoMod);
if (this.previousFile !== currentFile && this.previousFileDir !== path.dirname(currentFile)) {
this.previousFile = currentFile;
this.previousFileDir = path.dirname(currentFile);
checkModSupport = isModSupported(fileuri).then((result) => (this.isGoMod = result));
}
const setPkgsList = getImportablePackages(currentFile, true).then((pkgMap) => {
this.pkgsList = pkgMap;
});
if (!this.setGocodeOptions) {
return Promise.all([checkModSupport, setPkgsList]).then(() => {
return;
});
}
const setGocodeProps = new Promise<void>((resolve) => {
const gocode = getBinPath('gocode');
const env = toolExecutionEnvironment();
cp.execFile(gocode, ['set'], { env }, (err, stdout) => {
if (err && stdout.startsWith('gocode: unknown subcommand:')) {
if (
goConfig['gocodePackageLookupMode'] === 'gb' &&
this.globalState &&
!this.globalState.get(gocodeNoSupportForgbMsgKey)
) {
vscode.window
.showInformationMessage(
'The go.gocodePackageLookupMode setting for gb will not be honored as github.com/mdempskey/gocode doesnt support it yet.',
"Don't show again"
)
.then((selected) => {
if (selected === "Don't show again") {
this.globalState?.update(gocodeNoSupportForgbMsgKey, true);
}
});
}
this.setGocodeOptions = false;
return resolve();
}
const existingOptions = stdout.split(/\r\n|\n/);
const optionsToSet: string[][] = [];
const setOption = () => {
const [name, value] = optionsToSet.pop() ?? [];
cp.execFile(gocode, ['set', name, value], { env }, () => {
if (optionsToSet.length) {
setOption();
} else {
resolve();
}
});
};
if (existingOptions.indexOf('propose-builtins true') === -1) {
optionsToSet.push(['propose-builtins', 'true']);
}
if (existingOptions.indexOf(`autobuild ${goConfig['gocodeAutoBuild']}`) === -1) {
optionsToSet.push(['autobuild', goConfig['gocodeAutoBuild']]);
}
if (existingOptions.indexOf(`package-lookup-mode ${goConfig['gocodePackageLookupMode']}`) === -1) {
optionsToSet.push(['package-lookup-mode', goConfig['gocodePackageLookupMode']]);
}
if (!optionsToSet.length) {
return resolve();
}
setOption();
});
});
return Promise.all([setPkgsList, setGocodeProps, checkModSupport]).then(() => {
return;
});
}