src/config: move getGoConfig/getGoplsConfig to config
And let them use the new Configuration class
For golang/vscode-go#1094
Change-Id: I96d0cc32b6499e59d1062c2b04031bc675703a24
Reviewed-on: https://go-review.googlesource.com/c/vscode-go/+/283255
Trust: Hyang-Ah Hana Kim <hyangah@gmail.com>
Reviewed-by: Suzy Mueller <suzmue@golang.org>
diff --git a/src/config.ts b/src/config.ts
index cffad71..677dae2 100644
--- a/src/config.ts
+++ b/src/config.ts
@@ -20,7 +20,7 @@
const isTrusted = getFromWorkspaceState(WORKSPACE_IS_TRUSTED_KEY, false);
defaultConfig = new Configuration(isTrusted, vscode.workspace.getConfiguration);
ctx.subscriptions.push(
- vscode.commands.registerCommand('go.workspace.isTrusted.toggle', defaultConfig.toggleWorkspaceIsTrusted)
+ vscode.commands.registerCommand('go.workspace.isTrusted.toggle', toggleWorkspaceIsTrusted)
);
if (isTrusted) {
@@ -40,7 +40,7 @@
'More Info');
switch (val) {
case 'Trust This Workspace':
- await defaultConfig.toggleWorkspaceIsTrusted();
+ await toggleWorkspaceIsTrusted();
break;
case 'More Info':
vscode.env.openExternal(
@@ -58,22 +58,27 @@
});
}
+async function toggleWorkspaceIsTrusted() {
+ const v = defaultConfig.toggleWorkspaceIsTrusted();
+ await updateWorkspaceState(WORKSPACE_IS_TRUSTED_KEY, v);
+}
+
// Go extension configuration for a workspace.
export class Configuration {
constructor(
- private workspaceIsTrusted: boolean,
- private getConfiguration: typeof vscode.workspace.getConfiguration) { }
+ private workspaceIsTrusted = false,
+ private getConfiguration = vscode.workspace.getConfiguration) { }
- public async toggleWorkspaceIsTrusted() {
+ public toggleWorkspaceIsTrusted() {
this.workspaceIsTrusted = !this.workspaceIsTrusted;
- await updateWorkspaceState(WORKSPACE_IS_TRUSTED_KEY, this.workspaceIsTrusted);
+ return this.workspaceIsTrusted;
}
// returns a Proxied vscode.WorkspaceConfiguration, which prevents
// from using the workspace configuration if the workspace is untrusted.
- public get<T>(uri?: vscode.Uri): vscode.WorkspaceConfiguration {
- const cfg = this.getConfiguration('go', uri);
- if (this.workspaceIsTrusted) {
+ public get<T>(section: string, uri?: vscode.Uri): vscode.WorkspaceConfiguration {
+ const cfg = this.getConfiguration(section, uri);
+ if (section !== 'go' || this.workspaceIsTrusted) {
return cfg;
}
@@ -117,3 +122,24 @@
return this._wrapped.update(section, value, configurationTarget, overrideInLanguage);
}
}
+
+// getGoConfig is declared as an exported const rather than a function, so it can be stubbbed in testing.
+export const getGoConfig = (uri?: vscode.Uri) => {
+ return getConfig('go', uri);
+};
+
+// getGoplsConfig returns the user's gopls configuration.
+export function getGoplsConfig(uri?: vscode.Uri) {
+ return getConfig('gopls', uri);
+}
+
+function getConfig(section: string, uri?: vscode.Uri) {
+ if (!uri) {
+ if (vscode.window.activeTextEditor) {
+ uri = vscode.window.activeTextEditor.document.uri;
+ } else {
+ uri = null;
+ }
+ }
+ return defaultConfig ? defaultConfig.get(section, uri) : new Configuration().get(section, uri);
+}
diff --git a/src/goBuild.ts b/src/goBuild.ts
index 66ffb5e..2008ce3 100644
--- a/src/goBuild.ts
+++ b/src/goBuild.ts
@@ -5,6 +5,7 @@
import path = require('path');
import vscode = require('vscode');
+import { getGoConfig } from './config';
import { toolExecutionEnvironment } from './goEnv';
import { buildDiagnosticCollection } from './goMain';
import { isModSupported } from './goModules';
@@ -13,7 +14,6 @@
import { getTestFlags } from './testUtils';
import {
getCurrentGoPath,
- getGoConfig,
getModuleCache,
getTempFilePath,
getWorkspaceFolderPath,
diff --git a/src/goCover.ts b/src/goCover.ts
index 2d525b3..d15cbf0 100644
--- a/src/goCover.ts
+++ b/src/goCover.ts
@@ -8,10 +8,10 @@
import fs = require('fs');
import path = require('path');
import vscode = require('vscode');
+import { getGoConfig } from './config';
import { isModSupported } from './goModules';
import { getImportPathToFolder } from './goPackages';
import { getTestFlags, goTest, showTestOutput, TestConfig } from './testUtils';
-import { getGoConfig } from './util';
import { fixDriveCasingInWindows } from './utils/pathUtils';
let gutterSvgs: { [key: string]: string; };
diff --git a/src/goDebugConfiguration.ts b/src/goDebugConfiguration.ts
index 7ac8851..61fd2f7 100644
--- a/src/goDebugConfiguration.ts
+++ b/src/goDebugConfiguration.ts
@@ -9,11 +9,12 @@
import vscode = require('vscode');
import parse = require('yargs-parser');
import unparse = require('yargs-unparser');
+import { getGoConfig } from './config';
import { toolExecutionEnvironment } from './goEnv';
import { promptForMissingTool } from './goInstallTools';
import { packagePathToGoModPathMap } from './goModules';
import { getFromGlobalState, updateGlobalState } from './stateUtils';
-import { getBinPath, getGoConfig, resolvePath } from './util';
+import { getBinPath, resolvePath } from './util';
import { parseEnvFiles } from './utils/envUtils';
export class GoDebugConfigurationProvider implements vscode.DebugConfigurationProvider {
diff --git a/src/goDeclaration.ts b/src/goDeclaration.ts
index 034413c..4c9fd6d 100644
--- a/src/goDeclaration.ts
+++ b/src/goDeclaration.ts
@@ -8,6 +8,7 @@
import cp = require('child_process');
import path = require('path');
import vscode = require('vscode');
+import { getGoConfig } from './config';
import { toolExecutionEnvironment } from './goEnv';
import { promptForMissingTool, promptForUpdatingTool } from './goInstallTools';
import { getModFolderPath, promptToUpdateToolForModules } from './goModules';
@@ -15,7 +16,6 @@
byteOffsetAt,
getBinPath,
getFileArchive,
- getGoConfig,
getModuleCache,
getWorkspaceFolderPath,
goKeywords,
diff --git a/src/goEnv.ts b/src/goEnv.ts
index 754ff52..dddf3e0 100644
--- a/src/goEnv.ts
+++ b/src/goEnv.ts
@@ -7,7 +7,8 @@
import path = require('path');
import vscode = require('vscode');
-import { getCurrentGoPath, getGoConfig, getToolsGopath, resolvePath } from './util';
+import { getGoConfig } from './config';
+import { getCurrentGoPath, getToolsGopath, resolvePath } from './util';
// toolInstallationEnvironment returns the environment in which tools should
// be installed. It always returns a new object.
diff --git a/src/goEnvironmentStatus.ts b/src/goEnvironmentStatus.ts
index 1f6073b..8adc665 100644
--- a/src/goEnvironmentStatus.ts
+++ b/src/goEnvironmentStatus.ts
@@ -13,12 +13,13 @@
import { promisify } from 'util';
import vscode = require('vscode');
import WebRequest = require('web-request');
+import { getGoConfig } from './config';
import { toolInstallationEnvironment } from './goEnv';
import { logVerbose } from './goLogging';
import { addGoStatus, goEnvStatusbarItem, outputChannel, removeGoStatus } from './goStatus';
import { getFromGlobalState, getFromWorkspaceState, updateGlobalState, updateWorkspaceState } from './stateUtils';
import {
- getBinPath, getCheckForToolsUpdatesConfig, getGoConfig, getGoVersion,
+ getBinPath, getCheckForToolsUpdatesConfig, getGoVersion,
getTempFilePath, GoVersion, rmdirRecursive } from './util';
import {
correctBinname,
diff --git a/src/goExtraInfo.ts b/src/goExtraInfo.ts
index 694af96..24bd7a0 100644
--- a/src/goExtraInfo.ts
+++ b/src/goExtraInfo.ts
@@ -7,8 +7,8 @@
import vscode = require('vscode');
import { CancellationToken, Hover, HoverProvider, Position, TextDocument, WorkspaceConfiguration } from 'vscode';
+import { getGoConfig } from './config';
import { definitionLocation } from './goDeclaration';
-import { getGoConfig } from './util';
export class GoHoverProvider implements HoverProvider {
private goConfig: WorkspaceConfiguration | undefined;
diff --git a/src/goFormat.ts b/src/goFormat.ts
index 7810c04..34644a6 100644
--- a/src/goFormat.ts
+++ b/src/goFormat.ts
@@ -8,9 +8,10 @@
import cp = require('child_process');
import path = require('path');
import vscode = require('vscode');
+import { getGoConfig } from './config';
import { toolExecutionEnvironment } from './goEnv';
import { promptForMissingTool, promptForUpdatingTool } from './goInstallTools';
-import { getBinPath, getGoConfig } from './util';
+import { getBinPath } from './util';
import { killProcessTree } from './utils/processUtils';
export class GoDocumentFormattingEditProvider implements vscode.DocumentFormattingEditProvider {
diff --git a/src/goGenerateTests.ts b/src/goGenerateTests.ts
index a9e71c9..7f8ffe2 100644
--- a/src/goGenerateTests.ts
+++ b/src/goGenerateTests.ts
@@ -8,12 +8,13 @@
import cp = require('child_process');
import path = require('path');
import vscode = require('vscode');
+import { getGoConfig } from './config';
import { toolExecutionEnvironment } from './goEnv';
import { promptForMissingTool } from './goInstallTools';
import { GoDocumentSymbolProvider } from './goOutline';
import { outputChannel } from './goStatus';
-import { getBinPath, getGoConfig } from './util';
+import { getBinPath } from './util';
const generatedWord = 'Generated ';
diff --git a/src/goImplementations.ts b/src/goImplementations.ts
index 36f9e36..4ff1287 100644
--- a/src/goImplementations.ts
+++ b/src/goImplementations.ts
@@ -8,13 +8,13 @@
import cp = require('child_process');
import path = require('path');
import vscode = require('vscode');
+import { getGoConfig } from './config';
import { toolExecutionEnvironment } from './goEnv';
import { promptForMissingTool } from './goInstallTools';
import {
byteOffsetAt,
canonicalizeGOPATHPrefix,
getBinPath,
- getGoConfig,
getWorkspaceFolderPath
} from './util';
import { envPath, getCurrentGoRoot } from './utils/pathUtils';
diff --git a/src/goInstall.ts b/src/goInstall.ts
index 52b0223..874d831 100644
--- a/src/goInstall.ts
+++ b/src/goInstall.ts
@@ -6,10 +6,11 @@
import cp = require('child_process');
import path = require('path');
import vscode = require('vscode');
+import { getGoConfig } from './config';
import { toolExecutionEnvironment } from './goEnv';
import { isModSupported } from './goModules';
import { outputChannel } from './goStatus';
-import { getBinPath, getCurrentGoPath, getGoConfig, getModuleCache } from './util';
+import { getBinPath, getCurrentGoPath, getModuleCache } from './util';
import { envPath, getCurrentGoRoot, getCurrentGoWorkspaceFromGOPATH } from './utils/pathUtils';
export async function installCurrentPackage(): Promise<void> {
diff --git a/src/goInstallTools.ts b/src/goInstallTools.ts
index d4fddd8..97fd0e2 100644
--- a/src/goInstallTools.ts
+++ b/src/goInstallTools.ts
@@ -11,6 +11,7 @@
import { SemVer } from 'semver';
import util = require('util');
import vscode = require('vscode');
+import { getGoConfig } from './config';
import { toolExecutionEnvironment, toolInstallationEnvironment } from './goEnv';
import { addGoRuntimeBaseToPATH, clearGoRuntimeBaseFromPATH } from './goEnvironmentStatus';
import { getLanguageServerToolPath } from './goLanguageServer';
@@ -31,7 +32,6 @@
import {
getBinPath,
getBinPathWithExplanation,
- getGoConfig,
getGoVersion,
getTempFilePath,
getWorkspaceFolderPath,
diff --git a/src/goLanguageServer.ts b/src/goLanguageServer.ts
index b9ea67f..1282f20 100644
--- a/src/goLanguageServer.ts
+++ b/src/goLanguageServer.ts
@@ -33,6 +33,8 @@
import {
LanguageClient
} from 'vscode-languageclient/node';
+import WebRequest = require('web-request');
+import { getGoConfig, getGoplsConfig } from './config';
import { extensionId } from './const';
import { GoCodeActionProvider } from './goCodeAction';
import { GoDefinitionProvider } from './goDeclaration';
@@ -58,16 +60,12 @@
getBinPath,
getCheckForToolsUpdatesConfig,
getCurrentGoPath,
- getGoConfig,
- getGoplsConfig,
getGoVersion,
getWorkspaceFolderPath,
removeDuplicateDiagnostics
} from './util';
import { getToolFromToolPath } from './utils/pathUtils';
-import WebRequest = require('web-request');
-
export interface LanguageServerConfig {
serverName: string;
path: string;
diff --git a/src/goLint.ts b/src/goLint.ts
index 0e8abfb..1cd4346 100644
--- a/src/goLint.ts
+++ b/src/goLint.ts
@@ -5,11 +5,11 @@
import path = require('path');
import vscode = require('vscode');
+import { getGoConfig } from './config';
import { toolExecutionEnvironment } from './goEnv';
import { lintDiagnosticCollection } from './goMain';
import { diagnosticsStatusBarItem, outputChannel } from './goStatus';
import {
- getGoConfig,
getToolsGopath,
getWorkspaceFolderPath,
handleDiagnosticErrors,
diff --git a/src/goLiveErrors.ts b/src/goLiveErrors.ts
index fb592c5..7c4a723 100644
--- a/src/goLiveErrors.ts
+++ b/src/goLiveErrors.ts
@@ -8,11 +8,12 @@
import cp = require('child_process');
import path = require('path');
import vscode = require('vscode');
+import { getGoConfig } from './config';
import { toolExecutionEnvironment } from './goEnv';
import { promptForMissingTool } from './goInstallTools';
import { buildDiagnosticCollection } from './goMain';
import { isModSupported } from './goModules';
-import { getBinPath, getGoConfig } from './util';
+import { getBinPath } from './util';
// Interface for settings configuration for adding and removing tags
interface GoLiveErrorsConfig {
diff --git a/src/goMain.ts b/src/goMain.ts
index 21ad7d2..4c0d474 100644
--- a/src/goMain.ts
+++ b/src/goMain.ts
@@ -9,7 +9,7 @@
import * as path from 'path';
import semver = require('semver');
import vscode = require('vscode');
-import { initConfig } from './config';
+import { getGoConfig, initConfig } from './config';
import { extensionId } from './const';
import { browsePackages } from './goBrowsePackage';
import { buildCode } from './goBuild';
@@ -63,7 +63,6 @@
getBinPath,
getCurrentGoPath,
getExtensionCommands,
- getGoConfig,
getGoEnv,
getGoVersion,
getToolsGopath,
diff --git a/src/goModifytags.ts b/src/goModifytags.ts
index 2d2e87c..8070597 100644
--- a/src/goModifytags.ts
+++ b/src/goModifytags.ts
@@ -7,9 +7,10 @@
import cp = require('child_process');
import vscode = require('vscode');
+import { getGoConfig } from './config';
import { toolExecutionEnvironment } from './goEnv';
import { promptForMissingTool, promptForUpdatingTool } from './goInstallTools';
-import { byteOffsetAt, getBinPath, getFileArchive, getGoConfig } from './util';
+import { byteOffsetAt, getBinPath, getFileArchive } from './util';
// Interface for the output from gomodifytags
interface GomodifytagsOutput {
diff --git a/src/goModules.ts b/src/goModules.ts
index 87f50f5..902e7af 100644
--- a/src/goModules.ts
+++ b/src/goModules.ts
@@ -6,11 +6,12 @@
import cp = require('child_process');
import path = require('path');
import vscode = require('vscode');
+import { getGoConfig } from './config';
import { toolExecutionEnvironment } from './goEnv';
import { installTools } from './goInstallTools';
import { getTool } from './goTools';
import { getFromGlobalState, updateGlobalState } from './stateUtils';
-import { getBinPath, getGoConfig, getGoVersion, getModuleCache } from './util';
+import { getBinPath, getGoVersion, getModuleCache } from './util';
import { envPath, fixDriveCasingInWindows, getCurrentGoRoot } from './utils/pathUtils';
export let GO111MODULE: string;
diff --git a/src/goOutline.ts b/src/goOutline.ts
index 9e52f6d..c0f782b 100644
--- a/src/goOutline.ts
+++ b/src/goOutline.ts
@@ -7,12 +7,12 @@
import cp = require('child_process');
import vscode = require('vscode');
+import { getGoConfig } from './config';
import { toolExecutionEnvironment } from './goEnv';
import { promptForMissingTool, promptForUpdatingTool } from './goInstallTools';
import {
getBinPath,
getFileArchive,
- getGoConfig,
makeMemoizedByteOffsetConverter
} from './util';
import {killProcess} from './utils/processUtils';
diff --git a/src/goPlayground.ts b/src/goPlayground.ts
index 6d09c02..ec7570c 100644
--- a/src/goPlayground.ts
+++ b/src/goPlayground.ts
@@ -6,9 +6,10 @@
import { execFile } from 'child_process';
import * as path from 'path';
import vscode = require('vscode');
+import { getGoConfig } from './config';
import { promptForMissingTool } from './goInstallTools';
import { outputChannel } from './goStatus';
-import { getBinPath, getGoConfig } from './util';
+import { getBinPath } from './util';
const TOOL_CMD_NAME = 'goplay';
diff --git a/src/goReferences.ts b/src/goReferences.ts
index 1aba8d9..53771fd 100644
--- a/src/goReferences.ts
+++ b/src/goReferences.ts
@@ -8,6 +8,7 @@
import cp = require('child_process');
import path = require('path');
import vscode = require('vscode');
+import { getGoConfig } from './config';
import { toolExecutionEnvironment } from './goEnv';
import { promptForMissingTool } from './goInstallTools';
import {
@@ -15,7 +16,6 @@
canonicalizeGOPATHPrefix,
getBinPath,
getFileArchive,
- getGoConfig
} from './util';
import {killProcessTree} from './utils/processUtils';
diff --git a/src/goReferencesCodelens.ts b/src/goReferencesCodelens.ts
index 2746191..1e23213 100644
--- a/src/goReferencesCodelens.ts
+++ b/src/goReferencesCodelens.ts
@@ -8,10 +8,11 @@
import { isAbsolute } from 'path';
import vscode = require('vscode');
import { CancellationToken, CodeLens, Range, TextDocument } from 'vscode';
+import { getGoConfig } from './config';
import { GoBaseCodeLensProvider } from './goBaseCodelens';
import { GoDocumentSymbolProvider } from './goOutline';
import { GoReferenceProvider } from './goReferences';
-import { getBinPath, getGoConfig } from './util';
+import { getBinPath } from './util';
const methodRegex = /^func\s+\(\s*\w+\s+\*?\w+\s*\)\s+/;
diff --git a/src/goRename.ts b/src/goRename.ts
index ff71aa3..6dff038 100644
--- a/src/goRename.ts
+++ b/src/goRename.ts
@@ -7,11 +7,12 @@
import cp = require('child_process');
import vscode = require('vscode');
+import { getGoConfig } from './config';
import { Edit, FilePatch, getEditsFromUnifiedDiffStr, isDiffToolAvailable } from './diffUtils';
import { toolExecutionEnvironment } from './goEnv';
import { promptForMissingTool } from './goInstallTools';
import { outputChannel } from './goStatus';
-import { byteOffsetAt, canonicalizeGOPATHPrefix, getBinPath, getGoConfig } from './util';
+import { byteOffsetAt, canonicalizeGOPATHPrefix, getBinPath } from './util';
import {killProcessTree} from './utils/processUtils';
export class GoRenameProvider implements vscode.RenameProvider {
diff --git a/src/goRunTestCodelens.ts b/src/goRunTestCodelens.ts
index 587450a..9474f6d 100644
--- a/src/goRunTestCodelens.ts
+++ b/src/goRunTestCodelens.ts
@@ -7,10 +7,10 @@
import vscode = require('vscode');
import { CancellationToken, CodeLens, Command, TextDocument } from 'vscode';
+import { getGoConfig } from './config';
import { GoBaseCodeLensProvider } from './goBaseCodelens';
import { GoDocumentSymbolProvider } from './goOutline';
import { getBenchmarkFunctions, getTestFunctions } from './testUtils';
-import { getGoConfig } from './util';
export class GoRunTestCodeLensProvider extends GoBaseCodeLensProvider {
private readonly benchmarkRegex = /^Benchmark.+/;
diff --git a/src/goSignature.ts b/src/goSignature.ts
index c8d7e42..d3bb93f 100755
--- a/src/goSignature.ts
+++ b/src/goSignature.ts
@@ -15,8 +15,9 @@
TextDocument,
WorkspaceConfiguration
} from 'vscode';
+import { getGoConfig } from './config';
import { definitionLocation } from './goDeclaration';
-import { getGoConfig, getParametersAndReturnType, isPositionInComment, isPositionInString } from './util';
+import { getParametersAndReturnType, isPositionInComment, isPositionInString } from './util';
export class GoSignatureHelpProvider implements SignatureHelpProvider {
constructor(private goConfig?: WorkspaceConfiguration) {}
diff --git a/src/goStatus.ts b/src/goStatus.ts
index 2d0585e..3f31d04 100644
--- a/src/goStatus.ts
+++ b/src/goStatus.ts
@@ -8,11 +8,12 @@
import path = require('path');
import vscode = require('vscode');
+import { getGoConfig } from './config';
import { formatGoVersion, GoEnvironmentOption, terminalCreationListener } from './goEnvironmentStatus';
import { buildLanguageServerConfig, getLocalGoplsVersion, languageServerIsRunning, serverOutputChannel } from './goLanguageServer';
import { isGoFile } from './goMode';
import { getModFolderPath, isModSupported } from './goModules';
-import { getGoConfig, getGoVersion } from './util';
+import { getGoVersion } from './util';
export let outputChannel = vscode.window.createOutputChannel('Go');
diff --git a/src/goSuggest.ts b/src/goSuggest.ts
index 20ea2cb..284060f 100644
--- a/src/goSuggest.ts
+++ b/src/goSuggest.ts
@@ -8,6 +8,7 @@
import cp = require('child_process');
import path = require('path');
import vscode = require('vscode');
+import { getGoConfig } from './config';
import { toolExecutionEnvironment } from './goEnv';
import { getTextEditForAddImport } from './goImport';
import { promptForMissingTool, promptForUpdatingTool } from './goInstallTools';
@@ -17,7 +18,6 @@
byteOffsetAt,
getBinPath,
getCurrentGoPath,
- getGoConfig,
getParametersAndReturnType,
goBuiltinTypes,
goKeywords,
diff --git a/src/goSymbol.ts b/src/goSymbol.ts
index 4e4948d..91a378b 100644
--- a/src/goSymbol.ts
+++ b/src/goSymbol.ts
@@ -7,9 +7,10 @@
import cp = require('child_process');
import vscode = require('vscode');
+import { getGoConfig } from './config';
import { toolExecutionEnvironment } from './goEnv';
import { promptForMissingTool, promptForUpdatingTool } from './goInstallTools';
-import { getBinPath, getGoConfig, getWorkspaceFolderPath} from './util';
+import { getBinPath, getWorkspaceFolderPath} from './util';
import { getCurrentGoRoot } from './utils/pathUtils';
import {killProcessTree} from './utils/processUtils';
diff --git a/src/goTools.ts b/src/goTools.ts
index e9387ba..a4e4d97 100644
--- a/src/goTools.ts
+++ b/src/goTools.ts
@@ -12,7 +12,7 @@
import semver = require('semver');
import util = require('util');
import { goLiveErrorsEnabled } from './goLiveErrors';
-import { getBinPath, getGoConfig, GoVersion } from './util';
+import { getBinPath, GoVersion } from './util';
export interface Tool {
name: string;
diff --git a/src/goTypeDefinition.ts b/src/goTypeDefinition.ts
index 0487d70..0568669 100644
--- a/src/goTypeDefinition.ts
+++ b/src/goTypeDefinition.ts
@@ -8,6 +8,7 @@
import cp = require('child_process');
import path = require('path');
import vscode = require('vscode');
+import { getGoConfig } from './config';
import { adjustWordPosition, definitionLocation, parseMissingError } from './goDeclaration';
import { toolExecutionEnvironment } from './goEnv';
import { promptForMissingTool } from './goInstallTools';
@@ -16,7 +17,6 @@
canonicalizeGOPATHPrefix,
getBinPath,
getFileArchive,
- getGoConfig,
goBuiltinTypes
} from './util';
import {killProcessTree} from './utils/processUtils';
diff --git a/src/goVet.ts b/src/goVet.ts
index 210213a..dbfb3ea 100644
--- a/src/goVet.ts
+++ b/src/goVet.ts
@@ -5,11 +5,11 @@
import path = require('path');
import vscode = require('vscode');
+import { getGoConfig } from './config';
import { toolExecutionEnvironment } from './goEnv';
import { vetDiagnosticCollection } from './goMain';
import { diagnosticsStatusBarItem, outputChannel } from './goStatus';
import {
- getGoConfig,
getGoVersion,
getWorkspaceFolderPath,
handleDiagnosticErrors,
diff --git a/src/util.ts b/src/util.ts
index 896914b..4ac4f69 100644
--- a/src/util.ts
+++ b/src/util.ts
@@ -11,6 +11,7 @@
import util = require('util');
import vscode = require('vscode');
import { NearestNeighborDict, Node } from './avlTree';
+import { getGoConfig } from './config';
import { extensionId } from './const';
import { toolExecutionEnvironment } from './goEnv';
import { languageClient } from './goLanguageServer';
@@ -157,16 +158,6 @@
let vendorSupport: boolean | undefined;
let toolsGopath: string;
-// getGoConfig is declared as an exported const rather than a function, so it can be stubbbed in testing.
-export const getGoConfig = (uri?: vscode.Uri) => {
- return getConfig('go', uri);
-};
-
-// getGoplsConfig returns the user's gopls configuration.
-export function getGoplsConfig(uri?: vscode.Uri) {
- return getConfig('gopls', uri);
-}
-
// getCheckForToolsUpdatesConfig returns go.toolsManagement.checkForUpdates configuration.
export function getCheckForToolsUpdatesConfig(gocfg: vscode.WorkspaceConfiguration) {
// useGoProxyToCheckForToolUpdates deprecation
@@ -183,17 +174,6 @@
return gocfg.get('toolsManagement.checkForUpdates') as string;
}
-function getConfig(section: string, uri?: vscode.Uri) {
- if (!uri) {
- if (vscode.window.activeTextEditor) {
- uri = vscode.window.activeTextEditor.document.uri;
- } else {
- uri = null;
- }
- }
- return vscode.workspace.getConfiguration(section, uri);
-}
-
export function byteOffsetAt(document: vscode.TextDocument, position: vscode.Position): number {
const offset = document.offsetAt(position);
const text = document.getText();
diff --git a/test/gopls/extension.test.ts b/test/gopls/extension.test.ts
index 5d4d93c..05d3523 100644
--- a/test/gopls/extension.test.ts
+++ b/test/gopls/extension.test.ts
@@ -3,14 +3,13 @@
* Licensed under the MIT License. See LICENSE in the project root for license information.
*--------------------------------------------------------*/
import * as assert from 'assert';
-import cp = require('child_process');
import { EventEmitter } from 'events';
import * as path from 'path';
import sinon = require('sinon');
import * as vscode from 'vscode';
import { LanguageClient } from 'vscode-languageclient/node';
+import { getGoConfig } from '../../src/config';
import { buildLanguageClient, BuildLanguageClientOption, buildLanguageServerConfig } from '../../src/goLanguageServer';
-import { getGoConfig } from '../../src/util';
// FakeOutputChannel is a fake output channel used to buffer
// the output of the tested language client in an in-memory
diff --git a/test/gopls/update.test.ts b/test/gopls/update.test.ts
index 4a3e101..ecefa75 100644
--- a/test/gopls/update.test.ts
+++ b/test/gopls/update.test.ts
@@ -9,9 +9,10 @@
import semver = require('semver');
import sinon = require('sinon');
import * as vscode from 'vscode';
+import { getGoConfig } from '../../src/config';
import * as lsp from '../../src/goLanguageServer';
import { getTool, Tool } from '../../src/goTools';
-import { getCheckForToolsUpdatesConfig as getCheckForToolUpdatesConfig, getGoConfig } from '../../src/util';
+import { getCheckForToolsUpdatesConfig as getCheckForToolUpdatesConfig } from '../../src/util';
suite('getCheckForToolUpdatesConfig tests', () => {
const CHECK_FOR_UPDATES = 'toolsManagement.checkForUpdates';
diff --git a/test/integration/config.test.ts b/test/integration/config.test.ts
index 4569d9f..500cc58 100644
--- a/test/integration/config.test.ts
+++ b/test/integration/config.test.ts
@@ -12,15 +12,15 @@
suite('GoConfiguration Tests', () => {
function check(trusted: boolean, workspaceConfig: { [key: string]: any }, key: string, expected: any) {
const getConfigurationFn = (section: string) => new MockCfg(workspaceConfig);
- const cfg = (new Configuration(trusted, getConfigurationFn)).get();
+ const cfg = (new Configuration(trusted, getConfigurationFn)).get('go');
const got0 = JSON.stringify(cfg.get(key));
const got1 = JSON.stringify(cfg[key]);
const want = JSON.stringify(expected);
assert.strictEqual(got0, want, `cfg.get(${key}) = ${got0}, want ${want}`);
assert.strictEqual(got1, want, `cfg[${key}] = ${got1}, want ${want}`);
-
}
+
test('trusted workspace', () => {
check(true, { goroot: 'goroot_val' }, 'goroot', 'goroot_val');
check(true, { gopath: 'gopath_val' }, 'gopath', 'gopath_val');
@@ -40,6 +40,27 @@
check(false, { buildFlags: ['-v'] }, 'buildFlags', ['-v']);
check(false, { languageServerFlags: ['-rpc.trace'] }, 'languageServerFlags', ['-rpc.trace']);
});
+
+ function checkGopls(trusted: boolean, workspaceConfig: { [key: string]: any }, key: string, expected: any) {
+ const getConfigurationFn = (section: string) => new MockCfg(workspaceConfig);
+ const cfg = (new Configuration(trusted, getConfigurationFn)).get('gopls');
+
+ const got0 = JSON.stringify(cfg.get(key));
+ const got1 = JSON.stringify(cfg[key]);
+ const want = JSON.stringify(expected);
+ assert.strictEqual(got0, want, `cfg.get(${key}) = ${got0}, want ${want}`);
+ assert.strictEqual(got1, want, `cfg[${key}] = ${got1}, want ${want}`);
+ }
+
+ test('trusted workspace (gopls settings)', () => {
+ checkGopls(true, { buildFlags: '-v' }, 'buildFlags', '-v');
+ checkGopls(true, { env: { GOBIN: 'foo' } }, 'env', { GOBIN: 'foo' });
+ });
+
+ test('untrusted workspace (gopls settings)', () => {
+ checkGopls(false, { buildFlags: '-v' }, 'buildFlags', '-v');
+ checkGopls(false, { env: { GOBIN: 'foo' } }, 'env', { GOBIN: 'foo' });
+ });
});
// tslint:disable: no-any
diff --git a/test/integration/extension.test.ts b/test/integration/extension.test.ts
index 3957b2e..5b75118 100644
--- a/test/integration/extension.test.ts
+++ b/test/integration/extension.test.ts
@@ -9,6 +9,7 @@
import * as path from 'path';
import * as sinon from 'sinon';
import * as vscode from 'vscode';
+import { getGoConfig } from '../../src/config';
import { FilePatch, getEdits, getEditsFromUnifiedDiffStr } from '../../src/diffUtils';
import { check } from '../../src/goCheck';
import { GoDefinitionProvider } from '../../src/goDeclaration';
@@ -33,7 +34,6 @@
import {
getBinPath,
getCurrentGoPath,
- getGoConfig,
getImportPath,
getToolsGopath,
handleDiagnosticErrors,
diff --git a/test/integration/goDebugConfiguration.test.ts b/test/integration/goDebugConfiguration.test.ts
index d65cc82..03662ab 100644
--- a/test/integration/goDebugConfiguration.test.ts
+++ b/test/integration/goDebugConfiguration.test.ts
@@ -5,10 +5,11 @@
import sinon = require('sinon');
import vscode = require('vscode');
import parse = require('yargs-parser');
+import { getGoConfig } from '../../src/config';
import { GoDebugConfigurationProvider } from '../../src/goDebugConfiguration';
import goEnv = require('../../src/goEnv');
import { updateGoVarsFromConfig } from '../../src/goInstallTools';
-import { getGoConfig, rmdirRecursive } from '../../src/util';
+import { rmdirRecursive } from '../../src/util';
suite('Debug Environment Variable Merge Test', () => {
const debugConfigProvider = new GoDebugConfigurationProvider();
@@ -138,7 +139,7 @@
suite('Debug Configuration Merge User Settings', () => {
const debugConfigProvider = new GoDebugConfigurationProvider();
- const utils = require('../../src/util');
+ const config = require('../../src/config');
teardown(() => sinon.restore());
@@ -166,7 +167,7 @@
}) as vscode.WorkspaceConfiguration;
// Adjust the workspace config.
- sinon.stub(utils, 'getGoConfig').returns(goConfig);
+ sinon.stub(config, 'getGoConfig').returns(goConfig);
const cfg2 = {
name: 'Launch',
@@ -208,7 +209,7 @@
}
}
}) as vscode.WorkspaceConfiguration;
- sinon.stub(utils, 'getGoConfig').returns(goConfig);
+ sinon.stub(config, 'getGoConfig').returns(goConfig);
const cfg = {
name: 'Launch',
@@ -249,7 +250,7 @@
}
}
}) as vscode.WorkspaceConfiguration;
- sinon.stub(utils, 'getGoConfig').returns(goConfig);
+ sinon.stub(config, 'getGoConfig').returns(goConfig);
const cfg = {
name: 'Launch',
diff --git a/test/integration/test.test.ts b/test/integration/test.test.ts
index 902c923..670a8bc 100644
--- a/test/integration/test.test.ts
+++ b/test/integration/test.test.ts
@@ -11,8 +11,9 @@
import path = require('path');
import sinon = require('sinon');
import vscode = require('vscode');
+import { getGoConfig } from '../../src/config';
import { computeTestCommand, getTestFlags, goTest } from '../../src/testUtils';
-import { getGoConfig, rmdirRecursive } from '../../src/util';
+import { rmdirRecursive } from '../../src/util';
suite('Test Go Test Args', () => {
function runTest(param: {