From 894b3185285af9a7d866c7c3cafea52a488d9f48 Mon Sep 17 00:00:00 2001 From: Cole Faust Date: Thu, 21 Mar 2024 16:16:49 -0700 Subject: [PATCH] Fix error reporting in MatchesIncludeTags ctx.ModuleErrorf for the main blueprint config object doesn't report an error, it just returns it. If go had something like C++'s `[[nodiscard]]` or rust's `#[must_use]` that would be useful here, but the issue has been open since 2017: https://github.com/golang/go/issues/20803 Test: Presubmits Change-Id: I72709e6c5466d55f5c0f3fe51a25c29df0826271 --- context.go | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/context.go b/context.go index 4661055..6ec1641 100644 --- a/context.go +++ b/context.go @@ -1068,8 +1068,12 @@ func shouldVisitFile(c *Context, file *parser.File) shouldVisitFileInfo { } if blueprintPackageIncludes != nil { - packageMatches := blueprintPackageIncludes.MatchesIncludeTags(c) - if !packageMatches { + packageMatches, err := blueprintPackageIncludes.matchesIncludeTags(c) + if err != nil { + return shouldVisitFileInfo{ + errs: []error{err}, + } + } else if !packageMatches { return shouldVisitFileInfo{ shouldVisitFile: false, skippedModules: skippedModules, @@ -5265,14 +5269,14 @@ func (pi *PackageIncludes) MatchAll() []string { } // Returns true if all requested include tags are set in the Context object -func (pi *PackageIncludes) MatchesIncludeTags(ctx *Context) bool { +func (pi *PackageIncludes) matchesIncludeTags(ctx *Context) (bool, error) { if len(pi.MatchAll()) == 0 { - ctx.ModuleErrorf(pi, "Match_all must be a non-empty list") + return false, ctx.ModuleErrorf(pi, "Match_all must be a non-empty list") } for _, includeTag := range pi.MatchAll() { if !ctx.ContainsIncludeTag(includeTag) { - return false + return false, nil } } - return true + return true, nil }