in src/goMain.ts [74:227]
export async function activate(ctx: vscode.ExtensionContext): Promise<ExtensionAPI | undefined> {
if (process.env['VSCODE_GO_IN_TEST'] === '1') {
// Make sure this does not run when running in test.
return;
}
warnIfDuplicateGoExtension();
setGlobalState(ctx.globalState);
setWorkspaceState(ctx.workspaceState);
setEnvironmentVariableCollection(ctx.environmentVariableCollection);
const cfg = getGoConfig();
setLogConfig(cfg['logging']);
WelcomePanel.activate(ctx, goCtx);
const configGOROOT = getGoConfig()['goroot'];
if (configGOROOT) {
// We don't support unsetting go.goroot because we don't know whether
// !configGOROOT case indicates the user wants to unset process.env['GOROOT']
// or the user wants the extension to use the current process.env['GOROOT'] value.
// TODO(hyangah): consider utilizing an empty value to indicate unset?
await setGOROOTEnvVar(configGOROOT);
}
await showDeprecationWarning();
await updateGoVarsFromConfig(goCtx);
suggestUpdates();
offerToInstallLatestGoVersion();
offerToInstallTools();
const registerCommand = commands.createRegisterCommand(ctx, goCtx);
registerCommand('go.languageserver.restart', commands.startLanguageServer);
registerCommand('go.languageserver.maintain', commands.startGoplsMaintainerInterface);
await commands.startLanguageServer(ctx, goCtx)(RestartReason.ACTIVATION);
initCoverageDecorators(ctx);
registerCommand('go.builds.run', commands.runBuilds);
const activeDoc = vscode.window.activeTextEditor?.document;
if (!goCtx.languageServerIsRunning && activeDoc?.languageId === 'go' && isGoPathSet()) {
// Check mod status so that cache is updated and then run build/lint/vet
isModSupported(activeDoc.uri).then(() => {
vscode.commands.executeCommand('go.builds.run', activeDoc, getGoConfig(activeDoc.uri));
});
}
registerCommand('go.environment.status', expandGoStatusBar);
GoDebugConfigurationProvider.activate(ctx, goCtx);
GoDebugFactory.activate(ctx);
goCtx.buildDiagnosticCollection = vscode.languages.createDiagnosticCollection('go');
ctx.subscriptions.push(goCtx.buildDiagnosticCollection);
goCtx.lintDiagnosticCollection = vscode.languages.createDiagnosticCollection(
lintDiagnosticCollectionName(getGoConfig()['lintTool'])
);
ctx.subscriptions.push(goCtx.lintDiagnosticCollection);
goCtx.vetDiagnosticCollection = vscode.languages.createDiagnosticCollection('go-vet');
ctx.subscriptions.push(goCtx.vetDiagnosticCollection);
registerCommand('go.gopath', commands.getCurrentGoPath);
registerCommand('go.goroot', commands.getCurrentGoRoot);
registerCommand('go.locate.tools', commands.getConfiguredGoTools);
registerCommand('go.add.tags', commands.addTags);
registerCommand('go.remove.tags', commands.removeTags);
registerCommand('go.fill.struct', commands.runFillStruct);
registerCommand('go.impl.cursor', commands.implCursor);
registerCommand('go.godoctor.extract', commands.extractFunction);
registerCommand('go.godoctor.var', commands.extractVariable);
registerCommand('go.test.cursor', commands.testAtCursor('test'));
registerCommand('go.test.cursorOrPrevious', commands.testAtCursorOrPrevious('test'));
registerCommand('go.subtest.cursor', commands.subTestAtCursor('test'));
registerCommand('go.debug.cursor', commands.testAtCursor('debug'));
registerCommand('go.debug.subtest.cursor', commands.subTestAtCursor('debug'));
registerCommand('go.benchmark.cursor', commands.testAtCursor('benchmark'));
registerCommand('go.test.package', commands.testCurrentPackage(false));
registerCommand('go.benchmark.package', commands.testCurrentPackage(true));
registerCommand('go.test.file', commands.testCurrentFile(false));
registerCommand('go.benchmark.file', commands.testCurrentFile(true));
registerCommand('go.test.workspace', commands.testWorkspace);
registerCommand('go.test.previous', commands.testPrevious);
registerCommand('go.debug.previous', commands.debugPrevious);
registerCommand('go.test.coverage', toggleCoverageCurrentPackage);
registerCommand('go.test.showOutput', () => showTestOutput);
registerCommand('go.test.cancel', () => cancelRunningTests);
registerCommand('go.import.add', addImport);
registerCommand('go.add.package.workspace', addImportToWorkspace);
registerCommand('go.tools.install', commands.installTools);
registerCommand('go.browse.packages', browsePackages);
if (isVscodeTestingAPIAvailable && cfg.get<boolean>('testExplorer.enable')) {
if (cfg.get<boolean>('testExplorer.useBazel')) BazelGoTestExplorer.setup(ctx, goCtx);
else {
GoTestExplorer.setup(ctx, goCtx);
GoRunTestCodeLensProvider.activate(ctx, goCtx);
}
}
GoExplorerProvider.setup(ctx);
registerCommand('go.test.generate.package', goGenerateTests.generateTestCurrentPackage);
registerCommand('go.test.generate.file', goGenerateTests.generateTestCurrentFile);
registerCommand('go.test.generate.function', goGenerateTests.generateTestCurrentFunction);
registerCommand('go.toggle.test.file', goGenerateTests.toggleTestFile);
registerCommand('go.debug.startSession', commands.startDebugSession);
registerCommand('go.show.commands', commands.showCommands);
registerCommand('go.get.package', goGetPackage);
registerCommand('go.playground', playgroundCommand);
registerCommand('go.lint.package', lintCode('package'));
registerCommand('go.lint.workspace', lintCode('workspace'));
registerCommand('go.lint.file', lintCode('file'));
registerCommand('go.vet.package', vetCode(false));
registerCommand('go.vet.workspace', vetCode(true));
registerCommand('go.build.package', buildCode(false));
registerCommand('go.build.workspace', buildCode(true));
registerCommand('go.install.package', installCurrentPackage);
registerCommand('go.run.modinit', goModInit);
registerCommand('go.extractServerChannel', showServerOutputChannel);
registerCommand('go.workspace.resetState', resetWorkspaceState);
registerCommand('go.global.resetState', resetGlobalState);
registerCommand('go.toggle.gc_details', commands.toggleGCDetails);
registerCommand('go.apply.coverprofile', commands.applyCoverprofile);
// Go Environment switching commands
registerCommand('go.environment.choose', chooseGoEnvironment);
// Survey related commands
registerCommand('go.survey.showConfig', showSurveyConfig);
registerCommand('go.survey.resetConfig', resetSurveyConfigs);
addOnDidChangeConfigListeners(ctx);
addOnChangeTextDocumentListeners(ctx);
addOnChangeActiveTextEditorListeners(ctx);
addOnSaveTextDocumentListeners(ctx);
vscode.languages.setLanguageConfiguration(GO_MODE.language, {
wordPattern: /(-?\d*\.\d\w*)|([^`~!@#%^&*()\-=+[{\]}\\|;:'",.<>/?\s]+)/g
});
GoTaskProvider.setup(ctx, vscode.workspace);
// Vulncheck output link provider.
VulncheckOutputLinkProvider.activate(ctx);
registerCommand('go.vulncheck.toggle', toggleVulncheckCommandFactory);
vscode.commands.executeCommand('go.initExtensionAPI', ctx, goCtx);
return extensionAPI;
}