[gopls-release-branch.0.9] internal/lsp/cmd: fix vulncheck error handling

Fix 1 - print usage info only when appropriate:

tool.CommandLineError is a special error that makes a command
exits with full usage documentation. When Govulncheck hook runs and
fails, it's unlikely the failure was from command line misuse
and the extra usage doc will distract users from the root cause.
Let's stop that by returning a plain error.

Fix 2 - stop printing package loading errors twice:

Package loading error was printed by the logger in gopls/internal/vulncheck.cmd
and once more by the gopls command line handler. Print it once.

For testing, added back the replace statement to go.mod.
We will update go.mod back after this commit is merged.

Change-Id: Ifaf569a31bbbc84d7b84e1b6d90a8fa0b27ac758
Reviewed-on: https://go-review.googlesource.com/c/tools/+/429515
Reviewed-by: Robert Findley <rfindley@google.com>
gopls-CI: kokoro <noreply+kokoro@google.com>
Run-TryBot: Hyang-Ah Hana Kim <hyangah@gmail.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
diff --git a/gopls/go.mod b/gopls/go.mod
index 2fa0674..67e514a 100644
--- a/gopls/go.mod
+++ b/gopls/go.mod
@@ -25,3 +25,5 @@
 	golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4
 	golang.org/x/text v0.3.7 // indirect
 )
+
+replace golang.org/x/tools => ../
\ No newline at end of file
diff --git a/gopls/internal/vulncheck/command.go b/gopls/internal/vulncheck/command.go
index b9aba15..a166fe4 100644
--- a/gopls/internal/vulncheck/command.go
+++ b/gopls/internal/vulncheck/command.go
@@ -9,6 +9,7 @@
 
 import (
 	"context"
+	"fmt"
 	"log"
 	"os"
 	"sort"
@@ -78,8 +79,8 @@
 	logger.Println("loading packages...")
 	loadedPkgs, err := gvc.LoadPackages(cfg, patterns...)
 	if err != nil {
-		logger.Printf("package load failed: %v", err)
-		return nil, err
+		logger.Printf("%v", err)
+		return nil, fmt.Errorf("package load failed")
 	}
 
 	logger.Printf("analyzing %d packages...\n", len(loadedPkgs))
diff --git a/internal/lsp/cmd/vulncheck.go b/internal/lsp/cmd/vulncheck.go
index d5b05a9..ec1743a 100644
--- a/internal/lsp/cmd/vulncheck.go
+++ b/internal/lsp/cmd/vulncheck.go
@@ -71,7 +71,7 @@
 	opts := source.DefaultOptions().Clone()
 	v.app.options(opts) // register hook
 	if opts == nil || opts.Hooks.Govulncheck == nil {
-		return tool.CommandLineErrorf("vulncheck feature is not available")
+		return fmt.Errorf("vulncheck feature is not available")
 	}
 
 	loadCfg := &packages.Config{
@@ -83,11 +83,11 @@
 
 	res, err := opts.Hooks.Govulncheck(ctx, loadCfg, pattern)
 	if err != nil {
-		return tool.CommandLineErrorf("govulncheck failed: %v", err)
+		return fmt.Errorf("vulncheck failed: %v", err)
 	}
 	data, err := json.MarshalIndent(res, " ", " ")
 	if err != nil {
-		return tool.CommandLineErrorf("failed to decode results: %v", err)
+		return fmt.Errorf("vulncheck failed to encode result: %v", err)
 	}
 	fmt.Printf("%s", data)
 	return nil