in src/goCheck.ts [59:152]
export function check(
goCtx: GoExtensionContext,
fileUri: vscode.Uri,
goConfig: vscode.WorkspaceConfiguration
): Promise<IToolCheckResults[]> {
diagnosticsStatusBarItem.hide();
outputChannel.clear();
const runningToolsPromises = [];
const cwd = path.dirname(fileUri.fsPath);
// If a user has enabled diagnostics via a language server,
// then we disable running build or vet to avoid duplicate errors and warnings.
const lspConfig = buildLanguageServerConfig(goConfig);
const disableBuildAndVet = lspConfig.enabled;
let testPromise: Thenable<boolean>;
const testConfig: TestConfig = {
goConfig,
dir: cwd,
flags: getTestFlags(goConfig),
background: true,
applyCodeCoverage: !!goConfig['coverOnSave']
};
const runTest = () => {
if (testPromise) {
return testPromise;
}
testPromise = isModSupported(fileUri).then((isMod) => {
testConfig.isMod = isMod;
return goTest(testConfig);
});
return testPromise;
};
const { buildDiagnosticCollection, lintDiagnosticCollection, vetDiagnosticCollection } = goCtx;
if (
buildDiagnosticCollection &&
!disableBuildAndVet &&
!!goConfig['buildOnSave'] &&
goConfig['buildOnSave'] !== 'off'
) {
runningToolsPromises.push(
isModSupported(fileUri)
.then((isMod) => goBuild(fileUri, isMod, goConfig, goConfig['buildOnSave'] === 'workspace'))
.then((errors) => ({ diagnosticCollection: buildDiagnosticCollection, errors }))
);
}
if (goConfig['testOnSave']) {
statusBarItem.show();
statusBarItem.text = 'Tests Running';
runTest().then((success) => {
if (statusBarItem.text === '') {
return;
}
if (success) {
statusBarItem.text = 'Tests Passed';
} else {
statusBarItem.text = 'Tests Failed';
}
});
}
if (lintDiagnosticCollection && !!goConfig['lintOnSave'] && goConfig['lintOnSave'] !== 'off') {
const goplsConfig = getGoplsConfig(fileUri);
runningToolsPromises.push(
goLint(fileUri, goConfig, goplsConfig, goConfig['lintOnSave']).then((errors) => ({
diagnosticCollection: lintDiagnosticCollection,
errors
}))
);
}
if (vetDiagnosticCollection && !disableBuildAndVet && !!goConfig['vetOnSave'] && goConfig['vetOnSave'] !== 'off') {
runningToolsPromises.push(
goVet(fileUri, goConfig, goConfig['vetOnSave'] === 'workspace').then((errors) => ({
diagnosticCollection: vetDiagnosticCollection,
errors
}))
);
}
if (goConfig['coverOnSave']) {
runTest().then((success) => {
if (!success) {
return [];
}
});
}
return Promise.all(runningToolsPromises);
}