diff --git a/internal/lsp/lsp110_test.go b/internal/lsp/lsp110_test.go
deleted file mode 100644
index 7520350..0000000
--- a/internal/lsp/lsp110_test.go
+++ /dev/null
@@ -1,7 +0,0 @@
-//+build !go1.11
-
-package lsp
-
-func init() {
-	goVersion111 = false
-}
diff --git a/internal/lsp/lsp_test.go b/internal/lsp/lsp_test.go
index b42d1d8..60ff67f 100644
--- a/internal/lsp/lsp_test.go
+++ b/internal/lsp/lsp_test.go
@@ -26,10 +26,6 @@
 	"golang.org/x/tools/internal/span"
 )
 
-// TODO(rstambler): Remove this once Go 1.12 is released as we end support for
-// versions of Go <= 1.10.
-var goVersion111 = true
-
 func TestLSP(t *testing.T) {
 	packagestest.TestAll(t, testLSP)
 }
@@ -114,10 +110,8 @@
 
 	t.Run("Completion", func(t *testing.T) {
 		t.Helper()
-		if goVersion111 { // TODO(rstambler): Remove this when we no longer support Go 1.10.
-			if len(expectedCompletions) != expectedCompletionsCount {
-				t.Errorf("got %v completions expected %v", len(expectedCompletions), expectedCompletionsCount)
-			}
+		if len(expectedCompletions) != expectedCompletionsCount {
+			t.Errorf("got %v completions expected %v", len(expectedCompletions), expectedCompletionsCount)
 		}
 		expectedCompletions.test(t, exported, s, completionItems)
 	})
@@ -125,10 +119,8 @@
 	t.Run("Diagnostics", func(t *testing.T) {
 		t.Helper()
 		diagnosticsCount := expectedDiagnostics.test(t, s.views[0])
-		if goVersion111 { // TODO(rstambler): Remove this when we no longer support Go 1.10.
-			if diagnosticsCount != expectedDiagnosticsCount {
-				t.Errorf("got %v diagnostics expected %v", diagnosticsCount, expectedDiagnosticsCount)
-			}
+		if diagnosticsCount != expectedDiagnosticsCount {
+			t.Errorf("got %v diagnostics expected %v", diagnosticsCount, expectedDiagnosticsCount)
 		}
 	})
 
@@ -142,50 +134,40 @@
 			}
 		}
 		t.Helper()
-		if goVersion111 { // TODO(rstambler): Remove this when we no longer support Go 1.10.
-			if len(expectedFormat) != expectedFormatCount {
-				t.Errorf("got %v formats expected %v", len(expectedFormat), expectedFormatCount)
-			}
+		if len(expectedFormat) != expectedFormatCount {
+			t.Errorf("got %v formats expected %v", len(expectedFormat), expectedFormatCount)
 		}
 		expectedFormat.test(t, s)
 	})
 
 	t.Run("Definitions", func(t *testing.T) {
 		t.Helper()
-		if goVersion111 { // TODO(rstambler): Remove this when we no longer support Go 1.10.
-			if len(expectedDefinitions) != expectedDefinitionsCount {
-				t.Errorf("got %v definitions expected %v", len(expectedDefinitions), expectedDefinitionsCount)
-			}
+		if len(expectedDefinitions) != expectedDefinitionsCount {
+			t.Errorf("got %v definitions expected %v", len(expectedDefinitions), expectedDefinitionsCount)
 		}
 		expectedDefinitions.test(t, s, false)
 	})
 
 	t.Run("TypeDefinitions", func(t *testing.T) {
 		t.Helper()
-		if goVersion111 { // TODO(rstambler): Remove this when we no longer support Go 1.10.
-			if len(expectedTypeDefinitions) != expectedTypeDefinitionsCount {
-				t.Errorf("got %v type definitions expected %v", len(expectedTypeDefinitions), expectedTypeDefinitionsCount)
-			}
+		if len(expectedTypeDefinitions) != expectedTypeDefinitionsCount {
+			t.Errorf("got %v type definitions expected %v", len(expectedTypeDefinitions), expectedTypeDefinitionsCount)
 		}
 		expectedTypeDefinitions.test(t, s, true)
 	})
 
 	t.Run("Highlights", func(t *testing.T) {
 		t.Helper()
-		if goVersion111 { // TODO(rstambler): Remove this when we no longer support Go 1.10.
-			if len(expectedHighlights) != expectedHighlightsCount {
-				t.Errorf("got %v highlights expected %v", len(expectedHighlights), expectedHighlightsCount)
-			}
+		if len(expectedHighlights) != expectedHighlightsCount {
+			t.Errorf("got %v highlights expected %v", len(expectedHighlights), expectedHighlightsCount)
 		}
 		expectedHighlights.test(t, s)
 	})
 
 	t.Run("Symbols", func(t *testing.T) {
 		t.Helper()
-		if goVersion111 { // TODO(rstambler): Remove this when we no longer support Go 1.10.
-			if len(expectedSymbols.m) != expectedSymbolsCount {
-				t.Errorf("got %v symbols expected %v", len(expectedSymbols.m), expectedSymbolsCount)
-			}
+		if len(expectedSymbols.m) != expectedSymbolsCount {
+			t.Errorf("got %v symbols expected %v", len(expectedSymbols.m), expectedSymbolsCount)
 		}
 		expectedSymbols.test(t, s)
 	})
