eslint: Change test files so eslint does not complain

Remove the old tslint.json files and change all the test files
so that either eslint complaints are fixed by gts fix, or
file-level comments are added to turn the complaints off for now.
(https://github.com/golang/vscode-go/issues/1227)

History of this CL:

trybot succeeded with no changes.

changes to test/gopls/*ts: these failed with
 /workspace/test/gopls/extension.test.ts:39:3
 ERROR: 39:3  semicolon  Unnecessary semicolon
(the tslint style conflicts with the eslint style, which wants semicolons)

now remove tslint.json: that succeeds

add some more linted tests: and as expected that succeeds too

add all the linted test/** files: ok

and now add all the //esline comments:

Change-Id: I9efde901726eb9b28eb5c743e739afbae4508b1e
Reviewed-on: https://go-review.googlesource.com/c/vscode-go/+/291590
Trust: Peter Weinberger <pjw@google.com>
Run-TryBot: Peter Weinberger <pjw@google.com>
TryBot-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Hyang-Ah Hana Kim <hyangah@gmail.com>
diff --git a/.eslintignore b/.eslintignore
new file mode 100644
index 0000000..3e2e84b
--- /dev/null
+++ b/.eslintignore
@@ -0,0 +1,2 @@
+build/
+node_modules/
diff --git a/test/gopls/configuration.test.ts b/test/gopls/configuration.test.ts
index a603127..918a3d5 100644
--- a/test/gopls/configuration.test.ts
+++ b/test/gopls/configuration.test.ts
@@ -1,3 +1,4 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
 /*---------------------------------------------------------
  * Copyright (C) Microsoft Corporation. All rights reserved.
  * Licensed under the MIT License. See License.txt in the project root for license information.
@@ -38,8 +39,8 @@
 					env: { foo: 'bar' },
 					hoverKind: 'NoDocumentation',
 					usePlaceholders: true,
-					linkTarget: 'godoc.org',
-				},
+					linkTarget: 'godoc.org'
+				}
 			},
 			{
 				name: 'user set extra gopls settings',
@@ -48,15 +49,15 @@
 					undefinedGoplsSetting: true
 				}),
 				want: {
-					undefinedGoplsSetting: true,
-				},
+					undefinedGoplsSetting: true
+				}
 			},
 			{
 				name: 'never returns undefined',
 				section: 'undefined.section',
 				input: undefined,
-				want: {},
-			},
+				want: {}
+			}
 		];
 		testCases.map((tc: TestCase) => {
 			const actual = lsp.filterGoplsDefaultConfigValues(tc.input, undefined);
@@ -89,7 +90,7 @@
 				goplsConfig: {},
 				goConfig: {
 					buildFlags: [],
-					buildTags: '',
+					buildTags: ''
 				},
 				want: {}
 			},
@@ -129,10 +130,10 @@
 			{
 				name: 'do not mutate misconfigured gopls.buildFlags',
 				goplsConfig: {
-					'build.buildFlags': '-modfile gopls.mod',  // misconfiguration
+					'build.buildFlags': '-modfile gopls.mod' // misconfiguration
 				},
 				goConfig: {
-					buildFlags: '-modfile go.mod -tags tag1 -modcacherw',
+					buildFlags: '-modfile go.mod -tags tag1 -modcacherw'
 				},
 				want: { 'build.buildFlags': '-modfile gopls.mod' }
 			},
@@ -140,19 +141,18 @@
 				name: 'do not overwrite gopls config if it is explicitly set',
 				goplsConfig: {
 					'build.env': { GOPROXY: 'direct' },
-					'build.buildFlags': [],  // empty
+					'build.buildFlags': [] // empty
 				},
 				goConfig: {
 					// expect only non-conflicting flags (tags, modcacherw) passing.
 					buildFlags: ['-modfile go.mod -tags tag1 -modcacherw'],
-					buildTags: 'tag3',
+					buildTags: 'tag3'
 				},
 				want: {
 					'build.env': { GOPROXY: 'direct' },
-					'build.buildFlags': [],
-				}  // gopls.buildFlags untouched.
-			},
-
+					'build.buildFlags': []
+				} // gopls.buildFlags untouched.
+			}
 		];
 		testCases.map((tc: TestCase) => {
 			const actual = lsp.passGoConfigToGoplsConfigValues(tc.goplsConfig, tc.goConfig);
diff --git a/test/gopls/extension.test.ts b/test/gopls/extension.test.ts
index 05d3523..0bdae7d 100644
--- a/test/gopls/extension.test.ts
+++ b/test/gopls/extension.test.ts
@@ -1,3 +1,4 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
 /*---------------------------------------------------------
  * Copyright (C) Microsoft Corporation. All rights reserved.
  * Licensed under the MIT License. See LICENSE in the project root for license information.
@@ -5,11 +6,11 @@
 import * as assert from 'assert';
 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 sinon = require('sinon');
 
 // FakeOutputChannel is a fake output channel used to buffer
 // the output of the tested language client in an in-memory
@@ -18,7 +19,7 @@
 	public name = 'FakeOutputChannel';
 	public show = sinon.fake(); // no-empty
 	public hide = sinon.fake(); // no-empty
-	public dispose = sinon.fake();  // no-empty
+	public dispose = sinon.fake(); // no-empty
 
 	private buf = [] as string[];
 
@@ -34,10 +35,12 @@
 
 	public append = (v: string) => this.enqueue(v);
 	public appendLine = (v: string) => this.enqueue(v);
-	public clear = () => { this.buf = []; };
+	public clear = () => {
+		this.buf = [];
+	};
 	public toString = () => {
 		return this.buf.join('\n');
-	}
+	};
 
 	private enqueue = (v: string) => {
 		this.registeredPatterns?.forEach((p) => {
@@ -46,9 +49,11 @@
 			}
 		});
 
-		if (this.buf.length > 1024) { this.buf.shift(); }
+		if (this.buf.length > 1024) {
+			this.buf.shift();
+		}
 		this.buf.push(v.trim());
-	}
+	};
 }
 
 // Env is a collection of test-related variables and lsp client.
@@ -81,17 +86,18 @@
 		});
 	}
 
-	public async setup(filePath: string) {  // file path to open.
+	public async setup(filePath: string) {
+		// file path to open.
 		this.fakeOutputChannel = new FakeOutputChannel();
 		const pkgLoadingDone = this.onMessageInTrace('Finished loading packages.', 60_000);
 
 		// Start the language server with the fakeOutputChannel.
 		const goConfig = Object.create(getGoConfig(), {
 			useLanguageServer: { value: true },
-			languageServerFlags: { value: ['-rpc.trace'] },  // enable rpc tracing to monitor progress reports
+			languageServerFlags: { value: ['-rpc.trace'] } // enable rpc tracing to monitor progress reports
 		});
 		const cfg: BuildLanguageClientOption = buildLanguageServerConfig(goConfig);
-		cfg.outputChannel = this.fakeOutputChannel;  // inject our fake output channel.
+		cfg.outputChannel = this.fakeOutputChannel; // inject our fake output channel.
 		this.languageClient = await buildLanguageClient(cfg);
 		this.disposables.push(this.languageClient.start());
 
@@ -145,13 +151,21 @@
 			['inside a number', new vscode.Position(28, 16), null, null], // inside a number
 			['func main()', new vscode.Position(22, 5), 'func main()', null],
 			['import "math"', new vscode.Position(40, 23), 'package math', '`math` on'],
-			['func Println()', new vscode.Position(19, 6), 'func fmt.Println(a ...interface{}) (n int, err error)', 'Println formats '],
+			[
+				'func Println()',
+				new vscode.Position(19, 6),
+				'func fmt.Println(a ...interface{}) (n int, err error)',
+				'Println formats '
+			],
 			['func print()', new vscode.Position(23, 4), 'func print(txt string)', 'This is an unexported function ']
 		];
 
 		const promises = testCases.map(async ([name, position, expectedSignature, expectedDoc]) => {
-			const hovers = await vscode.commands.executeCommand(
-				'vscode.executeHoverProvider', uri, position) as vscode.Hover[];
+			const hovers = (await vscode.commands.executeCommand(
+				'vscode.executeHoverProvider',
+				uri,
+				position
+			)) as vscode.Hover[];
 
 			if (expectedSignature === null && expectedDoc === null) {
 				assert.equal(hovers.length, 0, `check hovers over ${name} failed: unexpected non-empty hover message.`);
@@ -159,21 +173,24 @@
 			}
 
 			const hover = hovers[0];
-			assert.equal(hover.contents.length, 1, `check hovers over ${name} failed: unexpected number of hover messages.`);
+			assert.equal(
+				hover.contents.length,
+				1,
+				`check hovers over ${name} failed: unexpected number of hover messages.`
+			);
 			const gotMessage = (<vscode.MarkdownString>hover.contents[0]).value;
 			assert.ok(
-				gotMessage.includes('```go\n' + expectedSignature + '\n```')
-				&& (!expectedDoc || gotMessage.includes(expectedDoc)),
-				`check hovers over ${name} failed: got ${gotMessage}`);
+				gotMessage.includes('```go\n' + expectedSignature + '\n```') &&
+					(!expectedDoc || gotMessage.includes(expectedDoc)),
+				`check hovers over ${name} failed: got ${gotMessage}`
+			);
 		});
 		return Promise.all(promises);
 	});
 
 	test('Completion middleware', async () => {
 		const { uri } = await env.openDoc(testdataDir, 'gogetdocTestData', 'test.go');
-		const testCases: [string, vscode.Position, string][] = [
-			['fmt.P<>', new vscode.Position(19, 6), 'Print'],
-		];
+		const testCases: [string, vscode.Position, string][] = [['fmt.P<>', new vscode.Position(19, 6), 'Print']];
 		for (const [name, position, wantFilterText] of testCases) {
 			let list: vscode.CompletionList<vscode.CompletionItem>;
 			// Query completion items. We expect the hard coded filter text hack
@@ -184,8 +201,11 @@
 			// Retry a couple of times if we see a complete result as a workaround.
 			// (github.com/golang/vscode-go/issues/363)
 			for (let i = 0; i < 3; i++) {
-				list = await vscode.commands.executeCommand(
-					'vscode.executeCompletionItemProvider', uri, position) as vscode.CompletionList;
+				list = (await vscode.commands.executeCommand(
+					'vscode.executeCompletionItemProvider',
+					uri,
+					position
+				)) as vscode.CompletionList;
 				if (list.isIncomplete) {
 					break;
 				}
@@ -194,7 +214,7 @@
 			}
 			// Confirm that the hardcoded filter text hack has been applied.
 			if (!list.isIncomplete) {
-				assert.fail(`gopls should provide an incomplete list by default`);
+				assert.fail('gopls should provide an incomplete list by default');
 			}
 
 			// vscode.executeCompletionItemProvider will return results from all
@@ -203,13 +223,24 @@
 			// prevent us from detecting problems caused by issues between the language
 			// client library and the vscode.
 			for (const item of list.items) {
-				if (item.kind === vscode.CompletionItemKind.Snippet) { continue; }  // gopls does not supply Snippet yet.
-				assert.strictEqual(item.filterText ?? item.label, wantFilterText,
+				if (item.kind === vscode.CompletionItemKind.Snippet) {
+					continue;
+				} // gopls does not supply Snippet yet.
+				assert.strictEqual(
+					item.filterText ?? item.label,
+					wantFilterText,
 					`${uri}:${name} failed, unexpected filter text ` +
-					`(got ${item.filterText ?? item.label}, want ${wantFilterText})\n` +
-					`${JSON.stringify(item, null, 2)}`);
-				if (item.kind === vscode.CompletionItemKind.Method || item.kind === vscode.CompletionItemKind.Function) {
-					assert.ok(item.command, `${uri}:${name}: expected command associated with ${item.label}, found none`);
+						`(got ${item.filterText ?? item.label}, want ${wantFilterText})\n` +
+						`${JSON.stringify(item, null, 2)}`
+				);
+				if (
+					item.kind === vscode.CompletionItemKind.Method ||
+					item.kind === vscode.CompletionItemKind.Function
+				) {
+					assert.ok(
+						item.command,
+						`${uri}:${name}: expected command associated with ${item.label}, found none`
+					);
 				}
 			}
 		}
diff --git a/test/gopls/index.ts b/test/gopls/index.ts
index eae81d7..f332137 100644
--- a/test/gopls/index.ts
+++ b/test/gopls/index.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable node/no-unpublished-import */
 /*---------------------------------------------------------
  * Copyright (C) Microsoft Corporation. All rights reserved.
  * Licensed under the MIT License. See LICENSE in the project root for license information.
diff --git a/test/gopls/report.test.ts b/test/gopls/report.test.ts
index 7cdcc37..e378264 100644
--- a/test/gopls/report.test.ts
+++ b/test/gopls/report.test.ts
@@ -16,33 +16,40 @@
 		}
 		const testCases: TestCase[] = [
 			{
-				name: `panic trace`,
+				name: 'panic trace',
 				in: traceFromIssueGo41435,
-				want: sanitizedTraceFromIssueGo41435,
+				want: sanitizedTraceFromIssueGo41435
 			},
 			{
-				name: `initialization error message`,
+				name: 'initialization error message',
 				in: traceFromIssueVSCodeGo572,
 				want: sanitizedTraceFromIssuVSCodeGo572
 			},
 			{
-				name: `incomplete panic trace`,
-				in: `panic: \nsecret\n`,
-				wantReason: `incomplete panic trace`
+				name: 'incomplete panic trace',
+				in: 'panic: \nsecret\n',
+				wantReason: 'incomplete panic trace'
 			},
 			{
-				name: `incomplete initialization error message`,
-				in: `Secret Starting client failed.\nAnoter Secret\n`,
-				wantReason: `unrecognized crash pattern`
+				name: 'incomplete initialization error message',
+				in: 'Secret Starting client failed.\nAnoter Secret\n',
+				wantReason: 'unrecognized crash pattern'
 			}
 		];
 
 		testCases.map((tc: TestCase) => {
-			const {sanitizedLog, failureReason}  = sanitizeGoplsTrace(tc.in);
-			assert.strictEqual(sanitizedLog, tc.want, `sanitizeGoplsTrace(${tc.name}) returned unexpected sanitizedLog result`);
-			assert.strictEqual(failureReason, tc.wantReason, `sanitizeGoplsTrace(${tc.name}) returned unexpected failureReason result`);
+			const { sanitizedLog, failureReason } = sanitizeGoplsTrace(tc.in);
+			assert.strictEqual(
+				sanitizedLog,
+				tc.want,
+				`sanitizeGoplsTrace(${tc.name}) returned unexpected sanitizedLog result`
+			);
+			assert.strictEqual(
+				failureReason,
+				tc.wantReason,
+				`sanitizeGoplsTrace(${tc.name}) returned unexpected failureReason result`
+			);
 		});
-
 	});
 });
 
diff --git a/test/gopls/survey.test.ts b/test/gopls/survey.test.ts
index 405c6af..b5b8424 100644
--- a/test/gopls/survey.test.ts
+++ b/test/gopls/survey.test.ts
@@ -13,10 +13,7 @@
 		// global state -> offer survey
 		const testCases: [goLanguageServer.SurveyConfig, boolean][] = [
 			// User who is activating the extension for the first time.
-			[
-				{},
-				true,
-			],
+			[{}, true],
 			// User who has already taken the survey.
 			[
 				{
@@ -24,35 +21,35 @@
 					dateComputedPromptThisMonth: new Date('2020-04-10'),
 					lastDatePrompted: new Date('2020-04-02'),
 					prompt: true,
-					promptThisMonth: false,
+					promptThisMonth: false
 				},
-				undefined,
+				undefined
 			],
 			// User who has declined survey prompting.
 			[
 				{
 					dateComputedPromptThisMonth: new Date('2020-04-10'),
 					lastDatePrompted: new Date('2020-04-02'),
-					prompt: false,
+					prompt: false
 				},
-				undefined,
+				undefined
 			],
 			// User who hasn't activated the extension in a while, but has opted in to prompting.
 			[
 				{
 					dateComputedPromptThisMonth: new Date('2019-04-10'),
 					lastDatePrompted: new Date('2019-01-02'),
-					prompt: true,
+					prompt: true
 				},
-				true,
+				true
 			],
 			// User who hasn't activated the extension in a while, and has never been prompted.
 			[
 				{
 					dateComputedPromptThisMonth: new Date('2019-04-10'),
-					lastDatePrompted: new Date('2019-01-02'),
+					lastDatePrompted: new Date('2019-01-02')
 				},
-				true,
+				true
 			],
 			// User who should get prompted this month, but hasn't been yet.
 			[
@@ -61,10 +58,10 @@
 					dateComputedPromptThisMonth: new Date('2020-04-10'),
 					lastDatePrompted: new Date('2019-01-02'),
 					prompt: true,
-					promptThisMonth: true,
+					promptThisMonth: true
 				},
-				true,
-			],
+				true
+			]
 		];
 		testCases.map(([testConfig, wantPrompt], i) => {
 			// Replace Math.Random so that it always returns 1. This means
@@ -101,10 +98,10 @@
 		[{}, 'Not now', 1],
 		[{}, 'Never', 2],
 		// // Saved config, doesn't matter what the user chooses.
-		[{ prompt: false, }, '', 0],
+		[{ prompt: false }, '', 0],
 		[{ prompt: false, lastDatePrompted: new Date() }, '', 0],
-		[{ prompt: true, }, '', 1],
-		[{ prompt: true, lastDatePrompted: new Date() }, '', 0],
+		[{ prompt: true }, '', 1],
+		[{ prompt: true, lastDatePrompted: new Date() }, '', 0]
 	];
 
 	testCases.map(async ([testConfig, choice, wantCount], i) => {
diff --git a/test/gopls/update.test.ts b/test/gopls/update.test.ts
index d279fdb..8df0497 100644
--- a/test/gopls/update.test.ts
+++ b/test/gopls/update.test.ts
@@ -1,18 +1,20 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable node/no-deprecated-api */
+/* eslint-disable @typescript-eslint/no-unused-vars */
 /*---------------------------------------------------------
  * Copyright (C) Microsoft Corporation. All rights reserved.
  * Licensed under the MIT License. See License.txt in the project root for license information.
  *--------------------------------------------------------*/
 
 import * as assert from 'assert';
-import { defaultCipherList } from 'constants';
-import moment = require('moment');
-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 } from '../../src/util';
+import moment = require('moment');
+import semver = require('semver');
+import sinon = require('sinon');
 
 suite('getCheckForToolUpdatesConfig tests', () => {
 	const CHECK_FOR_UPDATES = 'toolsManagement.checkForUpdates';
@@ -23,8 +25,14 @@
 		const { key, defaultValue, globalValue, workspaceValue } = defaultConfigInspector;
 		assert.deepStrictEqual(
 			{ key, defaultValue, globalValue, workspaceValue },
-			{ key: `go.${CHECK_FOR_UPDATES}`, defaultValue: 'proxy', globalValue: undefined, workspaceValue: undefined },
-			CHECK_FOR_UPDATES);
+			{
+				key: `go.${CHECK_FOR_UPDATES}`,
+				defaultValue: 'proxy',
+				globalValue: undefined,
+				workspaceValue: undefined
+			},
+			CHECK_FOR_UPDATES
+		);
 		assert.strictEqual(getGoConfig().get(LEGACY_CHECK_FOR_UPDATES), true, LEGACY_CHECK_FOR_UPDATES);
 	});
 
@@ -32,19 +40,30 @@
 	// vscode.getConfiguration is read-only, and doesn't allow property modification
 	// so working with sinon directly doesn't seem possible.
 	class TestWorkspaceConfiguration implements vscode.WorkspaceConfiguration {
-		constructor(private _wrapped: vscode.WorkspaceConfiguration) { }
-		public get<T>(params: string) { return this._wrapped.get<T>(params); }
-		public has(params: string) { return this._wrapped.has(params); }
-		public inspect<T>(params: string) { return this._wrapped.inspect<T>(params); }
+		constructor(private _wrapped: vscode.WorkspaceConfiguration) {}
+		public get<T>(params: string) {
+			return this._wrapped.get<T>(params);
+		}
+		public has(params: string) {
+			return this._wrapped.has(params);
+		}
+		public inspect<T>(params: string) {
+			return this._wrapped.inspect<T>(params);
+		}
 		public update<T>(
-			section: string, value: any,
-			configurationTarget?: vscode.ConfigurationTarget | boolean, overrideInLanguage?: boolean) {
+			section: string,
+			value: any,
+			configurationTarget?: vscode.ConfigurationTarget | boolean,
+			overrideInLanguage?: boolean
+		) {
 			return this._wrapped.update(section, value, configurationTarget, overrideInLanguage);
 		}
 		[key: string]: any;
 	}
 
-	teardown(() => { sinon.restore(); });
+	teardown(() => {
+		sinon.restore();
+	});
 
 	test('default checkForUpdates returns proxy', () => {
 		const gocfg = getGoConfig();
@@ -52,28 +71,37 @@
 	});
 	test('local when new config is not set and legacy config is set to false', () => {
 		const gocfg = new TestWorkspaceConfiguration(getGoConfig());
-		sinon.stub(gocfg, 'get')
-			.withArgs(LEGACY_CHECK_FOR_UPDATES).returns(false);
+		sinon.stub(gocfg, 'get').withArgs(LEGACY_CHECK_FOR_UPDATES).returns(false);
 
 		assert.strictEqual(getCheckForToolUpdatesConfig(gocfg), 'local');
 	});
 	test('proxy when new config is "proxy" and legacy config is set to false', () => {
 		const gocfg = new TestWorkspaceConfiguration(getGoConfig());
-		sinon.stub(gocfg, 'get')
-			.withArgs(LEGACY_CHECK_FOR_UPDATES).returns(false)
-			.withArgs(CHECK_FOR_UPDATES).returns('proxy');
-		sinon.stub(gocfg, 'inspect').withArgs(CHECK_FOR_UPDATES).returns(
-			Object.assign({}, defaultConfigInspector, { globalValue: 'proxy' }));
+		sinon
+			.stub(gocfg, 'get')
+			.withArgs(LEGACY_CHECK_FOR_UPDATES)
+			.returns(false)
+			.withArgs(CHECK_FOR_UPDATES)
+			.returns('proxy');
+		sinon
+			.stub(gocfg, 'inspect')
+			.withArgs(CHECK_FOR_UPDATES)
+			.returns(Object.assign({}, defaultConfigInspector, { globalValue: 'proxy' }));
 
 		assert.strictEqual(getCheckForToolUpdatesConfig(gocfg), 'proxy');
 	});
 	test('off when new config (workspace) is "off" and legacy config is set to false', () => {
 		const gocfg = new TestWorkspaceConfiguration(getGoConfig());
-		sinon.stub(gocfg, 'get')
-			.withArgs(LEGACY_CHECK_FOR_UPDATES).returns(false)
-			.withArgs(CHECK_FOR_UPDATES).returns('off');
-		sinon.stub(gocfg, 'inspect').withArgs(CHECK_FOR_UPDATES).returns(
-			Object.assign({}, defaultConfigInspector, { workspaceValue: 'off' }));
+		sinon
+			.stub(gocfg, 'get')
+			.withArgs(LEGACY_CHECK_FOR_UPDATES)
+			.returns(false)
+			.withArgs(CHECK_FOR_UPDATES)
+			.returns('off');
+		sinon
+			.stub(gocfg, 'inspect')
+			.withArgs(CHECK_FOR_UPDATES)
+			.returns(Object.assign({}, defaultConfigInspector, { workspaceValue: 'off' }));
 		assert.strictEqual(getCheckForToolUpdatesConfig(gocfg), 'off');
 	});
 });
@@ -100,56 +128,26 @@
 			['developer version (pre-release)', '(devel)', true, null],
 			['nonsense version', 'nosuchversion', false, latestVersion],
 			['nonsense version (pre-release)', 'nosuchversion', true, latestPrereleaseVersion],
-			[
-				'latest pre-release',
-				'v0.4.2-pre1',
-				false, null,
-			],
-			[
-				'latest pre-release (pre-release)',
-				'v0.4.2-pre1',
-				true, null,
-			],
-			[
-				'outdated pre-release version',
-				'v0.3.1-pre1',
-				false, latestVersion,
-			],
-			[
-				'outdated pre-release version (pre-release)',
-				'v0.3.1-pre1',
-				true, latestPrereleaseVersion,
-			],
-			[
-				'recent pseudoversion after pre-release, 2020-05-20',
-				'v0.0.0-20200521000000-2212a7e161a5',
-				false, null,
-			],
-			[
-				'recent pseudoversion before pre-release, 2020-05-20',
-				'v0.0.0-20200515000000-2212a7e161a5',
-				false, null,
-			],
-			[
-				'recent pseudoversion after pre-release (pre-release)',
-				'v0.0.0-20200521000000-2212a7e161a5',
-				true, null,
-			],
+			['latest pre-release', 'v0.4.2-pre1', false, null],
+			['latest pre-release (pre-release)', 'v0.4.2-pre1', true, null],
+			['outdated pre-release version', 'v0.3.1-pre1', false, latestVersion],
+			['outdated pre-release version (pre-release)', 'v0.3.1-pre1', true, latestPrereleaseVersion],
+			['recent pseudoversion after pre-release, 2020-05-20', 'v0.0.0-20200521000000-2212a7e161a5', false, null],
+			['recent pseudoversion before pre-release, 2020-05-20', 'v0.0.0-20200515000000-2212a7e161a5', false, null],
+			['recent pseudoversion after pre-release (pre-release)', 'v0.0.0-20200521000000-2212a7e161a5', true, null],
 			[
 				'recent pseudoversion before pre-release (pre-release)',
 				'v0.0.0-20200515000000-2212a7e161a5',
-				true, latestPrereleaseVersion,
+				true,
+				latestPrereleaseVersion
 			],
-			[
-				'outdated pseudoversion',
-				'v0.0.0-20200309030707-2212a7e161a5',
-				false, latestVersion,
-			],
+			['outdated pseudoversion', 'v0.0.0-20200309030707-2212a7e161a5', false, latestVersion],
 			[
 				'outdated pseudoversion (pre-release)',
 				'v0.0.0-20200309030707-2212a7e161a5',
-				true, latestPrereleaseVersion,
-			],
+				true,
+				latestPrereleaseVersion
+			]
 		];
 		for (const [name, usersVersion, acceptPrerelease, want] of testCases) {
 			sinon.replace(lsp, 'getLocalGoplsVersion', async () => {
@@ -176,11 +174,11 @@
 				checkForUpdates: 'proxy',
 				env: {},
 				features: {
-					diagnostics: true,
+					diagnostics: true
 				},
 				flags: [],
 				modtime: new Date(),
-				serverName: 'gopls',
+				serverName: 'gopls'
 			});
 			assert.deepEqual(got, want, `${name}: failed (got: '${got}' ${typeof got} want: '${want}' ${typeof want})`);
 			sinon.restore();
diff --git a/test/integration/codelens.test.ts b/test/integration/codelens.test.ts
index 91fb23a..bee6b27 100644
--- a/test/integration/codelens.test.ts
+++ b/test/integration/codelens.test.ts
@@ -46,7 +46,7 @@
 
 		fs.removeSync(repoPath);
 		fs.copySync(fixtureSourcePath, fixturePath, {
-			recursive: true,
+			recursive: true
 		});
 		goConfig = getGoConfig();
 		const uri = vscode.Uri.file(path.join(fixturePath, 'codelens_test.go'));
@@ -117,8 +117,14 @@
 		const benchmarkDocument = await vscode.workspace.openTextDocument(uri);
 		const codeLenses = await codeLensProvider.provideCodeLenses(benchmarkDocument, cancellationTokenSource.token);
 		assert.equal(codeLenses.length, 6);
-		const wantCommands = ['go.test.package', 'go.test.file', 'go.benchmark.package',
-			'go.benchmark.file', 'go.benchmark.cursor', 'go.debug.cursor'];
+		const wantCommands = [
+			'go.test.package',
+			'go.test.file',
+			'go.benchmark.package',
+			'go.benchmark.file',
+			'go.benchmark.cursor',
+			'go.debug.cursor'
+		];
 		for (let i = 0; i < codeLenses.length; i++) {
 			assert.equal(codeLenses[i].command.command, wantCommands[i]);
 		}
diff --git a/test/integration/config.test.ts b/test/integration/config.test.ts
index e9fa344..1d7eee4 100644
--- a/test/integration/config.test.ts
+++ b/test/integration/config.test.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/no-explicit-any */
 /*---------------------------------------------------------
  * Copyright 2021 The Go Authors. All rights reserved.
  * Licensed under the MIT License. See LICENSE in the project root for license information.
@@ -6,13 +8,13 @@
 'use strict';
 
 import * as assert from 'assert';
-import vscode = require('vscode');
 import { Configuration } from '../../src/config';
+import vscode = require('vscode');
 
 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('go');
+		const cfg = new Configuration(trusted, getConfigurationFn).get('go');
 
 		const got0 = JSON.stringify(cfg.get(key));
 		const got1 = JSON.stringify(cfg[key]);
@@ -45,7 +47,7 @@
 
 	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 cfg = new Configuration(trusted, getConfigurationFn).get('gopls');
 
 		const got0 = JSON.stringify(cfg.get(key));
 		const got1 = JSON.stringify(cfg[key]);
@@ -76,7 +78,7 @@
 		// getter
 		Object.defineProperties(this, Object.getOwnPropertyDescriptors(workspaceSettings));
 		this.map = new Map<string, any>(Object.entries(workspaceSettings));
-		this.wrapped = vscode.workspace.getConfiguration('go');  // intentionally using vscode API directly.
+		this.wrapped = vscode.workspace.getConfiguration('go'); // intentionally using vscode API directly.
 	}
 
 	// tslint:disable: no-any
@@ -103,9 +105,11 @@
 	}
 
 	public update(
-		section: string, value: any,
+		section: string,
+		value: any,
 		configurationTarget?: boolean | vscode.ConfigurationTarget,
-		overrideInLanguage?: boolean): Thenable<void> {
+		overrideInLanguage?: boolean
+	): Thenable<void> {
 		throw new Error('Method not implemented.');
 	}
 }
diff --git a/test/integration/coverage.test.ts b/test/integration/coverage.test.ts
index e0415d9..f49384e 100644
--- a/test/integration/coverage.test.ts
+++ b/test/integration/coverage.test.ts
@@ -1,3 +1,4 @@
+/* eslint-disable @typescript-eslint/no-unused-vars */
 /*---------------------------------------------------------
  * Copyright 2020 The Go Authors. All rights reserved.
  * Licensed under the MIT License. See LICENSE in the project root for license information.
@@ -6,13 +7,12 @@
 'use strict';
 
 import * as assert from 'assert';
+import { applyCodeCoverageToAllEditors, coverageFilesForTest, initForTest } from '../../src/goCover';
+import { updateGoVarsFromConfig } from '../../src/goInstallTools';
 import fs = require('fs-extra');
 import path = require('path');
 import sinon = require('sinon');
 import vscode = require('vscode');
-import { applyCodeCoverageToAllEditors, coverageFilesForTest, initForTest } from '../../src/goCover';
-import { updateGoVarsFromConfig } from '../../src/goInstallTools';
-import { getCurrentGoPath, getWorkspaceFolderPath } from '../../src/util';
 
 // The ideal test would check that each open editor containing a file with coverage
 // information is displayed correctly. We cannot see the applied decorations, so the
diff --git a/test/integration/extension.test.ts b/test/integration/extension.test.ts
index 2e21a00..0d28d30 100644
--- a/test/integration/extension.test.ts
+++ b/test/integration/extension.test.ts
@@ -1,12 +1,14 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable eqeqeq */
+/* eslint-disable node/no-unpublished-import */
 /*---------------------------------------------------------
  * Copyright (C) Microsoft Corporation. All rights reserved.
  * 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 * as fs from 'fs-extra';
-import os = require('os');
 import * as path from 'path';
 import * as sinon from 'sinon';
 import * as vscode from 'vscode';
@@ -36,11 +38,12 @@
 	getBinPath,
 	getCurrentGoPath,
 	getImportPath,
-	getToolsGopath,
 	handleDiagnosticErrors,
 	ICheckResult,
 	isVendorSupported
 } from '../../src/util';
+import cp = require('child_process');
+import os = require('os');
 
 const testAll = (isModuleMode: boolean) => {
 	const dummyCancellationSource = new vscode.CancellationTokenSource();
@@ -187,7 +190,9 @@
 	}
 
 	test('Test Definition Provider using godoc', async function () {
-		if (isModuleMode) { this.skip(); } // not working in module mode.
+		if (isModuleMode) {
+			this.skip();
+		} // not working in module mode.
 
 		const config = Object.create(getGoConfig(), {
 			docsTool: { value: 'godoc' }
@@ -196,7 +201,9 @@
 	});
 
 	test('Test Definition Provider using gogetdoc', async function () {
-		if (isModuleMode) {	this.skip(); }  // not working in module mode.
+		if (isModuleMode) {
+			this.skip();
+		} // not working in module mode.
 		const gogetdocPath = getBinPath('gogetdoc');
 		if (gogetdocPath === 'gogetdoc') {
 			// gogetdoc is not installed, so skip the test
@@ -209,7 +216,9 @@
 	});
 
 	test('Test SignatureHelp Provider using godoc', async function () {
-		if (isModuleMode) { this.skip(); }  // not working in module mode
+		if (isModuleMode) {
+			this.skip();
+		} // not working in module mode
 
 		const printlnDoc = `Println formats using the default formats for its operands and writes to
 standard output. Spaces are always added between operands and a newline is
@@ -227,7 +236,7 @@
 			[
 				new vscode.Position(23, 7),
 				'print(txt string)',
-				`This is an unexported function so couldn't get this comment on hover :( Not\nanymore!!\n`,
+				"This is an unexported function so couldn't get this comment on hover :( Not\nanymore!!\n",
 				['txt string']
 			],
 			[
@@ -250,7 +259,9 @@
 	});
 
 	test('Test SignatureHelp Provider using gogetdoc', async function () {
-		if (isModuleMode) {	this.skip(); }  // not working in module mode.
+		if (isModuleMode) {
+			this.skip();
+		} // not working in module mode.
 		const gogetdocPath = getBinPath('gogetdoc');
 		if (gogetdocPath === 'gogetdoc') {
 			// gogetdoc is not installed, so skip the test
@@ -271,7 +282,7 @@
 			[
 				new vscode.Position(23, 7),
 				'print(txt string)',
-				`This is an unexported function so couldn't get this comment on hover :(\nNot anymore!!\n`,
+				"This is an unexported function so couldn't get this comment on hover :(\nNot anymore!!\n",
 				['txt string']
 			],
 			[
@@ -294,7 +305,9 @@
 	});
 
 	test('Test Hover Provider using godoc', async function () {
-		if (isModuleMode) { this.skip(); }  // not working in module mode
+		if (isModuleMode) {
+			this.skip();
+		} // not working in module mode
 
 		const printlnDoc = `Println formats using the default formats for its operands and writes to
 standard output. Spaces are always added between operands and a newline is
@@ -313,7 +326,7 @@
 			[
 				new vscode.Position(23, 4),
 				'print func(txt string)',
-				`This is an unexported function so couldn't get this comment on hover :( Not\nanymore!!\n`
+				"This is an unexported function so couldn't get this comment on hover :( Not\nanymore!!\n"
 			]
 		];
 		const config = Object.create(getGoConfig(), {
@@ -323,7 +336,9 @@
 	});
 
 	test('Test Hover Provider using gogetdoc', async function () {
-		if (isModuleMode) {	this.skip(); }  // not working in module mode.
+		if (isModuleMode) {
+			this.skip();
+		} // not working in module mode.
 
 		const gogetdocPath = getBinPath('gogetdoc');
 		if (gogetdocPath === 'gogetdoc') {
@@ -344,7 +359,7 @@
 			[
 				new vscode.Position(23, 4),
 				'func print(txt string)',
-				`This is an unexported function so couldn't get this comment on hover :(\nNot anymore!!\n`
+				"This is an unexported function so couldn't get this comment on hover :(\nNot anymore!!\n"
 			],
 			[
 				new vscode.Position(40, 23),
@@ -355,7 +370,7 @@
 			[
 				new vscode.Position(27, 14),
 				'type ABC struct {\n    a int\n    b int\n    c int\n}',
-				`ABC is a struct, you coudn't use Goto Definition or Hover info on this before\nNow you can due to gogetdoc and go doc\n`
+				"ABC is a struct, you coudn't use Goto Definition or Hover info on this before\nNow you can due to gogetdoc and go doc\n"
 			],
 			[
 				new vscode.Position(28, 6),
@@ -390,19 +405,31 @@
 			goLint(vscode.Uri.file(path.join(fixturePath, 'linterTest', 'linter_2.go')), config)
 		]);
 		assert.equal(util.runTool.callCount, 2, 'should have launched 2 lint jobs');
-		assert.equal(processutil.killProcessTree.callCount, 1, 'should have killed 1 lint job before launching the next');
+		assert.equal(
+			processutil.killProcessTree.callCount,
+			1,
+			'should have killed 1 lint job before launching the next'
+		);
 	});
 
 	test('Linting - lint errors with multiple open files', async () => {
 		// handleDiagnosticErrors may adjust the lint errors' ranges to make the error more visible.
 		// This adjustment applies only to the text documents known to vscode. This test checks
 		// the adjustment is made consistently across multiple open text documents.
-		const file1 = await vscode.workspace.openTextDocument(vscode.Uri.file(path.join(fixturePath, 'linterTest', 'linter_1.go')));
-		const file2 = await vscode.workspace.openTextDocument(vscode.Uri.file(path.join(fixturePath, 'linterTest', 'linter_2.go')));
-		const warnings = await goLint(file2.uri, Object.create(getGoConfig(), {
-			lintTool: { value: 'golint' },
-			lintFlags: { value: [] }
-		}), 'package');
+		const file1 = await vscode.workspace.openTextDocument(
+			vscode.Uri.file(path.join(fixturePath, 'linterTest', 'linter_1.go'))
+		);
+		const file2 = await vscode.workspace.openTextDocument(
+			vscode.Uri.file(path.join(fixturePath, 'linterTest', 'linter_2.go'))
+		);
+		const warnings = await goLint(
+			file2.uri,
+			Object.create(getGoConfig(), {
+				lintTool: { value: 'golint' },
+				lintFlags: { value: [] }
+			}),
+			'package'
+		);
 
 		const diagnosticCollection = vscode.languages.createDiagnosticCollection('linttest');
 		handleDiagnosticErrors(file2, warnings, diagnosticCollection);
@@ -430,12 +457,14 @@
 				line: 7,
 				severity: 'warning',
 				msg: 'exported function Print2 should have comment or be unexported'
-			},
+			}
 		];
 		// 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(getGoConfig());
-		const expectedBuildVetErrors = lspConfig.enabled ? [] : [{ line: 11, severity: 'error', msg: 'undefined: prin' }];
+		const expectedBuildVetErrors = lspConfig.enabled
+			? []
+			: [{ line: 11, severity: 'error', msg: 'undefined: prin' }];
 
 		const expected = [...expectedLintErrors, ...expectedBuildVetErrors];
 		const diagnostics = await check(vscode.Uri.file(path.join(fixturePath, 'errorsTest', 'errors.go')), config);
@@ -445,7 +474,7 @@
 				diagnostics.map((x) => x.errors)
 			)
 			.sort((a: any, b: any) => a.line - b.line);
-		assert.equal(sortedDiagnostics.length > 0, true, `Failed to get linter results`);
+		assert.equal(sortedDiagnostics.length > 0, true, 'Failed to get linter results');
 
 		const matchCount = expected.filter((expectedItem) => {
 			return sortedDiagnostics.some((diag: any) => {
@@ -456,7 +485,11 @@
 				);
 			});
 		});
-		assert.equal(matchCount.length >= expected.length, true, `Failed to match expected errors \n${JSON.stringify(sortedDiagnostics)} \n VS\n ${JSON.stringify(expected)}`);
+		assert.equal(
+			matchCount.length >= expected.length,
+			true,
+			`Failed to match expected errors \n${JSON.stringify(sortedDiagnostics)} \n VS\n ${JSON.stringify(expected)}`
+		);
 	});
 
 	test('Test Generate unit tests skeleton for file', async function () {
@@ -510,7 +543,9 @@
 
 	test('Test diffUtils.getEditsFromUnifiedDiffStr', async function () {
 		// Run this test only in module mode.
-		if (!isModuleMode) { this.skip(); }
+		if (!isModuleMode) {
+			this.skip();
+		}
 
 		if (process.platform === 'win32') {
 			// This test requires diff tool that's not available on windows
@@ -552,7 +587,9 @@
 	});
 
 	test('Test diffUtils.getEdits', async function () {
-		if (!isModuleMode) { this.skip(); }  // Run this test only in module mode.
+		if (!isModuleMode) {
+			this.skip();
+		} // Run this test only in module mode.
 
 		const file1path = path.join(fixturePath, 'diffTest2Data', 'file1.go');
 		const file2path = path.join(fixturePath, 'diffTest2Data', 'file2.go');
@@ -674,13 +711,13 @@
 	});
 
 	test('Replace vendor packages with relative path', async function () {
-		if (isModuleMode) {	this.skip(); }  // not working in module mode.
+		if (isModuleMode) {
+			this.skip();
+		} // not working in module mode.
 		const vendorSupport = await isVendorSupported();
 		const filePath = path.join(fixturePath, 'vendoring', 'main.go');
 		const workDir = path.dirname(filePath);
-		const vendorPkgsFullPath = [
-			'test/testfixture/vendoring/vendor/example.com/vendorpls',
-		];
+		const vendorPkgsFullPath = ['test/testfixture/vendoring/vendor/example.com/vendorpls'];
 		const vendorPkgsRelativePath = ['example.com/vendorpls'];
 
 		const gopkgsPromise = getAllPackages(workDir).then((pkgMap) => {
@@ -735,12 +772,12 @@
 	});
 
 	test('Vendor pkgs from other projects should not be allowed to import', async function () {
-		if (isModuleMode) {	this.skip(); }  // not working in module mode.
+		if (isModuleMode) {
+			this.skip();
+		} // not working in module mode.
 		const vendorSupport = await isVendorSupported();
 		const filePath = path.join(fixturePath, 'baseTest', 'test.go');
-		const vendorPkgs = [
-			'test/testfixture/vendoring/vendor/example.com/vendorpls',
-		];
+		const vendorPkgs = ['test/testfixture/vendoring/vendor/example.com/vendorpls'];
 
 		const gopkgsPromise = new Promise<void>((resolve, reject) => {
 			const cmd = cp.spawn(getBinPath('gopkgs'), ['-format', '{{.ImportPath}}'], {
@@ -1158,7 +1195,9 @@
 	});
 
 	test('Test Completion on unimported packages', async function () {
-		if (isModuleMode) { this.skip(); }
+		if (isModuleMode) {
+			this.skip();
+		}
 		// gocode-gomod does not handle unimported package completion.
 		// Skip if we run in module mode.
 
@@ -1261,7 +1300,8 @@
 				assert.equal(
 					expected.length,
 					labels.length,
-					`expected number of completions: ${expected.length} Actual: ${labels.length} at position(${position.line + 1
+					`expected number of completions: ${expected.length} Actual: ${labels.length} at position(${
+						position.line + 1
 					},${position.character + 1}) ${labels}`
 				);
 				expected.forEach((entry, index) => {
@@ -1406,28 +1446,40 @@
 			}) as vscode.WorkspaceConfiguration;
 
 			const diagnostics = await check(fileUri, cfg);
-			return ([] as string[]).concat(...diagnostics.map<string[]>((d) => {
-				return d.errors.map((e) => e.msg) as string[];
-			}));
+			return ([] as string[]).concat(
+				...diagnostics.map<string[]>((d) => {
+					return d.errors.map((e) => e.msg) as string[];
+				})
+			);
 		};
 
 		const errors1 = await checkWithTags('randomtag');
-		assert.deepEqual(errors1, ['undefined: fmt.Prinln'], 'check with buildtag "randomtag" failed. Unexpected errors found.');
+		assert.deepEqual(
+			errors1,
+			['undefined: fmt.Prinln'],
+			'check with buildtag "randomtag" failed. Unexpected errors found.'
+		);
 
 		// TODO(hyangah): after go1.13, -tags expects a comma-separated tag list.
 		// For backwards compatibility, space-separated tag lists are still recognized,
 		// but change to a space-separated list once we stop testing with go1.12.
 		const errors2 = await checkWithTags('randomtag other');
-		assert.deepEqual(errors2, ['undefined: fmt.Prinln'],
-			'check with multiple buildtags "randomtag,other" failed. Unexpected errors found.');
+		assert.deepEqual(
+			errors2,
+			['undefined: fmt.Prinln'],
+			'check with multiple buildtags "randomtag,other" failed. Unexpected errors found.'
+		);
 
 		const errors3 = await checkWithTags('');
-		assert.equal(errors3.length, 1,
-			'check without buildtag failed. Unexpected number of errors found' + JSON.stringify(errors3));
+		assert.equal(
+			errors3.length,
+			1,
+			'check without buildtag failed. Unexpected number of errors found' + JSON.stringify(errors3)
+		);
 		const errMsg = errors3[0];
 		assert.ok(
-			errMsg.includes(`can't load package: package test/testfixture/buildTags`) ||
-			errMsg.includes(`build constraints exclude all Go files`),
+			errMsg.includes("can't load package: package test/testfixture/buildTags") ||
+				errMsg.includes('build constraints exclude all Go files'),
 			`check without buildtags failed. Go files not excluded. ${errMsg}`
 		);
 	});
@@ -1483,7 +1535,7 @@
 		if (eol === vscode.EndOfLine.LF) {
 			return strWithLF;
 		}
-		return strWithLF.split('\n').join('\r\n');  // replaceAll.
+		return strWithLF.split('\n').join('\r\n'); // replaceAll.
 	}
 
 	test('Add imports when no imports', async () => {
@@ -1510,9 +1562,9 @@
 		await vscode.window.showTextDocument(document);
 		const eol = document.eol;
 
-		const expectedText = document.getText().replace(
-			fixEOL(eol, '\t"fmt"\n\t"math"'),
-			fixEOL(eol, '\t"bytes"\n\t"fmt"\n\t"math"'));
+		const expectedText = document
+			.getText()
+			.replace(fixEOL(eol, '\t"fmt"\n\t"math"'), fixEOL(eol, '\t"bytes"\n\t"fmt"\n\t"math"'));
 		const edits = getTextEditForAddImport('bytes');
 		const edit = new vscode.WorkspaceEdit();
 		edit.set(document.uri, edits);
@@ -1547,10 +1599,7 @@
 
 		const expectedText = document
 			.getText()
-			.replace(
-				fixEOL(eol, 'import "math"'),
-				fixEOL(eol, 'import (\n\t"bytes"\n\t"math"\n)')
-			);
+			.replace(fixEOL(eol, 'import "math"'), fixEOL(eol, 'import (\n\t"bytes"\n\t"math"\n)'));
 		const edits = getTextEditForAddImport('bytes');
 		const edit = new vscode.WorkspaceEdit();
 		edit.set(document.uri, edits);
diff --git a/test/integration/goDebug.test.ts b/test/integration/goDebug.test.ts
index e3b48ee..d907739 100644
--- a/test/integration/goDebug.test.ts
+++ b/test/integration/goDebug.test.ts
@@ -1,12 +1,15 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable node/no-unsupported-features/node-builtins */
+/* eslint-disable no-async-promise-executor */
+/* eslint-disable node/no-unpublished-import */
 import * as assert from 'assert';
 import * as cp from 'child_process';
 import * as fs from 'fs';
-import getPort = require('get-port');
 import * as http from 'http';
 import { tmpdir } from 'os';
 import * as path from 'path';
 import * as sinon from 'sinon';
-import util = require('util');
 import { DebugConfiguration } from 'vscode';
 import { DebugClient } from 'vscode-debugadapter-testsupport';
 import { ILocation } from 'vscode-debugadapter-testsupport/lib/debugClient';
@@ -16,11 +19,13 @@
 	escapeGoModPath,
 	GoDebugSession,
 	PackageBuildInfo,
-	RemoteSourcesAndPackages,
+	RemoteSourcesAndPackages
 } from '../../src/debugAdapter/goDebug';
 import { GoDebugConfigurationProvider } from '../../src/goDebugConfiguration';
-import { getBinPath, getGoVersion, rmdirRecursive } from '../../src/util';
+import { getBinPath, rmdirRecursive } from '../../src/util';
 import { killProcessTree } from '../../src/utils/processUtils';
+import getPort = require('get-port');
+import util = require('util');
 
 suite('Path Manipulation Tests', () => {
 	test('escapeGoModPath works', () => {
@@ -43,7 +48,7 @@
 		process.env.GOPATH = '/usr/gopath';
 		process.env.GOROOT = '/usr/goroot';
 		remoteSourcesAndPackages = new RemoteSourcesAndPackages();
-		fileSystem = { existsSync: () => false } as unknown as typeof fs;
+		fileSystem = ({ existsSync: () => false } as unknown) as typeof fs;
 		delve.program = workspaceFolder;
 		delve.isApiV1 = false;
 		goDebugSession = new GoDebugSession(true, false, fileSystem);
@@ -64,7 +69,8 @@
 		remoteSourcesAndPackages.remoteSourceFilesNameGrouping = sourceFileMapping;
 
 		const inferredPath = goDebugSession['inferRemotePathFromLocalPath'](
-			'C:\\Users\\Documents\\src\\hello-world\\main.go');
+			'C:\\Users\\Documents\\src\\hello-world\\main.go'
+		);
 		assert.strictEqual(inferredPath, '/app/hello-world/main.go');
 	});
 
@@ -259,7 +265,7 @@
 	let remoteSourcesAndPackages: RemoteSourcesAndPackages;
 	let delve: Delve;
 	setup(() => {
-		delve = { callPromise: () => ({}), isApiV1: false } as unknown as Delve;
+		delve = ({ callPromise: () => ({}), isApiV1: false } as unknown) as Delve;
 		remoteSourcesAndPackages = new RemoteSourcesAndPackages();
 	});
 
@@ -269,10 +275,10 @@
 
 	test('initializeRemotePackagesAndSources retrieves remote packages and sources', async () => {
 		const stub = sinon.stub(delve, 'callPromise');
-		stub.withArgs('ListPackagesBuildInfo', [{ IncludeFiles: true }])
-			.returns(Promise.resolve({ List: [helloPackage, testPackage] }));
-		stub.withArgs('ListSources', [{}])
-			.returns(Promise.resolve({ Sources: sources }));
+		stub.withArgs('ListPackagesBuildInfo', [{ IncludeFiles: true }]).returns(
+			Promise.resolve({ List: [helloPackage, testPackage] })
+		);
+		stub.withArgs('ListSources', [{}]).returns(Promise.resolve({ Sources: sources }));
 
 		await remoteSourcesAndPackages.initializeRemotePackagesAndSources(delve);
 		assert.deepEqual(remoteSourcesAndPackages.remoteSourceFiles, sources);
@@ -297,7 +303,7 @@
 		request: 'attach',
 		mode: 'remote',
 		host: '127.0.0.1',
-		port: 3456,
+		port: 3456
 	};
 
 	let dc: DebugClient;
@@ -323,8 +329,11 @@
 	 * running vs stopped/killed.
 	 */
 	async function setUpRemoteProgram(
-		dlvPort: number, serverPort: number,
-		acceptMultiClient = true, continueOnStart = true): Promise<cp.ChildProcess> {
+		dlvPort: number,
+		serverPort: number,
+		acceptMultiClient = true,
+		continueOnStart = true
+	): Promise<cp.ChildProcess> {
 		const serverFolder = path.join(DATA_ROOT, 'helloWorldServer');
 		const toolPath = getBinPath('dlv');
 		const args = ['debug', '--api-version=2', '--headless', `--listen=127.0.0.1:${dlvPort}`];
@@ -334,8 +343,10 @@
 		if (continueOnStart) {
 			args.push('--continue');
 		}
-		const childProcess = cp.spawn(toolPath, args,
-			{ cwd: serverFolder, env: { PORT: `${serverPort}`, ...process.env } });
+		const childProcess = cp.spawn(toolPath, args, {
+			cwd: serverFolder,
+			env: { PORT: `${serverPort}`, ...process.env }
+		});
 
 		// Give dlv a few seconds to start.
 		await new Promise((resolve) => setTimeout(resolve, 10_000));
@@ -351,7 +362,7 @@
 	 */
 	async function setUpRemoteAttach(config: DebugConfiguration, breakpoints: ILocation[] = []): Promise<void> {
 		const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
-		console.log(`Sending initializing request for remote attach setup.`);
+		console.log('Sending initializing request for remote attach setup.');
 		const initializedResult = await dc.initializeRequest();
 		assert.ok(initializedResult.success);
 
@@ -368,15 +379,18 @@
 		]);
 
 		if (breakpoints.length) {
-			console.log(`Sending set breakpoints request for remote attach setup.`);
-			const breakpointsResult = await dc.setBreakpointsRequest({ source: { path: breakpoints[0].path }, breakpoints });
+			console.log('Sending set breakpoints request for remote attach setup.');
+			const breakpointsResult = await dc.setBreakpointsRequest({
+				source: { path: breakpoints[0].path },
+				breakpoints
+			});
 			assert.ok(breakpointsResult.success && breakpointsResult.body.breakpoints.length === breakpoints.length);
 			// Verify that there are no non-verified breakpoints.
 			breakpointsResult.body.breakpoints.forEach((breakpoint) => {
 				assert.ok(breakpoint.verified);
 			});
 		}
-		console.log(`Sending configuration done request for remote attach setup.`);
+		console.log('Sending configuration done request for remote attach setup.');
 		const configurationDoneResult = await dc.configurationDoneRequest();
 		assert.ok(configurationDoneResult.success);
 	}
@@ -424,18 +438,18 @@
 	}
 
 	suite('basic', () => {
-
 		test('unknown request should produce error', (done) => {
-			dc.send('illegal_request').then(() => {
-				done(new Error('does not report error on unknown request'));
-			}).catch(() => {
-				done();
-			});
+			dc.send('illegal_request')
+				.then(() => {
+					done(new Error('does not report error on unknown request'));
+				})
+				.catch(() => {
+					done();
+				});
 		});
 	});
 
 	suite('initialize', () => {
-
 		test('should return supported features', () => {
 			return dc.initializeRequest().then((response) => {
 				response.body = response.body || {};
@@ -445,24 +459,25 @@
 			});
 		});
 
-		test('should produce error for invalid \'pathFormat\'', (done) => {
+		test("should produce error for invalid 'pathFormat'", (done) => {
 			dc.initializeRequest({
 				adapterID: 'mock',
 				linesStartAt1: true,
 				columnsStartAt1: true,
 				pathFormat: 'url'
-			}).then((response) => {
-				done(new Error('does not report error on invalid \'pathFormat\' attribute'));
-			}).catch((err) => {
-				// error expected
-				done();
-			});
+			})
+				.then((response) => {
+					done(new Error("does not report error on invalid 'pathFormat' attribute"));
+				})
+				.catch((err) => {
+					// error expected
+					done();
+				});
 		});
 	});
 
 	suite('launch', () => {
 		test('should run program to the end', async () => {
-
 			const PROGRAM = path.join(DATA_ROOT, 'baseTest');
 
 			const config = {
@@ -470,15 +485,11 @@
 				type: 'go',
 				request: 'launch',
 				mode: 'auto',
-				program: PROGRAM,
+				program: PROGRAM
 			};
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
-			return Promise.all([
-				dc.configurationSequence(),
-				dc.launch(debugConfig),
-				dc.waitForEvent('terminated')
-			]);
+			return Promise.all([dc.configurationSequence(), dc.launch(debugConfig), dc.waitForEvent('terminated')]);
 		});
 
 		test('should stop on entry', async () => {
@@ -514,16 +525,12 @@
 				type: 'go',
 				request: 'launch',
 				mode: 'auto',
-				program: PROGRAM,
+				program: PROGRAM
 			};
 
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
-			return Promise.all([
-				dc.configurationSequence(),
-				dc.launch(debugConfig),
-				dc.waitForEvent('terminated')
-			]);
+			return Promise.all([dc.configurationSequence(), dc.launch(debugConfig), dc.waitForEvent('terminated')]);
 		});
 
 		test('should debug a single test', async () => {
@@ -534,19 +541,12 @@
 				request: 'launch',
 				mode: 'test',
 				program: PROGRAM,
-				args: [
-					'-test.run',
-					'TestMe'
-				]
+				args: ['-test.run', 'TestMe']
 			};
 
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
-			return Promise.all([
-				dc.configurationSequence(),
-				dc.launch(debugConfig),
-				dc.waitForEvent('terminated')
-			]);
+			return Promise.all([dc.configurationSequence(), dc.launch(debugConfig), dc.waitForEvent('terminated')]);
 		});
 
 		test('should debug a test package', async () => {
@@ -561,11 +561,7 @@
 
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
-			return Promise.all([
-				dc.configurationSequence(),
-				dc.launch(debugConfig),
-				dc.waitForEvent('terminated')
-			]);
+			return Promise.all([dc.configurationSequence(), dc.launch(debugConfig), dc.waitForEvent('terminated')]);
 		});
 
 		test('invalid flags are passed to dlv but should be caught by dlv', async () => {
@@ -600,7 +596,7 @@
 				type: 'go',
 				request: 'launch',
 				mode: 'auto',
-				program: PROGRAM,
+				program: PROGRAM
 			};
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
@@ -611,7 +607,7 @@
 					});
 				}),
 				dc.launch(debugConfig),
-				dc.waitForEvent('terminated'),
+				dc.waitForEvent('terminated')
 			]);
 		});
 
@@ -625,15 +621,11 @@
 				type: 'go',
 				request: 'launch',
 				mode: 'auto',
-				program: PROGRAM,
+				program: PROGRAM
 			};
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
-			await Promise.all([
-				dc.configurationSequence(),
-				dc.launch(debugConfig),
-				dc.waitForEvent('terminated')
-			]);
+			await Promise.all([dc.configurationSequence(), dc.launch(debugConfig), dc.waitForEvent('terminated')]);
 
 			const response = await dc.threadsRequest();
 			assert.ok(response.success);
@@ -647,15 +639,11 @@
 				request: 'launch',
 				mode: 'auto',
 				program: PROGRAM,
-				dlvFlags: ['--listen=127.0.0.1:80'],
+				dlvFlags: ['--listen=127.0.0.1:80']
 			};
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
-			return Promise.all([
-				dc.configurationSequence(),
-				dc.launch(debugConfig),
-				dc.waitForEvent('terminated')
-			]);
+			return Promise.all([dc.configurationSequence(), dc.launch(debugConfig), dc.waitForEvent('terminated')]);
 		});
 	});
 
@@ -672,7 +660,7 @@
 				request: 'launch',
 				mode: 'auto',
 				program: PROGRAM,
-				cwd: WD,
+				cwd: WD
 			};
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
@@ -692,7 +680,7 @@
 				type: 'go',
 				request: 'launch',
 				mode: 'auto',
-				program: PROGRAM,
+				program: PROGRAM
 			};
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
@@ -713,7 +701,7 @@
 				request: 'launch',
 				mode: 'auto',
 				program: PROGRAM,
-				cwd: WD,
+				cwd: WD
 			};
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
@@ -733,7 +721,7 @@
 				type: 'go',
 				request: 'launch',
 				mode: 'auto',
-				program: PROGRAM,
+				program: PROGRAM
 			};
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
@@ -831,7 +819,6 @@
 				})
 			]);
 		});
-
 	});
 
 	suite('remote attach', () => {
@@ -851,26 +838,23 @@
 			await new Promise((resolve) => setTimeout(resolve, 2_000));
 		});
 
-		test('can connect and initialize using external dlv --headless --accept-multiclient=true --continue=true',
-			async () => {
-				childProcess = await setUpRemoteProgram(remoteAttachConfig.port, server, true, true);
+		test('can connect and initialize using external dlv --headless --accept-multiclient=true --continue=true', async () => {
+			childProcess = await setUpRemoteProgram(remoteAttachConfig.port, server, true, true);
 
-				await setUpRemoteAttach(debugConfig);
-			});
+			await setUpRemoteAttach(debugConfig);
+		});
 
-		test('can connect and initialize using external dlv --headless --accept-multiclient=false --continue=false',
-			async () => {
-				childProcess = await setUpRemoteProgram(remoteAttachConfig.port, server, false, false);
+		test('can connect and initialize using external dlv --headless --accept-multiclient=false --continue=false', async () => {
+			childProcess = await setUpRemoteProgram(remoteAttachConfig.port, server, false, false);
 
-				await setUpRemoteAttach(debugConfig);
-			});
+			await setUpRemoteAttach(debugConfig);
+		});
 
-		test('can connect and initialize using external dlv --headless --accept-multiclient=true --continue=false',
-			async () => {
-				childProcess = await setUpRemoteProgram(remoteAttachConfig.port, server, true, false);
+		test('can connect and initialize using external dlv --headless --accept-multiclient=true --continue=false', async () => {
+			childProcess = await setUpRemoteProgram(remoteAttachConfig.port, server, true, false);
 
-				await setUpRemoteAttach(debugConfig);
-			});
+			await setUpRemoteAttach(debugConfig);
+		});
 	});
 
 	// The file paths returned from delve use '/' not the native path
@@ -886,11 +870,13 @@
 		setup(async () => {
 			server = await getPort();
 			remoteAttachConfig.port = await getPort();
-			remoteAttachDebugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, remoteAttachConfig);
+			remoteAttachDebugConfig = await debugConfigProvider.resolveDebugConfiguration(
+				undefined,
+				remoteAttachConfig
+			);
 		});
 
 		test('should stop on a breakpoint', async () => {
-
 			const PROGRAM = path.join(DATA_ROOT, 'baseTest');
 
 			const FILE = path.join(DATA_ROOT, 'baseTest', 'test.go');
@@ -901,7 +887,7 @@
 				type: 'go',
 				request: 'launch',
 				mode: 'auto',
-				program: PROGRAM,
+				program: PROGRAM
 			};
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
@@ -909,7 +895,6 @@
 		});
 
 		test('should stop on a breakpoint in test file', async () => {
-
 			const PROGRAM = path.join(DATA_ROOT, 'baseTest');
 
 			const FILE = path.join(DATA_ROOT, 'baseTest', 'sample_test.go');
@@ -940,7 +925,8 @@
 			// Calls the helloworld server to make the breakpoint hit.
 			await waitForBreakpoint(
 				() => http.get(`http://localhost:${server}`).on('error', (data) => console.log(data)),
-				breakpointLocation);
+				breakpointLocation
+			);
 
 			await dc.disconnectRequest({ restart: false });
 			await killProcessTree(remoteProgram);
@@ -957,14 +943,17 @@
 
 			// Now sets a breakpoint.
 			const breakpointLocation = getBreakpointLocation(FILE, BREAKPOINT_LINE);
-			const breakpointsResult = await dc.setBreakpointsRequest(
-				{ source: { path: breakpointLocation.path }, breakpoints: [breakpointLocation] });
+			const breakpointsResult = await dc.setBreakpointsRequest({
+				source: { path: breakpointLocation.path },
+				breakpoints: [breakpointLocation]
+			});
 			assert.ok(breakpointsResult.success && breakpointsResult.body.breakpoints[0].verified);
 
 			// Calls the helloworld server to make the breakpoint hit.
 			await waitForBreakpoint(
 				() => http.get(`http://localhost:${server}`).on('error', (data) => console.log(data)),
-				breakpointLocation);
+				breakpointLocation
+			);
 
 			await dc.disconnectRequest({ restart: false });
 			await killProcessTree(remoteProgram);
@@ -984,7 +973,8 @@
 			// Calls the helloworld server to make the breakpoint hit.
 			await waitForBreakpoint(
 				() => http.get(`http://localhost:${server}`).on('error', (data) => console.log(data)),
-				breakpointLocation);
+				breakpointLocation
+			);
 
 			await dc.disconnectRequest({ restart: false });
 			await killProcessTree(remoteProgram);
@@ -1007,10 +997,7 @@
 			};
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
-			await Promise.all([
-				dc.configurationSequence(),
-				dc.launch(debugConfig),
-			]);
+			await Promise.all([dc.configurationSequence(), dc.launch(debugConfig)]);
 
 			return Promise.all([
 				dc.setBreakpointsRequest({
@@ -1085,7 +1072,6 @@
 
 	suite('conditionalBreakpoints', () => {
 		test('should stop on conditional breakpoint', async () => {
-
 			const PROGRAM = path.join(DATA_ROOT, 'condbp');
 			const FILE = path.join(DATA_ROOT, 'condbp', 'condbp.go');
 			const BREAKPOINT_LINE = 7;
@@ -1096,25 +1082,26 @@
 				type: 'go',
 				request: 'launch',
 				mode: 'auto',
-				program: PROGRAM,
+				program: PROGRAM
 			};
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 			return Promise.all([
-
-				dc.waitForEvent('initialized').then(() => {
-					return dc.setBreakpointsRequest({
-						lines: [location.line],
-						breakpoints: [{ line: location.line, condition: 'i == 2' }],
-						source: { path: location.path }
-					});
-				}).then(() => {
-					return dc.configurationDoneRequest();
-				}),
+				dc
+					.waitForEvent('initialized')
+					.then(() => {
+						return dc.setBreakpointsRequest({
+							lines: [location.line],
+							breakpoints: [{ line: location.line, condition: 'i == 2' }],
+							source: { path: location.path }
+						});
+					})
+					.then(() => {
+						return dc.configurationDoneRequest();
+					}),
 
 				dc.launch(debugConfig),
 
 				dc.assertStoppedLocation('breakpoint', location)
-
 			]).then(() =>
 				// The program is stopped at the breakpoint, check to make sure 'i == 1'.
 				assertVariableValue('i', '2')
@@ -1122,7 +1109,6 @@
 		});
 
 		test('should add breakpoint condition', async () => {
-
 			const PROGRAM = path.join(DATA_ROOT, 'condbp');
 			const FILE = path.join(DATA_ROOT, 'condbp', 'condbp.go');
 			const BREAKPOINT_LINE = 7;
@@ -1133,33 +1119,37 @@
 				type: 'go',
 				request: 'launch',
 				mode: 'auto',
-				program: PROGRAM,
+				program: PROGRAM
 			};
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
-			return dc.hitBreakpoint(debugConfig, location).then(() =>
-				// The program is stopped at the breakpoint, check to make sure 'i == 0'.
-				assertVariableValue('i', '0')
-			).then(() =>
-				// Add a condition to the breakpoint, and make sure it runs until 'i == 2'.
-				dc.setBreakpointsRequest({
-					lines: [location.line],
-					breakpoints: [{ line: location.line, condition: 'i == 2' }],
-					source: { path: location.path }
-				}).then(() =>
-					Promise.all([
-						dc.continueRequest({ threadId: 1 }),
-						dc.assertStoppedLocation('breakpoint', location)
-					]).then(() =>
-						// The program is stopped at the breakpoint, check to make sure 'i == 2'.
-						assertVariableValue('i', '2')
-					)
+			return dc
+				.hitBreakpoint(debugConfig, location)
+				.then(() =>
+					// The program is stopped at the breakpoint, check to make sure 'i == 0'.
+					assertVariableValue('i', '0')
 				)
-			);
+				.then(() =>
+					// Add a condition to the breakpoint, and make sure it runs until 'i == 2'.
+					dc
+						.setBreakpointsRequest({
+							lines: [location.line],
+							breakpoints: [{ line: location.line, condition: 'i == 2' }],
+							source: { path: location.path }
+						})
+						.then(() =>
+							Promise.all([
+								dc.continueRequest({ threadId: 1 }),
+								dc.assertStoppedLocation('breakpoint', location)
+							]).then(() =>
+								// The program is stopped at the breakpoint, check to make sure 'i == 2'.
+								assertVariableValue('i', '2')
+							)
+						)
+				);
 		});
 
 		test('should remove breakpoint condition', async () => {
-
 			const PROGRAM = path.join(DATA_ROOT, 'condbp');
 			const FILE = path.join(DATA_ROOT, 'condbp', 'condbp.go');
 			const BREAKPOINT_LINE = 7;
@@ -1170,51 +1160,54 @@
 				type: 'go',
 				request: 'launch',
 				mode: 'auto',
-				program: PROGRAM,
+				program: PROGRAM
 			};
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 			return Promise.all([
-
-				dc.waitForEvent('initialized').then(() => {
-					return dc.setBreakpointsRequest({
-						lines: [location.line],
-						breakpoints: [{ line: location.line, condition: 'i == 2' }],
-						source: { path: location.path }
-					});
-				}).then(() => {
-					return dc.configurationDoneRequest();
-				}),
+				dc
+					.waitForEvent('initialized')
+					.then(() => {
+						return dc.setBreakpointsRequest({
+							lines: [location.line],
+							breakpoints: [{ line: location.line, condition: 'i == 2' }],
+							source: { path: location.path }
+						});
+					})
+					.then(() => {
+						return dc.configurationDoneRequest();
+					}),
 
 				dc.launch(debugConfig),
 
 				dc.assertStoppedLocation('breakpoint', location)
-
-			]).then(() =>
-				// The program is stopped at the breakpoint, check to make sure 'i == 2'.
-				assertVariableValue('i', '2')
-			).then(() =>
-				// Remove the breakpoint condition, and make sure the program runs until 'i == 3'.
-				dc.setBreakpointsRequest({
-					lines: [location.line],
-					breakpoints: [{ line: location.line }],
-					source: { path: location.path }
-				}).then(() =>
-					Promise.all([
-						dc.continueRequest({ threadId: 1 }),
-						dc.assertStoppedLocation('breakpoint', location)
-					]).then(() =>
-						// The program is stopped at the breakpoint, check to make sure 'i == 3'.
-						assertVariableValue('i', '3')
-					)
+			])
+				.then(() =>
+					// The program is stopped at the breakpoint, check to make sure 'i == 2'.
+					assertVariableValue('i', '2')
 				)
-			);
+				.then(() =>
+					// Remove the breakpoint condition, and make sure the program runs until 'i == 3'.
+					dc
+						.setBreakpointsRequest({
+							lines: [location.line],
+							breakpoints: [{ line: location.line }],
+							source: { path: location.path }
+						})
+						.then(() =>
+							Promise.all([
+								dc.continueRequest({ threadId: 1 }),
+								dc.assertStoppedLocation('breakpoint', location)
+							]).then(() =>
+								// The program is stopped at the breakpoint, check to make sure 'i == 3'.
+								assertVariableValue('i', '3')
+							)
+						)
+				);
 		});
 	});
 
 	suite('panicBreakpoints', () => {
-
 		test('should stop on panic', async () => {
-
 			const PROGRAM_WITH_EXCEPTION = path.join(DATA_ROOT, 'panic');
 
 			const config = {
@@ -1222,19 +1215,21 @@
 				type: 'go',
 				request: 'launch',
 				mode: 'auto',
-				program: PROGRAM_WITH_EXCEPTION,
+				program: PROGRAM_WITH_EXCEPTION
 			};
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
 			return Promise.all([
-
-				dc.waitForEvent('initialized').then(() => {
-					return dc.setExceptionBreakpointsRequest({
-						filters: ['all']
-					});
-				}).then(() => {
-					return dc.configurationDoneRequest();
-				}),
+				dc
+					.waitForEvent('initialized')
+					.then(() => {
+						return dc.setExceptionBreakpointsRequest({
+							filters: ['all']
+						});
+					})
+					.then(() => {
+						return dc.configurationDoneRequest();
+					}),
 
 				dc.launch(debugConfig),
 
@@ -1262,7 +1257,7 @@
 			let response = '';
 			await new Promise<void>((resolve) => {
 				http.get(`http://localhost:${server}`, (res) => {
-					res.on('data', (data) => response += data);
+					res.on('data', (data) => (response += data));
 					res.on('end', () => resolve());
 				});
 			});
@@ -1272,7 +1267,7 @@
 			let secondResponse = '';
 			await new Promise<void>((resolve) => {
 				http.get(`http://localhost:${server}`, (res) => {
-					res.on('data', (data) => secondResponse += data);
+					res.on('data', (data) => (secondResponse += data));
 					res.on('end', () => resolve());
 				});
 			});
@@ -1295,15 +1290,9 @@
 			};
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
-			await Promise.all([
-				dc.configurationSequence(),
-				dc.launch(debugConfig)
-			]);
+			await Promise.all([dc.configurationSequence(), dc.launch(debugConfig)]);
 
-			return Promise.all([
-				dc.disconnectRequest({ restart: false }),
-				dc.waitForEvent('terminated')
-			]);
+			return Promise.all([dc.disconnectRequest({ restart: false }), dc.waitForEvent('terminated')]);
 		});
 
 		test('should disconnect with multiple disconnectRequests', async () => {
@@ -1319,15 +1308,10 @@
 			};
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
-			await Promise.all([
-				dc.configurationSequence(),
-				dc.launch(debugConfig)
-			]);
+			await Promise.all([dc.configurationSequence(), dc.launch(debugConfig)]);
 
 			await Promise.all([
-				dc.disconnectRequest({ restart: false }).then(() =>
-					dc.disconnectRequest({ restart: false })
-				),
+				dc.disconnectRequest({ restart: false }).then(() => dc.disconnectRequest({ restart: false })),
 				dc.waitForEvent('terminated')
 			]);
 		});
@@ -1345,18 +1329,12 @@
 			};
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
-			await Promise.all([
-				dc.configurationSequence(),
-				dc.launch(debugConfig)
-			]);
+			await Promise.all([dc.configurationSequence(), dc.launch(debugConfig)]);
 
 			const continueResponse = await dc.continueRequest({ threadId: 1 });
 			assert.ok(continueResponse.success);
 
-			return Promise.all([
-				dc.disconnectRequest({ restart: false }),
-				dc.waitForEvent('terminated')
-			]);
+			return Promise.all([dc.disconnectRequest({ restart: false }), dc.waitForEvent('terminated')]);
 		});
 
 		test('should disconnect while nexting', async () => {
@@ -1380,10 +1358,7 @@
 			const nextResponse = await dc.nextRequest({ threadId: 1 });
 			assert.ok(nextResponse.success);
 
-			return Promise.all([
-				dc.disconnectRequest({ restart: false }),
-				dc.waitForEvent('terminated')
-			]);
+			return Promise.all([dc.disconnectRequest({ restart: false }), dc.waitForEvent('terminated')]);
 		});
 
 		test('should disconnect while paused on pause', async () => {
@@ -1394,22 +1369,16 @@
 				type: 'go',
 				request: 'launch',
 				mode: 'auto',
-				program: PROGRAM,
+				program: PROGRAM
 			};
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
-			await Promise.all([
-				dc.configurationSequence(),
-				dc.launch(debugConfig)
-			]);
+			await Promise.all([dc.configurationSequence(), dc.launch(debugConfig)]);
 
 			const pauseResponse = await dc.pauseRequest({ threadId: 1 });
 			assert.ok(pauseResponse.success);
 
-			return Promise.all([
-				dc.disconnectRequest({ restart: false }),
-				dc.waitForEvent('terminated'),
-			]);
+			return Promise.all([dc.disconnectRequest({ restart: false }), dc.waitForEvent('terminated')]);
 		});
 
 		test('should disconnect while paused on breakpoint', async () => {
@@ -1422,16 +1391,13 @@
 				type: 'go',
 				request: 'launch',
 				mode: 'auto',
-				program: PROGRAM,
+				program: PROGRAM
 			};
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
 			await dc.hitBreakpoint(debugConfig, getBreakpointLocation(FILE, BREAKPOINT_LINE));
 
-			return Promise.all([
-				dc.disconnectRequest({ restart: false }),
-				dc.waitForEvent('terminated')
-			]);
+			return Promise.all([dc.disconnectRequest({ restart: false }), dc.waitForEvent('terminated')]);
 		});
 
 		test('should disconnect while paused on entry', async () => {
@@ -1447,15 +1413,9 @@
 			};
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
-			await Promise.all([
-				dc.configurationSequence(),
-				dc.launch(debugConfig)
-			]);
+			await Promise.all([dc.configurationSequence(), dc.launch(debugConfig)]);
 
-			return Promise.all([
-				dc.disconnectRequest({ restart: false }),
-				dc.waitForEvent('terminated')
-			]);
+			return Promise.all([dc.disconnectRequest({ restart: false }), dc.waitForEvent('terminated')]);
 		});
 
 		test('should disconnect while paused on next', async () => {
@@ -1471,18 +1431,12 @@
 			};
 			const debugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
-			await Promise.all([
-				dc.configurationSequence(),
-				dc.launch(debugConfig)
-			]);
+			await Promise.all([dc.configurationSequence(), dc.launch(debugConfig)]);
 
 			const nextResponse = await dc.nextRequest({ threadId: 1 });
 			assert.ok(nextResponse.success);
 
-			return Promise.all([
-				dc.disconnectRequest({ restart: false }),
-				dc.waitForEvent('terminated')
-			]);
+			return Promise.all([dc.disconnectRequest({ restart: false }), dc.waitForEvent('terminated')]);
 		});
 	});
 
@@ -1511,9 +1465,9 @@
 		async function buildGoProgram(cwd: string, outputFile: string): Promise<string> {
 			const goRuntimePath = getBinPath('go');
 			const execFile = util.promisify(cp.execFile);
-			const child = await execFile(goRuntimePath,
-				['build', '-o', outputFile, `--gcflags='all=-N -l'`, '.'],
-				{ cwd });
+			const child = await execFile(goRuntimePath, ['build', '-o', outputFile, "--gcflags='all=-N -l'", '.'], {
+				cwd
+			});
 			if (child.stderr.length > 0) {
 				throw Error(child.stderr);
 			}
@@ -1530,7 +1484,7 @@
 				rmdirRecursive(goBuildOutput);
 			});
 
-			async function copyBuildDelete(program: string): Promise<{ program: string, output: string }> {
+			async function copyBuildDelete(program: string): Promise<{ program: string; output: string }> {
 				const wd = copyDirectory(program);
 				const output = await buildGoProgram(wd, path.join(goBuildOutput, program));
 				rmdirRecursive(wd);
@@ -1569,7 +1523,10 @@
 			setup(async () => {
 				server = await getPort();
 				remoteAttachConfig.port = await getPort();
-				remoteAttachDebugConfig = await debugConfigProvider.resolveDebugConfiguration(undefined, remoteAttachConfig);
+				remoteAttachDebugConfig = await debugConfigProvider.resolveDebugConfiguration(
+					undefined,
+					remoteAttachConfig
+				);
 			});
 
 			suiteSetup(() => {
@@ -1590,15 +1547,14 @@
 				// Setup attach with a breakpoint.
 				remoteAttachDebugConfig.cwd = tmpDir;
 				remoteAttachDebugConfig.remotePath = '';
-				remoteAttachDebugConfig.substitutePath = [
-					{ from: helloWorldLocal, to: helloWorldRemote }
-				];
+				remoteAttachDebugConfig.substitutePath = [{ from: helloWorldLocal, to: helloWorldRemote }];
 				await setUpRemoteAttach(remoteAttachDebugConfig, [breakpointLocation]);
 
 				// Calls the helloworld server to make the breakpoint hit.
 				await waitForBreakpoint(
 					() => http.get(`http://localhost:${server}`).on('error', (data) => console.log(data)),
-					breakpointLocation);
+					breakpointLocation
+				);
 
 				await dc.disconnectRequest({ restart: false });
 				await killProcessTree(remoteProgram);
@@ -1617,15 +1573,14 @@
 				remoteAttachDebugConfig.cwd = helloWorldLocal;
 				remoteAttachDebugConfig.remotePath = helloWorldRemote;
 				// This is a bad mapping, make sure that the remotePath config is used first.
-				remoteAttachDebugConfig.substitutePath = [
-					{ from: helloWorldLocal, to: helloWorldLocal }
-				];
+				remoteAttachDebugConfig.substitutePath = [{ from: helloWorldLocal, to: helloWorldLocal }];
 				await setUpRemoteAttach(remoteAttachDebugConfig, [breakpointLocation]);
 
 				// Calls the helloworld server to make the breakpoint hit.
 				await waitForBreakpoint(
 					() => http.get(`http://localhost:${server}`).on('error', (data) => console.log(data)),
-					breakpointLocation);
+					breakpointLocation
+				);
 
 				await dc.disconnectRequest({ restart: false });
 				await killProcessTree(remoteProgram);
@@ -1633,5 +1588,4 @@
 			});
 		});
 	});
-
 });
diff --git a/test/integration/goDebugConfiguration.test.ts b/test/integration/goDebugConfiguration.test.ts
index 17b761d..aabc703 100644
--- a/test/integration/goDebugConfiguration.test.ts
+++ b/test/integration/goDebugConfiguration.test.ts
@@ -1,3 +1,6 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable no-prototype-builtins */
 import assert = require('assert');
 import fs = require('fs');
 import os = require('os');
@@ -7,9 +10,9 @@
 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 { rmdirRecursive } from '../../src/util';
+import goEnv = require('../../src/goEnv');
 
 suite('Debug Environment Variable Merge Test', () => {
 	const debugConfigProvider = new GoDebugConfigurationProvider();
@@ -33,7 +36,6 @@
 	setup(() => {
 		tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'godebugconfig_test'));
 		sandbox = sinon.createSandbox();
-
 	});
 
 	teardown(() => {
@@ -54,7 +56,7 @@
 			name: 'Launch',
 			request: 'launch',
 			env: input.env,
-			envFile: input.envFile,
+			envFile: input.envFile
 		});
 
 		const actual = config.env;
@@ -71,18 +73,24 @@
 			GOOS: 'valueFromToolsEnv'
 		};
 
-		runTest({ toolsEnv }, {
-			GOPATH: '/gopath',
-			GOOS: 'valueFromToolsEnv'
-		});
+		runTest(
+			{ toolsEnv },
+			{
+				GOPATH: '/gopath',
+				GOOS: 'valueFromToolsEnv'
+			}
+		);
 	});
 
 	test('preserves settings from launchArgs.env', () => {
 		const env = { GOPATH: 'valueFromEnv', GOOS: 'valueFromEnv2' };
-		runTest({ env }, {
-			GOPATH: 'valueFromEnv',
-			GOOS: 'valueFromEnv2'
-		});
+		runTest(
+			{ env },
+			{
+				GOPATH: 'valueFromEnv',
+				GOOS: 'valueFromEnv2'
+			}
+		);
 	});
 
 	test('preserves settings from launchArgs.envFile', () => {
@@ -94,14 +102,15 @@
 	test('launchArgs.env overwrites launchArgs.envFile', () => {
 		const env = { SOMEVAR1: 'valueFromEnv' };
 		const envFile = path.join(tmpDir, 'env');
-		fs.writeFileSync(envFile, [
-			'SOMEVAR1=valueFromEnvFile1',
-			'SOMEVAR2=valueFromEnvFile2'].join('\n'));
+		fs.writeFileSync(envFile, ['SOMEVAR1=valueFromEnvFile1', 'SOMEVAR2=valueFromEnvFile2'].join('\n'));
 
-		runTest({ env, envFile }, {
-			SOMEVAR1: 'valueFromEnv',
-			SOMEVAR2: 'valueFromEnvFile2'
-		});
+		runTest(
+			{ env, envFile },
+			{
+				SOMEVAR1: 'valueFromEnv',
+				SOMEVAR2: 'valueFromEnvFile2'
+			}
+		);
 	});
 
 	test('launchArgs.env overwrites toolsEnvVar', () => {
@@ -112,11 +121,14 @@
 		};
 
 		const env = { SOMEVAR1: 'valueFromEnv' };
-		runTest({ env, toolsEnv }, {
-			GOPATH: '/gopath',
-			SOMEVAR1: 'valueFromEnv',
-			SOMEVAR2: 'valueFromToolsEnvVar2'
-		});
+		runTest(
+			{ env, toolsEnv },
+			{
+				GOPATH: '/gopath',
+				SOMEVAR1: 'valueFromEnv',
+				SOMEVAR2: 'valueFromToolsEnvVar2'
+			}
+		);
 	});
 
 	test('launchArgs.envFile overwrites toolsEnvVar', () => {
@@ -126,14 +138,16 @@
 			SOMEVAR2: 'valueFromToolsEnvVar2'
 		};
 		const envFile = path.join(tmpDir, 'env');
-		fs.writeFileSync(envFile, [
-			'SOMEVAR2=valueFromEnvFile2'].join('\n'));
+		fs.writeFileSync(envFile, ['SOMEVAR2=valueFromEnvFile2'].join('\n'));
 
-		runTest({ toolsEnv, envFile }, {
-			GOPATH: '/gopath',
-			SOMEVAR1: 'valueFromToolsEnvVar1',
-			SOMEVAR2: 'valueFromEnvFile2'
-		});
+		runTest(
+			{ toolsEnv, envFile },
+			{
+				GOPATH: '/gopath',
+				SOMEVAR1: 'valueFromToolsEnvVar1',
+				SOMEVAR2: 'valueFromEnvFile2'
+			}
+		);
 	});
 });
 
@@ -143,7 +157,7 @@
 
 	teardown(() => sinon.restore());
 
-	suite(`merge 'go' config from settings.json`, () => {
+	suite("merge 'go' config from settings.json", () => {
 		test('go flags config does not affect debug config', async () => {
 			// This tests that the testFlags and GOOS and GOARCH set
 			// in settings.json do not affect the resolved debug configuration.
@@ -155,15 +169,15 @@
 				type: 'go',
 				request: 'launch',
 				mode: 'auto',
-				program: '${fileDirname}',
+				program: '${fileDirname}'
 			};
 
 			const emptyResult = await debugConfigProvider.resolveDebugConfiguration(undefined, cfg1);
 			const goConfig = Object.create(getGoConfig(), {
-				testFlags: {value: '-tags=myTagTest'},
-				buildFlags: {value: '-tags=myTagBuild'},
-				goroot: {value: '/path/to/goroot'},
-				gopath: {value: '/path/to/gopath'}
+				testFlags: { value: '-tags=myTagTest' },
+				buildFlags: { value: '-tags=myTagBuild' },
+				goroot: { value: '/path/to/goroot' },
+				gopath: { value: '/path/to/gopath' }
 			}) as vscode.WorkspaceConfiguration;
 
 			// Adjust the workspace config.
@@ -174,7 +188,7 @@
 				type: 'go',
 				request: 'launch',
 				mode: 'auto',
-				program: '${fileDirname}',
+				program: '${fileDirname}'
 			};
 
 			const filledResult = await debugConfigProvider.resolveDebugConfiguration(undefined, cfg2);
@@ -196,7 +210,8 @@
 
 			// Run resolveDebugConfiguration with the default workspace settings.
 			const goConfig = Object.create(getGoConfig(), {
-				delveConfig: { value: {
+				delveConfig: {
+					value: {
 						dlvLoadConfig: {
 							followPointers: false,
 							maxVariableRecurse: 3,
@@ -216,7 +231,7 @@
 				type: 'go',
 				request: 'launch',
 				mode: 'auto',
-				program: '${fileDirname}',
+				program: '${fileDirname}'
 			};
 
 			const result = await debugConfigProvider.resolveDebugConfiguration(undefined, cfg);
@@ -237,7 +252,8 @@
 
 			// Run resolveDebugConfiguration with the default workspace settings.
 			const goConfig = Object.create(getGoConfig(), {
-				delveConfig: { value: {
+				delveConfig: {
+					value: {
 						dlvLoadConfig: {
 							followPointers: false,
 							maxVariableRecurse: 3,
@@ -266,7 +282,7 @@
 					maxStringLen: 128,
 					maxArrayValues: 128,
 					maxStructFields: -1
-				},
+				}
 			};
 
 			const result = await debugConfigProvider.resolveDebugConfiguration(undefined, cfg);
@@ -287,7 +303,7 @@
 
 	function checkBuildFlags(input: string, expected: { [key: string]: any }) {
 		// Parse the string result.
-		const actual = parse(input, {configuration: {'short-option-groups': false}} );
+		const actual = parse(input, { configuration: { 'short-option-groups': false } });
 
 		// Delete the empty entry that is created by parse.
 		delete actual['_'];
@@ -311,7 +327,7 @@
 		}
 		actualKeys.sort();
 
-		for (let i = 0; i < expectedKeys.length; i ++) {
+		for (let i = 0; i < expectedKeys.length; i++) {
 			assert.strictEqual(actualKeys[i], expectedKeys[i]);
 			assert.strictEqual(actual[actualKeys[i]], expected[expectedKeys[i]]);
 		}
@@ -342,7 +358,7 @@
 				mode: 'auto',
 				program: '${fileDirname}',
 				env: {},
-				buildFlags: `-gcflags all=-l`
+				buildFlags: '-gcflags all=-l'
 			};
 
 			debugConfigProvider.resolveDebugConfiguration(undefined, config);
@@ -363,7 +379,7 @@
 
 			debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
-			checkBuildFlags(config.buildFlags, {race: true, mod: 'mod'});
+			checkBuildFlags(config.buildFlags, { race: true, mod: 'mod' });
 		});
 
 		test('preserve empty buildFlags', () => {
@@ -395,7 +411,7 @@
 
 			debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
-			checkBuildFlags(config.buildFlags, {race: true, mod: 'mod'});
+			checkBuildFlags(config.buildFlags, { race: true, mod: 'mod' });
 		});
 
 		test('remove user set --gcflags in GOFLAGS', () => {
@@ -405,12 +421,12 @@
 				request: 'launch',
 				mode: 'auto',
 				program: '${fileDirname}',
-				env: {GOFLAGS: '-race --gcflags=-l --mod=mod'},
+				env: { GOFLAGS: '-race --gcflags=-l --mod=mod' }
 			};
 
 			debugConfigProvider.resolveDebugConfiguration(undefined, config);
 
-			checkBuildFlags(config.env.GOFLAGS, {race: true, mod: 'mod'});
+			checkBuildFlags(config.env.GOFLAGS, { race: true, mod: 'mod' });
 		});
 	});
 });
diff --git a/test/integration/goversion.test.ts b/test/integration/goversion.test.ts
index 758f3a1..5cfc2a7 100644
--- a/test/integration/goversion.test.ts
+++ b/test/integration/goversion.test.ts
@@ -1,3 +1,6 @@
+/* eslint-disable prettier/prettier */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable node/no-unpublished-import */
 /*---------------------------------------------------------
  * Copyright 2020 The Go Authors. All rights reserved.
  * Licensed under the MIT License. See LICENSE in the project root for license information.
@@ -7,22 +10,14 @@
 import { describe, it } from 'mocha';
 import * as sinon from 'sinon';
 import * as vscode from 'vscode';
+import { getLatestGoVersions, GoEnvironmentOption, latestGoVersionKey } from '../../src/goEnvironmentStatus';
+import { getGlobalState, setGlobalState, updateGlobalState } from '../../src/stateUtils';
+import { MockMemento } from '../mocks/MockMemento';
 
 import moment = require('moment');
 import semver = require('semver');
 import WebRequest = require('web-request');
 
-import {
-	getLatestGoVersions,
-	GoEnvironmentOption,
-	latestGoVersionKey,
-} from '../../src/goEnvironmentStatus';
-import {
-	getGlobalState,
-	setGlobalState,
-	updateGlobalState,
-} from '../../src/stateUtils';
-import { MockMemento } from '../mocks/MockMemento';
 
 describe('#getLatestGoVersion()', function () {
 	this.timeout(40000);
@@ -45,22 +40,21 @@
 		sandbox = sinon.createSandbox();
 		setGlobalState(new MockMemento());
 
-		webrequest.expects('json')
+		webrequest
+			.expects('json')
 			.withArgs('https://golang.org/dl/?mode=json')
 			.returns([
 				{
 					version: 'go1.15.1',
-					stable: true,
+					stable: true
 				},
 				{
 					version: 'go1.14.2',
-					stable: true,
-				},
+					stable: true
+				}
 			]);
 
-		mmnt.expects('now')
-			.returns(now);
-
+		mmnt.expects('now').returns(now);
 	});
 
 	this.afterEach(async () => {
@@ -70,12 +64,12 @@
 	it('should get latest go versions from golang.org/dl with empty cache', async () => {
 		const results = await getLatestGoVersions();
 		const want = [
-				{label: 'Go 1.15.1', binpath: 'go get golang.org/dl/go1.15.1'},
-				{label: 'Go 1.14.2', binpath: 'go get golang.org/dl/go1.14.2'},
+			{ label: 'Go 1.15.1', binpath: 'go get golang.org/dl/go1.15.1' },
+			{ label: 'Go 1.14.2', binpath: 'go get golang.org/dl/go1.14.2' }
 		];
 
 		assert(results.length === want.length);
-		for (let i = 0; i < results.length; i ++) {
+		for (let i = 0; i < results.length; i++) {
 			assert(results[i].label === want[i].label);
 			assert(results[i].binpath === want[i].binpath);
 		}
@@ -83,26 +77,26 @@
 
 	const cacheVersions = [
 		new GoEnvironmentOption('go get golang.org/dl/go1.14.7', 'Go 1.14.7'),
-		new GoEnvironmentOption('go get golang.org/dl/go1.13.2', 'Go 1.13.2'),
+		new GoEnvironmentOption('go get golang.org/dl/go1.13.2', 'Go 1.13.2')
 	];
 
 	it('should get latest go versions from golang.org/dl with timed out cache', async () => {
 		// add a timed out cache entry
 		await updateGlobalState(latestGoVersionKey, {
 			timestamp: now - (oneday + 1), // more than one day ago
-			goVersions: cacheVersions,
+			goVersions: cacheVersions
 		});
 
 		// run test
 		const results = await getLatestGoVersions();
 		const want = [
-				{label: 'Go 1.15.1', binpath: 'go get golang.org/dl/go1.15.1'},
-				{label: 'Go 1.14.2', binpath: 'go get golang.org/dl/go1.14.2'},
+			{ label: 'Go 1.15.1', binpath: 'go get golang.org/dl/go1.15.1' },
+			{ label: 'Go 1.14.2', binpath: 'go get golang.org/dl/go1.14.2' }
 		];
 
 		// check results
 		assert(results.length === want.length);
-		for (let i = 0; i < results.length; i ++) {
+		for (let i = 0; i < results.length; i++) {
 			assert(results[i].label === want[i].label);
 			assert(results[i].binpath === want[i].binpath);
 		}
@@ -112,19 +106,19 @@
 		// add a valid cache entry
 		await updateGlobalState(latestGoVersionKey, {
 			timestamp: now - (oneday - 100), // less than one day ago
-			goVersions: cacheVersions,
+			goVersions: cacheVersions
 		});
 
 		// run test
 		const results = await getLatestGoVersions();
 		const want = [
-				{label: 'Go 1.14.7', binpath: 'go get golang.org/dl/go1.14.7'},
-				{label: 'Go 1.13.2', binpath: 'go get golang.org/dl/go1.13.2'},
+			{ label: 'Go 1.14.7', binpath: 'go get golang.org/dl/go1.14.7' },
+			{ label: 'Go 1.13.2', binpath: 'go get golang.org/dl/go1.13.2' }
 		];
 
 		// check results
 		assert(results.length === want.length);
-		for (let i = 0; i < results.length; i ++) {
+		for (let i = 0; i < results.length; i++) {
 			assert(results[i].label === want[i].label);
 			assert(results[i].binpath === want[i].binpath);
 		}
diff --git a/test/integration/index.ts b/test/integration/index.ts
index 0cc6ddd..d6549f0 100644
--- a/test/integration/index.ts
+++ b/test/integration/index.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable node/no-unpublished-import */
 /*---------------------------------------------------------
  * Copyright (C) Microsoft Corporation. All rights reserved.
  * Licensed under the MIT License. See LICENSE in the project root for license information.
@@ -7,7 +9,7 @@
 import * as path from 'path';
 export function run(): Promise<void> {
 	const mocha = new Mocha({
-		ui: 'tdd',
+		ui: 'tdd'
 	});
 
 	// @types/mocha is outdated
diff --git a/test/integration/install.test.ts b/test/integration/install.test.ts
index d2104e4..e5bf64d 100644
--- a/test/integration/install.test.ts
+++ b/test/integration/install.test.ts
@@ -1,3 +1,4 @@
+/* eslint-disable no-async-promise-executor */
 /*---------------------------------------------------------
  * Copyright (C) Microsoft Corporation. All rights reserved.
  * Licensed under the MIT License. See License.txt in the project root for license information.
@@ -5,6 +6,12 @@
 
 import AdmZip = require('adm-zip');
 import * as assert from 'assert';
+import { getGoConfig } from '../../src/config';
+import { toolInstallationEnvironment } from '../../src/goEnv';
+import { installTools } from '../../src/goInstallTools';
+import { allToolsInformation, getConfiguredTools, getTool, getToolAtVersion } from '../../src/goTools';
+import { getBinPath, getGoVersion, GoVersion, rmdirRecursive } from '../../src/util';
+import { correctBinname } from '../../src/utils/pathUtils';
 import cp = require('child_process');
 import fs = require('fs');
 import os = require('os');
@@ -13,12 +20,6 @@
 import url = require('url');
 import util = require('util');
 import vscode = require('vscode');
-import { getGoConfig } from '../../src/config';
-import { toolInstallationEnvironment } from '../../src/goEnv';
-import { installTools } from '../../src/goInstallTools';
-import { allToolsInformation, getConfiguredTools, getTool, getToolAtVersion } from '../../src/goTools';
-import { getBinPath, getGoVersion, GoVersion, rmdirRecursive } from '../../src/util';
-import { correctBinname } from '../../src/utils/pathUtils';
 
 suite('Installation Tests', function () {
 	// Disable timeout when we are running slow tests.
@@ -58,7 +59,7 @@
 			envForTest['GOPATH'] = p;
 			const execFile = util.promisify(cp.execFile);
 			await execFile(goRuntimePath, ['clean', '-modcache'], {
-				env: envForTest,
+				env: envForTest
 			});
 			rmdirRecursive(p);
 		}
@@ -75,9 +76,9 @@
 				toolsEnvVars: {
 					value: {
 						GOPROXY: url.pathToFileURL(proxyDir),
-						GOSUMDB: 'off',
+						GOSUMDB: 'off'
 					}
-				},
+				}
 			});
 			configStub = sandbox.stub(vscode.workspace, 'getConfiguration').returns(goConfig);
 		} else {
@@ -94,14 +95,16 @@
 		const checks: Promise<void>[] = [];
 		const exists = util.promisify(fs.exists);
 		for (const tool of testCases) {
-			checks.push(new Promise<void>(async (resolve) => {
-				// Check that the expect tool has been installed to $GOPATH/bin.
-				const ok = await exists(path.join(tmpToolsGopath, 'bin', correctBinname(tool)));
-				if (!ok) {
-					assert.fail(`expected ${tmpToolsGopath}/bin/${tool}, not found`);
-				}
-				return resolve();
-			}));
+			checks.push(
+				new Promise<void>(async (resolve) => {
+					// Check that the expect tool has been installed to $GOPATH/bin.
+					const ok = await exists(path.join(tmpToolsGopath, 'bin', correctBinname(tool)));
+					if (!ok) {
+						assert.fail(`expected ${tmpToolsGopath}/bin/${tool}, not found`);
+					}
+					return resolve();
+				})
+			);
 		}
 		await Promise.all(checks);
 
@@ -129,7 +132,6 @@
 		const tools = Object.keys(allToolsInformation);
 		await runTest(tools);
 	});
-
 });
 
 // buildFakeProxy creates a fake file-based proxy used for testing. The code is
@@ -139,7 +141,7 @@
 	for (const toolName of tools) {
 		const tool = getTool(toolName);
 		const module = tool.importPath;
-		const version = `v1.0.0`; // hardcoded for now
+		const version = 'v1.0.0'; // hardcoded for now
 		const dir = path.join(proxyDir, module, '@v');
 		fs.mkdirSync(dir, { recursive: true });
 
@@ -150,11 +152,14 @@
 		fs.writeFileSync(path.join(dir, `${version}.mod`), `module ${module}\n`);
 
 		// Write the info file.
-		fs.writeFileSync(path.join(dir, `${version}.info`), `{ "Version": "${version}", "Time": "2020-04-07T14:45:07Z" } `);
+		fs.writeFileSync(
+			path.join(dir, `${version}.info`),
+			`{ "Version": "${version}", "Time": "2020-04-07T14:45:07Z" } `
+		);
 
 		// Write the zip file.
 		const zip = new AdmZip();
-		const content = `package main; func main() {};`;
+		const content = 'package main; func main() {};';
 		zip.addFile(`${module}@${version}/main.go`, Buffer.alloc(content.length, content));
 		zip.writeZip(path.join(dir, `${version}.zip`));
 	}
diff --git a/test/integration/pickProcess.test.ts b/test/integration/pickProcess.test.ts
index 17f344e..c525853 100644
--- a/test/integration/pickProcess.test.ts
+++ b/test/integration/pickProcess.test.ts
@@ -12,30 +12,22 @@
 		const tt = [
 			{
 				input: '/path/to/process/a: go1.16.2\n/path/to/process/b: go1.15.4\n/path/to/process/a b c: go1.8.0\n',
-				want: [
-					'/path/to/process/a',
-					'/path/to/process/b',
-					'/path/to/process/a b c',
-				],
+				want: ['/path/to/process/a', '/path/to/process/b', '/path/to/process/a b c']
 			},
 			{
-				input: 'C:\\path\\to\\process\\a: go1.16.2\nC:\\path\\to\\process\\b: go1.15.4\nC:\\path\\to\\process\\a b c: go1.8.0',
-				want: [
-					'C:\\path\\to\\process\\a',
-					'C:\\path\\to\\process\\b',
-					'C:\\path\\to\\process\\a b c',
-				],
+				input:
+					'C:\\path\\to\\process\\a: go1.16.2\nC:\\path\\to\\process\\b: go1.15.4\nC:\\path\\to\\process\\a b c: go1.8.0',
+				want: ['C:\\path\\to\\process\\a', 'C:\\path\\to\\process\\b', 'C:\\path\\to\\process\\a b c']
 			},
 			{
 				input: 'go version go1.15.7 darwin/amd64',
-				want: [],
-			},
-
+				want: []
+			}
 		];
 		for (const tc of tt) {
 			const got = parseGoVersionOutput(tc.input);
 			assert.strictEqual(got.length, tc.want.length);
-			for (let i = 0; i < got.length; i ++) {
+			for (let i = 0; i < got.length; i++) {
 				assert.strictEqual(got[i], tc.want[i]);
 			}
 		}
@@ -56,21 +48,21 @@
 				want: [
 					{
 						id: '1010',
-						executable: '/Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Renderer).app/Contents/MacOS/Code Helper (Renderer)'
+						executable:
+							'/Applications/Visual Studio Code.app/Contents/Frameworks/Code Helper (Renderer).app/Contents/MacOS/Code Helper (Renderer)'
 					},
 					{
 						id: '2020',
 						executable: '/User/name/go/bin/go'
 					}
-
-				],
-			},
+				]
+			}
 		];
 		for (const tc of tt) {
 			const got = parseLsofProcesses(tc.input);
 			got.sort(compareByProcessId);
 			assert.strictEqual(got.length, tc.want.length);
-			for (let i = 0; i < got.length; i ++) {
+			for (let i = 0; i < got.length; i++) {
 				assert.strictEqual(got[i].id, tc.want[i].id);
 				assert.strictEqual(got[i].executable, tc.want[i].executable);
 			}
@@ -110,12 +102,12 @@
 					{
 						id: '50',
 						label: '',
-						executable: '/path/to/b',
+						executable: '/path/to/b'
 					},
 					{
 						id: '300',
 						label: '',
-						executable: '/path/to/c',
+						executable: '/path/to/c'
 					}
 				],
 
@@ -124,7 +116,7 @@
 						id: '50',
 						processName: 'b',
 						label: 'b',
-						executable: '/path/to/b',
+						executable: '/path/to/b'
 					},
 					{
 						id: '100',
@@ -140,16 +132,16 @@
 						id: '300',
 						processName: 'c',
 						label: 'c',
-						executable: '/path/to/c',
+						executable: '/path/to/c'
 					}
-				],
-			},
+				]
+			}
 		];
 		for (const tc of tt) {
 			mergeExecutableAttachItem(tc.processes, tc.execInfo);
 			tc.processes.sort(compareByProcessId);
 			assert.strictEqual(tc.processes.length, tc.want.length);
-			for (let i = 0; i < tc.processes.length; i ++) {
+			for (let i = 0; i < tc.processes.length; i++) {
 				assert.strictEqual(tc.processes[i].id, tc.want[i].id);
 				assert.strictEqual(tc.processes[i].label, tc.want[i].label);
 				assert.strictEqual(tc.processes[i].processName, tc.want[i].processName);
diff --git a/test/integration/stateUtils.test.ts b/test/integration/stateUtils.test.ts
index cd80b12..be93197 100644
--- a/test/integration/stateUtils.test.ts
+++ b/test/integration/stateUtils.test.ts
@@ -1,3 +1,4 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
 /*---------------------------------------------------------
  * Copyright 2021 The Go Authors. All rights reserved.
  * Licensed under the MIT License. See LICENSE in the project root for license information.
@@ -5,7 +6,13 @@
 
 import * as assert from 'assert';
 import * as vscode from 'vscode';
-import { getMementoKeys, getWorkspaceState, resetItemsState, setWorkspaceState, updateWorkspaceState } from '../../src/stateUtils';
+import {
+	getMementoKeys,
+	getWorkspaceState,
+	resetItemsState,
+	setWorkspaceState,
+	updateWorkspaceState
+} from '../../src/stateUtils';
 import { MockMemento } from '../mocks/MockMemento';
 
 suite('Workspace State Modification Tests', () => {
@@ -26,9 +33,9 @@
 			want: string[];
 		}
 		const testCases: TestCase[] = [
-			{keys: [], values: [], want: []},
-			{keys: ['hello'], values: [false], want: ['hello']},
-			{keys: ['hello', 'goodbye'], values: [false, 25], want: ['hello', 'goodbye']},
+			{ keys: [], values: [], want: [] },
+			{ keys: ['hello'], values: [false], want: ['hello'] },
+			{ keys: ['hello', 'goodbye'], values: [false, 25], want: ['hello', 'goodbye'] }
 		];
 
 		testCases.forEach((tc) => {
@@ -38,7 +45,7 @@
 			const values = tc.values;
 			assert.strictEqual(keys.length, values.length, 'List of keys and values does not have same length');
 
-			for (let i = 0; i < keys.length; i ++) {
+			for (let i = 0; i < keys.length; i++) {
 				updateWorkspaceState(keys[i], values[i]);
 			}
 
@@ -60,19 +67,19 @@
 			want: string[];
 		}
 		const testCases: TestCase[] = [
-			{keys: [], values: [], items: undefined, want: []},
-			{keys: ['hello'], values: [false], items: undefined, want: ['hello']},
-			{keys: ['hello', 'goodbye'], values: [false, 25], items: undefined, want: ['hello', 'goodbye']},
+			{ keys: [], values: [], items: undefined, want: [] },
+			{ keys: ['hello'], values: [false], items: undefined, want: ['hello'] },
+			{ keys: ['hello', 'goodbye'], values: [false, 25], items: undefined, want: ['hello', 'goodbye'] },
 
-			{keys: [], values: [], items: [], want: []},
-			{keys: ['hello'], values: [false], items: [], want: ['hello']},
-			{keys: ['hello', 'goodbye'], values: [false, 25], items: [], want: ['hello', 'goodbye']},
+			{ keys: [], values: [], items: [], want: [] },
+			{ keys: ['hello'], values: [false], items: [], want: ['hello'] },
+			{ keys: ['hello', 'goodbye'], values: [false, 25], items: [], want: ['hello', 'goodbye'] },
 
-			{keys: ['hello'], values: [false], items: ['hello'], want: []},
-			{keys: ['hello', 'goodbye'], values: [false, 25], items: ['hello'], want: ['goodbye']},
+			{ keys: ['hello'], values: [false], items: ['hello'], want: [] },
+			{ keys: ['hello', 'goodbye'], values: [false, 25], items: ['hello'], want: ['goodbye'] },
 
-			{keys: ['hello'], values: [false], items: ['hello'], want: []},
-			{keys: ['hello', 'goodbye'], values: [false, 25], items: ['hello', 'goodbye'], want: []},
+			{ keys: ['hello'], values: [false], items: ['hello'], want: [] },
+			{ keys: ['hello', 'goodbye'], values: [false, 25], items: ['hello', 'goodbye'], want: [] }
 		];
 
 		testCases.forEach((tc) => {
@@ -82,7 +89,7 @@
 			const values = tc.values;
 			assert.strictEqual(keys.length, values.length, 'List of keys and values does not have same length');
 
-			for (let i = 0; i < keys.length; i ++) {
+			for (let i = 0; i < keys.length; i++) {
 				updateWorkspaceState(keys[i], values[i]);
 			}
 
@@ -96,5 +103,4 @@
 			});
 		});
 	});
-
 });
diff --git a/test/integration/statusbar.test.ts b/test/integration/statusbar.test.ts
index db3faa6..fd22f9e 100644
--- a/test/integration/statusbar.test.ts
+++ b/test/integration/statusbar.test.ts
@@ -1,3 +1,5 @@
+/* eslint-disable no-prototype-builtins */
+/* eslint-disable node/no-unpublished-import */
 /*---------------------------------------------------------
  * Copyright (C) Microsoft Corporation. All rights reserved.
  * Modification copyright 2020 The Go Authors. All rights reserved.
@@ -13,24 +15,24 @@
 import * as sinon from 'sinon';
 import * as util from 'util';
 import * as vscode from 'vscode';
-
 import {
 	formatGoVersion,
 	getGoEnvironmentStatusbarItem,
 	getSelectedGo,
 	GoEnvironmentOption,
-	setSelectedGo,
+	setSelectedGo
 } from '../../src/goEnvironmentStatus';
 import { updateGoVarsFromConfig } from '../../src/goInstallTools';
 import { disposeGoStatusBar } from '../../src/goStatus';
 import { getWorkspaceState, setWorkspaceState } from '../../src/stateUtils';
-import ourutil = require('../../src/util');
 import { getCurrentGoRoot } from '../../src/utils/pathUtils';
 import { MockMemento } from '../mocks/MockMemento';
 
+import ourutil = require('../../src/util');
+
 describe('#initGoStatusBar()', function () {
 	this.beforeAll(async () => {
-		await updateGoVarsFromConfig();  // should initialize the status bar.
+		await updateGoVarsFromConfig(); // should initialize the status bar.
 	});
 
 	this.afterAll(() => {
@@ -49,11 +51,7 @@
 		if (iconPos >= 0) {
 			label = label.substring(0, iconPos);
 		}
-		assert.equal(
-			label,
-			versionLabel,
-			'goroot version does not match status bar item text'
-		);
+		assert.equal(label, versionLabel, 'goroot version does not match status bar item text');
 	});
 });
 
@@ -137,8 +135,12 @@
 		const fixtureSourcePath = path.join(__dirname, '..', '..', '..', 'test', 'testdata', 'testhelpers');
 		const execFile = util.promisify(cp.execFile);
 		const goRuntimePath = ourutil.getBinPath('go');
-		const { stderr } = await execFile(
-			goRuntimePath, ['build', '-o', path.join(tmpRootBin, 'go'), path.join(fixtureSourcePath, 'fakego.go')]);
+		const { stderr } = await execFile(goRuntimePath, [
+			'build',
+			'-o',
+			path.join(tmpRootBin, 'go'),
+			path.join(fixtureSourcePath, 'fakego.go')
+		]);
 		if (stderr) {
 			assert.fail(`failed to build the fake go binary required for testing: ${stderr}`);
 		}
@@ -173,8 +175,11 @@
 
 		const b = getGoEnvironmentStatusbarItem();
 		assert.ok(b.text.startsWith('Go'), `go env statusbar item = ${b.text}, want "Go..."`);
-		assert.equal(pathEnvVar()[0], [path.join(getCurrentGoRoot(), 'bin')],
-			`the first element in PATH must match the current GOROOT/bin`);
+		assert.equal(
+			pathEnvVar()[0],
+			[path.join(getCurrentGoRoot(), 'bin')],
+			'the first element in PATH must match the current GOROOT/bin'
+		);
 	});
 
 	it('should recognize the adjusted goroot using go.goroot', async () => {
@@ -186,8 +191,11 @@
 
 		assert.equal((await ourutil.getGoVersion()).format(), '2.0.0');
 		assert.equal(getGoEnvironmentStatusbarItem().text, 'Go 2.0.0');
-		assert.equal(pathEnvVar()[0], [path.join(getCurrentGoRoot(), 'bin')],
-			`the first element in PATH must match the current GOROOT/bin`);
+		assert.equal(
+			pathEnvVar()[0],
+			[path.join(getCurrentGoRoot(), 'bin')],
+			'the first element in PATH must match the current GOROOT/bin'
+		);
 	});
 
 	it('should recognize the adjusted goroot using go.alternateTools', async () => {
@@ -201,7 +209,10 @@
 
 		assert.equal((await ourutil.getGoVersion()).format(), '3.0.0');
 		assert.equal(getGoEnvironmentStatusbarItem().text, 'Go 3.0.0');
-		assert.equal(pathEnvVar()[0], [path.join(getCurrentGoRoot(), 'bin')],
-			`the first element in PATH must match the current GOROOT/bin`);
+		assert.equal(
+			pathEnvVar()[0],
+			[path.join(getCurrentGoRoot(), 'bin')],
+			'the first element in PATH must match the current GOROOT/bin'
+		);
 	});
 });
diff --git a/test/integration/test.test.ts b/test/integration/test.test.ts
index 58e26fc..0896ea0 100644
--- a/test/integration/test.test.ts
+++ b/test/integration/test.test.ts
@@ -1,3 +1,4 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
 /*---------------------------------------------------------
  * Copyright 2020 The Go Authors. All rights reserved.
  * Licensed under the MIT License. See LICENSE in the project root for license information.
@@ -6,32 +7,34 @@
 'use strict';
 
 import * as assert from 'assert';
+import { getGoConfig } from '../../src/config';
+import { computeTestCommand, getTestFlags, goTest } from '../../src/testUtils';
+import { rmdirRecursive } from '../../src/util';
 import fs = require('fs-extra');
 import os = require('os');
 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 { rmdirRecursive } from '../../src/util';
 
 suite('Test Go Test Args', () => {
 	function runTest(param: {
-		expectedArgs: string,
-		expectedOutArgs: string,
-		flags?: string[],
-		functions?: string[],
-		isBenchmark?: boolean
-		}) {
-
-		const {args, outArgs} = computeTestCommand({
-			dir: '',
-			goConfig: getGoConfig(),
-			flags: param.flags || [],
-			functions: param.functions || [],
-			isBenchmark: param.isBenchmark || false,
-			applyCodeCoverage: false,
-		}, ['./...']);
+		expectedArgs: string;
+		expectedOutArgs: string;
+		flags?: string[];
+		functions?: string[];
+		isBenchmark?: boolean;
+	}) {
+		const { args, outArgs } = computeTestCommand(
+			{
+				dir: '',
+				goConfig: getGoConfig(),
+				flags: param.flags || [],
+				functions: param.functions || [],
+				isBenchmark: param.isBenchmark || false,
+				applyCodeCoverage: false
+			},
+			['./...']
+		);
 
 		assert.strictEqual(args.join(' '), param.expectedArgs, 'actual command');
 		assert.strictEqual(outArgs.join(' '), param.expectedOutArgs, 'displayed command');
@@ -83,7 +86,7 @@
 			expectedArgs: 'test -benchmem -run=^$ -bench ^(TestA|TestB)$ ./...',
 			expectedOutArgs: 'test -benchmem -run=^$ -bench ^(TestA|TestB)$ ./...',
 			functions: ['TestA', 'TestB'],
-			isBenchmark: true,
+			isBenchmark: true
 		});
 	});
 	test('user -run flag is ignored when functions are provided', () => {
@@ -125,17 +128,17 @@
 				if (isModuleMode) {
 					return true;
 				}
-				return path.basename(src) !== 'go.mod';  // skip go.mod file.
-			},
+				return path.basename(src) !== 'go.mod'; // skip go.mod file.
+			}
 		});
 		process.env.GOPATH = tmpGopath;
 		process.env.GO111MODULE = isModuleMode ? 'on' : 'off';
 	}
 
 	async function runTest(
-		input: { isMod: boolean, includeSubDirectories: boolean, testFlags?: string[], applyCodeCoverage?: boolean },
-		wantFiles: string[]) {
-
+		input: { isMod: boolean; includeSubDirectories: boolean; testFlags?: string[]; applyCodeCoverage?: boolean },
+		wantFiles: string[]
+	) {
 		const config = Object.create(getGoConfig());
 		const outputChannel = new FakeOutputChannel();
 
@@ -153,7 +156,7 @@
 			// testCurrentPackage, testCurrentWorkspace, testCurrentFile
 			// which are closer to the features exposed to users.
 			const result = await goTest(testConfig);
-			assert.equal(result, false);  // we expect tests to fail.
+			assert.equal(result, false); // we expect tests to fail.
 		} catch (e) {
 			console.log('exception: ${e}');
 		}
@@ -166,40 +169,42 @@
 
 	test('resolves file names in logs (modules)', async () => {
 		setupRepo(true);
-		await runTest(
-			{ isMod: true, includeSubDirectories: true },
-			[path.join(repoPath, 'a_test.go'), path.join(repoPath, 'b', 'b_test.go')]);
-		await runTest(
-			{ isMod: true, includeSubDirectories: false },
-			[path.join(repoPath, 'a_test.go')]);
-		await runTest(
-			{ isMod: true, includeSubDirectories: true, testFlags: ['-v'] },
-			[path.join(repoPath, 'a_test.go'), path.join(repoPath, 'b', 'b_test.go')]);
-		await runTest(
-			{ isMod: true, includeSubDirectories: true, testFlags: ['-race'], applyCodeCoverage: true },
-			[path.join(repoPath, 'a_test.go'), path.join(repoPath, 'b', 'b_test.go')]);
-		await runTest(
-			{ isMod: true, includeSubDirectories: false, testFlags: ['-v'] },
-			[path.join(repoPath, 'a_test.go')]);
+		await runTest({ isMod: true, includeSubDirectories: true }, [
+			path.join(repoPath, 'a_test.go'),
+			path.join(repoPath, 'b', 'b_test.go')
+		]);
+		await runTest({ isMod: true, includeSubDirectories: false }, [path.join(repoPath, 'a_test.go')]);
+		await runTest({ isMod: true, includeSubDirectories: true, testFlags: ['-v'] }, [
+			path.join(repoPath, 'a_test.go'),
+			path.join(repoPath, 'b', 'b_test.go')
+		]);
+		await runTest({ isMod: true, includeSubDirectories: true, testFlags: ['-race'], applyCodeCoverage: true }, [
+			path.join(repoPath, 'a_test.go'),
+			path.join(repoPath, 'b', 'b_test.go')
+		]);
+		await runTest({ isMod: true, includeSubDirectories: false, testFlags: ['-v'] }, [
+			path.join(repoPath, 'a_test.go')
+		]);
 	});
 
 	test('resolves file names in logs (GOPATH)', async () => {
 		setupRepo(false);
-		await runTest(
-			{ isMod: false, includeSubDirectories: true },
-			[path.join(repoPath, 'a_test.go'), path.join(repoPath, 'b', 'b_test.go')]);
-		await runTest(
-			{ isMod: false, includeSubDirectories: false },
-			[path.join(repoPath, 'a_test.go')]);
-		await runTest(
-			{ isMod: false, includeSubDirectories: true, testFlags: ['-v'] },
-			[path.join(repoPath, 'a_test.go'), path.join(repoPath, 'b', 'b_test.go')]);
-		await runTest(
-			{ isMod: false, includeSubDirectories: true, testFlags: ['-race'], applyCodeCoverage: true },
-			[path.join(repoPath, 'a_test.go'), path.join(repoPath, 'b', 'b_test.go')]);
-		await runTest(
-			{ isMod: false, includeSubDirectories: false, testFlags: ['-v'] },
-			[path.join(repoPath, 'a_test.go')]);
+		await runTest({ isMod: false, includeSubDirectories: true }, [
+			path.join(repoPath, 'a_test.go'),
+			path.join(repoPath, 'b', 'b_test.go')
+		]);
+		await runTest({ isMod: false, includeSubDirectories: false }, [path.join(repoPath, 'a_test.go')]);
+		await runTest({ isMod: false, includeSubDirectories: true, testFlags: ['-v'] }, [
+			path.join(repoPath, 'a_test.go'),
+			path.join(repoPath, 'b', 'b_test.go')
+		]);
+		await runTest({ isMod: false, includeSubDirectories: true, testFlags: ['-race'], applyCodeCoverage: true }, [
+			path.join(repoPath, 'a_test.go'),
+			path.join(repoPath, 'b', 'b_test.go')
+		]);
+		await runTest({ isMod: false, includeSubDirectories: false, testFlags: ['-v'] }, [
+			path.join(repoPath, 'a_test.go')
+		]);
 	});
 });
 
@@ -210,19 +215,23 @@
 	public name = 'FakeOutputChannel';
 	public show = sinon.fake(); // no-empty
 	public hide = sinon.fake(); // no-empty
-	public dispose = sinon.fake();  // no-empty
+	public dispose = sinon.fake(); // no-empty
 
 	private buf = [] as string[];
 
 	public append = (v: string) => this.enqueue(v);
 	public appendLine = (v: string) => this.enqueue(v);
-	public clear = () => { this.buf = []; };
+	public clear = () => {
+		this.buf = [];
+	};
 	public toString = () => {
 		return this.buf.join('\n');
-	}
+	};
 
 	private enqueue = (v: string) => {
-		if (this.buf.length > 1024) { this.buf.shift(); }
+		if (this.buf.length > 1024) {
+			this.buf.shift();
+		}
 		this.buf.push(v.trim());
-	}
+	};
 }
diff --git a/test/integration/utils.test.ts b/test/integration/utils.test.ts
index e82dfd6..0911a87 100644
--- a/test/integration/utils.test.ts
+++ b/test/integration/utils.test.ts
@@ -1,12 +1,20 @@
+/* eslint-disable prettier/prettier */
+/* eslint-disable @typescript-eslint/no-unused-vars */
 /*---------------------------------------------------------
  * Copyright (C) Microsoft Corporation. All rights reserved.
  * Licensed under the MIT License. See LICENSE in the project root for license information.
  *--------------------------------------------------------*/
 
 import * as assert from 'assert';
-import path = require('path');
 import * as vscode from 'vscode';
-import { GoVersion, guessPackageNameFromFile, handleDiagnosticErrors, removeDuplicateDiagnostics, substituteEnv } from '../../src/util';
+import {
+	GoVersion,
+	guessPackageNameFromFile,
+
+	removeDuplicateDiagnostics,
+	substituteEnv
+} from '../../src/util';
+import path = require('path');
 
 suite('utils Tests', () => {
 	test('substituteEnv: default', () => {
@@ -26,67 +34,22 @@
 
 	test('build GoVersion', () => {
 		// [input, wantFormat, wantFormatIncludePrerelease, wantIsValid]
-		const testCases: [string|undefined, string, string, boolean][] = [
+		const testCases: [string | undefined, string, string, boolean][] = [
 			[
 				'go version devel +a295d59d Fri Jun 26 19:00:25 2020 +0000 darwin/amd64',
 				'devel +a295d59d',
 				'devel +a295d59d',
-				true,
+				true
 			],
-			[
-				'go version go1.14 darwin/amd64',
-				'1.14.0',
-				'1.14',
-				true,
-			],
-			[
-				'go version go1.14.1 linux/amd64',
-				'1.14.1',
-				'1.14.1',
-				true,
-			],
-			[
-				'go version go1.15rc1 darwin/amd64',
-				'1.15.0',
-				'1.15rc1',
-				true,
-			],
-			[
-				'go version go1.15.1rc2 windows/amd64',
-				'1.15.1',
-				'1.15.1rc2',
-				true,
-			],
-			[
-				'go version go1.15.3-beta.1 darwin/amd64',
-				'1.15.3',
-				'1.15.3-beta.1',
-				true,
-			],
-			[
-				'go version go1.15.3-beta.1.2.3 foobar/amd64',
-				'1.15.3',
-				'1.15.3-beta.1.2.3',
-				true,
-			],
-			[
-				'go version go10.0.1 js/amd64',
-				'unknown',
-				'unknown',
-				false,
-			],
-			[
-				undefined,
-				'unknown',
-				'unknown',
-				false,
-			],
-			[
-				'something wrong',
-				'unknown',
-				'unknown',
-				false,
-			]
+			['go version go1.14 darwin/amd64', '1.14.0', '1.14', true],
+			['go version go1.14.1 linux/amd64', '1.14.1', '1.14.1', true],
+			['go version go1.15rc1 darwin/amd64', '1.15.0', '1.15rc1', true],
+			['go version go1.15.1rc2 windows/amd64', '1.15.1', '1.15.1rc2', true],
+			['go version go1.15.3-beta.1 darwin/amd64', '1.15.3', '1.15.3-beta.1', true],
+			['go version go1.15.3-beta.1.2.3 foobar/amd64', '1.15.3', '1.15.3-beta.1.2.3', true],
+			['go version go10.0.1 js/amd64', 'unknown', 'unknown', false],
+			[undefined, 'unknown', 'unknown', false],
+			['something wrong', 'unknown', 'unknown', false]
 		];
 		for (const [input, wantFormat, wantFormatIncludePrerelease, wantIsValid] of testCases) {
 			const go = new GoVersion('/path/to/go', input);
@@ -145,44 +108,70 @@
 
 		// Populate the diagnostic collection
 		const diag1 = [
-			new vscode.Diagnostic(new vscode.Range(1, 2, 1, 3), 'first line diagnostic', vscode.DiagnosticSeverity.Warning),
-			new vscode.Diagnostic(new vscode.Range(2, 0, 2, 3), 'second line diagnostic', vscode.DiagnosticSeverity.Warning),
+			new vscode.Diagnostic(
+				new vscode.Range(1, 2, 1, 3),
+				'first line diagnostic',
+				vscode.DiagnosticSeverity.Warning
+			),
+			new vscode.Diagnostic(
+				new vscode.Range(2, 0, 2, 3),
+				'second line diagnostic',
+				vscode.DiagnosticSeverity.Warning
+			),
 			new vscode.Diagnostic(new vscode.Range(2, 3, 2, 5), 'second line error', vscode.DiagnosticSeverity.Error),
-			new vscode.Diagnostic(new vscode.Range(4, 0, 4, 3), 'fourth line diagnostic', vscode.DiagnosticSeverity.Warning),
+			new vscode.Diagnostic(
+				new vscode.Range(4, 0, 4, 3),
+				'fourth line diagnostic',
+				vscode.DiagnosticSeverity.Warning
+			)
 		];
 		const diag2 = [
-			new vscode.Diagnostic(new vscode.Range(1, 2, 1, 3), 'first line diagnostic', vscode.DiagnosticSeverity.Warning),
-			new vscode.Diagnostic(new vscode.Range(2, 0, 2, 3), 'second line diagnostic', vscode.DiagnosticSeverity.Warning),
+			new vscode.Diagnostic(
+				new vscode.Range(1, 2, 1, 3),
+				'first line diagnostic',
+				vscode.DiagnosticSeverity.Warning
+			),
+			new vscode.Diagnostic(
+				new vscode.Range(2, 0, 2, 3),
+				'second line diagnostic',
+				vscode.DiagnosticSeverity.Warning
+			),
 			new vscode.Diagnostic(new vscode.Range(2, 3, 2, 5), 'second line error', vscode.DiagnosticSeverity.Error),
-			new vscode.Diagnostic(new vscode.Range(4, 0, 4, 3), 'fourth line diagnostic', vscode.DiagnosticSeverity.Warning),
+			new vscode.Diagnostic(
+				new vscode.Range(4, 0, 4, 3),
+				'fourth line diagnostic',
+				vscode.DiagnosticSeverity.Warning
+			)
 		];
 		diagnosticCollection.set(uri1, diag1);
 		diagnosticCollection.set(uri2, diag2);
 
 		// After removing diagnostics from uri1, there should only be one diagnostic remaining, and
 		// the diagnostics for uri2 should not be changed.
-		const want1 = [
-			diag1[3],
-		];
+		const want1 = [diag1[3]];
 		const want2: vscode.Diagnostic[] = [];
 		diag2.forEach((diag) => {
 			want2.push(diag);
 		});
 
 		const newDiagnostics: vscode.Diagnostic[] = [
-			new vscode.Diagnostic(new vscode.Range(1, 2, 1, 3), 'first line diagnostic', vscode.DiagnosticSeverity.Warning),
-			new vscode.Diagnostic(new vscode.Range(2, 3, 2, 5), 'second line error', vscode.DiagnosticSeverity.Error),
+			new vscode.Diagnostic(
+				new vscode.Range(1, 2, 1, 3),
+				'first line diagnostic',
+				vscode.DiagnosticSeverity.Warning
+			),
+			new vscode.Diagnostic(new vscode.Range(2, 3, 2, 5), 'second line error', vscode.DiagnosticSeverity.Error)
 		];
 
 		removeDuplicateDiagnostics(diagnosticCollection, uri1, newDiagnostics);
 
 		assert.strictEqual(diagnosticCollection.get(uri1).length, want1.length);
-		for (let i = 0; i < want1.length; i ++) {
+		for (let i = 0; i < want1.length; i++) {
 			assert.strictEqual(diagnosticCollection.get(uri1)[i], want1[i]);
 		}
 
 		assert.strictEqual(diagnosticCollection.get(uri2).length, want2.length);
-		for (let i = 0; i < want2.length; i ++) {
+		for (let i = 0; i < want2.length; i++) {
 			assert.strictEqual(diagnosticCollection.get(uri2)[i], want2[i]);
 		}
 	});
diff --git a/test/integration/welcome.test.ts b/test/integration/welcome.test.ts
index a3856a1..c85ede7 100644
--- a/test/integration/welcome.test.ts
+++ b/test/integration/welcome.test.ts
@@ -45,15 +45,13 @@
 		[['0.22.0'], '0.22.1', '0.22.0', false],
 		[['0.22.0'], '0.22.1', '0.23.0', false],
 		[['0.22.0'], '0.22.1', '1.0.0', false],
-		[['0.22.0'], '0.22.1', '2021.1.100', false],
+		[['0.22.0'], '0.22.1', '2021.1.100', false]
 	];
 	testCases.forEach((c: testCase) => {
 		const [showVersions, newVersion, oldVersion, expected] = c;
 
 		test(`shouldShowGoWelcomePage(${JSON.stringify(showVersions)}, ${newVersion}, ${oldVersion})`, () => {
-			assert.strictEqual(
-				shouldShowGoWelcomePage(showVersions, newVersion, oldVersion), expected);
+			assert.strictEqual(shouldShowGoWelcomePage(showVersions, newVersion, oldVersion), expected);
 		});
 	});
-
 });
diff --git a/test/mocks/MockMemento.ts b/test/mocks/MockMemento.ts
index 4c55f16..5157fbe 100644
--- a/test/mocks/MockMemento.ts
+++ b/test/mocks/MockMemento.ts
@@ -1,3 +1,5 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable no-prototype-builtins */
 /*---------------------------------------------------------
  * Copyright (C) Microsoft Corporation. All rights reserved.
  * Modification copyright 2020 The Go Authors. All rights reserved.
diff --git a/test/runTest.ts b/test/runTest.ts
index 96d3c27..b44b2f7 100644
--- a/test/runTest.ts
+++ b/test/runTest.ts
@@ -1,3 +1,5 @@
+/* eslint-disable no-process-exit */
+/* eslint-disable node/no-unpublished-import */
 import * as path from 'path';
 import { runTests } from 'vscode-test';
 
@@ -28,7 +30,7 @@
 				'--user-data-dir=${workspaceFolder}/.user-data-dir-test',
 				// https://github.com/microsoft/vscode/issues/115794#issuecomment-774283222
 				'--force-disable-user-env'
-			],
+			]
 		});
 	} catch (err) {
 		console.error('Failed to run integration tests' + err);
@@ -45,11 +47,11 @@
 			extensionDevelopmentPath,
 			extensionTestsPath: path.resolve(__dirname, './gopls/index'),
 			launchArgs: [
-				'--disable-extensions',  // disable all other extensions
+				'--disable-extensions', // disable all other extensions
 				'--user-data-dir=${workspaceFolder}/.user-data-dir-test',
 				// https://github.com/microsoft/vscode/issues/115794#issuecomment-774283222
 				'--force-disable-user-env'
-			],
+			]
 		});
 	} catch (err) {
 		console.error('Failed to run gopls tests' + err);
diff --git a/test/unit/goDebug.test.ts b/test/unit/goDebug.test.ts
index 686b5bb..c75004e 100644
--- a/test/unit/goDebug.test.ts
+++ b/test/unit/goDebug.test.ts
@@ -11,16 +11,16 @@
 		const tt = [
 			{
 				input: 'path/to/file',
-				want: 'path/to/file',
+				want: 'path/to/file'
 			},
 			{
 				input: '\\path\\to\\file',
-				want: '/path/to/file',
+				want: '/path/to/file'
 			},
 			{
 				input: '/path/to\\file',
-				want: '/path/to/file',
-			},
+				want: '/path/to/file'
+			}
 		];
 
 		for (const tc of tt) {
@@ -32,27 +32,27 @@
 		const tt = [
 			{
 				input: 'C:/path/to/file',
-				want: 'C:/path/to/file',
+				want: 'C:/path/to/file'
 			},
 			{
 				input: 'c:/path/to/file',
-				want: 'C:/path/to/file',
+				want: 'C:/path/to/file'
 			},
 			{
 				input: 'C:/path/to/file',
-				want: 'C:/path/to/file',
+				want: 'C:/path/to/file'
 			},
 			{
 				input: 'C:\\path\\to\\file',
-				want: 'C:/path/to/file',
+				want: 'C:/path/to/file'
 			},
 			{
 				input: 'c:\\path\\to\\file',
-				want: 'C:/path/to/file',
+				want: 'C:/path/to/file'
 			},
 			{
 				input: 'c:\\path\\to\\file',
-				want: 'C:/path/to/file',
+				want: 'C:/path/to/file'
 			}
 		];
 
@@ -65,27 +65,27 @@
 		const tt = [
 			{
 				input: '../path/to/file',
-				want: '../path/to/file',
+				want: '../path/to/file'
 			},
 			{
 				input: './path/to/file',
-				want: './path/to/file',
+				want: './path/to/file'
 			},
 			{
 				input: '..\\path\\to\\file',
-				want: '../path/to/file',
+				want: '../path/to/file'
 			},
 			{
 				input: '.\\path\\to\\file',
-				want: './path/to/file',
+				want: './path/to/file'
 			},
 			{
 				input: '/path/to/../file',
-				want: '/path/to/../file',
+				want: '/path/to/../file'
 			},
 			{
 				input: 'c:\\path\\to\\..\\file',
-				want: 'C:/path/to/../file',
+				want: 'C:/path/to/../file'
 			}
 		];
 
@@ -94,5 +94,4 @@
 			assert.strictEqual(got, tc.want);
 		}
 	});
-
 });
diff --git a/test/unit/mutex.test.ts b/test/unit/mutex.test.ts
index 9972034..57818d1 100644
--- a/test/unit/mutex.test.ts
+++ b/test/unit/mutex.test.ts
@@ -57,4 +57,6 @@
 	});
 });
 
-function sleep(ms: number) { return new Promise((resolve) => setTimeout(resolve, ms)); }
+function sleep(ms: number) {
+	return new Promise((resolve) => setTimeout(resolve, ms));
+}
diff --git a/tslint.json b/tslint.json
deleted file mode 100644
index d9108ea..0000000
--- a/tslint.json
+++ /dev/null
@@ -1,166 +0,0 @@
-{
-	"rules": {
-		"adjacent-overload-signatures": true,
-		"align": {
-			"options": [
-				"parameters",
-				"statements"
-			]
-		},
-		"arrow-parens": true,
-		"arrow-return-shorthand": true,
-		"ban-types": {
-			"options": [
-				[
-					"Object",
-					"Avoid using the `Object` type. Did you mean `object`?"
-				],
-				[
-					"Function",
-					"Avoid using the `Function` type. Prefer a specific function type, like `() => void`."
-				],
-				[
-					"Boolean",
-					"Avoid using the `Boolean` type. Did you mean `boolean`?"
-				],
-				[
-					"Number",
-					"Avoid using the `Number` type. Did you mean `number`?"
-				],
-				[
-					"String",
-					"Avoid using the `String` type. Did you mean `string`?"
-				],
-				[
-					"Symbol",
-					"Avoid using the `Symbol` type. Did you mean `symbol`?"
-				]
-			]
-		},
-		"class-name": true,
-		"comment-format": [
-			true,
-			"check-space"
-		],
-		"curly": true,
-		"eofline": true,
-		"forin": true,
-		"import-spacing": true,
-		"indent": [
-			true,
-			"tabs"
-		],
-		"interface-over-type-literal": true,
-		"jsdoc-format": true,
-		"label-position": true,
-		"max-classes-per-file": {
-			"options": 2
-		},
-		"max-line-length": { "options": 120 },
-		"member-access": true,
-		"member-ordering": {
-			"options": {
-				"order": "statics-first"
-			}
-		},
-		"new-parens": true,
-		"no-arg": true,
-		"no-conditional-assignment": true,
-		"no-consecutive-blank-lines": true,
-		"no-construct": true,
-		"no-debugger": true,
-		"no-duplicate-super": true,
-		"no-duplicate-variable": true,
-		"no-empty": true,
-		"no-empty-interface": true,
-		"no-eval": true,
-		"no-internal-module": true,
-		"no-invalid-this": false,
-		"no-misused-new": true,
-		"no-namespace": true,
-		"no-reference": true,
-		"no-reference-import": true,
-		"no-shadowed-variable": true,
-		"no-string-throw": true,
-		"no-trailing-whitespace": true,
-		"no-unnecessary-initializer": true,
-		"no-unsafe-finally": true,
-		"no-unused-expression": true,
-		"no-var-keyword": true,
-		"no-var-requires": true,
-		"object-literal-key-quotes": { "options": "consistent-as-needed" },
-		"object-literal-shorthand": true,
-		"one-line": [
-			true,
-			"check-catch",
-			"check-else",
-			"check-finally",
-			"check-open-brace",
-			"check-whitespace"
-		],
-		"one-variable-per-declaration": { "options": ["ignore-for-loop"] },
-		"only-arrow-functions": {
-			"options": ["allow-declarations", "allow-named-functions"]
-		},
-		"ordered-imports": {
-			"options": {
-				"import-sources-order": "case-insensitive",
-				"module-source-path": "full",
-				"named-imports-order": "case-insensitive"
-			}
-		},
-		"prefer-const": true,
-		"prefer-for-of": true,
-		"quotemark": [
-			true,
-			"single"
-		],
-		"radix": true,
-		"semicolon": true,
-		"space-before-function-paren": {
-			"options": {
-				"anonymous": "always",
-				"asyncArrow": "always",
-				"constructor": "never",
-				"method": "never",
-				"named": "never"
-			}
-		},
-		"trailing-comma": {
-			"options": {
-				"esSpecCompliant": true
-			}
-		},
-		"triple-equals": [
-			true,
-			"allow-null-check"
-		],
-		"typedef-whitespace": [
-			true,
-			{
-				"call-signature": "nospace",
-				"index-signature": "nospace",
-				"parameter": "nospace",
-				"property-declaration": "nospace",
-				"variable-declaration": "nospace"
-			}
-		],
-		"unified-signatures": true,
-		"use-isnan": true,
-		"variable-name": [
-			true,
-			"ban-keywords",
-			"check-format",
-			"allow-pascal-case",
-			"allow-leading-underscore"
-		],
-		"whitespace": [
-			true,
-			"check-branch",
-			"check-decl",
-			"check-operator",
-			"check-separator",
-			"check-type"
-		]
-	}
-}
\ No newline at end of file