internal/jsonrpc2*: remove usage of golang.org/x/xerrors

As of golang/go#50827, gopls no longer needs to build at Go 1.12. This
was the only reason to continue using xerrors in the jsonrpc2 libraries.

Remove this usage as a step toward eliminating the xerrors dependency
from x/tools.

For golang/go#52442

Change-Id: I1a0a1bbf57e6606c66b99b27439adf6f65c26a60
Reviewed-on: https://go-review.googlesource.com/c/tools/+/401155
Run-TryBot: Robert Findley <rfindley@google.com>
gopls-CI: kokoro <noreply+kokoro@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
Reviewed-by: Ian Lance Taylor <iant@google.com>
Reviewed-by: Bryan Mills <bcmills@google.com>
diff --git a/internal/jsonrpc2/messages.go b/internal/jsonrpc2/messages.go
index c29a0e8..58d285d 100644
--- a/internal/jsonrpc2/messages.go
+++ b/internal/jsonrpc2/messages.go
@@ -6,9 +6,8 @@
 
 import (
 	"encoding/json"
+	"errors"
 	"fmt"
-
-	errors "golang.org/x/xerrors"
 )
 
 // Message is the interface to all jsonrpc2 message types.
diff --git a/internal/jsonrpc2/serve.go b/internal/jsonrpc2/serve.go
index d587971..4181bf1 100644
--- a/internal/jsonrpc2/serve.go
+++ b/internal/jsonrpc2/serve.go
@@ -6,13 +6,13 @@
 
 import (
 	"context"
+	"errors"
 	"io"
 	"net"
 	"os"
 	"time"
 
 	"golang.org/x/tools/internal/event"
-	errors "golang.org/x/xerrors"
 )
 
 // NOTE: This file provides an experimental API for serving multiple remote
diff --git a/internal/jsonrpc2_v2/conn.go b/internal/jsonrpc2_v2/conn.go
index 018175e..edcf093 100644
--- a/internal/jsonrpc2_v2/conn.go
+++ b/internal/jsonrpc2_v2/conn.go
@@ -14,7 +14,6 @@
 	"golang.org/x/tools/internal/event"
 	"golang.org/x/tools/internal/event/label"
 	"golang.org/x/tools/internal/lsp/debug/tag"
-	errors "golang.org/x/xerrors"
 )
 
 // Binder builds a connection configuration.
@@ -126,7 +125,7 @@
 func (c *Connection) Notify(ctx context.Context, method string, params interface{}) error {
 	notify, err := NewNotification(method, params)
 	if err != nil {
-		return errors.Errorf("marshaling notify parameters: %v", err)
+		return fmt.Errorf("marshaling notify parameters: %v", err)
 	}
 	ctx, done := event.Start(ctx, method,
 		tag.Method.Of(method),
@@ -158,7 +157,7 @@
 	call, err := NewCall(result.id, method, params)
 	if err != nil {
 		//set the result to failed
-		result.resultBox <- asyncResult{err: errors.Errorf("marshaling call parameters: %w", err)}
+		result.resultBox <- asyncResult{err: fmt.Errorf("marshaling call parameters: %w", err)}
 		return result
 	}
 	ctx, endSpan := event.Start(ctx, method,
@@ -408,7 +407,7 @@
 		switch {
 		case rerr == ErrNotHandled:
 			// message not handled, report it back to the caller as an error
-			c.reply(entry, nil, errors.Errorf("%w: %q", ErrMethodNotFound, entry.request.Method))
+			c.reply(entry, nil, fmt.Errorf("%w: %q", ErrMethodNotFound, entry.request.Method))
 		case rerr == ErrAsyncResponse:
 			// message handled but the response will come later
 		default:
@@ -440,7 +439,7 @@
 		// send the response
 		if result == nil && rerr == nil {
 			// call with no response, send an error anyway
-			rerr = errors.Errorf("%w: %q produced no response", ErrInternal, entry.request.Method)
+			rerr = fmt.Errorf("%w: %q produced no response", ErrInternal, entry.request.Method)
 		}
 		var response *Response
 		response, err = NewResponse(entry.request.ID, result, rerr)
@@ -452,11 +451,11 @@
 		switch {
 		case rerr != nil:
 			// notification failed
-			err = errors.Errorf("%w: %q notification failed: %v", ErrInternal, entry.request.Method, rerr)
+			err = fmt.Errorf("%w: %q notification failed: %v", ErrInternal, entry.request.Method, rerr)
 			rerr = nil
 		case result != nil:
 			//notification produced a response, which is an error
-			err = errors.Errorf("%w: %q produced unwanted response", ErrInternal, entry.request.Method)
+			err = fmt.Errorf("%w: %q produced unwanted response", ErrInternal, entry.request.Method)
 		default:
 			// normal notification finish
 		}
diff --git a/internal/jsonrpc2_v2/frame.go b/internal/jsonrpc2_v2/frame.go
index 634717c..b2b7dc1 100644
--- a/internal/jsonrpc2_v2/frame.go
+++ b/internal/jsonrpc2_v2/frame.go
@@ -12,8 +12,6 @@
 	"io"
 	"strconv"
 	"strings"
-
-	errors "golang.org/x/xerrors"
 )
 
 // Reader abstracts the transport mechanics from the JSON RPC protocol.
@@ -87,7 +85,7 @@
 	}
 	data, err := EncodeMessage(msg)
 	if err != nil {
-		return 0, errors.Errorf("marshaling message: %v", err)
+		return 0, fmt.Errorf("marshaling message: %v", err)
 	}
 	n, err := w.out.Write(data)
 	return int64(n), err
@@ -122,7 +120,7 @@
 		line, err := r.in.ReadString('\n')
 		total += int64(len(line))
 		if err != nil {
-			return nil, total, errors.Errorf("failed reading header line: %w", err)
+			return nil, total, fmt.Errorf("failed reading header line: %w", err)
 		}
 		line = strings.TrimSpace(line)
 		// check we have a header line
@@ -131,23 +129,23 @@
 		}
 		colon := strings.IndexRune(line, ':')
 		if colon < 0 {
-			return nil, total, errors.Errorf("invalid header line %q", line)
+			return nil, total, fmt.Errorf("invalid header line %q", line)
 		}
 		name, value := line[:colon], strings.TrimSpace(line[colon+1:])
 		switch name {
 		case "Content-Length":
 			if length, err = strconv.ParseInt(value, 10, 32); err != nil {
-				return nil, total, errors.Errorf("failed parsing Content-Length: %v", value)
+				return nil, total, fmt.Errorf("failed parsing Content-Length: %v", value)
 			}
 			if length <= 0 {
-				return nil, total, errors.Errorf("invalid Content-Length: %v", length)
+				return nil, total, fmt.Errorf("invalid Content-Length: %v", length)
 			}
 		default:
 			// ignoring unknown headers
 		}
 	}
 	if length == 0 {
-		return nil, total, errors.Errorf("missing Content-Length header")
+		return nil, total, fmt.Errorf("missing Content-Length header")
 	}
 	data := make([]byte, length)
 	n, err := io.ReadFull(r.in, data)
@@ -167,7 +165,7 @@
 	}
 	data, err := EncodeMessage(msg)
 	if err != nil {
-		return 0, errors.Errorf("marshaling message: %v", err)
+		return 0, fmt.Errorf("marshaling message: %v", err)
 	}
 	n, err := fmt.Fprintf(w.out, "Content-Length: %v\r\n\r\n", len(data))
 	total := int64(n)
diff --git a/internal/jsonrpc2_v2/jsonrpc2_test.go b/internal/jsonrpc2_v2/jsonrpc2_test.go
index 4f4b7d9..8e90c23 100644
--- a/internal/jsonrpc2_v2/jsonrpc2_test.go
+++ b/internal/jsonrpc2_v2/jsonrpc2_test.go
@@ -16,7 +16,6 @@
 	"golang.org/x/tools/internal/event/export/eventtest"
 	jsonrpc2 "golang.org/x/tools/internal/jsonrpc2_v2"
 	"golang.org/x/tools/internal/stack/stacktest"
-	errors "golang.org/x/xerrors"
 )
 
 var callTests = []invoker{
@@ -288,19 +287,19 @@
 	case "unblock":
 		var name string
 		if err := json.Unmarshal(req.Params, &name); err != nil {
-			return nil, errors.Errorf("%w: %s", jsonrpc2.ErrParse, err)
+			return nil, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
 		}
 		close(h.waiter(name))
 		return nil, nil
 	case "peek":
 		if len(req.Params) > 0 {
-			return nil, errors.Errorf("%w: expected no params", jsonrpc2.ErrInvalidParams)
+			return nil, fmt.Errorf("%w: expected no params", jsonrpc2.ErrInvalidParams)
 		}
 		return h.accumulator, nil
 	case "cancel":
 		var params cancelParams
 		if err := json.Unmarshal(req.Params, &params); err != nil {
-			return nil, errors.Errorf("%w: %s", jsonrpc2.ErrParse, err)
+			return nil, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
 		}
 		h.conn.Cancel(jsonrpc2.Int64ID(params.ID))
 		return nil, nil
@@ -313,50 +312,50 @@
 	switch req.Method {
 	case "no_args":
 		if len(req.Params) > 0 {
-			return nil, errors.Errorf("%w: expected no params", jsonrpc2.ErrInvalidParams)
+			return nil, fmt.Errorf("%w: expected no params", jsonrpc2.ErrInvalidParams)
 		}
 		return true, nil
 	case "one_string":
 		var v string
 		if err := json.Unmarshal(req.Params, &v); err != nil {
-			return nil, errors.Errorf("%w: %s", jsonrpc2.ErrParse, err)
+			return nil, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
 		}
 		return "got:" + v, nil
 	case "one_number":
 		var v int
 		if err := json.Unmarshal(req.Params, &v); err != nil {
-			return nil, errors.Errorf("%w: %s", jsonrpc2.ErrParse, err)
+			return nil, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
 		}
 		return fmt.Sprintf("got:%d", v), nil
 	case "set":
 		var v int
 		if err := json.Unmarshal(req.Params, &v); err != nil {
-			return nil, errors.Errorf("%w: %s", jsonrpc2.ErrParse, err)
+			return nil, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
 		}
 		h.accumulator = v
 		return nil, nil
 	case "add":
 		var v int
 		if err := json.Unmarshal(req.Params, &v); err != nil {
-			return nil, errors.Errorf("%w: %s", jsonrpc2.ErrParse, err)
+			return nil, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
 		}
 		h.accumulator += v
 		return nil, nil
 	case "get":
 		if len(req.Params) > 0 {
-			return nil, errors.Errorf("%w: expected no params", jsonrpc2.ErrInvalidParams)
+			return nil, fmt.Errorf("%w: expected no params", jsonrpc2.ErrInvalidParams)
 		}
 		return h.accumulator, nil
 	case "join":
 		var v []string
 		if err := json.Unmarshal(req.Params, &v); err != nil {
-			return nil, errors.Errorf("%w: %s", jsonrpc2.ErrParse, err)
+			return nil, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
 		}
 		return path.Join(v...), nil
 	case "echo":
 		var v []interface{}
 		if err := json.Unmarshal(req.Params, &v); err != nil {
-			return nil, errors.Errorf("%w: %s", jsonrpc2.ErrParse, err)
+			return nil, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
 		}
 		var result interface{}
 		err := h.conn.Call(ctx, v[0].(string), v[1]).Await(ctx, &result)
@@ -364,7 +363,7 @@
 	case "wait":
 		var name string
 		if err := json.Unmarshal(req.Params, &name); err != nil {
-			return nil, errors.Errorf("%w: %s", jsonrpc2.ErrParse, err)
+			return nil, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
 		}
 		select {
 		case <-h.waiter(name):
@@ -372,12 +371,12 @@
 		case <-ctx.Done():
 			return nil, ctx.Err()
 		case <-time.After(time.Second):
-			return nil, errors.Errorf("wait for %q timed out", name)
+			return nil, fmt.Errorf("wait for %q timed out", name)
 		}
 	case "fork":
 		var name string
 		if err := json.Unmarshal(req.Params, &name); err != nil {
-			return nil, errors.Errorf("%w: %s", jsonrpc2.ErrParse, err)
+			return nil, fmt.Errorf("%w: %s", jsonrpc2.ErrParse, err)
 		}
 		waitFor := h.waiter(name)
 		go func() {
@@ -387,7 +386,7 @@
 			case <-ctx.Done():
 				h.conn.Respond(req.ID, nil, ctx.Err())
 			case <-time.After(time.Second):
-				h.conn.Respond(req.ID, nil, errors.Errorf("wait for %q timed out", name))
+				h.conn.Respond(req.ID, nil, fmt.Errorf("wait for %q timed out", name))
 			}
 		}()
 		return nil, jsonrpc2.ErrAsyncResponse
diff --git a/internal/jsonrpc2_v2/messages.go b/internal/jsonrpc2_v2/messages.go
index 652ac81..af14564 100644
--- a/internal/jsonrpc2_v2/messages.go
+++ b/internal/jsonrpc2_v2/messages.go
@@ -6,8 +6,8 @@
 
 import (
 	"encoding/json"
-
-	errors "golang.org/x/xerrors"
+	"errors"
+	"fmt"
 )
 
 // ID is a Request identifier.
@@ -120,7 +120,7 @@
 	msg.marshal(&wire)
 	data, err := json.Marshal(&wire)
 	if err != nil {
-		return data, errors.Errorf("marshaling jsonrpc message: %w", err)
+		return data, fmt.Errorf("marshaling jsonrpc message: %w", err)
 	}
 	return data, nil
 }
@@ -128,10 +128,10 @@
 func DecodeMessage(data []byte) (Message, error) {
 	msg := wireCombined{}
 	if err := json.Unmarshal(data, &msg); err != nil {
-		return nil, errors.Errorf("unmarshaling jsonrpc message: %w", err)
+		return nil, fmt.Errorf("unmarshaling jsonrpc message: %w", err)
 	}
 	if msg.VersionTag != wireVersion {
-		return nil, errors.Errorf("invalid message version tag %s expected %s", msg.VersionTag, wireVersion)
+		return nil, fmt.Errorf("invalid message version tag %s expected %s", msg.VersionTag, wireVersion)
 	}
 	id := ID{}
 	switch v := msg.ID.(type) {
@@ -144,7 +144,7 @@
 	case string:
 		id = StringID(v)
 	default:
-		return nil, errors.Errorf("invalid message id type <%T>%v", v, v)
+		return nil, fmt.Errorf("invalid message id type <%T>%v", v, v)
 	}
 	if msg.Method != "" {
 		// has a method, must be a call
diff --git a/internal/jsonrpc2_v2/serve.go b/internal/jsonrpc2_v2/serve.go
index fb35166..646267b 100644
--- a/internal/jsonrpc2_v2/serve.go
+++ b/internal/jsonrpc2_v2/serve.go
@@ -6,14 +6,13 @@
 
 import (
 	"context"
+	"errors"
 	"io"
 	"runtime"
 	"strings"
 	"sync"
 	"syscall"
 	"time"
-
-	errors "golang.org/x/xerrors"
 )
 
 // Listener is implemented by protocols to accept new inbound connections.