src/goMain.ts: cleanup activate function

Code in motion. Moved logic to addOnDidChangeConfigListeners and
showDeprecationWarning functions to improve readability.

Change-Id: I70221cf0ef94cdbffb24bc720e57a5e03aa25540
Reviewed-on: https://go-review.googlesource.com/c/vscode-go/+/405895
Run-TryBot: Jamal Carvalho <jamal@golang.org>
TryBot-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
diff --git a/src/goMain.ts b/src/goMain.ts
index 41b8d31..a6c0760 100644
--- a/src/goMain.ts
+++ b/src/goMain.ts
@@ -107,38 +107,7 @@
 		await setGOROOTEnvVar(configGOROOT);
 	}
 
-	// Present a warning about the deprecation of the go.documentLink setting.
-	const experimentalFeatures = getGoConfig()['languageServerExperimentalFeatures'];
-	if (experimentalFeatures) {
-		// TODO(golang/vscode-go#50): Eventually notify about deprecation of
-		// all of the settings. See golang/vscode-go#1109 too.
-		// The `diagnostics` setting is still used as a workaround for running custom vet.
-		if (experimentalFeatures['documentLink'] === false) {
-			vscode.window
-				.showErrorMessage(`The 'go.languageServerExperimentalFeature.documentLink' setting is now deprecated.
-Please use '"gopls": {"ui.navigation.importShortcut": "Definition" }' instead.
-See [the settings doc](https://github.com/golang/vscode-go/blob/master/docs/settings.md#uinavigationimportshortcut) for more details.`);
-		}
-		const promptKey = 'promptedLanguageServerExperimentalFeatureDeprecation';
-		const prompted = getFromGlobalState(promptKey, false);
-		if (!prompted && experimentalFeatures['diagnostics'] === false) {
-			const msg = `The 'go.languageServerExperimentalFeature.diagnostics' setting will be deprecated soon.
-If you would like additional configuration for diagnostics from gopls, please see and response to [Issue 50](https://github.com/golang/vscode-go/issues/50).`;
-			const selected = await vscode.window.showInformationMessage(msg, "Don't show again");
-			switch (selected) {
-				case "Don't show again":
-					updateGlobalState(promptKey, true);
-			}
-		}
-	}
-
-	return activateContinued(ctx, cfg);
-}
-
-async function activateContinued(
-	ctx: vscode.ExtensionContext,
-	cfg: vscode.WorkspaceConfiguration
-): Promise<ExtensionAPI> {
+	await showDeprecationWarning();
 	await updateGoVarsFromConfig(goCtx);
 
 	suggestUpdates(ctx);
@@ -162,12 +131,6 @@
 		});
 	}
 
-	// Subscribe to notifications for changes to the configuration
-	// of the language server, even if it's not currently in use.
-	ctx.subscriptions.push(
-		vscode.workspace.onDidChangeConfiguration((e) => watchLanguageServerConfiguration(goCtx, e))
-	);
-
 	registerCommand('go.environment.status', expandGoStatusBar);
 
 	GoRunTestCodeLensProvider.activate(ctx, goCtx);
@@ -184,10 +147,6 @@
 	goCtx.vetDiagnosticCollection = vscode.languages.createDiagnosticCollection('go-vet');
 	ctx.subscriptions.push(goCtx.vetDiagnosticCollection);
 
-	addOnChangeTextDocumentListeners(ctx);
-	addOnChangeActiveTextEditorListeners(ctx);
-	addOnSaveTextDocumentListeners(ctx);
-
 	registerCommand('go.gopath', commands.getCurrentGoPath);
 	registerCommand('go.locate.tools', commands.getConfiguredGoTools);
 	registerCommand('go.add.tags', commands.addTags);
@@ -224,6 +183,63 @@
 	GoExplorerProvider.setup(ctx);
 	VulncheckProvider.setup(ctx, goCtx);
 
+	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 Enviornment 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
+	});
+
+	return extensionAPI;
+}
+
+export function deactivate() {
+	return Promise.all([
+		cancelRunningTests(),
+		killRunningPprof(),
+		Promise.resolve(cleanupTempDir()),
+		Promise.resolve(disposeGoStatusBar())
+	]);
+}
+
+function addOnDidChangeConfigListeners(ctx: vscode.ExtensionContext) {
+	// Subscribe to notifications for changes to the configuration
+	// of the language server, even if it's not currently in use.
+	ctx.subscriptions.push(
+		vscode.workspace.onDidChangeConfiguration((e) => watchLanguageServerConfiguration(goCtx, e))
+	);
 	ctx.subscriptions.push(
 		vscode.workspace.onDidChangeConfiguration(async (e: vscode.ConfigurationChangeEvent) => {
 			if (!e.affectsConfiguration('go')) {
@@ -298,51 +314,6 @@
 			}
 		})
 	);
-
-	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 Enviornment switching commands
-	registerCommand('go.environment.choose', chooseGoEnvironment);
-
-	// Survey related commands
-	registerCommand('go.survey.showConfig', showSurveyConfig);
-	registerCommand('go.survey.resetConfig', resetSurveyConfigs);
-
-	vscode.languages.setLanguageConfiguration(GO_MODE.language, {
-		wordPattern: /(-?\d*\.\d\w*)|([^`~!@#%^&*()\-=+[{\]}\\|;:'",.<>/?\s]+)/g
-	});
-
-	return extensionAPI;
-}
-
-export function deactivate() {
-	return Promise.all([
-		cancelRunningTests(),
-		killRunningPprof(),
-		Promise.resolve(cleanupTempDir()),
-		Promise.resolve(disposeGoStatusBar())
-	]);
 }
 
 function addOnSaveTextDocumentListeners(ctx: vscode.ExtensionContext) {
@@ -540,3 +511,30 @@
 		delete process.env.GOROOT;
 	}
 }
+
+async function showDeprecationWarning() {
+	// Present a warning about the deprecation of the go.documentLink setting.
+	const experimentalFeatures = getGoConfig()['languageServerExperimentalFeatures'];
+	if (experimentalFeatures) {
+		// TODO(golang/vscode-go#50): Eventually notify about deprecation of
+		// all of the settings. See golang/vscode-go#1109 too.
+		// The `diagnostics` setting is still used as a workaround for running custom vet.
+		if (experimentalFeatures['documentLink'] === false) {
+			vscode.window
+				.showErrorMessage(`The 'go.languageServerExperimentalFeature.documentLink' setting is now deprecated.
+	Please use '"gopls": {"ui.navigation.importShortcut": "Definition" }' instead.
+	See [the settings doc](https://github.com/golang/vscode-go/blob/master/docs/settings.md#uinavigationimportshortcut) for more details.`);
+		}
+		const promptKey = 'promptedLanguageServerExperimentalFeatureDeprecation';
+		const prompted = getFromGlobalState(promptKey, false);
+		if (!prompted && experimentalFeatures['diagnostics'] === false) {
+			const msg = `The 'go.languageServerExperimentalFeature.diagnostics' setting will be deprecated soon.
+	If you would like additional configuration for diagnostics from gopls, please see and response to [Issue 50](https://github.com/golang/vscode-go/issues/50).`;
+			const selected = await vscode.window.showInformationMessage(msg, "Don't show again");
+			switch (selected) {
+				case "Don't show again":
+					updateGlobalState(promptKey, true);
+			}
+		}
+	}
+}