diff --git a/docs/settings.md b/docs/settings.md
index 591b180..04ba5f7 100644
--- a/docs/settings.md
+++ b/docs/settings.md
@@ -161,6 +161,10 @@
 
 Use gotype on the file currently being edited and report any semantic or syntactic errors found after configured delay.
 
+### `go.overwriteGoplsMiddleware`
+
+This option provides a set of flags which determine if vscode-go should intercept certain commands from gopls. These flags assume the `gopls` settings, which enable codelens from gopls, are also present.
+
 ### `go.playground`
 
 
diff --git a/package.json b/package.json
index 84840e0..271b7cc 100644
--- a/package.json
+++ b/package.json
@@ -1575,6 +1575,34 @@
           "description": "Feature level setting to enable/disable code lens for references and run/debug tests",
           "scope": "resource"
         },
+        "go.overwriteGoplsMiddleware": {
+          "type": "object",
+          "properties": {
+            "codelens": {
+              "type": "object",
+              "properties": {
+                "test": {
+                  "type": "boolean",
+                  "default": false,
+                  "description": "'test' codelens will be handled by gopls if true"
+                },
+                "bench": {
+                  "type": "boolean",
+                  "default": false,
+                  "description": "'benchmark' codelens will be handled by gopls if true"
+                }
+              }
+            },
+            "default": {
+              "codelens": {
+                "test": false,
+                "bench": false
+              }
+            }
+          },
+          "scope": "resource",
+          "description": "This option provides a set of flags which determine if vscode-go should intercept certain commands from gopls. These flags assume the `gopls` settings, which enable codelens from gopls, are also present."
+        },
         "go.addTags": {
           "type": "object",
           "properties": {
diff --git a/src/goLanguageServer.ts b/src/goLanguageServer.ts
index 22c0938..6ba2bb8 100644
--- a/src/goLanguageServer.ts
+++ b/src/goLanguageServer.ts
@@ -18,7 +18,6 @@
 	CloseAction,
 	CompletionItemKind,
 	ErrorAction,
-	ExecuteCommandSignature,
 	HandleDiagnosticsSignature,
 	InitializeError,
 	LanguageClient,
@@ -268,39 +267,20 @@
 					if (!codeLens || codeLens.length === 0) {
 						return codeLens;
 					}
+					const goplsEnabledLens = (getGoConfig().get('overwriteGoplsMiddleware') as any)?.codelens ?? {};
 					return codeLens.reduce((lenses: vscode.CodeLens[], lens: vscode.CodeLens) => {
 						switch (lens.command.title) {
 							case 'run test': {
-								const args = lens.command.arguments;
-								return [
-									...lenses,
-									new vscode.CodeLens(lens.range, {
-										...lens.command,
-										command: 'go.test.cursor',
-										arguments: [{ functionName: args[args.indexOf('-run') + 1] }],
-									}),
-									new vscode.CodeLens(lens.range, {
-										title: 'debug test',
-										command: 'go.debug.cursor',
-										arguments: [{ functionName: args[args.indexOf('-run') + 1] }],
-									}),
-								];
+								if (goplsEnabledLens.test) {
+									return [...lenses, lens];
+								}
+								return [...lenses, ...createTestCodeLens(lens)];
 							}
 							case 'run benchmark': {
-								const args = lens.command.arguments;
-								return [
-									...lenses,
-									new vscode.CodeLens(lens.range, {
-										...lens.command,
-										command: 'go.benchmark.cursor',
-										arguments: [{ functionName: args[args.indexOf('-bench') + 1] }],
-									}),
-									new vscode.CodeLens(lens.range, {
-										title: 'debug benchmark',
-										command: 'go.debug.cursor',
-										arguments: [{ functionName: args[args.indexOf('-bench') + 1] }],
-									}),
-								];
+								if (goplsEnabledLens.bench) {
+									return [...lenses, lens];
+								}
+								return [...lenses, ...createBenchmarkCodeLens(lens)];
 							}
 							default: {
 								return [...lenses, lens];
@@ -420,6 +400,39 @@
 	return c;
 }
 
+// createTestCodeLens adds the go.test.cursor and go.debug.cursor code lens
+function createTestCodeLens(lens: vscode.CodeLens): vscode.CodeLens[] {
+	const args = lens.command.arguments;
+	return [
+		new vscode.CodeLens(lens.range, {
+			...lens.command,
+			command: 'go.test.cursor',
+			arguments: [{ functionName: args[args.indexOf('-run') + 1] }],
+		}),
+		new vscode.CodeLens(lens.range, {
+			title: 'debug test',
+			command: 'go.debug.cursor',
+			arguments: [{ functionName: args[args.indexOf('-run') + 1] }],
+		}),
+	];
+}
+
+function createBenchmarkCodeLens(lens: vscode.CodeLens): vscode.CodeLens[] {
+	const args = lens.command.arguments;
+	return [
+		new vscode.CodeLens(lens.range, {
+			...lens.command,
+			command: 'go.benchmark.cursor',
+			arguments: [{ functionName: args[args.indexOf('-bench') + 1] }],
+		}),
+		new vscode.CodeLens(lens.range, {
+			title: 'debug benchmark',
+			command: 'go.debug.cursor',
+			arguments: [{ functionName: args[args.indexOf('-bench') + 1] }],
+		}),
+	];
+}
+
 // registerUsualProviders registers the language feature providers if the language server is not enabled.
 function registerDefaultProviders(ctx: vscode.ExtensionContext) {
 	const completionProvider = new GoCompletionItemProvider(ctx.globalState);
