]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Improve error messages for template failures
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 17 Dec 2025 17:18:03 +0000 (18:18 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 17 Dec 2025 20:12:15 +0000 (21:12 +0100)
resources/resource_transformers/cssjs/postcss_integration_test.go
tpl/tplimpl/templatestore.go

index 9e724271dad8621910f738dd81433cd8db43867e..5ddae9070a7debfa43a4137ee0c4ef5348f2c9d2 100644 (file)
@@ -164,7 +164,7 @@ func TestTransformPostCSSError(t *testing.T) {
                }).BuildE()
 
        ferrs := herrors.UnwrapFileErrors(err)
-       b.Assert(len(ferrs), qt.Equals, 1)
+       b.Assert(len(ferrs), qt.Equals, 2)
        b.Assert(err.Error(), qt.Contains, "a.css:4:2")
 }
 
index 1b6266fca0decc5ef6103b03effa7cfd113600ca..748944663399c15dd37e67549ff13d3ceba963db 100644 (file)
@@ -907,52 +907,57 @@ func (s *TemplateStore) addFileContext(ti *TemplInfo, what string, inerr error)
 
        identifiers := s.extractIdentifiers(inerr.Error())
 
-       checkFilename := func(fi hugofs.FileMetaInfo, inErr error) (error, bool) {
+       checkFilename := func(fi hugofs.FileMetaInfo, inErr error) (int, error) {
+               var matchWeight int
                lineMatcher := func(m herrors.LineMatcher) int {
                        if m.Position.LineNumber != m.LineNumber {
                                return -1
                        }
 
+                       matchWeight++
                        for _, id := range identifiers {
                                if strings.Contains(m.Line, id) {
                                        // We found the line, but return a 0 to signal to
                                        // use the column from the error message.
+                                       matchWeight++
                                        return 0
                                }
                        }
-                       return -1
+                       return 0
                }
 
                f, err := fi.Meta().Open()
                if err != nil {
-                       return inErr, false
+                       return -1, inErr
                }
                defer f.Close()
 
                fe := herrors.NewFileErrorFromName(inErr, fi.Meta().Filename)
                fe.UpdateContent(f, lineMatcher)
 
-               return fe, fe.ErrorContext().Position.IsValid()
+               return matchWeight, fe
        }
 
        inerr = fmt.Errorf("%s: %w", what, inerr)
 
        var (
-               currentErr error
-               ok         bool
+               err1    error
+               weight1 int
+               err2    error
+               weight2 int
        )
 
-       if currentErr, ok = checkFilename(ti.Fi, inerr); ok {
-               return currentErr
-       }
+       weight1, err1 = checkFilename(ti.Fi, inerr)
 
        if ti.base != nil {
-               if currentErr, ok = checkFilename(ti.base.Fi, inerr); ok {
-                       return currentErr
-               }
+               weight2, err2 = checkFilename(ti.base.Fi, inerr)
+       }
+
+       if err2 != nil && weight2 > weight1 {
+               return err2
        }
 
-       return currentErr
+       return err1
 }
 
 func (s *TemplateStore) extractIdentifiers(line string) []string {