// This is currently only triggered with the Related content feature
// and the "fragments" type of index.
HeadingsFiltered(context.Context) tableofcontents.Headings
-
- DeprecatedWarningPageMethods
}
// Positioner provides next/prev navigation.
// TranslationsProvider provides access to any translations.
type TranslationsProvider interface {
-
// IsTranslated returns whether this content file is translated to
// other language(s).
IsTranslated() bool
// TreeProvider provides section tree navigation.
type TreeProvider interface {
-
// IsAncestor returns whether the current page is an ancestor of other.
// Note that this method is not relevant for taxonomy lists and taxonomy terms pages.
IsAncestor(other any) (bool, error)
Page() Page
}
-// DeprecatedWarningPageMethods lists deprecated Page methods that will trigger
-// a WARNING if invoked.
-// This was added in Hugo 0.55.
-type DeprecatedWarningPageMethods any // This was emptied in Hugo 0.93.0.
-
-// Move here to trigger ERROR instead of WARNING.
-// TODO(bep) create wrappers and put into the Page once it has some methods.
-type DeprecatedErrorPageMethods any
-
// PageWithContext is a Page with a context.Context.
type PageWithContext struct {
Page
import (
"bytes"
+ "errors"
"fmt"
"os"
"path/filepath"
"reflect"
- "errors"
-
"github.com/gohugoio/hugo/common/maps"
"github.com/gohugoio/hugo/codegen"
`
var (
- pageInterfaceDeprecated = reflect.TypeOf((*page.DeprecatedWarningPageMethods)(nil)).Elem()
- pageInterface = reflect.TypeOf((*page.Page)(nil)).Elem()
+ pageInterface = reflect.TypeOf((*page.Page)(nil)).Elem()
packageDir = filepath.FromSlash("resources/page")
)
return fmt.Errorf("failed to generate JSON marshaler: %w", err)
}
- if err := generateDeprecatedWrappers(c); err != nil {
- return fmt.Errorf("failed to generate deprecate wrappers: %w", err)
- }
-
if err := generateFileIsZeroWrappers(c); err != nil {
return fmt.Errorf("failed to generate file wrappers: %w", err)
}
// Exclude these methods
excludes := []reflect.Type{
- // We need to evaluate the deprecated vs JSON in the future,
- // but leave them out for now.
- pageInterfaceDeprecated,
-
// Leave this out for now. We need to revisit the author issue.
reflect.TypeOf((*page.AuthorProvider)(nil)).Elem(),
return nil
}
-func generateDeprecatedWrappers(c *codegen.Inspector) error {
- filename := filepath.Join(c.ProjectRootDir, packageDir, "page_wrappers.autogen.go")
- f, err := os.Create(filename)
- if err != nil {
- return err
- }
- defer f.Close()
-
- // Generate a wrapper for deprecated page methods
-
- reasons := map[string]string{
- "IsDraft": "Use .Draft.",
- "Hugo": "Use the global hugo function.",
- "LanguagePrefix": "Use .Site.LanguagePrefix.",
- "GetParam": "Use .Param or .Params.myParam.",
- "RSSLink": `Use the Output Format's link, e.g. something like:
- {{ with .OutputFormats.Get "RSS" }}{{ .RelPermalink }}{{ end }}`,
- "URL": "Use .Permalink or .RelPermalink. If what you want is the front matter URL value, use .Params.url",
- }
-
- deprecated := func(name string, tp reflect.Type) string {
- alternative, found := reasons[name]
- if !found {
- panic(fmt.Sprintf("no deprecated reason found for %q", name))
- }
-
- return fmt.Sprintf("helpers.Deprecated(%q, %q, true)", "Page."+name, alternative)
- }
-
- var buff bytes.Buffer
-
- methods := c.MethodsFromTypes([]reflect.Type{pageInterfaceDeprecated}, nil)
-
- for _, m := range methods {
- fmt.Fprint(&buff, m.Declaration("*pageDeprecated"))
- fmt.Fprintln(&buff, " {")
- fmt.Fprintf(&buff, "\t%s\n", deprecated(m.Name, m.Owner))
- fmt.Fprintf(&buff, "\t%s\n}\n", m.Delegate("p", "p"))
-
- }
-
- pkgImports := methods.Imports()
- // pkgImports := append(methods.Imports(), "github.com/gohugoio/hugo/helpers")
-
- fmt.Fprintf(f, `%s
-
-package page
-
-%s
-// NewDeprecatedWarningPage adds deprecation warnings to the given implementation.
-func NewDeprecatedWarningPage(p DeprecatedWarningPageMethods) DeprecatedWarningPageMethods {
- return &pageDeprecated{p: p}
-}
-
-type pageDeprecated struct {
- p DeprecatedWarningPageMethods
-}
-
-%s
-
-`, header, importsString(pkgImports), buff.String())
-
- return nil
-}
-
func generateFileIsZeroWrappers(c *codegen.Inspector) error {
filename := filepath.Join(c.ProjectRootDir, packageDir, "zero_file.autogen.go")
f, err := os.Create(filename)