]> git.maquefel.me Git - brevno-suite/hugo/commitdiff
all: Run modernize -fix ./...
authorBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 26 Feb 2025 09:15:04 +0000 (10:15 +0100)
committerBjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
Wed, 26 Feb 2025 10:44:25 +0000 (11:44 +0100)
141 files changed:
cache/dynacache/dynacache_test.go
cache/filecache/filecache_pruner_test.go
cache/filecache/filecache_test.go
codegen/methods.go
commands/commandeer.go
commands/config.go
commands/gen.go
commands/server.go
common/collections/append.go
common/collections/stack.go
common/hashing/hashing_test.go
common/herrors/error_locator.go
common/hreflect/helpers.go
common/hstrings/strings.go
common/hugio/hasBytesWriter_test.go
common/hugo/hugo.go
common/loggers/logger_test.go
common/maps/ordered.go
common/maps/scratch_test.go
common/para/para_test.go
common/rungroup/rungroup.go
common/tasks/tasks.go
common/types/convert.go
common/types/evictingqueue.go
common/types/evictingqueue_test.go
common/types/types.go
config/allconfig/allconfig.go
config/allconfig/load.go
config/commonConfig.go
config/commonConfig_test.go
config/defaultConfigProvider.go
config/defaultConfigProvider_test.go
config/namespace_test.go
config/security/whitelist.go
create/content_test.go
helpers/content.go
helpers/emoji.go
helpers/general.go
helpers/processing_stats.go
helpers/url_test.go
htesting/hqt/checkers.go
hugofs/fileinfo.go
hugofs/fs.go
hugofs/glob/glob.go
hugofs/walk_test.go
hugolib/cascade_test.go
hugolib/config_test.go
hugolib/content_map_test.go
hugolib/doctree/nodeshiftree_test.go
hugolib/doctree/nodeshifttree.go
hugolib/doctree/treeshifttree.go
hugolib/filesystems/basefs.go
hugolib/filesystems/basefs_test.go
hugolib/hugo_sites.go
hugolib/page.go
hugolib/page__content.go
hugolib/pagebundler_test.go
hugolib/pagecollections_test.go
hugolib/pages_language_merge_test.go
hugolib/paginator_test.go
hugolib/rebuild_test.go
hugolib/resource_chain_test.go
hugolib/shortcode_test.go
hugolib/site.go
hugolib/site_render.go
hugolib/site_stats_test.go
hugolib/site_test.go
hugolib/site_url_test.go
hugolib/taxonomy_test.go
hugolib/template_test.go
identity/finder.go
identity/identity_test.go
internal/js/esbuild/resolve.go
internal/warpc/warpc.go
internal/warpc/warpc_test.go
langs/language_test.go
lazy/init_test.go
markup/goldmark/codeblocks/render.go
markup/goldmark/hugocontext/hugocontext.go
markup/goldmark/passthrough/passthrough.go
markup/rst/convert.go
markup/tableofcontents/tableofcontents.go
markup/tableofcontents/tableofcontents_test.go
media/config.go
modules/client.go
navigation/menu.go
navigation/menu_cache.go
navigation/menu_cache_test.go
output/layouts/layout.go
parser/lowercase_camel_json.go
parser/pageparser/pagelexer_intro.go
parser/pageparser/pageparser.go
related/inverted_index.go
related/inverted_index_test.go
related/related_integration_test.go
releaser/releaser.go
resources/image_test.go
resources/images/color.go
resources/images/imagetesting/testing.go
resources/page/page_matcher.go
resources/page/pagemeta/page_frontmatter.go
resources/page/pagemeta/page_frontmatter_test.go
resources/page/pages_cache.go
resources/page/pages_cache_test.go
resources/page/pages_sort_test.go
resources/page/pagination_test.go
resources/page/site.go
resources/page/testhelpers_test.go
resources/postpub/fields.go
resources/resource/resources.go
resources/resource_factories/bundler/bundler.go
resources/resource_factories/bundler/bundler_test.go
resources/resource_factories/create/create_integration_test.go
resources/resource_metadata.go
resources/resource_transformers/cssjs/postcss_integration_test.go
resources/resources_integration_test.go
resources/transform_test.go
tpl/collections/apply.go
tpl/collections/collections.go
tpl/collections/collections_integration_test.go
tpl/collections/collections_test.go
tpl/collections/complement.go
tpl/collections/index.go
tpl/collections/reflect_helpers.go
tpl/collections/sort.go
tpl/collections/symdiff.go
tpl/collections/where.go
tpl/collections/where_test.go
tpl/data/data.go
tpl/data/resources_test.go
tpl/internal/templatefuncsRegistry.go
tpl/math/math.go
tpl/page/init.go
tpl/templates/defer_integration_test.go
tpl/tplimpl/template.go
tpl/tplimpl/template_ast_transformers.go
tpl/tplimpl/template_funcs.go
tpl/transform/unmarshal_test.go
transform/livereloadinject/livereloadinject.go
transform/metainject/hugogenerator.go
watcher/filenotify/poller_test.go

index 14abf240da253e0f685d9deae8727d6f90159d6d..78b2fc82e5c018213cc039b45c5dc5c9e7f3abbf 100644 (file)
@@ -191,16 +191,16 @@ func TestPanicInCreate(t *testing.T) {
                return err
        }
 
-       for i := 0; i < 3; i++ {
-               for j := 0; j < 3; j++ {
+       for i := range 3 {
+               for range 3 {
                        c.Assert(willPanic(i), qt.PanicMatches, fmt.Sprintf("panic-%d", i))
                        c.Assert(willErr(i), qt.ErrorMatches, fmt.Sprintf("error-%d", i))
                }
        }
 
        // Test the same keys again without the panic.
-       for i := 0; i < 3; i++ {
-               for j := 0; j < 3; j++ {
+       for i := range 3 {
+               for range 3 {
                        v, err := p1.GetOrCreate(fmt.Sprintf("panic-%d", i), func(key string) (testItem, error) {
                                return testItem{
                                        name: key,
index f0cecfe9fce025a2c4cf52288ecfbb8689b059a5..b49ba7645e8246b2015d3185e5269c488cc43daa 100644 (file)
@@ -59,7 +59,7 @@ dir = ":resourceDir/_gen"
                caches, err := filecache.NewCaches(p)
                c.Assert(err, qt.IsNil)
                cache := caches[name]
-               for i := 0; i < 10; i++ {
+               for i := range 10 {
                        id := fmt.Sprintf("i%d", i)
                        cache.GetOrCreateBytes(id, func() ([]byte, error) {
                                return []byte("abc"), nil
@@ -74,7 +74,7 @@ dir = ":resourceDir/_gen"
                c.Assert(err, qt.IsNil)
                c.Assert(count, qt.Equals, 5, msg)
 
-               for i := 0; i < 10; i++ {
+               for i := range 10 {
                        id := fmt.Sprintf("i%d", i)
                        v := cache.GetString(id)
                        if i < 5 {
@@ -97,7 +97,7 @@ dir = ":resourceDir/_gen"
                c.Assert(count, qt.Equals, 4)
 
                // Now only the i5 should be left.
-               for i := 0; i < 10; i++ {
+               for i := range 10 {
                        id := fmt.Sprintf("i%d", i)
                        v := cache.GetString(id)
                        if i != 5 {
index 59fb092767810ab6a198e6072b2962527687e0ee..a30aaa50be66d84c17318d4afa3e992ba8d013b4 100644 (file)
@@ -105,7 +105,7 @@ dir = ":cacheDir/c"
                }
 
                for _, ca := range []*filecache.Cache{caches.ImageCache(), caches.AssetsCache(), caches.GetJSONCache(), caches.GetCSVCache()} {
-                       for i := 0; i < 2; i++ {
+                       for range 2 {
                                info, r, err := ca.GetOrCreate("a", rf("abc"))
                                c.Assert(err, qt.IsNil)
                                c.Assert(r, qt.Not(qt.IsNil))
@@ -193,11 +193,11 @@ dir = "/cache/c"
 
        var wg sync.WaitGroup
 
-       for i := 0; i < 50; i++ {
+       for i := range 50 {
                wg.Add(1)
                go func(i int) {
                        defer wg.Done()
-                       for j := 0; j < 20; j++ {
+                       for range 20 {
                                ca := caches.Get(cacheName)
                                c.Assert(ca, qt.Not(qt.IsNil))
                                filename, data := filenameData(i)
index 299063bb5321a7a7d2daced414b7ff42ad654d9f..08ac97b0036d4ffea6ffdce814d56da4d49912be 100644 (file)
@@ -26,6 +26,7 @@ import (
        "path/filepath"
        "reflect"
        "regexp"
+       "slices"
        "sort"
        "strings"
        "sync"
@@ -102,7 +103,7 @@ func (c *Inspector) MethodsFromTypes(include []reflect.Type, exclude []reflect.T
        }
 
        for _, t := range include {
-               for i := 0; i < t.NumMethod(); i++ {
+               for i := range t.NumMethod() {
 
                        m := t.Method(i)
                        if excludes[m.Name] || seen[m.Name] {
@@ -122,7 +123,7 @@ func (c *Inspector) MethodsFromTypes(include []reflect.Type, exclude []reflect.T
 
                        method := Method{Owner: t, OwnerName: ownerName, Name: m.Name}
 
-                       for i := 0; i < numIn; i++ {
+                       for i := range numIn {
                                in := m.Type.In(i)
 
                                name, pkg := nameAndPackage(in)
@@ -137,7 +138,7 @@ func (c *Inspector) MethodsFromTypes(include []reflect.Type, exclude []reflect.T
                        numOut := m.Type.NumOut()
 
                        if numOut > 0 {
-                               for i := 0; i < numOut; i++ {
+                               for i := range numOut {
                                        out := m.Type.Out(i)
                                        name, pkg := nameAndPackage(out)
 
@@ -304,7 +305,7 @@ func (m Method) inOutStr() string {
        }
 
        args := make([]string, len(m.In))
-       for i := 0; i < len(args); i++ {
+       for i := range args {
                args[i] = fmt.Sprintf("arg%d", i)
        }
        return "(" + strings.Join(args, ", ") + ")"
@@ -316,7 +317,7 @@ func (m Method) inStr() string {
        }
 
        args := make([]string, len(m.In))
-       for i := 0; i < len(args); i++ {
+       for i := range args {
                args[i] = fmt.Sprintf("arg%d %s", i, m.In[i])
        }
        return "(" + strings.Join(args, ", ") + ")"
@@ -339,7 +340,7 @@ func (m Method) outStrNamed() string {
        }
 
        outs := make([]string, len(m.Out))
-       for i := 0; i < len(outs); i++ {
+       for i := range outs {
                outs[i] = fmt.Sprintf("o%d %s", i, m.Out[i])
        }
 
@@ -435,7 +436,7 @@ func (m Methods) ToMarshalJSON(receiver, pkgPath string, excludes ...string) (st
                // Exclude self
                for i, pkgImp := range pkgImports {
                        if pkgImp == pkgPath {
-                               pkgImports = append(pkgImports[:i], pkgImports[i+1:]...)
+                               pkgImports = slices.Delete(pkgImports, i, i+1)
                        }
                }
        }
index 697ece1f05403d2aa70b77f6647fe90d57394137..bf965563754c2300709fd81cff26515297becac2 100644 (file)
@@ -101,8 +101,8 @@ type configKey struct {
 
 // This is the root command.
 type rootCommand struct {
-       Printf  func(format string, v ...interface{})
-       Println func(a ...interface{})
+       Printf  func(format string, v ...any)
+       Println func(a ...any)
        StdOut  io.Writer
        StdErr  io.Writer
 
@@ -431,12 +431,12 @@ func (r *rootCommand) PreRun(cd, runner *simplecobra.Commandeer) error {
        // Used by mkcert (server).
        log.SetOutput(r.StdOut)
 
-       r.Printf = func(format string, v ...interface{}) {
+       r.Printf = func(format string, v ...any) {
                if !r.quiet {
                        fmt.Fprintf(r.StdOut, format, v...)
                }
        }
-       r.Println = func(a ...interface{}) {
+       r.Println = func(a ...any) {
                if !r.quiet {
                        fmt.Fprintln(r.StdOut, a...)
                }
index 89f14e0e6cfc3f632cc06307004bd0bbddb15669..7d166b9b8d5d7fffe38c9e885a12bcf9701ab542 100644 (file)
@@ -90,7 +90,7 @@ func (c *configCommand) Run(ctx context.Context, cd *simplecobra.Commandeer, arg
                os.Stdout.Write(buf.Bytes())
        default:
                // Decode the JSON to a map[string]interface{} and then unmarshal it again to the correct format.
-               var m map[string]interface{}
+               var m map[string]any
                if err := json.Unmarshal(buf.Bytes(), &m); err != nil {
                        return err
                }
index 5e49d9e7de706b2e203d17bce78059ac02e22f41..b77deeeb7c7f56bacbc270a83ee19a472cae1c34 100644 (file)
@@ -222,7 +222,7 @@ url: %s
                                }
 
                                // Decode the JSON to a map[string]interface{} and then unmarshal it again to the correct format.
-                               var m map[string]interface{}
+                               var m map[string]any
                                if err := json.Unmarshal(buf.Bytes(), &m); err != nil {
                                        return err
                                }
index d42ce6d29c46890a857852683b92ff8e3bfae769..d3a72ec9aa4f82a984f07b90d34b042e235af5ba 100644 (file)
@@ -65,6 +65,7 @@ import (
        "github.com/spf13/fsync"
        "golang.org/x/sync/errgroup"
        "golang.org/x/sync/semaphore"
+       "maps"
 )
 
 var (
@@ -195,9 +196,7 @@ func (f *fileChangeDetector) PrepareNew() {
        }
 
        f.prev = make(map[string]uint64)
-       for k, v := range f.current {
-               f.prev[k] = v
-       }
+       maps.Copy(f.prev, f.current)
        f.current = make(map[string]uint64)
 }
 
@@ -759,7 +758,7 @@ func (c *serverCommand) createServerPorts(cd *simplecobra.Commandeer) error {
                        c.serverPorts = make([]serverPortListener, len(conf.configs.Languages))
                }
                currentServerPort := c.serverPort
-               for i := 0; i < len(c.serverPorts); i++ {
+               for i := range c.serverPorts {
                        l, err := net.Listen("tcp", net.JoinHostPort(c.serverInterface, strconv.Itoa(currentServerPort)))
                        if err == nil {
                                c.serverPorts[i] = serverPortListener{ln: l, p: currentServerPort}
index 8f1e21ea31561cb5a67a4461578b849d83e7797c..db9db8bf342acbea674a26f0b3d6d6efc7271c25 100644 (file)
@@ -117,7 +117,7 @@ func appendToInterfaceSliceFromValues(slice1, slice2 reflect.Value) ([]any, erro
                        tos = append(tos, nil)
                        continue
                }
-               for i := 0; i < slice.Len(); i++ {
+               for i := range slice.Len() {
                        tos = append(tos, slice.Index(i).Interface())
                }
        }
@@ -128,7 +128,7 @@ func appendToInterfaceSliceFromValues(slice1, slice2 reflect.Value) ([]any, erro
 func appendToInterfaceSlice(tov reflect.Value, from ...any) ([]any, error) {
        var tos []any
 
-       for i := 0; i < tov.Len(); i++ {
+       for i := range tov.Len() {
                tos = append(tos, tov.Index(i).Interface())
        }
 
index 96d32fe4b5629caaeac0f130385dcb9079a17094..ff0db2f021c56eccbd153c186a626ef589542d10 100644 (file)
@@ -13,6 +13,8 @@
 
 package collections
 
+import "slices"
+
 import "sync"
 
 // Stack is a simple LIFO stack that is safe for concurrent use.
@@ -73,7 +75,7 @@ func (s *Stack[T]) DrainMatching(predicate func(T) bool) []T {
        for i := len(s.items) - 1; i >= 0; i-- {
                if predicate(s.items[i]) {
                        items = append(items, s.items[i])
-                       s.items = append(s.items[:i], s.items[i+1:]...)
+                       s.items = slices.Delete(s.items, i, i+1)
                }
        }
        return items
index bd66f3ebfb05b16f79df38fb15b737ff58edb98d..105b6d8b59176405adf92f8d43714ab4c131dc2e 100644 (file)
@@ -37,12 +37,12 @@ func TestXxHashFromReaderPara(t *testing.T) {
        c := qt.New(t)
 
        var wg sync.WaitGroup
-       for i := 0; i < 10; i++ {
+       for i := range 10 {
                i := i
                wg.Add(1)
                go func() {
                        defer wg.Done()
-                       for j := 0; j < 100; j++ {
+                       for j := range 100 {
                                s := strings.Repeat("Hello ", i+j+1*42)
                                r := strings.NewReader(s)
                                got, size, err := XXHashFromReader(r)
@@ -144,8 +144,8 @@ func BenchmarkHashString(b *testing.B) {
 }
 
 func BenchmarkHashMap(b *testing.B) {
-       m := map[string]interface{}{}
-       for i := 0; i < 1000; i++ {
+       m := map[string]any{}
+       for i := range 1000 {
                m[fmt.Sprintf("key%d", i)] = i
        }
 
index 1ece0cca4cb578f83b3d1e1b01c767ae5a79d9b9..acaebb4bc3bf4cc416fbf1dfc08fc11b5bd45fd7 100644 (file)
@@ -152,10 +152,7 @@ func locateError(r io.Reader, le FileError, matches LineMatcherFn) *ErrorContext
        }
 
        if ectx.Position.LineNumber > 0 {
-               low := ectx.Position.LineNumber - 3
-               if low < 0 {
-                       low = 0
-               }
+               low := max(ectx.Position.LineNumber-3, 0)
 
                if ectx.Position.LineNumber > 2 {
                        ectx.LinesPos = 2
@@ -163,10 +160,7 @@ func locateError(r io.Reader, le FileError, matches LineMatcherFn) *ErrorContext
                        ectx.LinesPos = ectx.Position.LineNumber - 1
                }
 
-               high := ectx.Position.LineNumber + 2
-               if high > len(lines) {
-                       high = len(lines)
-               }
+               high := min(ectx.Position.LineNumber+2, len(lines))
 
                ectx.Lines = lines[low:high]
 
index 4d7339b5bae7e27f93e31fa5f9bbd3ee93e165c6..ab7883a4785f90667a7dfca8c77d220aec98949b 100644 (file)
@@ -245,7 +245,7 @@ func ToSliceAny(v any) ([]any, bool) {
                vvv := reflect.ValueOf(v)
                if vvv.Kind() == reflect.Slice {
                        out := make([]any, vvv.Len())
-                       for i := 0; i < vvv.Len(); i++ {
+                       for i := range vvv.Len() {
                                out[i] = vvv.Index(i).Interface()
                        }
                        return out, true
index 1232eee379b4ffa5c690690147578c407e2044c5..2df3486fc857c93e06e98dc534c14025d3966ccc 100644 (file)
@@ -20,6 +20,7 @@ import (
        "sync"
 
        "github.com/gohugoio/hugo/compare"
+       "slices"
 )
 
 var _ compare.Eqer = StringEqualFold("")
@@ -50,12 +51,7 @@ func (s StringEqualFold) Eq(s2 any) bool {
 
 // EqualAny returns whether a string is equal to any of the given strings.
 func EqualAny(a string, b ...string) bool {
-       for _, s := range b {
-               if a == s {
-                       return true
-               }
-       }
-       return false
+       return slices.Contains(b, a)
 }
 
 // regexpCache represents a cache of regexp objects protected by a mutex.
@@ -103,12 +99,7 @@ func GetOrCompileRegexp(pattern string) (re *regexp.Regexp, err error) {
 // InSlice checks if a string is an element of a slice of strings
 // and returns a boolean value.
 func InSlice(arr []string, el string) bool {
-       for _, v := range arr {
-               if v == el {
-                       return true
-               }
-       }
-       return false
+       return slices.Contains(arr, el)
 }
 
 // InSlicEqualFold checks if a string is an element of a slice of strings
index f0d6c3a7bde675fb15b4709694d79954c1765eea..9e689a1121adb5c94ce97ecdd9f466fe09f1ea10 100644 (file)
@@ -46,7 +46,7 @@ func TestHasBytesWriter(t *testing.T) {
                return strings.Repeat("ab cfo", r.Intn(33))
        }
 
-       for i := 0; i < 22; i++ {
+       for range 22 {
                h, w := neww()
                fmt.Fprint(w, rndStr()+"abc __foobar"+rndStr())
                c.Assert(h.Patterns[0].Match, qt.Equals, true)
index 815c25fa750726c4dc126e4be9c3841a8842f17f..e745e5e90cbcd81e9a3ab3877d0479ecafcc54ce 100644 (file)
@@ -416,10 +416,7 @@ func Deprecate(item, alternative string, version string) {
 
 // DeprecateLevelMin informs about a deprecation starting at the given version, but with a minimum log level.
 func DeprecateLevelMin(item, alternative string, version string, minLevel logg.Level) {
-       level := deprecationLogLevelFromVersion(version)
-       if level < minLevel {
-               level = minLevel
-       }
+       level := max(deprecationLogLevelFromVersion(version), minLevel)
        DeprecateLevel(item, alternative, version, level)
 }
 
index b03e6d903cdea324a3566201c7157191a6356e5a..bc8975b06f0d27fd7cdec68e384efb62dd4839bf 100644 (file)
@@ -37,7 +37,7 @@ func TestLogDistinct(t *testing.T) {
 
        l := loggers.New(opts)
 
-       for i := 0; i < 10; i++ {
+       for range 10 {
                l.Errorln("error 1")
                l.Errorln("error 2")
                l.Warnln("warn 1")
@@ -137,7 +137,7 @@ func TestReset(t *testing.T) {
 
        l := loggers.New(opts)
 
-       for i := 0; i < 3; i++ {
+       for range 3 {
                l.Errorln("error 1")
                l.Errorln("error 2")
                l.Errorln("error 1")
index eaa4d73c611386a52ec1490b45eddd8efb644175..08dd77919686cec7082e42c0672cfe9e4d6825bf 100644 (file)
@@ -15,6 +15,7 @@ package maps
 
 import (
        "github.com/gohugoio/hugo/common/hashing"
+       "slices"
 )
 
 // Ordered is a map that can be iterated in the order of insertion.
@@ -64,7 +65,7 @@ func (m *Ordered[K, T]) Delete(key K) {
        delete(m.values, key)
        for i, k := range m.keys {
                if k == key {
-                       m.keys = append(m.keys[:i], m.keys[i+1:]...)
+                       m.keys = slices.Delete(m.keys, i, i+1)
                        break
                }
        }
index 88fd73f2ba1d00a75d8e2ad918e288931f2fd3e7..f07169e618a3342457437db1363b0d580c398883 100644 (file)
@@ -140,7 +140,7 @@ func TestScratchInParallel(t *testing.T) {
        for i := 1; i <= 10; i++ {
                wg.Add(1)
                go func(j int) {
-                       for k := 0; k < 10; k++ {
+                       for k := range 10 {
                                newVal := int64(k + j)
 
                                _, err := scratch.Add(key, newVal)
index 2d9188ecf2fc60c1d6022d7f565bf10cfe23b569..cf24a4e37593778f48bc4c91ff5f4e46f6c248d4 100644 (file)
@@ -42,7 +42,7 @@ func TestPara(t *testing.T) {
        c.Run("Order", func(c *qt.C) {
                n := 500
                ints := make([]int, n)
-               for i := 0; i < n; i++ {
+               for i := range n {
                        ints[i] = i
                }
 
@@ -51,7 +51,7 @@ func TestPara(t *testing.T) {
 
                var result []int
                var mu sync.Mutex
-               for i := 0; i < n; i++ {
+               for i := range n {
                        i := i
                        r.Run(func() error {
                                mu.Lock()
@@ -78,7 +78,7 @@ func TestPara(t *testing.T) {
 
                var counter int64
 
-               for i := 0; i < n; i++ {
+               for range n {
                        r.Run(func() error {
                                atomic.AddInt64(&counter, 1)
                                time.Sleep(1 * time.Millisecond)
index 96ec57883c559bbb1510bc6d6226637f6f1514f8..80a730ca938ae5fbedcd3f2a37fb308900160508 100644 (file)
@@ -51,7 +51,7 @@ func Run[T any](ctx context.Context, cfg Config[T]) Group[T] {
        // Buffered for performance.
        ch := make(chan T, cfg.NumWorkers)
 
-       for i := 0; i < cfg.NumWorkers; i++ {
+       for range cfg.NumWorkers {
                g.Go(func() error {
                        for {
                                select {
index 1f7e061f9672163e55b53837d982e0ecd52334db..3f8a754e9d7c006c9e3270d629bd1a99dac04c1f 100644 (file)
@@ -103,10 +103,7 @@ func (r *RunEvery) Add(name string, f Func) {
                f.IntervalHigh = 20 * time.Second
        }
 
-       start := f.IntervalHigh / 3
-       if start < f.IntervalLow {
-               start = f.IntervalLow
-       }
+       start := max(f.IntervalHigh/3, f.IntervalLow)
        f.interval = start
        f.last = time.Now()
 
index 0cb5035dffa56aaa54ec084c3d8207295920cf7e..6b1750376953e274de60171b12b678a46b163f99 100644 (file)
@@ -69,7 +69,7 @@ func ToStringSlicePreserveStringE(v any) ([]string, error) {
        switch vv.Kind() {
        case reflect.Slice, reflect.Array:
                result = make([]string, vv.Len())
-               for i := 0; i < vv.Len(); i++ {
+               for i := range vv.Len() {
                        s, err := cast.ToStringE(vv.Index(i).Interface())
                        if err != nil {
                                return nil, err
index c3598f19f7663095833db167dc4cd519f478ef05..a335be3b272cc687f002932e5774230bf6d7f8e7 100644 (file)
@@ -15,6 +15,7 @@
 package types
 
 import (
+       "slices"
        "sync"
 )
 
@@ -45,7 +46,7 @@ func (q *EvictingQueue[T]) Add(v T) *EvictingQueue[T] {
        if len(q.set) == q.size {
                // Full
                delete(q.set, q.vals[0])
-               q.vals = append(q.vals[:0], q.vals[1:]...)
+               q.vals = slices.Delete(q.vals, 0, 1)
        }
        q.set[v] = true
        q.vals = append(q.vals, v)
index cd10d3d8ed355b1a3bf0ee41a6d27d1292183b90..b93243f3ce718ed0b425e0770e545e69010b7849 100644 (file)
@@ -55,7 +55,7 @@ func TestEvictingStringQueueConcurrent(t *testing.T) {
 
        queue := NewEvictingQueue[string](3)
 
-       for j := 0; j < 100; j++ {
+       for range 100 {
                wg.Add(1)
                go func() {
                        defer wg.Done()
index 062ecc4034f27923742d1e9c8b34e64604120e61..082c058fffff75adf0755736030cd958d9828732 100644 (file)
@@ -59,7 +59,7 @@ func (k KeyValues) String() string {
 // KeyValues struct.
 func NewKeyValuesStrings(key string, values ...string) KeyValues {
        iv := make([]any, len(values))
-       for i := 0; i < len(values); i++ {
+       for i := range values {
                iv[i] = values[i]
        }
        return KeyValues{Key: key, Values: iv}
index af841fb54588bd269cfb8b7e7443121b54010fb3..3b3109aeb74f7a1f3ad5470203aee018ca1b5d51 100644 (file)
@@ -82,7 +82,7 @@ func init() {
        }
        configLanguageKeys = make(map[string]bool)
        addKeys := func(v reflect.Value) {
-               for i := 0; i < v.NumField(); i++ {
+               for i := range v.NumField() {
                        name := strings.ToLower(v.Type().Field(i).Name)
                        if skip[name] {
                                continue
index 9e9c7a42a5696021770ecbe0f7f3325c0c7dab48..f224009ac8b1ce3454a1d932218b099a22611561 100644 (file)
@@ -305,7 +305,7 @@ func (l configLoader) applyOsEnvOverrides(environ []string) error {
                                _, ok := allDecoderSetups[key]
                                if ok {
                                        // A map.
-                                       if v, err := metadecoders.Default.UnmarshalStringTo(env.Value, map[string]interface{}{}); err == nil {
+                                       if v, err := metadecoders.Default.UnmarshalStringTo(env.Value, map[string]any{}); err == nil {
                                                val = v
                                        }
                                }
index a31c2312e7c012dc4b0c9891f266fa42f35a639b..3dfd9b40969163915bc618c7bf19acc697d9bf99 100644 (file)
@@ -28,6 +28,7 @@ import (
        "github.com/gohugoio/hugo/common/herrors"
        "github.com/mitchellh/mapstructure"
        "github.com/spf13/cast"
+       "slices"
 )
 
 type BaseConfig struct {
@@ -128,7 +129,7 @@ func (w BuildStats) Enabled() bool {
 }
 
 func (b BuildConfig) clone() BuildConfig {
-       b.CacheBusters = append([]CacheBuster{}, b.CacheBusters...)
+       b.CacheBusters = slices.Clone(b.CacheBusters)
        return b
 }
 
index ce68cec15b0db9db2e3f8399f641d18917f4f223..05ba185e350f7a5b7ff3f693d5e753f5491f48a5 100644 (file)
@@ -166,7 +166,7 @@ func TestBuildConfigCacheBusters(t *testing.T) {
 func TestBuildConfigCacheBusterstTailwindSetup(t *testing.T) {
        c := qt.New(t)
        cfg := New()
-       cfg.Set("build", map[string]interface{}{
+       cfg.Set("build", map[string]any{
                "cacheBusters": []map[string]string{
                        {
                                "source": "assets/watching/hugo_stats\\.json",
index bb7c47412c742557da2a96491348797e13cf20a0..8c1d63851c5392b8e31261db89c182b1680e9ad4 100644 (file)
@@ -345,7 +345,7 @@ func (c *defaultConfigProvider) getNestedKeyAndMap(key string, create bool) (str
                c.keyCache.Store(key, parts)
        }
        current := c.root
-       for i := 0; i < len(parts)-1; i++ {
+       for i := range len(parts) - 1 {
                next, found := current[parts[i]]
                if !found {
                        if create {
index 65f10ec6a4318d56034ad1cea94d549dc6f8bb6f..cd6247e604a4d255db637ff674fe2d989e104763 100644 (file)
@@ -332,7 +332,7 @@ func TestDefaultConfigProvider(t *testing.T) {
                        return nil
                }
 
-               for i := 0; i < 20; i++ {
+               for i := range 20 {
                        i := i
                        r.Run(func() error {
                                const v = 42
index df27ae05cf0aee4e08b89aebccc5cd26779e49ae..f443523a4aec02a5c6d64e090e6f21d604ebdbb7 100644 (file)
@@ -29,7 +29,7 @@ func TestNamespace(t *testing.T) {
        // ns, err := config.DecodeNamespace[map[string]DocsMediaTypeConfig](in, defaultMediaTypesConfig, buildConfig)
 
        ns, err := DecodeNamespace[[]*tstNsExt](
-               map[string]interface{}{"foo": "bar"},
+               map[string]any{"foo": "bar"},
                func(v any) (*tstNsExt, any, error) {
                        t := &tstNsExt{}
                        m, err := maps.ToStringMapE(v)
@@ -42,7 +42,7 @@ func TestNamespace(t *testing.T) {
 
        c.Assert(err, qt.IsNil)
        c.Assert(ns, qt.Not(qt.IsNil))
-       c.Assert(ns.SourceStructure, qt.DeepEquals, map[string]interface{}{"foo": "bar"})
+       c.Assert(ns.SourceStructure, qt.DeepEquals, map[string]any{"foo": "bar"})
        c.Assert(ns.SourceHash, qt.Equals, "1420f6c7782f7459")
        c.Assert(ns.Config, qt.DeepEquals, &tstNsExt{Foo: "bar"})
        c.Assert(ns.Signature(), qt.DeepEquals, []*tstNsExt(nil))
index 92eb3102f5984877de6b96be7996f3d8fac0a38f..5ce369a1f3839195f6cc904da048c4d63ea75b4d 100644 (file)
@@ -73,7 +73,7 @@ func NewWhitelist(patterns ...string) (Whitelist, error) {
 
        var patternsr []*regexp.Regexp
 
-       for i := 0; i < len(patterns); i++ {
+       for i := range patterns {
                p := strings.TrimSpace(patterns[i])
                if p == "" {
                        continue
index 63045cbeadd59f9076ad9ebff50d3fcf2fb1bfbd..429edfc26405515e50869416b26b280e54f1392a 100644 (file)
@@ -129,7 +129,7 @@ site RegularPages: {{ len site.RegularPages  }}
 
 `
 
-       c.Assert(afero.WriteFile(mm, filepath.Join(archetypeDir, "index.md"), []byte(fmt.Sprintf(contentFile, "index.md")), 0o755), qt.IsNil)
+       c.Assert(afero.WriteFile(mm, filepath.Join(archetypeDir, "index.md"), fmt.Appendf(nil, contentFile, "index.md"), 0o755), qt.IsNil)
        c.Assert(afero.WriteFile(mm, filepath.Join(defaultArchetypeDir, "index.md"), []byte("default archetype index.md"), 0o755), qt.IsNil)
 
        c.Assert(initFs(mm), qt.IsNil)
index 9d74a3d319160971236a651296f3902e486bc7ae..6edcf88d413f50625a575d3984d19fd8d814ef19 100644 (file)
@@ -109,10 +109,7 @@ func ExtractTOC(content []byte) (newcontent []byte, toc []byte) {
 
        startOfTOC := bytes.Index(content, first)
 
-       peekEnd := len(content)
-       if peekEnd > 70+startOfTOC {
-               peekEnd = 70 + startOfTOC
-       }
+       peekEnd := min(len(content), 70+startOfTOC)
 
        if startOfTOC < 0 {
                return stripEmptyNav(content), toc
index c103a54799546196222afa6ff04d56d1748379c6..aa5540dca821a6115f144ec8cfd078885e4e5c43 100644 (file)
@@ -43,11 +43,7 @@ func Emojify(source []byte) []byte {
 
                j := start + k
 
-               upper := j + emojiMaxSize
-
-               if upper > len(source) {
-                       upper = len(source)
-               }
+               upper := min(j+emojiMaxSize, len(source))
 
                endEmoji := bytes.Index(source[j+1:upper], emojiDelim)
                nextWordDelim := bytes.Index(source[j:upper], emojiWordDelim)
index 11cc185a855f0dd11fc0e6fdacbe9dc8aa8c6101..76275a6b92166bdecfe5c918cbaba210983631d4 100644 (file)
@@ -63,7 +63,7 @@ func UniqueStrings(s []string) []string {
        unique := make([]string, 0, len(s))
        for i, val := range s {
                var seen bool
-               for j := 0; j < i; j++ {
+               for j := range i {
                        if s[j] == val {
                                seen = true
                                break
@@ -83,7 +83,7 @@ func UniqueStringsReuse(s []string) []string {
        for i, val := range s {
                var seen bool
 
-               for j := 0; j < i; j++ {
+               for j := range i {
                        if s[j] == val {
                                seen = true
                                break
index 540060aa21195cdd6852fcf23ff5a80f8aea2b7d..3f48466c7b7e45f2a86bd42477bd84b1f1ea3edb 100644 (file)
@@ -89,7 +89,7 @@ func ProcessingStatsTable(w io.Writer, stats ...*ProcessingStats) {
 
        var data [][]string
 
-       for i := 0; i < len(stats); i++ {
+       for i := range stats {
                stat := stats[i]
                names[i+1] = stat.Name
 
index ce1b24487f3a27e8b1599733c89d00520cf89807..7f625035c7dad7c6378633eb4328dc2fe8eb7f2b 100644 (file)
@@ -101,10 +101,10 @@ func doTestAbsURL(t *testing.T, defaultInSubDir, addLanguage, multilingual bool,
                        v := config.New()
                        if multilingual {
                                v.Set("languages", map[string]any{
-                                       "fr": map[string]interface{}{
+                                       "fr": map[string]any{
                                                "weight": 20,
                                        },
-                                       "en": map[string]interface{}{
+                                       "en": map[string]any{
                                                "weight": 10,
                                        },
                                })
@@ -112,7 +112,7 @@ func doTestAbsURL(t *testing.T, defaultInSubDir, addLanguage, multilingual bool,
                        } else {
                                v.Set("defaultContentLanguage", lang)
                                v.Set("languages", map[string]any{
-                                       lang: map[string]interface{}{
+                                       lang: map[string]any{
                                                "weight": 10,
                                        },
                                })
@@ -167,10 +167,10 @@ func doTestRelURL(t testing.TB, defaultInSubDir, addLanguage, multilingual bool,
        v := config.New()
        if multilingual {
                v.Set("languages", map[string]any{
-                       "fr": map[string]interface{}{
+                       "fr": map[string]any{
                                "weight": 20,
                        },
-                       "en": map[string]interface{}{
+                       "en": map[string]any{
                                "weight": 10,
                        },
                })
@@ -178,7 +178,7 @@ func doTestRelURL(t testing.TB, defaultInSubDir, addLanguage, multilingual bool,
        } else {
                v.Set("defaultContentLanguage", lang)
                v.Set("languages", map[string]any{
-                       lang: map[string]interface{}{
+                       lang: map[string]any{
                                "weight": 10,
                        },
                })
index a0520653509ebcd77d9233eeefdbe90168f8f8ba..b06185756c72f52772f729ec323e4c46c043b8e8 100644 (file)
@@ -151,7 +151,7 @@ func structTypes(v reflect.Value, m map[reflect.Type]struct{}) {
                        structTypes(v.Elem(), m)
                }
        case reflect.Slice, reflect.Array:
-               for i := 0; i < v.Len(); i++ {
+               for i := range v.Len() {
                        structTypes(v.Index(i), m)
                }
        case reflect.Map:
@@ -160,7 +160,7 @@ func structTypes(v reflect.Value, m map[reflect.Type]struct{}) {
                }
        case reflect.Struct:
                m[v.Type()] = struct{}{}
-               for i := 0; i < v.NumField(); i++ {
+               for i := range v.NumField() {
                        structTypes(v.Field(i), m)
                }
        }
index 60d2a38dff3b7b57861c6cd14a792e626e2655a3..5e6a87accba644189fecc3ff92e54334f4431190 100644 (file)
@@ -93,7 +93,7 @@ func (m *FileMeta) Merge(from *FileMeta) {
        dstv := reflect.Indirect(reflect.ValueOf(m))
        srcv := reflect.Indirect(reflect.ValueOf(from))
 
-       for i := 0; i < dstv.NumField(); i++ {
+       for i := range dstv.NumField() {
                v := dstv.Field(i)
                if !v.CanSet() {
                        continue
index fab0d388656265faf2a27d52b53242aec5ff98b9..aecf72a7f7d1c5df1b74211908baaf14d4cb798f 100644 (file)
@@ -214,7 +214,7 @@ func WalkFilesystems(fs afero.Fs, fn WalkFn) bool {
                        }
                }
        } else if cfs, ok := fs.(overlayfs.FilesystemIterator); ok {
-               for i := 0; i < cfs.NumFilesystems(); i++ {
+               for i := range cfs.NumFilesystems() {
                        if WalkFilesystems(cfs.Filesystem(i), fn) {
                                return true
                        }
index 42aa1fa3bfb3a3d05ace5d142b304fdfc1c4be7a..a4e5c49e8c1770b3edb6e9c4fae6ac4ad953c801 100644 (file)
@@ -166,7 +166,7 @@ func FilterGlobParts(a []string) []string {
 
 // HasGlobChar returns whether s contains any glob wildcards.
 func HasGlobChar(s string) bool {
-       for i := 0; i < len(s); i++ {
+       for i := range len(s) {
                if syntax.Special(s[i]) {
                        return true
                }
index 7366d008d93b206d796931f106efdb6c0bddaaee..03b808533386666a2f643193db20e8fd65759385 100644 (file)
@@ -91,7 +91,7 @@ func TestWalkRootMappingFs(t *testing.T) {
                p := para.New(4)
                r, _ := p.Start(context.Background())
 
-               for i := 0; i < 8; i++ {
+               for range 8 {
                        r.Run(func() error {
                                _, err := collectPaths(bfs, "")
                                if err != nil {
@@ -153,7 +153,7 @@ func BenchmarkWalk(b *testing.B) {
        fs := NewBaseFileDecorator(afero.NewMemMapFs())
 
        writeFiles := func(dir string, numfiles int) {
-               for i := 0; i < numfiles; i++ {
+               for i := range numfiles {
                        filename := filepath.Join(dir, fmt.Sprintf("file%d.txt", i))
                        c.Assert(afero.WriteFile(fs, filename, []byte("content"), 0o777), qt.IsNil)
                }
index f3060814c0054c0f9ade28922a9b0ad8dc2a7bf9..d0a6730db8730cd0761f332b5d28df33013e7b22 100644 (file)
@@ -871,7 +871,7 @@ Background: {{ .Params.background }}|
 {{ .Title }}|
   `
 
-       for i := 0; i < 10; i++ {
+       for range 10 {
                b := Test(t, files)
                b.AssertFileContent("public/p1/index.html", "Background: yosemite.jpg")
        }
index c0bfde37da42ed6c3c139366e4f355c3b4ab620e..cbf821ee76a321b5cdfc2fd7f121c94c68d72104 100644 (file)
@@ -793,7 +793,7 @@ Single.
                files := strings.ReplaceAll(filesTemplate, "WEIGHT_EN", "2")
                files = strings.ReplaceAll(files, "WEIGHT_SV", "1")
 
-               for i := 0; i < 20; i++ {
+               for range 20 {
                        cfg := config.New()
                        b, err := NewIntegrationTestBuilder(
                                IntegrationTestConfig{
index 4cbdaf53a48225d70b5479f502fe082c242f84d8..7202840f349da0015a2fd962ad75b3052373aca1 100644 (file)
@@ -323,7 +323,7 @@ R: {{ with $r }}{{ .Content }}{{ end }}|Len: {{ len $bundle.Resources }}|$
 
 `
 
-       for i := 0; i < 3; i++ {
+       for range 3 {
                b := Test(t, files)
                b.AssertFileContent("public/index.html", "R: Data 1.txt|", "Len: 1|")
        }
@@ -435,14 +435,14 @@ func TestContentTreeReverseIndex(t *testing.T) {
 
        pageReverseIndex := newContentTreeTreverseIndex(
                func(get func(key any) (contentNodeI, bool), set func(key any, val contentNodeI)) {
-                       for i := 0; i < 10; i++ {
+                       for i := range 10 {
                                key := fmt.Sprint(i)
                                set(key, &testContentNode{key: key})
                        }
                },
        )
 
-       for i := 0; i < 10; i++ {
+       for i := range 10 {
                key := fmt.Sprint(i)
                v := pageReverseIndex.Get(key)
                c.Assert(v, qt.Not(qt.IsNil))
@@ -456,17 +456,17 @@ func TestContentTreeReverseIndexPara(t *testing.T) {
 
        var wg sync.WaitGroup
 
-       for i := 0; i < 10; i++ {
+       for range 10 {
                pageReverseIndex := newContentTreeTreverseIndex(
                        func(get func(key any) (contentNodeI, bool), set func(key any, val contentNodeI)) {
-                               for i := 0; i < 10; i++ {
+                               for i := range 10 {
                                        key := fmt.Sprint(i)
                                        set(key, &testContentNode{key: key})
                                }
                        },
                )
 
-               for j := 0; j < 10; j++ {
+               for j := range 10 {
                        wg.Add(1)
                        go func(i int) {
                                defer wg.Done()
index ac89037acf80e8ee9b21d38d3c72c200ac75b28b..0f4fb6f6844f2a201d76155f78fbfc358b173089 100644 (file)
@@ -193,7 +193,7 @@ func TestTreePara(t *testing.T) {
                },
        )
 
-       for i := 0; i < 8; i++ {
+       for i := range 8 {
                i := i
                r.Run(func() error {
                        a := &testValue{ID: "/a"}
@@ -289,7 +289,7 @@ func BenchmarkTreeInsert(b *testing.B) {
                                },
                        )
 
-                       for i := 0; i < numElements; i++ {
+                       for i := range numElements {
                                lang := rand.Intn(2)
                                tree.InsertIntoValuesDimension(fmt.Sprintf("/%d", i), &testValue{ID: fmt.Sprintf("/%d", i), Lang: lang, Weight: i, NoCopy: true})
                        }
@@ -323,7 +323,7 @@ func BenchmarkWalk(b *testing.B) {
                        },
                )
 
-               for i := 0; i < numElements; i++ {
+               for i := range numElements {
                        lang := rand.Intn(2)
                        tree.InsertIntoValuesDimension(fmt.Sprintf("/%d", i), &testValue{ID: fmt.Sprintf("/%d", i), Lang: lang, Weight: i, NoCopy: true})
                }
@@ -355,8 +355,8 @@ func BenchmarkWalk(b *testing.B) {
                        base := createTree()
                        b.ResetTimer()
                        for i := 0; i < b.N; i++ {
-                               for d1 := 0; d1 < 1; d1++ {
-                                       for d2 := 0; d2 < 2; d2++ {
+                               for d1 := range 1 {
+                                       for d2 := range 2 {
                                                tree := base.Shape(d1, d2)
                                                w := &doctree.NodeShiftTreeWalker[*testValue]{
                                                        Tree:   tree,
index 497e9f02eb2b8974d580fdd65cc00424a6dc3b0e..298b24d1b60b6f7a5dd9b0bf81216b83a2cb8285 100644 (file)
@@ -363,7 +363,7 @@ func (r *NodeShiftTreeWalker[T]) Walk(ctx context.Context) error {
        main := r.Tree
 
        var err error
-       fnMain := func(s string, v interface{}) bool {
+       fnMain := func(s string, v any) bool {
                if r.ShouldSkip(s) {
                        return false
                }
index cd13b9f61026bdde49b9e70a5cf0dac22a2ba988..059eaaf88b8f7400b4422ac88039d65ded4af765 100644 (file)
@@ -34,7 +34,7 @@ func NewTreeShiftTree[T comparable](d, length int) *TreeShiftTree[T] {
                panic("length must be > 0")
        }
        trees := make([]*SimpleTree[T], length)
-       for i := 0; i < length; i++ {
+       for i := range length {
                trees[i] = NewSimpleTree[T]()
        }
        return &TreeShiftTree[T]{d: d, trees: trees}
index cb7846cd1b84e59a98607b4bab7df383eddf8bbc..3e9b92087aa2ce43608e71155569f35524ece8a3 100644 (file)
@@ -634,7 +634,7 @@ func (b *sourceFilesystemsBuilder) createMainOverlayFs(p *paths.Paths) (*filesys
 
        mounts := make([]mountsDescriptor, len(mods))
 
-       for i := 0; i < len(mods); i++ {
+       for i := range mods {
                mod := mods[i]
                dir := mod.Dir()
 
index 3f189c8601ab1026f62c3428a95dc896a23191f3..abe06ac4a3e8410a195f6cf6092bd0cb28a5f969 100644 (file)
@@ -57,14 +57,14 @@ func TestNewBaseFs(t *testing.T) {
                        filenameTheme := filepath.Join(base, fmt.Sprintf("theme-file-%s.txt", theme))
                        filenameOverlap := filepath.Join(base, "f3.txt")
                        afs.Mkdir(base, 0o755)
-                       content := []byte(fmt.Sprintf("content:%s:%s", theme, dir))
+                       content := fmt.Appendf(nil, "content:%s:%s", theme, dir)
                        afero.WriteFile(afs, filenameTheme, content, 0o755)
                        afero.WriteFile(afs, filenameOverlap, content, 0o755)
                }
                // Write some files to the root of the theme
                base := filepath.Join(workingDir, "themes", theme)
-               afero.WriteFile(afs, filepath.Join(base, fmt.Sprintf("theme-root-%s.txt", theme)), []byte(fmt.Sprintf("content:%s", theme)), 0o755)
-               afero.WriteFile(afs, filepath.Join(base, "file-theme-root.txt"), []byte(fmt.Sprintf("content:%s", theme)), 0o755)
+               afero.WriteFile(afs, filepath.Join(base, fmt.Sprintf("theme-root-%s.txt", theme)), fmt.Appendf(nil, "content:%s", theme), 0o755)
+               afero.WriteFile(afs, filepath.Join(base, "file-theme-root.txt"), fmt.Appendf(nil, "content:%s", theme), 0o755)
        }
 
        afero.WriteFile(afs, filepath.Join(workingDir, "file-root.txt"), []byte("content-project"), 0o755)
@@ -683,8 +683,8 @@ func setConfigAndWriteSomeFilesTo(fs afero.Fs, v config.Provider, key, val strin
        workingDir := v.GetString("workingDir")
        v.Set(key, val)
        fs.Mkdir(val, 0o755)
-       for i := 0; i < num; i++ {
+       for i := range num {
                filename := filepath.Join(workingDir, val, fmt.Sprintf("f%d.txt", i+1))
-               afero.WriteFile(fs, filename, []byte(fmt.Sprintf("content:%s:%d", key, i+1)), 0o755)
+               afero.WriteFile(fs, filename, fmt.Appendf(nil, "content:%s:%d", key, i+1), 0o755)
        }
 }
index b17c761aa7444aa4f980098fb83a4380d78eb233..5373f9832ac9dba1b4a88a3a5f931308a03a7fed 100644 (file)
@@ -311,7 +311,7 @@ func (h *HugoSites) NumLogErrors() int {
 
 func (h *HugoSites) PrintProcessingStats(w io.Writer) {
        stats := make([]*helpers.ProcessingStats, len(h.Sites))
-       for i := 0; i < len(h.Sites); i++ {
+       for i := range h.Sites {
                stats[i] = h.Sites[i].PathSpec.ProcessingStats
        }
        helpers.ProcessingStatsTable(w, stats...)
index 701e0f11bcacb7dcea09d54c2c04aa0d4045f428..de64767df17249c0fae17c5692dea65e3d13d9ea 100644 (file)
@@ -707,7 +707,7 @@ func (p *pageState) shiftToOutputFormat(isRenderingSite bool, idx int) error {
                cp := p.pageOutput.pco
                if cp == nil && p.reusePageOutputContent() {
                        // Look for content to reuse.
-                       for i := 0; i < len(p.pageOutputs); i++ {
+                       for i := range p.pageOutputs {
                                if i == idx {
                                        continue
                                }
index f7579f182f8477732c2117ee0af7e7fc595c7f65..3cfea1727be9fe8eeb0f915488f2abb086f82be0 100644 (file)
@@ -45,6 +45,7 @@ import (
        "github.com/gohugoio/hugo/tpl"
        "github.com/mitchellh/mapstructure"
        "github.com/spf13/cast"
+       maps0 "maps"
 )
 
 const (
@@ -696,9 +697,7 @@ func (c *cachedContentScope) contentToC(ctx context.Context) (contentTableOfCont
                        cp.otherOutputs.Set(cp2.po.p.pid, cp2)
 
                        // Merge content placeholders
-                       for k, v := range ct2.contentPlaceholders {
-                               ct.contentPlaceholders[k] = v
-                       }
+                       maps0.Copy(ct.contentPlaceholders, ct2.contentPlaceholders)
 
                        if p.s.conf.Internal.Watch {
                                for _, s := range cp2.po.p.m.content.shortcodeState.shortcodes {
index e4da75a7240f4628de8c4fe51d398d9b22bf4254..e5521412bd79a800a5c56d049aa505bed5412246 100644 (file)
@@ -690,7 +690,7 @@ bundle min min key: {{ $jsonMinMin.Key }}
 
 `)
 
-       for i := 0; i < 3; i++ {
+       for range 3 {
 
                b.Build(BuildCfg{})
 
index 692ae9ef6b920efdaca6335fcf006d3c1a9c8736..10c973b7ef85e78094be342fe8a07ac7c8031d08 100644 (file)
@@ -47,8 +47,8 @@ func BenchmarkGetPage(b *testing.B) {
                b.Fatal(err)
        }
 
-       for i := 0; i < 10; i++ {
-               for j := 0; j < 100; j++ {
+       for i := range 10 {
+               for j := range 100 {
                        writeSource(b, fs, filepath.Join("content", fmt.Sprintf("sect%d", i), fmt.Sprintf("page%d.md", j)), "CONTENT")
                }
        }
@@ -91,8 +91,8 @@ func createGetPageRegularBenchmarkSite(t testing.TB) *Site {
                return fmt.Sprintf(pageCollectionsPageTemplate, title)
        }
 
-       for i := 0; i < 10; i++ {
-               for j := 0; j < 100; j++ {
+       for i := range 10 {
+               for j := range 100 {
                        content := pc(fmt.Sprintf("Title%d_%d", i, j))
                        writeSource(c, fs, filepath.Join("content", fmt.Sprintf("sect%d", i), fmt.Sprintf("page%d.md", j)), content)
                }
@@ -105,7 +105,7 @@ func TestBenchmarkGetPageRegular(t *testing.T) {
        c := qt.New(t)
        s := createGetPageRegularBenchmarkSite(t)
 
-       for i := 0; i < 10; i++ {
+       for i := range 10 {
                pp := path.Join("/", fmt.Sprintf("sect%d", i), fmt.Sprintf("page%d.md", i))
                page, _ := s.getPage(nil, pp)
                c.Assert(page, qt.Not(qt.IsNil), qt.Commentf(pp))
@@ -192,8 +192,8 @@ func TestGetPage(t *testing.T) {
                return fmt.Sprintf(pageCollectionsPageTemplate, title)
        }
 
-       for i := 0; i < 10; i++ {
-               for j := 0; j < 10; j++ {
+       for i := range 10 {
+               for j := range 10 {
                        content := pc(fmt.Sprintf("Title%d_%d", i, j))
                        writeSource(t, fs, filepath.Join("content", fmt.Sprintf("sect%d", i), fmt.Sprintf("page%d.md", j)), content)
                }
index 3862d7cf05bb18b611ee7cb40dd35cfea6c3e97a..ba1ed83ded4a200676e8b5976388be8ab969effb 100644 (file)
@@ -42,7 +42,7 @@ func TestMergeLanguages(t *testing.T) {
        c.Assert(len(frSite.RegularPages()), qt.Equals, 6)
        c.Assert(len(nnSite.RegularPages()), qt.Equals, 12)
 
-       for i := 0; i < 2; i++ {
+       for range 2 {
                mergedNN := nnSite.RegularPages().MergeByLanguage(enSite.RegularPages())
                c.Assert(len(mergedNN), qt.Equals, 31)
                for i := 1; i <= 31; i++ {
@@ -163,7 +163,7 @@ date: "2018-02-28"
        // Add a bundles
        j := 100
        contentPairs = append(contentPairs, []string{"bundle/index.md", fmt.Sprintf(contentTemplate, j, j)}...)
-       for i := 0; i < 6; i++ {
+       for i := range 6 {
                contentPairs = append(contentPairs, []string{fmt.Sprintf("bundle/pb%d.md", i), fmt.Sprintf(contentTemplate, i+j, i+j)}...)
        }
        contentPairs = append(contentPairs, []string{"bundle/index.nn.md", fmt.Sprintf(contentTemplate, j, j)}...)
index dcee6e38e2ba89273eabe90c51ad1f0beb0fcf9f..2470a9046514382fcea7f69f30d5af19fd28269c 100644 (file)
@@ -40,7 +40,7 @@ contentDir = "content/nn"
 `
        b := newTestSitesBuilder(t).WithConfigFile("toml", configFile)
        var content []string
-       for i := 0; i < 9; i++ {
+       for i := range 9 {
                for _, contentDir := range []string{"content/en", "content/nn"} {
                        content = append(content, fmt.Sprintf(contentDir+"/blog/page%d.md", i), fmt.Sprintf(`---
 title: Page %d
@@ -118,7 +118,7 @@ cascade:
     - JSON
 ---`)
 
-       for i := 0; i < 22; i++ {
+       for i := range 22 {
                b.WithContent(fmt.Sprintf("p%d.md", i+1), fmt.Sprintf(`---
 title: "Page"
 weight: %d
index dc2c6524f883b36d4791ef6d4f43560403ff1803..fab47679f33ad7b55a0a0936d5c6053bcd6ab3a3 100644 (file)
@@ -124,7 +124,7 @@ func TestRebuildEditTextFileInLeafBundle(t *testing.T) {
 
 func TestRebuildEditTextFileInShortcode(t *testing.T) {
        t.Parallel()
-       for i := 0; i < 3; i++ {
+       for range 3 {
                b := TestRunning(t, rebuildFilesSimple)
                b.AssertFileContent("public/mythirdsection/mythirdsectionpage/index.html",
                        "Text: Assets My Shortcode Text.")
@@ -138,7 +138,7 @@ func TestRebuildEditTextFileInShortcode(t *testing.T) {
 
 func TestRebuildEditTextFileInHook(t *testing.T) {
        t.Parallel()
-       for i := 0; i < 3; i++ {
+       for range 3 {
                b := TestRunning(t, rebuildFilesSimple)
                b.AssertFileContent("public/mythirdsection/mythirdsectionpage/index.html",
                        "Text: Assets My Other Text.")
@@ -1545,7 +1545,7 @@ title: "P%d"
 P%d Content.
 `
 
-       for i := 0; i < count; i++ {
+       for i := range count {
                files += fmt.Sprintf("-- content/mysect/p%d/index.md --\n%s", i, fmt.Sprintf(contentTemplate, i, i))
        }
 
index 942873ae4c904af29555b84e71e88d4270210ef8..00e4c00601bb238460dd1acf58eba2c283329a02 100644 (file)
@@ -99,7 +99,7 @@ FAILED REMOTE ERROR DETAILS CONTENT: {{ with $failedImg }}{{ with .Err }}{{ with
 
        b.Running()
 
-       for i := 0; i < 2; i++ {
+       for i := range 2 {
                b.Logf("Test run %d", i)
                b.Build(BuildCfg{})
 
@@ -200,7 +200,7 @@ func BenchmarkResourceChainPostProcess(b *testing.B) {
        for i := 0; i < b.N; i++ {
                b.StopTimer()
                s := newTestSitesBuilder(b)
-               for i := 0; i < 300; i++ {
+               for i := range 300 {
                        s.WithContent(fmt.Sprintf("page%d.md", i+1), "---\ntitle: Page\n---")
                }
                s.WithTemplates("_default/single.html", `Start.
index 5799de45279a32b7d40e8daf5fff970610a5c9a3..93edd9345463f51c86a1ff4d0887a2df9971f6c6 100644 (file)
@@ -865,13 +865,13 @@ Content: {{ .Content }}|
 func TestShortcodeStableOutputFormatTemplates(t *testing.T) {
        t.Parallel()
 
-       for i := 0; i < 5; i++ {
+       for range 5 {
 
                b := newTestSitesBuilder(t)
 
                const numPages = 10
 
-               for i := 0; i < numPages; i++ {
+               for i := range numPages {
                        b.WithContent(fmt.Sprintf("page%d.md", i), `---
 title: "Page"
 outputs: ["html", "css", "csv", "json"]
@@ -894,14 +894,14 @@ outputs: ["html", "css", "csv", "json"]
 
                // helpers.PrintFs(b.Fs.Destination, "public", os.Stdout)
 
-               for i := 0; i < numPages; i++ {
+               for i := range numPages {
                        b.AssertFileContent(fmt.Sprintf("public/page%d/index.html", i), "Short-HTML")
                        b.AssertFileContent(fmt.Sprintf("public/page%d/index.csv", i), "Short-CSV")
                        b.AssertFileContent(fmt.Sprintf("public/page%d/index.json", i), "Short-HTML")
 
                }
 
-               for i := 0; i < numPages; i++ {
+               for i := range numPages {
                        b.AssertFileContent(fmt.Sprintf("public/page%d/styles.css", i), "Short-HTML")
                }
 
index 7c09ba34649d92543d65116aba0bc99a7918789e..dab23d67061e2e5f76b5d5627ae413366a68876b 100644 (file)
@@ -330,10 +330,7 @@ func NewHugoSites(cfg deps.DepsCfg) (*HugoSites, error) {
 
 func newHugoSites(cfg deps.DepsCfg, d *deps.Deps, pageTrees *pageTrees, sites []*Site) (*HugoSites, error) {
        numWorkers := config.GetNumWorkerMultiplier()
-       numWorkersSite := numWorkers
-       if numWorkersSite > len(sites) {
-               numWorkersSite = len(sites)
-       }
+       numWorkersSite := min(numWorkers, len(sites))
        workersSite := para.New(numWorkersSite)
 
        h := &HugoSites{
index 5ac3d5a759fda3d80accdaf15abe0d65226023e6..c88036f2656bc8aec000d1d1ba92f844a25405cc 100644 (file)
@@ -78,7 +78,7 @@ func (s *Site) renderPages(ctx *siteRenderContext) error {
 
        wg := &sync.WaitGroup{}
 
-       for i := 0; i < numWorkers; i++ {
+       for range numWorkers {
                wg.Add(1)
                go pageRenderer(ctx, s, pages, results, wg)
        }
index da09ec36849c57c3fa7720c98a93292bb05d46ac..02f2c0a8c34e87097277ab8767bc92e989ec9264 100644 (file)
@@ -69,15 +69,15 @@ aliases: [/Ali%d]
                "_default/terms.html", "Terms List|{{ .Title }}|{{ .Content }}",
        )
 
-       for i := 0; i < 2; i++ {
-               for j := 0; j < 2; j++ {
+       for i := range 2 {
+               for j := range 2 {
                        pageID := i + j + 1
                        b.WithContent(fmt.Sprintf("content/sect/p%d.md", pageID),
                                fmt.Sprintf(pageTemplate, pageID, fmt.Sprintf("- tag%d", j), fmt.Sprintf("- category%d", j), pageID))
                }
        }
 
-       for i := 0; i < 5; i++ {
+       for i := range 5 {
                b.WithContent(fmt.Sprintf("assets/image%d.png", i+1), "image")
        }
 
index 2ee33da246ad96de10e973bc08b004056d63f588..e611897fe2f71564860015d02d11c1d50d1100cc 100644 (file)
@@ -372,14 +372,14 @@ func TestMainSections(t *testing.T) {
 
                        b := newTestSitesBuilder(c).WithViper(v)
 
-                       for i := 0; i < 20; i++ {
+                       for i := range 20 {
                                b.WithContent(fmt.Sprintf("page%d.md", i), `---
 title: "Page"
 ---
 `)
                        }
 
-                       for i := 0; i < 5; i++ {
+                       for i := range 5 {
                                b.WithContent(fmt.Sprintf("blog/page%d.md", i), `---
 title: "Page"
 tags: ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
@@ -387,7 +387,7 @@ tags: ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]
 `)
                        }
 
-                       for i := 0; i < 3; i++ {
+                       for i := range 3 {
                                b.WithContent(fmt.Sprintf("docs/page%d.md", i), `---
 title: "Page"
 ---
index 29170118f72b0cd2858472b570460eae61ebf01a..091251f803ea9f7c6cfef29d99a3945e8ca891bc 100644 (file)
@@ -97,7 +97,7 @@ Do not go gentle into that good night.
        writeSource(t, fs, filepath.Join("content", "sect1", "_index.md"), fmt.Sprintf(st, "/ss1/"))
        writeSource(t, fs, filepath.Join("content", "sect2", "_index.md"), fmt.Sprintf(st, "/ss2/"))
 
-       for i := 0; i < 5; i++ {
+       for i := range 5 {
                writeSource(t, fs, filepath.Join("content", "sect1", fmt.Sprintf("p%d.md", i+1)), pt)
                writeSource(t, fs, filepath.Join("content", "sect2", fmt.Sprintf("p%d.md", i+1)), pt)
        }
index 26148dd1b2c3a6f0c43eaf8e4773f17ec8ab39bf..6577a22c1e440b0ae83209cc04133a3e8e7aff06 100644 (file)
@@ -314,7 +314,7 @@ func TestTaxonomiesNextGenLoops(t *testing.T) {
 </ul>
 `)
 
-       for i := 0; i < 10; i++ {
+       for i := range 10 {
                b.WithContent(fmt.Sprintf("page%d.md", i+1), `
 ---
 Title: "Taxonomy!"
index 055d9593ce6b289f71b0ac698a9329e6e5df6dab..01dfc7eba1a4b70717bf4e221653c3957272c6a1 100644 (file)
@@ -250,7 +250,7 @@ Content.
 Base %d: {{ block "main" . }}FOO{{ end }}
 `
 
-       for i := 0; i < numPages; i++ {
+       for i := range numPages {
                id := i + 1
                b.WithContent(fmt.Sprintf("page%d.md", id), fmt.Sprintf(pageTemplate, id, id))
                b.WithTemplates(fmt.Sprintf("_default/layout%d.html", id), fmt.Sprintf(singleTemplate, id))
@@ -258,7 +258,7 @@ Base %d: {{ block "main" . }}FOO{{ end }}
        }
 
        b.Build(BuildCfg{})
-       for i := 0; i < numPages; i++ {
+       for i := range numPages {
                id := i + 1
                b.AssertFileContent(fmt.Sprintf("public/page%d/index.html", id), fmt.Sprintf(`Base %d: %d`, id, id))
        }
index b1a08d061a49ecfd53a05e3dea89f95606387a90..fd1055aef9720397854bbd2a1d696da41dc7f320 100644 (file)
@@ -27,7 +27,7 @@ func NewFinder(cfg FinderConfig) *Finder {
 }
 
 var searchIDPool = sync.Pool{
-       New: func() interface{} {
+       New: func() any {
                return &searchID{seen: make(map[Manager]bool)}
        },
 }
index d003caaf01b11c221f54e5efe041ead0d691caaa..f9b04aa144aa4f4560ac82e9f15ae1ac241cddec 100644 (file)
@@ -25,7 +25,7 @@ import (
 func BenchmarkIdentityManager(b *testing.B) {
        createIds := func(num int) []identity.Identity {
                ids := make([]identity.Identity, num)
-               for i := 0; i < num; i++ {
+               for i := range num {
                        name := fmt.Sprintf("id%d", i)
                        ids[i] = &testIdentity{base: name, name: name}
                }
@@ -108,10 +108,10 @@ func BenchmarkIsNotDependent(b *testing.B) {
 
        newNestedManager := func(depth, count int) identity.Manager {
                m1 := identity.NewManager("")
-               for i := 0; i < depth; i++ {
+               for range depth {
                        m2 := identity.NewManager("")
                        m1.AddIdentity(m2)
-                       for j := 0; j < count; j++ {
+                       for j := range count {
                                id := fmt.Sprintf("id%d", j)
                                m2.AddIdentity(&testIdentity{id, id, "", ""})
                        }
index 8ceec97efc6e483b9ff5229e77e504826f2103e2..a2516dbd2cdc7ceeb72f05043ebbf6813572ed92 100644 (file)
@@ -27,6 +27,7 @@ import (
        "github.com/gohugoio/hugo/resources"
        "github.com/gohugoio/hugo/resources/resource"
        "github.com/spf13/afero"
+       "slices"
 )
 
 const (
@@ -167,15 +168,11 @@ func createBuildPlugins(rs *resources.Spec, assetsResolver *fsResolver, depsMana
                        }
                }
 
-               for _, ext := range opts.Externals {
-                       // ESBuild will do a more thorough check for packages resolved in node_modules,
-                       // but we need to make sure that we don't try to resolve these in the /assets folder.
-                       if ext == impPath {
-                               return api.OnResolveResult{
-                                       Path:     impPath,
-                                       External: true,
-                               }, nil
-                       }
+               if slices.Contains(opts.Externals, impPath) {
+                       return api.OnResolveResult{
+                               Path:     impPath,
+                               External: true,
+                       }, nil
                }
 
                if opts.ImportOnResolveFunc != nil {
index 1159944a4039d840b0f9ea5a7ff85e67497d4b8d..f2dfc6244a9e5293f8609af3363769f93c7b24f0 100644 (file)
@@ -384,7 +384,7 @@ func newDispatcher[Q, R any](opts Options) (*dispatcherPool[Q, R], error) {
        }
 
        inOuts := make([]*inOut, opts.PoolSize)
-       for i := 0; i < opts.PoolSize; i++ {
+       for i := range opts.PoolSize {
                var stdin, stdout hugio.ReadWriteCloser
 
                stdin = hugio.NewPipeReadWriteCloser()
@@ -478,7 +478,7 @@ func newDispatcher[Q, R any](opts Options) (*dispatcherPool[Q, R], error) {
                close(dp.donec)
        }()
 
-       for i := 0; i < len(inOuts); i++ {
+       for i := range inOuts {
                d := &dispatcher[Q, R]{
                        pending: make(map[uint32]*call[Q, R]),
                        inOut:   inOuts[i],
index 613a9706f69f78385e35dd759342e719114bcee7..2ee4c3de59cba9aa4e9791486cf410d2509ec4a6 100644 (file)
@@ -101,7 +101,7 @@ func TestGreet(t *testing.T) {
                Infof:    t.Logf,
        }
 
-       for i := 0; i < 2; i++ {
+       for range 2 {
                func() {
                        d, err := Start[person, greeting](opts)
                        if err != nil {
@@ -123,7 +123,7 @@ func TestGreet(t *testing.T) {
                                },
                        }
 
-                       for j := 0; j < 20; j++ {
+                       for j := range 20 {
                                inputMessage.Header.ID = uint32(j + 1)
                                g, err := d.Execute(ctx, inputMessage)
                                if err != nil {
@@ -163,7 +163,7 @@ func TestGreetParallel(t *testing.T) {
 
                        ctx := context.Background()
 
-                       for j := 0; j < 5; j++ {
+                       for j := range 5 {
                                base := i * 100
                                id := uint32(base + j)
 
@@ -217,7 +217,7 @@ func TestKatexParallel(t *testing.T) {
 
                        ctx := context.Background()
 
-                       for j := 0; j < 1; j++ {
+                       for j := range 1 {
                                base := i * 100
                                id := uint32(base + j)
 
index 543f4a133fb887526366be6f3faf6d63274e2e50..33240f3f49a977e1f75eee6408987382ba06cbab 100644 (file)
@@ -29,13 +29,13 @@ func TestCollator(t *testing.T) {
 
        coll := &Collator{c: collate.New(language.English, collate.Loose)}
 
-       for i := 0; i < 10; i++ {
+       for range 10 {
                wg.Add(1)
                go func() {
                        coll.Lock()
                        defer coll.Unlock()
                        defer wg.Done()
-                       for j := 0; j < 10; j++ {
+                       for range 10 {
                                k := coll.CompareStrings("abc", "def")
                                c.Assert(k, qt.Equals, -1)
                        }
@@ -48,7 +48,7 @@ func BenchmarkCollator(b *testing.B) {
        s := []string{"foo", "bar", "éntre", "baz", "qux", "quux", "corge", "grault", "garply", "waldo", "fred", "plugh", "xyzzy", "thud"}
 
        doWork := func(coll *Collator) {
-               for i := 0; i < len(s); i++ {
+               for i := range s {
                        for j := i + 1; j < len(s); j++ {
                                _ = coll.CompareStrings(s[i], s[j])
                        }
index 96a9594941f0bb56ac74e09f6dfb3089d0967b0a..94736fab8d9bab36a7859bc15cbd21f073232f64 100644 (file)
@@ -79,7 +79,7 @@ func TestInit(t *testing.T) {
 
        // Add some concurrency and randomness to verify thread safety and
        // init order.
-       for i := 0; i < 100; i++ {
+       for i := range 100 {
                wg.Add(1)
                go func(i int) {
                        defer wg.Done()
index 4164f0e0a4a85f786f9b3b70606cf316e7ef70bb..c29632b909b968355cbe54553768f438da68fab8 100644 (file)
@@ -77,7 +77,7 @@ func (r *htmlRenderer) renderCodeBlock(w util.BufWriter, src []byte, node ast.No
        var buff bytes.Buffer
 
        l := n.Lines().Len()
-       for i := 0; i < l; i++ {
+       for i := range l {
                line := n.Lines().At(i)
                buff.Write(line.Value(src))
        }
index e68acb8c31d1089f2962dfa663d498a9ce33dda9..7a556083c6a34102510cdc521a2b0abcca3f561f 100644 (file)
@@ -182,7 +182,7 @@ func (r *hugoContextRenderer) renderHTMLBlock(
        if entering {
                if r.Unsafe {
                        l := n.Lines().Len()
-                       for i := 0; i < l; i++ {
+                       for i := range l {
                                line := n.Lines().At(i)
                                linev := line.Value(source)
                                var stripped bool
@@ -226,7 +226,7 @@ func (r *hugoContextRenderer) renderRawHTML(
        n := node.(*ast.RawHTML)
        l := n.Segments.Len()
        if r.Unsafe {
-               for i := 0; i < l; i++ {
+               for i := range l {
                        segment := n.Segments.At(i)
                        _, _ = w.Write(segment.Value(source))
                }
index 4d72e7c80f2c65b7aadf7bd7ab3556499a6cb7a2..c56842f3d755f4712e15feb7a95c8e74ee2f9789 100644 (file)
@@ -110,7 +110,7 @@ func (r *htmlRenderer) renderPassthroughBlock(w util.BufWriter, src []byte, node
        case (*passthrough.PassthroughBlock):
                l := nn.Lines().Len()
                var buff bytes.Buffer
-               for i := 0; i < l; i++ {
+               for i := range l {
                        line := nn.Lines().At(i)
                        buff.Write(line.Value(src))
                }
index 398f5eb0c3af294c888d1028a4fdaae591b1dc7a..5bb0adb15083b0041ee5f104b8279d6e0a72e622 100644 (file)
@@ -100,10 +100,7 @@ func (c *rstConverter) getRstContent(src []byte, ctx converter.DocumentContext)
 
        bodyEnd := bytes.Index(result, []byte("\n</body>"))
        if bodyEnd < 0 || bodyEnd >= len(result) {
-               bodyEnd = len(result) - 1
-               if bodyEnd < 0 {
-                       bodyEnd = 0
-               }
+               bodyEnd = max(len(result)-1, 0)
        }
 
        return result[bodyStart+7 : bodyEnd], err
index 741179d96e0075a158c696129a694651eeec12da..6c40c9a598d63fd06848e33891c940108630dc00 100644 (file)
@@ -250,7 +250,7 @@ func (b *tocBuilder) writeHeading(level, indent int, h *Heading) {
 }
 
 func (b *tocBuilder) indent(n int) {
-       for i := 0; i < n; i++ {
+       for range n {
                b.s.WriteString("  ")
        }
 }
index 9ec7ec293aebfca5330d171163030ce5675b1e72..b07d9e3aded5edb801974f011436a7ab219bc5f4 100644 (file)
@@ -196,7 +196,7 @@ func TestTocMisc(t *testing.T) {
 func BenchmarkToc(b *testing.B) {
        newTocs := func(n int) []*Fragments {
                var tocs []*Fragments
-               for i := 0; i < n; i++ {
+               for range n {
                        tocs = append(tocs, newTestToc())
                }
                return tocs
index e50d8499d448b593c7126d8678e2d12a5840d994..394159d0400980368be46f35b504d83a50ad6170 100644 (file)
@@ -26,6 +26,7 @@ import (
 
        "github.com/mitchellh/mapstructure"
        "github.com/spf13/cast"
+       "slices"
 )
 
 // DefaultTypes is the default media types supported by Hugo.
@@ -46,7 +47,7 @@ func init() {
        // Initialize the Builtin types with values from DefaultTypes.
        v := reflect.ValueOf(&Builtin).Elem()
 
-       for i := 0; i < v.NumField(); i++ {
+       for i := range v.NumField() {
                f := v.Field(i)
                fieldName := v.Type().Field(i).Name
                builtinType := f.Interface().(Type)
@@ -149,12 +150,7 @@ func (t ContentTypes) IsIndexContentFile(filename string) bool {
 
 // IsHTMLSuffix returns whether the given suffix is a HTML media type.
 func (t ContentTypes) IsHTMLSuffix(suffix string) bool {
-       for _, s := range t.HTML.Suffixes() {
-               if s == suffix {
-                       return true
-               }
-       }
-       return false
+       return slices.Contains(t.HTML.Suffixes(), suffix)
 }
 
 // Types is a slice of media types.
index 011d43014639e8b88f1cd9494de024b645fb3331..a8998bb8deda7d77a74c792da46983616a36e5e4 100644 (file)
@@ -380,14 +380,12 @@ func (c *Client) Verify(clean bool) error {
        if err != nil {
                if clean {
                        m := verifyErrorDirRe.FindAllStringSubmatch(err.Error(), -1)
-                       if m != nil {
-                               for i := 0; i < len(m); i++ {
-                                       c, err := hugofs.MakeReadableAndRemoveAllModulePkgDir(c.fs, m[i][1])
-                                       if err != nil {
-                                               return err
-                                       }
-                                       fmt.Println("Cleaned", c)
+                       for i := range m {
+                               c, err := hugofs.MakeReadableAndRemoveAllModulePkgDir(c.fs, m[i][1])
+                               if err != nil {
+                                       return err
                                }
+                               fmt.Println("Cleaned", c)
                        }
                        // Try to verify it again.
                        err = c.runVerify()
index 3802014b114d29c8cb929bbebfd7de71e223491c..a971f2e7441a45a54ff17180e7bbc631398650aa 100644 (file)
@@ -25,6 +25,7 @@ import (
        "github.com/mitchellh/mapstructure"
 
        "github.com/spf13/cast"
+       "slices"
 )
 
 var smc = newMenuCache()
@@ -267,7 +268,7 @@ func (m Menu) Reverse() Menu {
 // Clone clones the menu entries.
 // This is for internal use only.
 func (m Menu) Clone() Menu {
-       return append(Menu(nil), m...)
+       return slices.Clone(m)
 }
 
 func DecodeConfig(in any) (*config.ConfigNamespace[map[string]MenuConfig, Menus], error) {
index b2c46f7ac659ded8b712401e3088f8b8def9a466..065781780953f86d6ac622daf4c419e6d2ec2ce1 100644 (file)
@@ -14,6 +14,7 @@
 package navigation
 
 import (
+       "slices"
        "sync"
 )
 
@@ -84,7 +85,7 @@ func (c *menuCache) getP(key string, apply func(m *Menu), menuLists ...Menu) (Me
        }
 
        m := menuLists[0]
-       menuCopy := append(Menu(nil), m...)
+       menuCopy := slices.Clone(m)
 
        if apply != nil {
                apply(&menuCopy)
index 9943db51726126aa42367c577651675fae6dcf38..8fa17ffc37fd43597eee4b08ca8ae03b07828d37 100644 (file)
@@ -23,7 +23,7 @@ import (
 
 func createSortTestMenu(num int) Menu {
        menu := make(Menu, num)
-       for i := 0; i < num; i++ {
+       for i := range num {
                m := &MenuEntry{}
                menu[i] = m
        }
@@ -49,11 +49,11 @@ func TestMenuCache(t *testing.T) {
 
        var testMenuSets []Menu
 
-       for i := 0; i < 50; i++ {
+       for i := range 50 {
                testMenuSets = append(testMenuSets, createSortTestMenu(i+1))
        }
 
-       for j := 0; j < 100; j++ {
+       for range 100 {
                wg.Add(1)
                go func() {
                        defer wg.Done()
index 09606dba1e1f0684131b9d3258c6da196555a47e..79f718dda13fbb8ceb98f20b598603b7f17f0640 100644 (file)
@@ -321,7 +321,7 @@ func uniqueStringsReuse(s []string) []string {
        for i, val := range s {
                var seen bool
 
-               for j := 0; j < i; j++ {
+               for j := range i {
                        if s[j] == val {
                                seen = true
                                break
index 468c1a8fee8f4dac15a3337814978702c808977a..9d89ff020dd413ddea6f7da94adb9f92a2c629ca 100644 (file)
@@ -99,7 +99,7 @@ func (c ReplacingJSONMarshaller) MarshalJSON() ([]byte, error) {
 
        if c.OmitEmpty {
                // It's tricky to do this with a regexp, so convert it to a map, remove zero values and convert back.
-               var m map[string]interface{}
+               var m map[string]any
                err = json.Unmarshal(converted, &m)
                if err != nil {
                        return nil, err
@@ -111,9 +111,9 @@ func (c ReplacingJSONMarshaller) MarshalJSON() ([]byte, error) {
                                        delete(m, k)
                                } else {
                                        switch vv := v.(type) {
-                                       case map[string]interface{}:
+                                       case map[string]any:
                                                removeZeroVAlues(vv)
-                                       case []interface{}:
+                                       case []any:
                                                for _, vvv := range vv {
                                                        if m, ok := vvv.(map[string]any); ok {
                                                                removeZeroVAlues(m)
index 334d9a79c1597e213534359e2ab227188986edad..a68a9e03a9f6838ce5ef013777ccee0a59b48008 100644 (file)
@@ -123,7 +123,7 @@ LOOP:
 
 // Handle YAML or TOML front matter.
 func (l *pageLexer) lexFrontMatterSection(tp ItemType, delimr rune, name string, delim []byte) stateFunc {
-       for i := 0; i < 2; i++ {
+       for range 2 {
                if r := l.next(); r != delimr {
                        return l.errorf("invalid %s delimiter", name)
                }
index 1cf87bb70c8b91ddd3f1c0896480921caf859fdd..5c6f4b2ff5f809696279def3313c78f614ba8948 100644 (file)
@@ -192,7 +192,7 @@ func (t *Iterator) PeekWalk(walkFn func(item Item) bool) {
 // Consume is a convenience method to consume the next n tokens,
 // but back off Errors and EOF.
 func (t *Iterator) Consume(cnt int) {
-       for i := 0; i < cnt; i++ {
+       for range cnt {
                token := t.Next()
                if token.Type == tError || token.Type == tEOF {
                        t.Backup()
index 9197a61351cf84431a35fd81c0e4e76622974601..b8f1ad3e2b214cde65d88a48cd6aff8e8b753076 100644 (file)
@@ -292,7 +292,7 @@ func (r *rank) addWeight(w int) {
 }
 
 var rankPool = sync.Pool{
-       New: func() interface{} {
+       New: func() any {
                return &rank{}
        },
 }
@@ -433,7 +433,7 @@ func (cfg IndexConfig) ToKeywords(v any) ([]Keyword, error) {
                keywords = append(keywords, cfg.stringToKeyword(vv))
        case []string:
                vvv := make([]Keyword, len(vv))
-               for i := 0; i < len(vvv); i++ {
+               for i := range vvv {
                        vvv[i] = cfg.stringToKeyword(vv[i])
                }
                keywords = append(keywords, vvv...)
@@ -623,7 +623,7 @@ type Keyword interface {
 func (cfg IndexConfig) StringsToKeywords(s ...string) []Keyword {
        kw := make([]Keyword, len(s))
 
-       for i := 0; i < len(s); i++ {
+       for i := range s {
                kw[i] = cfg.stringToKeyword(s[i])
        }
 
index 568486d1f4b5fa8b19d864ccd370971005829ef3..d57237e111ef12e2292f75ab96145c59cb2d4ecb 100644 (file)
@@ -65,7 +65,7 @@ func (d *testDoc) addKeywords(name string, keywords ...string) *testDoc {
 
        for k, v := range keywordm {
                keywords := make([]Keyword, len(v))
-               for i := 0; i < len(v); i++ {
+               for i := range v {
                        keywords[i] = StringKeyword(v[i])
                }
                d.keywords[k] = keywords
@@ -221,7 +221,7 @@ func TestSearch(t *testing.T) {
                doc := newTestDocWithDate("keywords", date, "a", "b")
                doc.name = "thedoc"
 
-               for i := 0; i < 10; i++ {
+               for i := range 10 {
                        docc := *doc
                        docc.name = fmt.Sprintf("doc%d", i)
                        idx.Add(context.Background(), &docc)
@@ -230,7 +230,7 @@ func TestSearch(t *testing.T) {
                m, err := idx.Search(context.Background(), SearchOpts{Document: doc, Indices: []string{"keywords"}})
                c.Assert(err, qt.IsNil)
                c.Assert(len(m), qt.Equals, 10)
-               for i := 0; i < 10; i++ {
+               for i := range 10 {
                        c.Assert(m[i].Name(), qt.Equals, fmt.Sprintf("doc%d", i))
                }
        })
@@ -311,11 +311,11 @@ func BenchmarkRelatedNewIndex(b *testing.B) {
        pages := make([]*testDoc, 100)
        numkeywords := 30
        allKeywords := make([]string, numkeywords)
-       for i := 0; i < numkeywords; i++ {
+       for i := range numkeywords {
                allKeywords[i] = fmt.Sprintf("keyword%d", i+1)
        }
 
-       for i := 0; i < len(pages); i++ {
+       for i := range pages {
                start := rand.Intn(len(allKeywords))
                end := start + 3
                if end >= len(allKeywords) {
@@ -356,7 +356,7 @@ func BenchmarkRelatedNewIndex(b *testing.B) {
                for i := 0; i < b.N; i++ {
                        idx := NewInvertedIndex(cfg)
                        docs := make([]Document, len(pages))
-                       for i := 0; i < len(pages); i++ {
+                       for i := range pages {
                                docs[i] = pages[i]
                        }
                        idx.Add(context.Background(), docs...)
@@ -372,7 +372,7 @@ func BenchmarkRelatedMatchesIn(b *testing.B) {
        docs := make([]*testDoc, 1000)
        numkeywords := 20
        allKeywords := make([]string, numkeywords)
-       for i := 0; i < numkeywords; i++ {
+       for i := range numkeywords {
                allKeywords[i] = fmt.Sprintf("keyword%d", i+1)
        }
 
@@ -386,7 +386,7 @@ func BenchmarkRelatedMatchesIn(b *testing.B) {
 
        idx := NewInvertedIndex(cfg)
 
-       for i := 0; i < len(docs); i++ {
+       for i := range docs {
                start := rand.Intn(len(allKeywords))
                end := start + 3
                if end >= len(allKeywords) {
index 291bfdbf71b174a2d9347a3728075453d2ea2506..6d3c6d6de9305ea67c661247329cdb568e118bf7 100644 (file)
@@ -160,7 +160,7 @@ keywords: ['k%d']
 ---
 `
 
-               for i := 0; i < 32; i++ {
+               for range 32 {
                        base += fmt.Sprintf("\n## Title %d", rand.Intn(100))
                }
 
index f2244842ad35643c1468b87e96c68a3d0e34cee2..4c3db2c14899c7fda28ec69b9a01da1d593b1447 100644 (file)
@@ -230,10 +230,10 @@ func git(args ...string) (string, error) {
        return string(out), nil
 }
 
-func logf(format string, args ...interface{}) {
+func logf(format string, args ...any) {
        fmt.Fprintf(os.Stderr, format, args...)
 }
 
-func logln(args ...interface{}) {
+func logln(args ...any) {
        fmt.Fprintln(os.Stderr, args...)
 }
index 1ba5a149a32caf2ee154f2eef198442d8a90379e..ee5de8bec21ffe452a9dce6f7694875cde0f1ff9 100644 (file)
@@ -348,13 +348,13 @@ func TestImageTransformConcurrent(t *testing.T) {
 
        image := fetchImageForSpec(spec, c, "sunset.jpg")
 
-       for i := 0; i < 4; i++ {
+       for i := range 4 {
                wg.Add(1)
                go func(id int) {
                        defer wg.Done()
-                       for j := 0; j < 5; j++ {
+                       for j := range 5 {
                                img := image
-                               for k := 0; k < 2; k++ {
+                               for k := range 2 {
                                        r1, err := img.Resize(fmt.Sprintf("%dx", id-k))
                                        if err != nil {
                                                t.Error(err)
@@ -499,7 +499,7 @@ func BenchmarkImageExif(b *testing.B) {
 
                b.StartTimer()
                for i := 0; i < b.N; i++ {
-                       for j := 0; j < 10; j++ {
+                       for range 10 {
                                getAndCheckExif(c, images[i])
                        }
                }
index e2ff2377fdb5728a1ee544bf149f3b7040b38756..c7f3b9eb6a1ac1aa5a31574379324be061bc6376 100644 (file)
@@ -22,6 +22,7 @@ import (
        "strings"
 
        "github.com/gohugoio/hugo/common/hstrings"
+       "slices"
 )
 
 type colorGoProvider interface {
@@ -91,11 +92,8 @@ func (c Color) toSRGB(i uint8) float64 {
 // that the palette is valid for the relevant format.
 func AddColorToPalette(c color.Color, p color.Palette) color.Palette {
        var found bool
-       for _, cc := range p {
-               if c == cc {
-                       found = true
-                       break
-               }
+       if slices.Contains(p, c) {
+               found = true
        }
 
        if !found {
index 22a2317a100d9f80f344f061964ca478a0842f68..25f2ab087712174baf569dd81d7cf3fa64a47059 100644 (file)
@@ -209,7 +209,7 @@ func goldenEqual(img1, img2 *image.NRGBA) bool {
        if len(img1.Pix) != len(img2.Pix) {
                return false
        }
-       for i := 0; i < len(img1.Pix); i++ {
+       for i := range img1.Pix {
                diff := int(img1.Pix[i]) - int(img2.Pix[i])
                if diff < 0 {
                        diff = -diff
index 8155be99d9889eaa4b4fd8f505a90c60f86757e0..1e98b0836655c0a9eaa3daf7e214e4456e4b2226 100644 (file)
@@ -24,6 +24,7 @@ import (
        "github.com/gohugoio/hugo/hugofs/glob"
        "github.com/gohugoio/hugo/resources/kinds"
        "github.com/mitchellh/mapstructure"
+       "slices"
 )
 
 // A PageMatcher can be used to match a Page with Glob patterns.
@@ -208,13 +209,7 @@ func decodePageMatcher(m any, v *PageMatcher) error {
        v.Kind = strings.ToLower(v.Kind)
        if v.Kind != "" {
                g, _ := glob.GetGlob(v.Kind)
-               found := false
-               for _, k := range kinds.AllKindsInPages {
-                       if g.Match(k) {
-                               found = true
-                               break
-                       }
-               }
+               found := slices.ContainsFunc(kinds.AllKindsInPages, g.Match)
                if !found {
                        return fmt.Errorf("%q did not match a valid Page Kind", v.Kind)
                }
index c26662fc2c166f322502fdc45eef7e10fc9b137e..7f98b1b88da2bcd5ca7296db375c75e2f938b921 100644 (file)
@@ -539,7 +539,7 @@ func expandDefaultValues(values []string, defaults []string) []string {
 
 func toLowerSlice(in any) []string {
        out := cast.ToStringSlice(in)
-       for i := 0; i < len(out); i++ {
+       for i := range out {
                out[i] = strings.ToLower(out[i])
        }
 
index 18f9e5aa17701f7d651427498e6f825fe50fbfcb..fe9d3d99c6cb36930d485068b93fd66ef68fafff 100644 (file)
@@ -31,7 +31,7 @@ import (
 func newTestFd() *pagemeta.FrontMatterDescriptor {
        return &pagemeta.FrontMatterDescriptor{
                PageConfig: &pagemeta.PageConfig{
-                       Params: make(map[string]interface{}),
+                       Params: make(map[string]any),
                },
                Location: time.UTC,
        }
index 9435cb308e9b11eaaad102fb3bfa7c3c2b652148..5300d552118f246c98cdcd8b1f022a196deaf9a2 100644 (file)
@@ -14,6 +14,7 @@
 package page
 
 import (
+       "slices"
        "sync"
 )
 
@@ -92,7 +93,7 @@ func (c *pageCache) getP(key string, apply func(p *Pages), pageLists ...Pages) (
        }
 
        p := pageLists[0]
-       pagesCopy := append(Pages(nil), p...)
+       pagesCopy := slices.Clone(p)
 
        if apply != nil {
                apply(&pagesCopy)
@@ -126,7 +127,7 @@ func pagesEqual(p1, p2 Pages) bool {
                return true
        }
 
-       for i := 0; i < len(p1); i++ {
+       for i := range p1 {
                if p1[i] != p2[i] {
                        return false
                }
index 825bdc31f5bb687df3ca3b5ca7ad4159e626b788..9e6af1c2879b11adf7931c269f7e8e2c1ba4daa1 100644 (file)
@@ -41,11 +41,11 @@ func TestPageCache(t *testing.T) {
 
        var testPageSets []Pages
 
-       for i := 0; i < 50; i++ {
+       for i := range 50 {
                testPageSets = append(testPageSets, createSortTestPages(i+1))
        }
 
-       for j := 0; j < 100; j++ {
+       for range 100 {
                wg.Add(1)
                go func() {
                        defer wg.Done()
@@ -75,7 +75,7 @@ func TestPageCache(t *testing.T) {
 func BenchmarkPageCache(b *testing.B) {
        cache := newPageCache()
        pages := make(Pages, 30)
-       for i := 0; i < 30; i++ {
+       for i := range 30 {
                pages[i] = &testPage{title: "p" + strconv.Itoa(i)}
        }
        key := "key"
index 12fa4a1e1936bc1935d25632d01f7f26c31e9905..70c7bc8a8182a31fc3e142094facef7a5315d8d8 100644 (file)
@@ -139,7 +139,7 @@ func TestLimit(t *testing.T) {
        p := createSortTestPages(10)
        firstFive := p.Limit(5)
        c.Assert(len(firstFive), qt.Equals, 5)
-       for i := 0; i < 5; i++ {
+       for i := range 5 {
                c.Assert(firstFive[i], qt.Equals, p[i])
        }
        c.Assert(p.Limit(10), eq, p)
@@ -197,7 +197,7 @@ func TestPageSortByParamNumeric(t *testing.T) {
 
        n := 10
        unsorted := createSortTestPages(n)
-       for i := 0; i < n; i++ {
+       for i := range n {
                v := 100 - i
                if i%2 == 0 {
                        v = 100.0 - i
@@ -269,7 +269,7 @@ func setSortVals(dates [4]time.Time, titles [4]string, weights [4]int, pages Pag
 func createSortTestPages(num int) Pages {
        pages := make(Pages, num)
 
-       for i := 0; i < num; i++ {
+       for i := range num {
                p := newTestPage()
                p.path = fmt.Sprintf("/x/y/p%d.md", i)
                p.title = fmt.Sprintf("Title %d", i%((num+1)/2))
index d3a770eaf3f6bf1dc49b75cfafd092813b7dde66..64ee9a998a9490bf983c35bb72eca0b355b62709 100644 (file)
@@ -28,7 +28,7 @@ func TestSplitPages(t *testing.T) {
        chunks := splitPages(pages, 5)
        c.Assert(len(chunks), qt.Equals, 5)
 
-       for i := 0; i < 4; i++ {
+       for i := range 4 {
                c.Assert(chunks[i].Len(), qt.Equals, 5)
        }
 
index 47e1454c82e157ec801073f6ee8bba11b726c29f..3c9e9e78c46dbb98ce147d40d868cadc330eef28 100644 (file)
@@ -105,7 +105,7 @@ type Site interface {
        Config() SiteConfig
 
        // Deprecated: Use taxonomies instead.
-       Author() map[string]interface{}
+       Author() map[string]any
 
        // Deprecated: Use taxonomies instead.
        Authors() AuthorList
@@ -173,7 +173,7 @@ func (s *siteWrapper) Social() map[string]string {
 }
 
 // Deprecated: Use taxonomies instead.
-func (s *siteWrapper) Author() map[string]interface{} {
+func (s *siteWrapper) Author() map[string]any {
        return s.s.Author()
 }
 
@@ -316,7 +316,7 @@ type testSite struct {
 }
 
 // Deprecated: Use taxonomies instead.
-func (s testSite) Author() map[string]interface{} {
+func (s testSite) Author() map[string]any {
        return nil
 }
 
index 59b8cf0e8e17a57e8e58177df6cebd385b0ea21b..19bdc0068a0c529d2ab25c0c24c4aefdd03eab7e 100644 (file)
@@ -587,7 +587,7 @@ func (p *testPage) WordCount(context.Context) int {
 func createTestPages(num int) Pages {
        pages := make(Pages, num)
 
-       for i := 0; i < num; i++ {
+       for i := range num {
                m := &testPage{
                        path:           fmt.Sprintf("/x/y/z/p%d.md", i),
                        weight:         5,
index 13b2963ceb090df383676fc664071cd546cf8e7a..12b3be2eb835f9f00e61f787632ae6b7cf1e1571 100644 (file)
@@ -31,7 +31,7 @@ func structToMap(s any) map[string]any {
        m := make(map[string]any)
        t := reflect.TypeOf(s)
 
-       for i := 0; i < t.NumMethod(); i++ {
+       for i := range t.NumMethod() {
                method := t.Method(i)
                if method.PkgPath != "" {
                        continue
@@ -41,7 +41,7 @@ func structToMap(s any) map[string]any {
                }
        }
 
-       for i := 0; i < t.NumField(); i++ {
+       for i := range t.NumField() {
                field := t.Field(i)
                if field.PkgPath != "" {
                        continue
index 480c703b5e270d6cad922953c6b7dfa8d6787ac7..6b7311badfcaec92d1ce0e1c9ca0f8ab84106ba8 100644 (file)
@@ -24,6 +24,7 @@ import (
        "github.com/gohugoio/hugo/common/paths"
        "github.com/gohugoio/hugo/hugofs/glob"
        "github.com/spf13/cast"
+       "slices"
 )
 
 var _ ResourceFinder = (*Resources)(nil)
@@ -222,7 +223,7 @@ type translatedResource interface {
 
 // MergeByLanguage adds missing translations in r1 from r2.
 func (r Resources) MergeByLanguage(r2 Resources) Resources {
-       result := append(Resources(nil), r...)
+       result := slices.Clone(r)
        m := make(map[string]bool)
        for _, rr := range r {
                if translated, ok := rr.(translatedResource); ok {
index 8b268ebbe1b0d0ddad9aab8f007a0dc013820982..aef644b7fb2946769b0fc1c2ea70dbf0df408a9f 100644 (file)
@@ -141,7 +141,7 @@ func (c *Client) Concat(targetPath string, r resource.Resources) (resource.Resou
                        if resolvedm.MainType == media.Builtin.JavascriptType.MainType && resolvedm.SubType == media.Builtin.JavascriptType.SubType {
                                readers := make([]hugio.ReadSeekCloser, 2*len(rcsources)-1)
                                j := 0
-                               for i := 0; i < len(rcsources); i++ {
+                               for i := range rcsources {
                                        if i > 0 {
                                                readers[j] = hugio.NewReadSeekerNoOpCloserFromString("\n;\n")
                                                j++
index 17a74cc88104f15d2ab07afaee0874272b6e660b..66f0c23403cbf223c910c5fb97ada36d820cffda 100644 (file)
@@ -31,7 +31,7 @@ func TestMultiReadSeekCloser(t *testing.T) {
                hugio.NewReadSeekerNoOpCloserFromString("C"),
        )
 
-       for i := 0; i < 3; i++ {
+       for range 3 {
                s1 := helpers.ReaderToString(rc)
                c.Assert(s1, qt.Equals, "ABC")
                _, err := rc.Seek(0, 0)
index faa2de56549c60ff69d6bfe2075b6e88507d54c7..0ed43721c9c5e990421d75783519e64c597a72bb 100644 (file)
@@ -136,7 +136,7 @@ mediaTypes = ['text/plain']
 {{ end }}
 `
 
-       for i := 0; i < numPages; i++ {
+       for i := range numPages {
                filesTemplate += fmt.Sprintf("-- content/post/p%d.md --\n", i)
        }
 
@@ -153,7 +153,7 @@ mediaTypes = ['text/plain']
 
                b.Build()
 
-               for i := 0; i < numPages; i++ {
+               for i := range numPages {
                        b.AssertFileContent(fmt.Sprintf("public/post/p%d/index.html", i), fmt.Sprintf("Content: Response for /post/p%d/.", i))
                }
        })
index 8861ded5c0f1d48447a6d7364528e0a0d693e9c6..2a4faa315e9d63352bb0cf1bff2b5c77e37390ce 100644 (file)
@@ -28,6 +28,7 @@ import (
 
        "github.com/gohugoio/hugo/common/maps"
        "github.com/gohugoio/hugo/common/paths"
+       maps0 "maps"
 )
 
 var (
@@ -85,11 +86,9 @@ func (r *metaResource) setName(name string) {
 
 func (r *metaResource) updateParams(params map[string]any) {
        if r.params == nil {
-               r.params = make(map[string]interface{})
-       }
-       for k, v := range params {
-               r.params[k] = v
+               r.params = make(map[string]any)
        }
+       maps0.Copy(r.params, params)
        r.changed = true
 }
 
index 8f2132789ad8f622dafbaf18535234043648e227..a05f340fd59e618d7e4677844a6aff04efe00e82 100644 (file)
@@ -239,7 +239,7 @@ func TestTransformPostCSSResourceCacheWithPathInBaseURL(t *testing.T) {
        c.Assert(err, qt.IsNil)
        c.Cleanup(clean)
 
-       for i := 0; i < 2; i++ {
+       for i := range 2 {
                files := postCSSIntegrationTestFiles
 
                if i == 1 {
index 0c45b775a06704683597696752b7e2eb1ca9711f..0d02b45d5ae1692bfea9115e964e50a555509095 100644 (file)
@@ -122,7 +122,7 @@ iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPhfDwAChwGA60e6kgAA
 
 `
 
-       for i := 0; i < 3; i++ {
+       for range 3 {
 
                b := hugolib.NewIntegrationTestBuilder(
                        hugolib.IntegrationTestConfig{
index 79d4841b1b2c106ffc53649354c83b26b47aa019..eac85ada94c3c1f7776d69b7d0dd1bbcefbd65b1 100644 (file)
@@ -207,7 +207,7 @@ func TestTransform(t *testing.T) {
 
                fs := afero.NewMemMapFs()
 
-               for i := 0; i < 2; i++ {
+               for i := range 2 {
                        spec := newTestResourceSpec(specDescriptor{c: c, fs: fs})
 
                        r := createTransformer(c, spec, "f1.txt", "color is blue")
@@ -337,12 +337,12 @@ func TestTransform(t *testing.T) {
                const count = 26 // A-Z
 
                transformations := make([]resources.ResourceTransformation, count)
-               for i := 0; i < count; i++ {
+               for i := range count {
                        transformations[i] = createContentReplacer(fmt.Sprintf("t%d", i), fmt.Sprint(i), string(rune(i+65)))
                }
 
                var countstr strings.Builder
-               for i := 0; i < count; i++ {
+               for i := range count {
                        countstr.WriteString(fmt.Sprint(i))
                }
 
@@ -405,18 +405,18 @@ func TestTransform(t *testing.T) {
                transformers := make([]resources.Transformer, 10)
                transformations := make([]resources.ResourceTransformation, 10)
 
-               for i := 0; i < 10; i++ {
+               for i := range 10 {
                        transformers[i] = createTransformer(c, spec, fmt.Sprintf("f%d.txt", i), fmt.Sprintf("color is %d", i))
                        transformations[i] = createContentReplacer("test", strconv.Itoa(i), "blue")
                }
 
                var wg sync.WaitGroup
 
-               for i := 0; i < 13; i++ {
+               for i := range 13 {
                        wg.Add(1)
                        go func(i int) {
                                defer wg.Done()
-                               for j := 0; j < 23; j++ {
+                               for j := range 23 {
                                        id := (i + j) % 10
                                        tr, err := transformers[id].Transform(transformations[id])
                                        c.Assert(err, qt.IsNil)
index 3d50395b955ec9c664aaf8f7eeb8707d33f4cf43..39b66a27f357819862ad991b3eb9109b60f56e60 100644 (file)
@@ -48,7 +48,7 @@ func (ns *Namespace) Apply(ctx context.Context, c any, fname string, args ...any
        switch seqv.Kind() {
        case reflect.Array, reflect.Slice:
                r := make([]any, seqv.Len())
-               for i := 0; i < seqv.Len(); i++ {
+               for i := range seqv.Len() {
                        vv := seqv.Index(i)
 
                        vvv, err := applyFnToThis(ctx, fnv, vv, args...)
@@ -91,7 +91,7 @@ func applyFnToThis(ctx context.Context, fn, this reflect.Value, args ...any) (re
                return reflect.ValueOf(nil), errors.New("Too many arguments")
        }*/
 
-       for i := 0; i < num; i++ {
+       for i := range num {
                // AssignableTo reports whether xt is assignable to type targ.
                if xt, targ := n[i].Type(), fn.Type().In(i); !xt.AssignableTo(targ) {
                        return reflect.ValueOf(nil), errors.New("called apply using " + xt.String() + " as type " + targ.String())
index c1e7286ceacbbbb3c31e1e5f31c66569ca40b52a..0653a453ab94607b802aa8b120bc08bb56dc918f 100644 (file)
@@ -125,7 +125,7 @@ func (ns *Namespace) Delimit(ctx context.Context, l, sep any, last ...any) (stri
                lv = reflect.ValueOf(sortSeq)
                fallthrough
        case reflect.Array, reflect.Slice, reflect.String:
-               for i := 0; i < lv.Len(); i++ {
+               for i := range lv.Len() {
                        val := lv.Index(i).Interface()
                        valStr, err := cast.ToStringE(val)
                        if err != nil {
@@ -165,7 +165,7 @@ func (ns *Namespace) Dictionary(values ...any) (map[string]any, error) {
                case string:
                        key = v
                case []string:
-                       for i := 0; i < len(v)-1; i++ {
+                       for i := range len(v) - 1 {
                                key = v[i]
                                var m map[string]any
                                v, found := dict[key]
@@ -235,7 +235,7 @@ func (ns *Namespace) In(l any, v any) (bool, error) {
 
        switch lv.Kind() {
        case reflect.Array, reflect.Slice:
-               for i := 0; i < lv.Len(); i++ {
+               for i := range lv.Len() {
                        lvv, isNil := indirectInterface(lv.Index(i))
                        if isNil {
                                continue
@@ -277,13 +277,13 @@ func (ns *Namespace) Intersect(l1, l2 any) (any, error) {
                ins = &intersector{r: reflect.MakeSlice(l1v.Type(), 0, 0), seen: make(map[any]bool)}
                switch l2v.Kind() {
                case reflect.Array, reflect.Slice:
-                       for i := 0; i < l1v.Len(); i++ {
+                       for i := range l1v.Len() {
                                l1vv := l1v.Index(i)
                                if !l1vv.Type().Comparable() {
                                        return make([]any, 0), errors.New("intersect does not support slices or arrays of uncomparable types")
                                }
 
-                               for j := 0; j < l2v.Len(); j++ {
+                               for j := range l2v.Len() {
                                        l2vv := l2v.Index(j)
                                        if !l2vv.Type().Comparable() {
                                                return make([]any, 0), errors.New("intersect does not support slices or arrays of uncomparable types")
@@ -590,7 +590,7 @@ func (ns *Namespace) Union(l1, l2 any) (any, error) {
                                isNil bool
                        )
 
-                       for i := 0; i < l1v.Len(); i++ {
+                       for i := range l1v.Len() {
                                l1vv, isNil = indirectInterface(l1v.Index(i))
 
                                if !l1vv.Type().Comparable() {
@@ -610,7 +610,7 @@ func (ns *Namespace) Union(l1, l2 any) (any, error) {
                                }
                        }
 
-                       for j := 0; j < l2v.Len(); j++ {
+                       for j := range l2v.Len() {
                                l2vv := l2v.Index(j)
 
                                switch kind := l1vv.Kind(); {
@@ -661,7 +661,7 @@ func (ns *Namespace) Uniq(l any) (any, error) {
 
        seen := make(map[any]bool)
 
-       for i := 0; i < v.Len(); i++ {
+       for i := range v.Len() {
                ev, _ := indirectInterface(v.Index(i))
 
                key := normalize(ev)
index 2aabee03e5c689c62f560d73cac2bfb1336b701a..cc60770f915980c1b019be2416b79a528bf68cf5 100644 (file)
@@ -52,7 +52,7 @@ Desc: {{ sort (sort $values "b" "desc") "a" "desc" }}
 
   `
 
-       for i := 0; i < 4; i++ {
+       for range 4 {
 
                b := hugolib.NewIntegrationTestBuilder(
                        hugolib.IntegrationTestConfig{
@@ -122,7 +122,7 @@ func TestAppendNilsToSliceWithNils(t *testing.T) {
 
   `
 
-       for i := 0; i < 4; i++ {
+       for range 4 {
 
                b := hugolib.NewIntegrationTestBuilder(
                        hugolib.IntegrationTestConfig{
index 2cd6bfc3f327eff098cc5cf323a8b00bce5d30b1..fe7f2144de35e5600a3d098afe02e7430400c73d 100644 (file)
@@ -856,7 +856,7 @@ func ToTstXIs(slice any) []TstXI {
        }
        tis := make([]TstXI, s.Len())
 
-       for i := 0; i < s.Len(); i++ {
+       for i := range s.Len() {
                tsti, ok := s.Index(i).Interface().(TstXI)
                if !ok {
                        return nil
index 0cc2b5857bbb8d083f6d9815ed50900fefde0120..606d77ddee42b7981cd8484501f3cd51c18e2f46 100644 (file)
@@ -44,7 +44,7 @@ func (ns *Namespace) Complement(ls ...any) (any, error) {
        switch v.Kind() {
        case reflect.Array, reflect.Slice:
                sl := reflect.MakeSlice(v.Type(), 0, 0)
-               for i := 0; i < v.Len(); i++ {
+               for i := range v.Len() {
                        ev, _ := indirectInterface(v.Index(i))
                        if _, found := aset[normalize(ev)]; !found {
                                sl = reflect.Append(sl, ev)
index df932f7c68d56389000e19b72e73f25760cd1b75..a319ea298fb5a8a25cffb44dcbd099447db9c1d2 100644 (file)
@@ -52,7 +52,7 @@ func (ns *Namespace) doIndex(item any, args ...any) (any, error) {
        if len(args) == 1 {
                v := reflect.ValueOf(args[0])
                if v.Kind() == reflect.Slice {
-                       for i := 0; i < v.Len(); i++ {
+                       for i := range v.Len() {
                                indices = append(indices, v.Index(i).Interface())
                        }
                } else {
index 6b986cbc4ce7749df562637d8be7ca089bccef4c..05816a009b152c24822913d7f42e9b643b03bcb6 100644 (file)
@@ -74,7 +74,7 @@ func collectIdentities(seqs ...any) (map[any]bool, error) {
                v := reflect.ValueOf(seq)
                switch v.Kind() {
                case reflect.Array, reflect.Slice:
-                       for i := 0; i < v.Len(); i++ {
+                       for i := range v.Len() {
                                ev, _ := indirectInterface(v.Index(i))
 
                                if !ev.Type().Comparable() {
index 20862a4514535c531b311cb2e99aa6307968946c..0c09f6af4644370037d93e8841bbe685e46bbbdf 100644 (file)
@@ -73,7 +73,7 @@ func (ns *Namespace) Sort(ctx context.Context, l any, args ...any) (any, error)
 
        switch seqv.Kind() {
        case reflect.Array, reflect.Slice:
-               for i := 0; i < seqv.Len(); i++ {
+               for i := range seqv.Len() {
                        p.Pairs[i].Value = seqv.Index(i)
                        if sortByField == "" || sortByField == "value" {
                                p.Pairs[i].Key = p.Pairs[i].Value
index 8ecee3c4a9727b94fe57a320c211b94eb896f02f..4b9dc6e428e62f5869cb30bbd9adcab224b876d1 100644 (file)
@@ -44,7 +44,7 @@ func (ns *Namespace) SymDiff(s2, s1 any) (any, error) {
                                slice = reflect.MakeSlice(sliceType, 0, 0)
                        }
 
-                       for i := 0; i < v.Len(); i++ {
+                       for i := range v.Len() {
                                ev, _ := indirectInterface(v.Index(i))
                                key := normalize(ev)
 
index a14a4863d37f57d423e4f05b5139d045d11b1410..b15cfe78142fbca2f11bb350c11b50838fc552ec 100644 (file)
@@ -148,7 +148,7 @@ func (ns *Namespace) checkCondition(v, mv reflect.Value, op string) (bool, error
                case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64:
                        iv := v.Int()
                        ivp = &iv
-                       for i := 0; i < mv.Len(); i++ {
+                       for i := range mv.Len() {
                                if anInt, err := toInt(mv.Index(i)); err == nil {
                                        ima = append(ima, anInt)
                                }
@@ -156,7 +156,7 @@ func (ns *Namespace) checkCondition(v, mv reflect.Value, op string) (bool, error
                case reflect.String:
                        sv := v.String()
                        svp = &sv
-                       for i := 0; i < mv.Len(); i++ {
+                       for i := range mv.Len() {
                                if aString, err := toString(mv.Index(i)); err == nil {
                                        sma = append(sma, aString)
                                }
@@ -164,7 +164,7 @@ func (ns *Namespace) checkCondition(v, mv reflect.Value, op string) (bool, error
                case reflect.Float64:
                        fv := v.Float()
                        fvp = &fv
-                       for i := 0; i < mv.Len(); i++ {
+                       for i := range mv.Len() {
                                if aFloat, err := toFloat(mv.Index(i)); err == nil {
                                        fma = append(fma, aFloat)
                                }
@@ -173,7 +173,7 @@ func (ns *Namespace) checkCondition(v, mv reflect.Value, op string) (bool, error
                        if hreflect.IsTime(v.Type()) {
                                iv := ns.toTimeUnix(v)
                                ivp = &iv
-                               for i := 0; i < mv.Len(); i++ {
+                               for i := range mv.Len() {
                                        ima = append(ima, ns.toTimeUnix(mv.Index(i)))
                                }
                        }
@@ -397,7 +397,7 @@ func parseWhereArgs(args ...any) (mv reflect.Value, op string, err error) {
 func (ns *Namespace) checkWhereArray(ctxv, seqv, kv, mv reflect.Value, path []string, op string) (any, error) {
        rv := reflect.MakeSlice(seqv.Type(), 0, 0)
 
-       for i := 0; i < seqv.Len(); i++ {
+       for i := range seqv.Len() {
                var vvv reflect.Value
                rvv := seqv.Index(i)
 
index c66a5d6089bcddd6bdb315c3aa68edaee86a9e9a..60f97e607a8b8b91c81d8e3363ca4acdb9c4a97a 100644 (file)
@@ -865,10 +865,10 @@ func BenchmarkWhereOps(b *testing.B) {
        ns := newNs()
        var seq []map[string]string
        ctx := context.Background()
-       for i := 0; i < 500; i++ {
+       for range 500 {
                seq = append(seq, map[string]string{"foo": "bar"})
        }
-       for i := 0; i < 500; i++ {
+       for range 500 {
                seq = append(seq, map[string]string{"foo": "baz"})
        }
        // Shuffle the sequence.
@@ -907,7 +907,7 @@ func BenchmarkWhereMap(b *testing.B) {
        ns := newNs()
        seq := map[string]string{}
 
-       for i := 0; i < 1000; i++ {
+       for i := range 1000 {
                seq[fmt.Sprintf("key%d", i)] = "value"
        }
 
index 097cfe4a80db341229712abdc7712c55aadae9ba..ca17968262de5e85e0f9da6e7cbfb51050612b4a 100644 (file)
@@ -36,6 +36,7 @@ import (
        "github.com/spf13/cast"
 
        "github.com/gohugoio/hugo/deps"
+       "slices"
 )
 
 // New returns a new instance of the data-namespaced template functions.
@@ -170,12 +171,7 @@ func hasHeaderValue(m http.Header, key, value string) bool {
                return false
        }
 
-       for _, v := range s {
-               if v == value {
-                       return true
-               }
-       }
-       return false
+       return slices.Contains(s, value)
 }
 
 func hasHeaderKey(m http.Header, key string) bool {
index b8003bf430727a5b550cb8f0531e58646e456a54..d49e74d4c1da90c72d3297b870a5c60ab4d262a3 100644 (file)
@@ -155,11 +155,11 @@ func TestScpGetRemoteParallel(t *testing.T) {
 
                var wg sync.WaitGroup
 
-               for i := 0; i < 1; i++ {
+               for i := range 1 {
                        wg.Add(1)
                        go func(gor int) {
                                defer wg.Done()
-                               for j := 0; j < 10; j++ {
+                               for range 10 {
                                        var cb []byte
                                        f := func(b []byte) (bool, error) {
                                                cb = b
index 1b74bf443a158db57250d70838a9b5a03060f742..425938b073c2b0d99d39180799ce149366ded1da 100644 (file)
@@ -213,7 +213,7 @@ func (t *TemplateFuncsNamespace) toJSON(ctx context.Context) ([]byte, error) {
                return nil, nil
        }
        ctxType := reflect.TypeOf(tctx)
-       for i := 0; i < ctxType.NumMethod(); i++ {
+       for i := range ctxType.NumMethod() {
                method := ctxType.Method(i)
                if ignoreFuncs[method.Name] {
                        continue
index 15c0db22cc1a519d2672efc206119f7a0396ee4d..5a5e42f4eae151a84eb71b6ccb1bac7917dbffe2 100644 (file)
@@ -314,7 +314,7 @@ func (ns *Namespace) toFloatsE(v any) ([]float64, bool, error) {
        switch vv.Kind() {
        case reflect.Slice, reflect.Array:
                var floats []float64
-               for i := 0; i < vv.Len(); i++ {
+               for i := range vv.Len() {
                        f, err := cast.ToFloat64E(vv.Index(i).Interface())
                        if err != nil {
                                return nil, true, err
index 826aa45d396f263155ea6e3a15920845bd637862..10655263028c8a48868509d82c3fa09b595dda8d 100644 (file)
@@ -31,7 +31,7 @@ func init() {
        f := func(d *deps.Deps) *internal.TemplateFuncsNamespace {
                ns := &internal.TemplateFuncsNamespace{
                        Name: name,
-                       Context: func(ctx context.Context, args ...interface{}) (interface{}, error) {
+                       Context: func(ctx context.Context, args ...any) (any, error) {
                                v := tpl.Context.Page.Get(ctx)
                                if v == nil {
                                        // The multilingual sitemap does not have a page as its context.
index 77be91cee84b8049c83bfd828e10844e7dd3efd5..27b8fbf8c574cf4e17d4f999ded745a278546d91 100644 (file)
@@ -87,7 +87,7 @@ func TestDeferRepeatedBuildsEditOutside(t *testing.T) {
 
        b := hugolib.TestRunning(t, deferFilesCommon)
 
-       for i := 0; i < 5; i++ {
+       for i := range 5 {
                old := fmt.Sprintf("EDIT_COUNTER_OUTSIDE_%d", i)
                new := fmt.Sprintf("EDIT_COUNTER_OUTSIDE_%d", i+1)
                b.EditFileReplaceAll("layouts/index.html", old, new).Build()
@@ -100,7 +100,7 @@ func TestDeferRepeatedBuildsEditDefer(t *testing.T) {
 
        b := hugolib.TestRunning(t, deferFilesCommon)
 
-       for i := 0; i < 8; i++ {
+       for i := range 8 {
                old := fmt.Sprintf("EDIT_COUNTER_DEFER_%d", i)
                new := fmt.Sprintf("EDIT_COUNTER_DEFER_%d", i+1)
                b.EditFileReplaceAll("layouts/index.html", old, new).Build()
index 0ea7117a3acc6e02743445a42ea57dab80435134..3b643162a9358e696f3151cf0816d78ce353b222 100644 (file)
@@ -431,7 +431,7 @@ func (t *templateHandler) LookupVariants(name string) []tpl.Template {
        }
 
        variants := make([]tpl.Template, len(s.variants))
-       for i := 0; i < len(variants); i++ {
+       for i := range variants {
                variants[i] = s.variants[i].ts
        }
 
@@ -599,7 +599,7 @@ func (t *templateHandler) addFileContext(templ tpl.Template, inerr error) error
 func (t *templateHandler) extractIdentifiers(line string) []string {
        m := identifiersRe.FindAllStringSubmatch(line, -1)
        identifiers := make([]string, len(m))
-       for i := 0; i < len(m); i++ {
+       for i := range m {
                identifiers[i] = m[i][1]
        }
        return identifiers
index f95335779f8c729650ce5a97a010ee787ea8862c..4deadd05279e5a00088540cf3549ab298bb308fb 100644 (file)
@@ -27,6 +27,7 @@ import (
        "github.com/gohugoio/hugo/common/maps"
        "github.com/gohugoio/hugo/tpl"
        "github.com/mitchellh/mapstructure"
+       "slices"
 )
 
 type templateType int
@@ -187,7 +188,7 @@ func (c *templateContext) applyTransformations(n parse.Node) (bool, error) {
                for i, cmd := range x.Cmds {
                        keep, _ := c.applyTransformations(cmd)
                        if !keep {
-                               x.Cmds = append(x.Cmds[:i], x.Cmds[i+1:]...)
+                               x.Cmds = slices.Delete(x.Cmds, i, i+1)
                        }
                }
 
@@ -271,12 +272,7 @@ func (c *templateContext) applyTransformationsToNodes(nodes ...parse.Node) {
 }
 
 func (c *templateContext) hasIdent(idents []string, ident string) bool {
-       for _, id := range idents {
-               if id == ident {
-                       return true
-               }
-       }
-       return false
+       return slices.Contains(idents, ident)
 }
 
 // collectConfig collects and parses any leading template config variable declaration.
index d73d4d33677f322667d212aa23820548c9bd38a5..b181db061d76dfaaeea7af719cf42a609be81542 100644 (file)
@@ -64,6 +64,7 @@ import (
        _ "github.com/gohugoio/hugo/tpl/time"
        _ "github.com/gohugoio/hugo/tpl/transform"
        _ "github.com/gohugoio/hugo/tpl/urls"
+       maps0 "maps"
 )
 
 var (
@@ -290,9 +291,7 @@ func createFuncMap(d *deps.Deps) map[string]any {
        }
 
        if d.OverloadedTemplateFuncs != nil {
-               for k, v := range d.OverloadedTemplateFuncs {
-                       funcMap[k] = v
-               }
+               maps0.Copy(funcMap, d.OverloadedTemplateFuncs)
        }
 
        d.TmplFuncMap = funcMap
index d65f05fd42e0b557a0dc82ba5cdd062a0d4db12c..9b34e1daa8ee7b3c90c081a5581fef5f775f5039 100644 (file)
@@ -192,7 +192,7 @@ func BenchmarkUnmarshalString(b *testing.B) {
        const numJsons = 100
 
        var jsons [numJsons]string
-       for i := 0; i < numJsons; i++ {
+       for i := range numJsons {
                jsons[i] = strings.Replace(testJSON, "ROOT_KEY", fmt.Sprintf("root%d", i), 1)
        }
 
@@ -220,7 +220,7 @@ func BenchmarkUnmarshalResource(b *testing.B) {
        const numJsons = 100
 
        var jsons [numJsons]testContentResource
-       for i := 0; i < numJsons; i++ {
+       for i := range numJsons {
                key := fmt.Sprintf("root%d", i)
                jsons[i] = testContentResource{key: key, content: strings.Replace(testJSON, "ROOT_KEY", key, 1), mime: media.Builtin.JSONType}
        }
index e88e3895b7cd0eda456edaf6493c2fd301694809..425d268b34afeda9553769873b8f2e84675cc060 100644 (file)
@@ -56,7 +56,7 @@ func New(baseURL *url.URL) transform.Transformer {
                src += "&port=" + baseURL.Port()
                src += "&path=" + strings.TrimPrefix(path+"/livereload", "/")
 
-               script := []byte(fmt.Sprintf(`<script src="%s" data-no-instant defer></script>`, html.EscapeString(src)))
+               script := fmt.Appendf(nil, `<script src="%s" data-no-instant defer></script>`, html.EscapeString(src))
 
                c := make([]byte, len(b)+len(script))
                copy(c, b[:idx])
index 43a477354b0271147c5384b0416178a34f86366d..b3dda9b154eeb30cc2429fb8fc07ad766c3cce1f 100644 (file)
@@ -39,12 +39,12 @@ func HugoGenerator(ft transform.FromTo) error {
        }
 
        head := "<head>"
-       replace := []byte(fmt.Sprintf("%s\n\t%s", head, hugoGeneratorTag))
+       replace := fmt.Appendf(nil, "%s\n\t%s", head, hugoGeneratorTag)
        newcontent := bytes.Replace(b, []byte(head), replace, 1)
 
        if len(newcontent) == len(b) {
                head := "<HEAD>"
-               replace := []byte(fmt.Sprintf("%s\n\t%s", head, hugoGeneratorTag))
+               replace := fmt.Appendf(nil, "%s\n\t%s", head, hugoGeneratorTag)
                newcontent = bytes.Replace(b, []byte(head), replace, 1)
        }
 
index 9b52b97806a84f1fe94675017c22b235f055f6ea..77feb459d1c940006fea2ba0dab5662e4e01b2af 100644 (file)
@@ -220,11 +220,11 @@ func prepareTestDirWithSomeFiles(c *qt.C, id string) string {
        c.Assert(os.MkdirAll(filepath.Join(dir, subdir1), 0o777), qt.IsNil)
        c.Assert(os.MkdirAll(filepath.Join(dir, subdir2), 0o777), qt.IsNil)
 
-       for i := 0; i < 3; i++ {
+       for i := range 3 {
                c.Assert(os.WriteFile(filepath.Join(dir, subdir1, fmt.Sprintf("file%d", i)), []byte("hello1"), 0o600), qt.IsNil)
        }
 
-       for i := 0; i < 3; i++ {
+       for i := range 3 {
                c.Assert(os.WriteFile(filepath.Join(dir, subdir2, fmt.Sprintf("file%d", i)), []byte("hello2"), 0o600), qt.IsNil)
        }