internal/worker: properly implement vendor error categorization

Previously, a function to catch errors that occured when a vendor
directory existed within a module existed but was unused. This change
reimplements that function and actually uses it in error
categorization.

Change-Id: I96408f1c4eb8898a0f112c545e27a0b7d0ae2808
Reviewed-on: https://go-review.googlesource.com/c/pkgsite-metrics/+/482155
Run-TryBot: Maceo Thompson <maceothompson@google.com>
Reviewed-by: Jonathan Amsterdam <jba@google.com>
TryBot-Result: Gopher Robot <gobot@golang.org>
diff --git a/internal/worker/govulncheck_scan.go b/internal/worker/govulncheck_scan.go
index c9cdc55..e519ed5 100644
--- a/internal/worker/govulncheck_scan.go
+++ b/internal/worker/govulncheck_scan.go
@@ -212,6 +212,8 @@
 			err = fmt.Errorf("%v: %w", err, derrors.LoadPackagesMissingGoSumEntryError)
 		case isReplacingWithLocalPath(err):
 			err = fmt.Errorf("%v: %w", err, derrors.LoadPackagesImportedLocalError)
+		case isModVendor(err):
+			err = fmt.Errorf("%v: %w", err, derrors.VendorError)
 		default:
 			err = fmt.Errorf("%v: %w", err, derrors.ScanModuleGovulncheckError)
 		}
@@ -459,6 +461,10 @@
 	return strings.Contains(err.Error(), "no go.mod file")
 }
 
+func isModVendor(err error) bool {
+	return strings.Contains(err.Error(), "-mod=vendor")
+}
+
 func isReplacingWithLocalPath(err error) bool {
 	errStr := err.Error()
 	matched, err := regexp.MatchString(`replaced by .{0,2}/`, errStr)