]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
Add warnidf template function
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 30 Jan 2024 08:23:21 +0000 (09:23 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Tue, 30 Jan 2024 19:12:03 +0000 (20:12 +0100)
Also rename config `ignoreErrors` => `ignoreLogs`

But the old still works.

Closes #9189

common/loggers/logger.go
config/allconfig/allconfig.go
config/allconfig/configlanguage.go
config/allconfig/load.go
config/configProvider.go
hugolib/integrationtest_builder.go
hugolib/site_new.go
tpl/data/data.go
tpl/fmt/fmt.go
tpl/fmt/fmt_integration_test.go
tpl/fmt/init.go

index c4d81fb8305744c315a9142a78b8e3e47702dd05..f851513b3eb19dcc98c07cd7a1484670d8c3829a 100644 (file)
@@ -179,9 +179,9 @@ type Logger interface {
        Debugln(v ...any)
        Error() logg.LevelLogger
        Errorf(format string, v ...any)
+       Erroridf(id, format string, v ...any)
        Errorln(v ...any)
        Errors() string
-       Errorsf(id, format string, v ...any)
        Info() logg.LevelLogger
        InfoCommand(command string) logg.LevelLogger
        Infof(format string, v ...any)
@@ -197,6 +197,7 @@ type Logger interface {
        Warn() logg.LevelLogger
        WarnCommand(command string) logg.LevelLogger
        Warnf(format string, v ...any)
+       Warnidf(id, format string, v ...any)
        Warnln(v ...any)
        Deprecatef(fail bool, format string, v ...any)
        Trace(s logg.StringFunc)
@@ -321,10 +322,20 @@ func (l *logAdapter) Errors() string {
        return l.errors.String()
 }
 
-func (l *logAdapter) Errorsf(id, format string, v ...any) {
+func (l *logAdapter) Erroridf(id, format string, v ...any) {
+       format += l.idfInfoStatement("error", id, format)
        l.errorl.WithField(FieldNameStatementID, id).Logf(format, v...)
 }
 
+func (l *logAdapter) Warnidf(id, format string, v ...any) {
+       format += l.idfInfoStatement("warning", id, format)
+       l.warnl.WithField(FieldNameStatementID, id).Logf(format, v...)
+}
+
+func (l *logAdapter) idfInfoStatement(what, id, format string) string {
+       return fmt.Sprintf("\nYou can suppress this %s by adding the following to your site configuration:\nignoreLogs = ['%s']", what, id)
+}
+
 func (l *logAdapter) Trace(s logg.StringFunc) {
        l.tracel.Log(s)
 }
index 5788e792bdbe8c28df0c1d8e54b639405a5f1305..26e402305377c84bb56b8a08e64879dfc14224ff 100644 (file)
@@ -206,7 +206,7 @@ func (c Config) cloneForLang() *Config {
        x.DisableKinds = copyStringSlice(x.DisableKinds)
        x.DisableLanguages = copyStringSlice(x.DisableLanguages)
        x.MainSections = copyStringSlice(x.MainSections)
-       x.IgnoreErrors = copyStringSlice(x.IgnoreErrors)
+       x.IgnoreLogs = copyStringSlice(x.IgnoreLogs)
        x.IgnoreFiles = copyStringSlice(x.IgnoreFiles)
        x.Theme = copyStringSlice(x.Theme)
 
@@ -299,9 +299,9 @@ func (c *Config) CompileConfig(logger loggers.Logger) error {
                }
        }
 
-       ignoredErrors := make(map[string]bool)
-       for _, err := range c.IgnoreErrors {
-               ignoredErrors[strings.ToLower(err)] = true
+       ignoredLogIDs := make(map[string]bool)
+       for _, err := range c.IgnoreLogs {
+               ignoredLogIDs[strings.ToLower(err)] = true
        }
 
        baseURL, err := urls.NewBaseURLFromString(c.BaseURL)
@@ -357,7 +357,7 @@ func (c *Config) CompileConfig(logger loggers.Logger) error {
                BaseURLLiveReload: baseURL,
                DisabledKinds:     disabledKinds,
                DisabledLanguages: disabledLangs,
-               IgnoredErrors:     ignoredErrors,
+               IgnoredLogs:       ignoredLogIDs,
                KindOutputFormats: kindOutputFormats,
                CreateTitle:       helpers.GetTitleFunc(c.TitleCaseStyle),
                IsUglyURLSection:  isUglyURL,
@@ -394,7 +394,7 @@ type ConfigCompiled struct {
        KindOutputFormats map[string]output.Formats
        DisabledKinds     map[string]bool
        DisabledLanguages map[string]bool
-       IgnoredErrors     map[string]bool
+       IgnoredLogs       map[string]bool
        CreateTitle       func(s string) string
        IsUglyURLSection  func(section string) bool
        IgnoreFile        func(filename string) bool
@@ -501,8 +501,8 @@ type RootConfig struct {
        // Enable to disable the build lock file.
        NoBuildLock bool
 
-       // A list of error IDs to ignore.
-       IgnoreErrors []string
+       // A list of log IDs to ignore.
+       IgnoreLogs []string
 
        // A list of regexps that match paths to ignore.
        // Deprecated: Use the settings on module imports.
index 71bd232de171bf5ca5590364d1e543a0ed5dbae7..0b4c742783293826131b767b78691929c132daaa 100644 (file)
@@ -89,8 +89,8 @@ func (c ConfigLanguage) IsLangDisabled(lang string) bool {
        return c.config.C.DisabledLanguages[lang]
 }
 
-func (c ConfigLanguage) IgnoredErrors() map[string]bool {
-       return c.config.C.IgnoredErrors
+func (c ConfigLanguage) IgnoredLogs() map[string]bool {
+       return c.config.C.IgnoredLogs
 }
 
 func (c ConfigLanguage) NoBuildLock() bool {
index eceed31f4ba35ce3326ae24f45d98ca9482055da..cb267422f157fc3e132b2e6460bf107e15537552 100644 (file)
@@ -141,6 +141,7 @@ func (l configLoader) applyConfigAliases() error {
                {Key: "indexes", Value: "taxonomies"},
                {Key: "logI18nWarnings", Value: "printI18nWarnings"},
                {Key: "logPathWarnings", Value: "printPathWarnings"},
+               {Key: "ignoreErrors", Value: "ignoreLogs"},
        }
 
        for _, alias := range aliases {
index 2536639ead90fc00b8c7002f3cf15530e093cceb..21d832f17e03893fa5b1f47308f977bca08129cb 100644 (file)
@@ -67,7 +67,7 @@ type AllProvider interface {
        NewContentEditor() string
        Timeout() time.Duration
        StaticDirs() []string
-       IgnoredErrors() map[string]bool
+       IgnoredLogs() map[string]bool
        WorkingDir() string
        EnableEmoji() bool
 }
index a46ae72751cf6449e446c4eec33373640134d34c..222c8ec2dd76f5a484033f7e74682dfc4b352dc1 100644 (file)
@@ -57,6 +57,13 @@ func TestOptDebug() TestOpt {
        }
 }
 
+// TestOptWarn will enable warn logging in integration tests.
+func TestOptWarn() TestOpt {
+       return func(c *IntegrationTestConfig) {
+               c.LogLevel = logg.LevelWarn
+       }
+}
+
 // TestOptWithNFDOnDarwin will normalize the Unicode filenames to NFD on Darwin.
 func TestOptWithNFDOnDarwin() TestOpt {
        return func(c *IntegrationTestConfig) {
@@ -181,9 +188,18 @@ func (b *lockingBuffer) Write(p []byte) (n int, err error) {
        return
 }
 
-func (s *IntegrationTestBuilder) AssertLogContains(text string) {
+func (s *IntegrationTestBuilder) AssertLogContains(els ...string) {
        s.Helper()
-       s.Assert(s.logBuff.String(), qt.Contains, text)
+       for _, el := range els {
+               s.Assert(s.logBuff.String(), qt.Contains, el)
+       }
+}
+
+func (s *IntegrationTestBuilder) AssertLogNotContains(els ...string) {
+       s.Helper()
+       for _, el := range els {
+               s.Assert(s.logBuff.String(), qt.Not(qt.Contains), el)
+       }
 }
 
 func (s *IntegrationTestBuilder) AssertLogMatches(expression string) {
index 0cab713520bf120960cc6decdc4dc70e4edfe3d8..debb81e77b1e715d0963d344ce65a4092230d9a6 100644 (file)
@@ -124,7 +124,7 @@ func NewHugoSites(cfg deps.DepsCfg) (*HugoSites, error) {
                        Stdout:             cfg.LogOut,
                        Stderr:             cfg.LogOut,
                        StoreErrors:        conf.Running(),
-                       SuppressStatements: conf.IgnoredErrors(),
+                       SuppressStatements: conf.IgnoredLogs(),
                }
                logger = loggers.New(logOpts)
        }
index 7eb730c4c067072ae14983bb21e7644a4a5e3e7d..78f1f3f48e2a12b1974f3c9c743f230ad6ecc779 100644 (file)
@@ -94,7 +94,7 @@ func (ns *Namespace) GetCSV(sep string, args ...any) (d [][]string, err error) {
                if security.IsAccessDenied(err) {
                        return nil, err
                }
-               ns.deps.Log.Errorsf(constants.ErrRemoteGetCSV, "Failed to get CSV resource %q: %s", url, err)
+               ns.deps.Log.Erroridf(constants.ErrRemoteGetCSV, "Failed to get CSV resource %q: %s", url, err)
                return nil, nil
        }
 
@@ -132,7 +132,7 @@ func (ns *Namespace) GetJSON(args ...any) (any, error) {
                if security.IsAccessDenied(err) {
                        return nil, err
                }
-               ns.deps.Log.Errorsf(constants.ErrRemoteGetJSON, "Failed to get JSON resource %q: %s", url, err)
+               ns.deps.Log.Erroridf(constants.ErrRemoteGetJSON, "Failed to get JSON resource %q: %s", url, err)
                return nil, nil
        }
 
index 4f18758e043205d9731a4da2a0751e47f9aa16d6..04dbd339c5692a3dd2f001d6d824bccd53de3cf2 100644 (file)
@@ -68,9 +68,7 @@ func (ns *Namespace) Errorf(format string, args ...any) string {
 // an information text that the error with the given id can be suppressed in config.
 // It returns an empty string.
 func (ns *Namespace) Erroridf(id, format string, args ...any) string {
-       format += "\nYou can suppress this error by adding the following to your site configuration:\nignoreErrors = ['%s']"
-       args = append(args, id)
-       ns.logger.Errorsf(id, format, args...)
+       ns.logger.Erroridf(id, format, args...)
        return ""
 }
 
@@ -81,6 +79,14 @@ func (ns *Namespace) Warnf(format string, args ...any) string {
        return ""
 }
 
+// Warnidf formats args according to a format specifier and logs an WARNING and
+// an information text that the warning with the given id can be suppressed in config.
+// It returns an empty string.
+func (ns *Namespace) Warnidf(id, format string, args ...any) string {
+       ns.logger.Warnidf(id, format, args...)
+       return ""
+}
+
 // Warnmf is epxermimental and subject to change at any time.
 func (ns *Namespace) Warnmf(m any, format string, args ...any) string {
        return ns.logmf(ns.logger.Warn(), m, format, args...)
index 40bfefcdc4e244ab68cd4844cd8cacb56fcb52b1..74322770e08e8499200c63cec508cb7ec71f92b2 100644 (file)
@@ -16,6 +16,7 @@ package fmt_test
 import (
        "testing"
 
+       qt "github.com/frankban/quicktest"
        "github.com/gohugoio/hugo/hugolib"
 )
 
@@ -32,13 +33,25 @@ ignoreErrors = ['error-b']
 {{ erroridf "error-b" "%s" "b"}}
   `
 
-       b := hugolib.NewIntegrationTestBuilder(
-               hugolib.IntegrationTestConfig{
-                       T:           t,
-                       TxtarString: files,
-               },
-       )
+       b, err := hugolib.TestE(t, files)
 
-       b.BuildE()
-       b.AssertLogMatches(`^ERROR a\nYou can suppress this error by adding the following to your site configuration:\nignoreErrors = \['error-a'\]\n$`)
+       b.Assert(err, qt.IsNotNil)
+       b.AssertLogMatches(`^ERROR a\nYou can suppress this error by adding the following to your site configuration:\nignoreLogs = \['error-a'\]\n$`)
+}
+
+func TestWarnidf(t *testing.T) {
+       t.Parallel()
+
+       files := `
+-- hugo.toml --
+disableKinds = ['page','rss','section','sitemap','taxonomy','term']
+ignoreLogs = ['warning-b']
+-- layouts/index.html --
+{{ warnidf "warning-a" "%s" "a"}}
+{{ warnidf "warning-b" "%s" "b"}}
+  `
+
+       b := hugolib.Test(t, files, hugolib.TestOptWarn())
+       b.AssertLogContains("WARN  a", "You can suppress this warning", "ignoreLogs", "['warning-a']")
+       b.AssertLogNotContains("['warning-b']")
 }
index 8000627e211fcb24fa1ff81aa2b4ff5f0f150fa7..701bd3b6a6af0556392c639ab63a4c1de7cfa304 100644 (file)
@@ -66,6 +66,13 @@ func init() {
                        },
                )
 
+               ns.AddMethodMapping(ctx.Warnidf,
+                       []string{"warnidf"},
+                       [][2]string{
+                               {`{{ warnidf "my-warn-id" "%s." "warning" }}`, ``},
+                       },
+               )
+
                ns.AddMethodMapping(ctx.Warnf,
                        []string{"warnf"},
                        [][2]string{