in src/util.ts [513:551]
export function getCurrentGoPath(workspaceUri?: vscode.Uri): string {
const activeEditorUri = vscode.window.activeTextEditor?.document.uri;
const currentFilePath = fixDriveCasingInWindows(activeEditorUri?.fsPath ?? '');
const currentRoot = (workspaceUri && workspaceUri.fsPath) || getWorkspaceFolderPath(activeEditorUri) || '';
const config = getGoConfig(workspaceUri || activeEditorUri);
// Infer the GOPATH from the current root or the path of the file opened in current editor
// Last resort: Check for the common case where GOPATH itself is opened directly in VS Code
let inferredGopath: string | undefined;
if (config['inferGopath'] === true) {
inferredGopath = getInferredGopath(currentRoot) || getInferredGopath(currentFilePath);
if (!inferredGopath) {
try {
if (fs.statSync(path.join(currentRoot, 'src')).isDirectory()) {
inferredGopath = currentRoot;
}
} catch (e) {
// No op
}
}
if (inferredGopath) {
// inferred GOPATH must not have go.mod in it.
try {
if (fs.existsSync(path.join(inferredGopath, 'go.mod'))) {
inferredGopath = '';
}
} catch (e) {
// No op
}
}
if (inferredGopath && process.env['GOPATH'] && inferredGopath !== process.env['GOPATH']) {
inferredGopath += path.delimiter + process.env['GOPATH'];
}
}
const configGopath = config['gopath'] ? resolvePath(substituteEnv(config['gopath']), currentRoot) : '';
currentGopath = (inferredGopath ? inferredGopath : configGopath || process.env['GOPATH']) ?? '';
return currentGopath;
}