diff --git a/gopls/internal/lsp/cache/cycle_test.go b/gopls/internal/lsp/cache/cycle_test.go
index d08e8e0..25edbbf 100644
--- a/gopls/internal/lsp/cache/cycle_test.go
+++ b/gopls/internal/lsp/cache/cycle_test.go
@@ -76,7 +76,7 @@
 		}
 		if s != "" {
 			for _, item := range strings.Split(s, ";") {
-				nodeID, succIDs, ok := cut(item, "->")
+				nodeID, succIDs, ok := strings.Cut(item, "->")
 				node := makeNode(nodeID)
 				if ok {
 					for _, succID := range strings.Split(succIDs, ",") {
diff --git a/gopls/internal/lsp/cache/snapshot.go b/gopls/internal/lsp/cache/snapshot.go
index cbc9c6e..a1fe475 100644
--- a/gopls/internal/lsp/cache/snapshot.go
+++ b/gopls/internal/lsp/cache/snapshot.go
@@ -1874,20 +1874,12 @@
 // Most likely, each call site of inVendor needs to be reconsidered to
 // understand and correctly implement the desired behavior.
 func inVendor(uri span.URI) bool {
-	_, after, found := cut(string(uri), "/vendor/")
+	_, after, found := strings.Cut(string(uri), "/vendor/")
 	// Only subdirectories of /vendor/ are considered vendored
 	// (/vendor/a/foo.go is vendored, /vendor/foo.go is not).
 	return found && strings.Contains(after, "/")
 }
 
-// TODO(adonovan): replace with strings.Cut when we can assume go1.18.
-func cut(s, sep string) (before, after string, found bool) {
-	if i := strings.Index(s, sep); i >= 0 {
-		return s[:i], s[i+len(sep):], true
-	}
-	return s, "", false
-}
-
 // unappliedChanges is a file source that handles an uncloned snapshot.
 type unappliedChanges struct {
 	originalSnapshot *snapshot
diff --git a/gopls/internal/lsp/lru/lru.go b/gopls/internal/lsp/lru/lru.go
index 5750f41..b75fc85 100644
--- a/gopls/internal/lsp/lru/lru.go
+++ b/gopls/internal/lsp/lru/lru.go
@@ -11,8 +11,6 @@
 	"sync"
 )
 
-type any = interface{} // TODO: remove once gopls only builds at go1.18+
-
 // A Cache is a fixed-size in-memory LRU cache.
 type Cache struct {
 	capacity int
diff --git a/gopls/internal/lsp/lru/lru_test.go b/gopls/internal/lsp/lru/lru_test.go
index 165a647..a9e6407 100644
--- a/gopls/internal/lsp/lru/lru_test.go
+++ b/gopls/internal/lsp/lru/lru_test.go
@@ -17,8 +17,6 @@
 	"golang.org/x/tools/gopls/internal/lsp/lru"
 )
 
-type any = interface{} // TODO: remove once gopls only builds at go1.18+
-
 func TestCache(t *testing.T) {
 	type get struct {
 		key  string
diff --git a/gopls/internal/lsp/regtest/marker.go b/gopls/internal/lsp/regtest/marker.go
index 1c364bd..36dcda3 100644
--- a/gopls/internal/lsp/regtest/marker.go
+++ b/gopls/internal/lsp/regtest/marker.go
@@ -746,8 +746,7 @@
 			test.env = make(map[string]string)
 			fields := strings.Fields(string(file.Data))
 			for _, field := range fields {
-				// TODO: use strings.Cut once we are on 1.18+.
-				key, value, ok := cut(field, "=")
+				key, value, ok := strings.Cut(field, "=")
 				if !ok {
 					return nil, fmt.Errorf("env vars must be formatted as var=value, got %q", field)
 				}
@@ -755,7 +754,7 @@
 			}
 
 		case strings.HasPrefix(file.Name, "@"): // golden content
-			id, name, _ := cut(file.Name[len("@"):], "/")
+			id, name, _ := strings.Cut(file.Name[len("@"):], "/")
 			// Note that a file.Name of just "@id" gives (id, name) = ("id", "").
 			if _, ok := test.golden[id]; !ok {
 				test.golden[id] = &Golden{
@@ -800,16 +799,6 @@
 	return test, nil
 }
 
-// cut is a copy of strings.Cut.
-//
-// TODO: once we only support Go 1.18+, just use strings.Cut.
-func cut(s, sep string) (before, after string, found bool) {
-	if i := strings.Index(s, sep); i >= 0 {
-		return s[:i], s[i+len(sep):], true
-	}
-	return s, "", false
-}
-
 // formatTest formats the test as a txtar archive.
 func formatTest(test *markerTest) ([]byte, error) {
 	arch := &txtar.Archive{
diff --git a/gopls/internal/lsp/regtest/regtest.go b/gopls/internal/lsp/regtest/regtest.go
index 02c0ad0..7def1d7 100644
--- a/gopls/internal/lsp/regtest/regtest.go
+++ b/gopls/internal/lsp/regtest/regtest.go
@@ -8,7 +8,6 @@
 	"context"
 	"flag"
 	"fmt"
-	"io/ioutil"
 	"os"
 	"runtime"
 	"testing"
@@ -133,7 +132,7 @@
 		}
 	}
 
-	dir, err := ioutil.TempDir("", "gopls-regtest-")
+	dir, err := os.MkdirTemp("", "gopls-regtest-")
 	if err != nil {
 		panic(fmt.Errorf("creating regtest temp directory: %v", err))
 	}
diff --git a/gopls/internal/lsp/regtest/runner.go b/gopls/internal/lsp/regtest/runner.go
index 4f085e7..e4aa2f3 100644
--- a/gopls/internal/lsp/regtest/runner.go
+++ b/gopls/internal/lsp/regtest/runner.go
@@ -9,7 +9,6 @@
 	"context"
 	"fmt"
 	"io"
-	"io/ioutil"
 	"net"
 	"os"
 	"path/filepath"
@@ -370,7 +369,7 @@
 	}
 
 	r.startRemoteOnce.Do(func() {
-		socketDir, err := ioutil.TempDir(r.tempDir, "gopls-regtest-socket")
+		socketDir, err := os.MkdirTemp(r.tempDir, "gopls-regtest-socket")
 		if err != nil {
 			r.remoteErr = err
 			return
