URI: 
       Rework the build.writeStats struct - hugo - [fork] hugo port for 9front
  HTML git clone git@git.drkhsh.at/hugo.git
   DIR Log
   DIR Files
   DIR Refs
   DIR Submodules
   DIR README
   DIR LICENSE
       ---
   DIR commit 5afc89f2bfb3e582bface8a9980e60782ece9880
   DIR parent c1eac616d55945c28ea364f44d1e9ae12e672e11
  HTML Author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
       Date:   Sun,  2 Jul 2023 11:02:47 +0200
       
       Rework the build.writeStats struct
       
       Mostly to make it easier to toggle on/off this feature from the env.
       
       See #11191
       
       Diffstat:
         M config/commonConfig.go              |      28 ++++++++++++++--------------
         M hugolib/hugo_sites_build.go         |       2 +-
         M hugolib/site_test.go                |      35 +++++++++++++-------------------
         M publisher/htmlElementsCollector.go  |      12 ++++++------
         M publisher/htmlElementsCollector_te… |      18 +++---------------
         M publisher/publisher.go              |       4 ++--
       
       6 files changed, 40 insertions(+), 59 deletions(-)
       ---
   DIR diff --git a/config/commonConfig.go b/config/commonConfig.go
       @@ -82,7 +82,7 @@ type LoadConfigResult struct {
        
        var defaultBuild = BuildConfig{
                UseResourceCacheWhen: "fallback",
       -        WriteStats:           WriteStats{},
       +        BuildStats:           BuildStats{},
        
                CacheBusters: []CacheBuster{
                        {
       @@ -112,7 +112,7 @@ type BuildConfig struct {
                // When enabled, will collect and write a hugo_stats.json with some build
                // related aggregated data (e.g. CSS class names).
                // Note that this was a bool <= v0.115.0.
       -        WriteStats WriteStats
       +        BuildStats BuildStats
        
                // Can be used to toggle off writing of the IntelliSense /assets/jsconfig.js
                // file.
       @@ -122,15 +122,19 @@ type BuildConfig struct {
                CacheBusters []CacheBuster
        }
        
       -// WriteStats configures what to write to the hugo_stats.json file.
       -type WriteStats struct {
       -        Tags    bool
       -        Classes bool
       -        IDs     bool
       +// BuildStats configures if and what to write to the hugo_stats.json file.
       +type BuildStats struct {
       +        Enable         bool
       +        DisableTags    bool
       +        DisableClasses bool
       +        DisableIDs     bool
        }
        
       -func (w WriteStats) Enabled() bool {
       -        return w.Tags || w.Classes || w.IDs
       +func (w BuildStats) Enabled() bool {
       +        if !w.Enable {
       +                return false
       +        }
       +        return !w.DisableTags || !w.DisableClasses || !w.DisableIDs
        }
        
        func (b BuildConfig) clone() BuildConfig {
       @@ -192,11 +196,7 @@ func DecodeBuildConfig(cfg Provider) BuildConfig {
                // writeStats was a bool <= v0.115.0.
                if writeStats, ok := m["writestats"]; ok {
                        if bb, ok := writeStats.(bool); ok {
       -                        m["writestats"] = WriteStats{
       -                                Tags:    bb,
       -                                Classes: bb,
       -                                IDs:     bb,
       -                        }
       +                        m["buildstats"] = BuildStats{Enable: bb}
                        }
                }
        
   DIR diff --git a/hugolib/hugo_sites_build.go b/hugolib/hugo_sites_build.go
       @@ -475,7 +475,7 @@ func (h *HugoSites) writeBuildStats() error {
                if h.ResourceSpec == nil {
                        panic("h.ResourceSpec is nil")
                }
       -        if !h.ResourceSpec.BuildConfig().WriteStats.Enabled() {
       +        if !h.ResourceSpec.BuildConfig().BuildStats.Enabled() {
                        return nil
                }
        
   DIR diff --git a/hugolib/site_test.go b/hugolib/site_test.go
       @@ -1200,46 +1200,39 @@ writeStats = false
                b.AssertDestinationExists("hugo_stats.json", false)
        
                b = r(`
       -[build.writeStats]
       -tags = true
       -classes = true
       -ids = true
       -        `)
       +[build.buildStats]
       +enable = true
       +`)
        
                b.AssertFileContent("hugo_stats.json", "myclass", "div", "myid")
        
                b = r(`
       -[build.writeStats]
       -tags = true
       -classes = true
       -ids = false
       +[build.buildStats]
       +enable = true
       +disableids = true
        `)
        
                b.AssertFileContent("hugo_stats.json", "myclass", "div", "! myid")
        
                b = r(`
       -[build.writeStats]
       -tags = true
       -classes = false
       -ids = true
       +[build.buildStats]
       +enable = true
       +disableclasses = true
        `)
        
                b.AssertFileContent("hugo_stats.json", "! myclass", "div", "myid")
        
                b = r(`
       -[build.writeStats]
       -tags = false
       -classes = true
       -ids = true
       +[build.buildStats]
       +enable = true
       +disabletags = true
                `)
        
                b.AssertFileContent("hugo_stats.json", "myclass", "! div", "myid")
        
                b = r(`
       -[build.writeStats]
       -tags = false
       -classes = false
       -ids = false
       +[build.buildStats]
       +enable = false
                `)
                b.AssertDestinationExists("hugo_stats.json", false)
        
   DIR diff --git a/publisher/htmlElementsCollector.go b/publisher/htmlElementsCollector.go
       @@ -47,7 +47,7 @@ var (
                }
        )
        
       -func newHTMLElementsCollector(conf config.WriteStats) *htmlElementsCollector {
       +func newHTMLElementsCollector(conf config.BuildStats) *htmlElementsCollector {
                return &htmlElementsCollector{
                        conf:       conf,
                        elementSet: make(map[string]bool),
       @@ -95,7 +95,7 @@ type htmlElement struct {
        }
        
        type htmlElementsCollector struct {
       -        conf config.WriteStats
       +        conf config.BuildStats
        
                // Contains the raw HTML string. We will get the same element
                // several times, and want to avoid costly reparsing when this
       @@ -117,7 +117,7 @@ func (c *htmlElementsCollector) getHTMLElements() HTMLElements {
                for _, el := range c.elements {
                        classes = append(classes, el.Classes...)
                        ids = append(ids, el.IDs...)
       -                if c.conf.Tags {
       +                if !c.conf.DisableTags {
                                tags = append(tags, el.Tag)
                        }
                }
       @@ -372,7 +372,7 @@ func htmlLexToEndOfComment(w *htmlElementsCollectorWriter) htmlCollectorStateFun
        func (w *htmlElementsCollectorWriter) parseHTMLElement(elStr string) (el htmlElement, err error) {
                conf := w.collector.conf
        
       -        if !conf.IDs && !conf.Classes {
       +        if conf.DisableTags && conf.DisableClasses {
                        // Nothing to do.
                        return
                }
       @@ -402,11 +402,11 @@ func (w *htmlElementsCollectorWriter) parseHTMLElement(elStr string) (el htmlEle
                                        switch {
                                        case strings.EqualFold(a.Key, "id"):
                                                // There should be only one, but one never knows...
       -                                        if conf.IDs {
       +                                        if !conf.DisableIDs {
                                                        el.IDs = append(el.IDs, a.Val)
                                                }
                                        default:
       -                                        if !conf.Classes {
       +                                        if conf.DisableClasses {
                                                        continue
                                                }
                                                if classAttrRe.MatchString(a.Key) {
   DIR diff --git a/publisher/htmlElementsCollector_test.go b/publisher/htmlElementsCollector_test.go
       @@ -138,11 +138,7 @@ func TestClassCollector(t *testing.T) {
        
                                c.Run(fmt.Sprintf("%s--minify-%t", test.name, variant.minify), func(c *qt.C) {
                                        w := newHTMLElementsCollectorWriter(newHTMLElementsCollector(
       -                                        config.WriteStats{
       -                                                Tags:    true,
       -                                                Classes: true,
       -                                                IDs:     true,
       -                                        },
       +                                        config.BuildStats{Enable: true},
                                        ))
                                        if variant.minify {
                                                if skipMinifyTest[test.name] {
       @@ -248,11 +244,7 @@ func BenchmarkElementsCollectorWriter(b *testing.B) {
        `
                for i := 0; i < b.N; i++ {
                        w := newHTMLElementsCollectorWriter(newHTMLElementsCollector(
       -                        config.WriteStats{
       -                                Tags:    true,
       -                                Classes: true,
       -                                IDs:     true,
       -                        },
       +                        config.BuildStats{Enable: true},
                        ))
                        fmt.Fprint(w, benchHTML)
        
       @@ -276,11 +268,7 @@ func BenchmarkElementsCollectorWriterPre(b *testing.B) {
        
        `
                w := newHTMLElementsCollectorWriter(newHTMLElementsCollector(
       -                config.WriteStats{
       -                        Tags:    true,
       -                        Classes: true,
       -                        IDs:     true,
       -                },
       +                config.BuildStats{Enable: true},
                ))
                for i := 0; i < b.N; i++ {
                        fmt.Fprint(w, benchHTML)
   DIR diff --git a/publisher/publisher.go b/publisher/publisher.go
       @@ -81,8 +81,8 @@ func NewDestinationPublisher(rs *resources.Spec, outputFormats output.Formats, m
                fs := rs.BaseFs.PublishFs
                cfg := rs.Cfg
                var classCollector *htmlElementsCollector
       -        if rs.BuildConfig().WriteStats.Enabled() {
       -                classCollector = newHTMLElementsCollector(rs.BuildConfig().WriteStats)
       +        if rs.BuildConfig().BuildStats.Enabled() {
       +                classCollector = newHTMLElementsCollector(rs.BuildConfig().BuildStats)
                }
                pub = DestinationPublisher{fs: fs, htmlElementsCollector: classCollector}
                pub.min, err = minifiers.New(mediaTypes, outputFormats, cfg)