Skip to content

Commit

Permalink
internal/godoc/dochmtl: remove unused Render things
Browse files Browse the repository at this point in the history
- Remove old Render method
- Remove unit.tmpl
- Re-organize template loading
- Rename RenderParts to Render

For golang/go#40850

Change-Id: Ie27a54b3553ef100b39d472f52b400f8d8d8392e
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/312649
Trust: Jonathan Amsterdam <jba@google.com>
Run-TryBot: Jonathan Amsterdam <jba@google.com>
TryBot-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Jamal Carvalho <jamal@golang.org>
  • Loading branch information
jba committed Apr 22, 2021
1 parent 802d4e6 commit 2ccf768
Show file tree
Hide file tree
Showing 5 changed files with 20 additions and 109 deletions.
11 changes: 0 additions & 11 deletions content/static/html/doc/unit.tmpl

This file was deleted.

38 changes: 6 additions & 32 deletions internal/godoc/dochtml/dochtml.go
Original file line number Diff line number Diff line change
Expand Up @@ -70,27 +70,6 @@ type templateData struct {
NoteHeaders map[string]noteHeader
}

// Render renders package documentation HTML for the
// provided file set and package.
//
// If the rendered documentation HTML size exceeds the specified limit,
// an error with ErrTooLarge in its chain will be returned.
func Render(ctx context.Context, fset *token.FileSet, p *doc.Package, opt RenderOptions) (_ safehtml.HTML, err error) {
defer derrors.Wrap(&err, "dochtml.Render")
if opt.Limit == 0 {
const megabyte = 1000 * 1000
opt.Limit = 10 * megabyte
}

funcs, data, _ := renderInfo(ctx, fset, p, opt)
p = data.Package
if docIsEmpty(p) {
return safehtml.HTML{}, nil
}
tmpl := template.Must(unitTemplate.Clone()).Funcs(funcs)
return executeToHTMLWithLimit(tmpl, data, opt.Limit)
}

// Parts contains HTML for each part of the documentation.
type Parts struct {
Body safehtml.HTML // main body of doc
Expand All @@ -104,7 +83,7 @@ type Parts struct {
//
// If any of the rendered documentation part HTML sizes exceeds the specified limit,
// an error with ErrTooLarge in its chain will be returned.
func RenderParts(ctx context.Context, fset *token.FileSet, p *doc.Package, opt RenderOptions) (_ *Parts, err error) {
func Render(ctx context.Context, fset *token.FileSet, p *doc.Package, opt RenderOptions) (_ *Parts, err error) {
defer derrors.Wrap(&err, "dochtml.RenderParts")

if opt.Limit == 0 {
Expand All @@ -117,26 +96,21 @@ func RenderParts(ctx context.Context, fset *token.FileSet, p *doc.Package, opt R
if docIsEmpty(p) {
return &Parts{}, nil
}
tmpl := template.Must(unitTemplate.Clone()).Funcs(funcs)

exec := func(name string) safehtml.HTML {
exec := func(tmpl *template.Template) safehtml.HTML {
if err != nil {
return safehtml.HTML{}
}
t := tmpl.Lookup(name)
if t == nil {
err = fmt.Errorf("missing %s", name)
return safehtml.HTML{}
}
t := template.Must(tmpl.Clone()).Funcs(funcs)
var html safehtml.HTML
html, err = executeToHTMLWithLimit(t, data, opt.Limit)
return html
}

parts := &Parts{
Body: exec("body.tmpl"),
Outline: exec("outline.tmpl"),
MobileOutline: exec("sidenav-mobile.tmpl"),
Body: exec(bodyTemplate),
Outline: exec(outlineTemplate),
MobileOutline: exec(sidenavTemplate),
// links must be called after body, because the call to
// render_doc_extract_links in body.tmpl creates the links.
Links: links(),
Expand Down
58 changes: 3 additions & 55 deletions internal/godoc/dochtml/dochtml_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,64 +34,12 @@ var (
hasExactText = htmlcheck.HasExactText
)

func TestRender(t *testing.T) {
LoadTemplates(templateSource)
fset, d := mustLoadPackage("everydecl")

rawDoc, err := Render(context.Background(), fset, d, RenderOptions{
FileLinkFunc: func(string) string { return "file" },
SourceLinkFunc: func(ast.Node) string { return "src" },
SinceVersionFunc: func(string) string { return "" },
})
if err != nil {
t.Fatal(err)
}

htmlDoc, err := html.Parse(strings.NewReader(rawDoc.String()))
if err != nil {
t.Fatal(err)
}
// Check that there are no duplicate id attributes.
t.Run("duplicate ids", func(t *testing.T) {
testDuplicateIDs(t, htmlDoc)
})
t.Run("ids-and-kinds", func(t *testing.T) {
// Check that the id and data-kind labels are right.
testIDsAndKinds(t, htmlDoc)
})

checker := in(".Documentation-note",
in("h3", hasAttr("id", "pkg-note-BUG"), hasExactText("Bugs ¶")),
in("a", hasHref("#pkg-note-BUG")))
if err := checker(htmlDoc); err != nil {
t.Errorf("note check: %v", err)
}

checker = in(".Documentation-index",
in(".Documentation-indexNote", in("a", hasHref("#pkg-note-BUG"), hasExactText("Bugs"))))
if err := checker(htmlDoc); err != nil {
t.Errorf("note check: %v", err)
}

checker = in(".DocNav-notes",
in("#nav-group-notes", in("li", in("a", hasHref("#pkg-note-BUG"), hasText("Bugs")))))
if err := checker(htmlDoc); err != nil {
t.Errorf("note check: %v", err)
}

checker = in("",
in("optgroup[label=Notes]", in("option", hasAttr("value", "pkg-note-BUG"), hasExactText("Bugs"))))
if err := checker(htmlDoc); err != nil {
t.Errorf("note check: %v", err)
}
}

func TestRenderParts(t *testing.T) {
LoadTemplates(templateSource)
fset, d := mustLoadPackage("everydecl")

ctx := context.Background()
parts, err := RenderParts(ctx, fset, d, RenderOptions{
parts, err := Render(ctx, fset, d, RenderOptions{
FileLinkFunc: func(string) string { return "file" },
SourceLinkFunc: func(ast.Node) string { return "src" },
SinceVersionFunc: func(string) string { return "" },
Expand Down Expand Up @@ -160,15 +108,15 @@ func TestExampleRender(t *testing.T) {
ctx := context.Background()
fset, d := mustLoadPackage("example_test")

rawDoc, err := Render(ctx, fset, d, RenderOptions{
parts, err := Render(ctx, fset, d, RenderOptions{
FileLinkFunc: func(string) string { return "file" },
SourceLinkFunc: func(ast.Node) string { return "src" },
})
if err != nil {
t.Fatal(err)
}

htmlDoc, err := html.Parse(strings.NewReader(rawDoc.String()))
htmlDoc, err := html.Parse(strings.NewReader(parts.Body.String()))
if err != nil {
t.Fatal(err)
}
Expand Down
20 changes: 10 additions & 10 deletions internal/godoc/dochtml/template.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,26 +18,26 @@ var (

// TODO(golang.org/issue/5060): finalize URL scheme and design for notes,
// then it becomes more viable to factor out inline CSS style.
unitTemplate *template.Template
bodyTemplate, outlineTemplate, sidenavTemplate *template.Template
)

// LoadTemplates reads and parses the templates used to generate documentation.
func LoadTemplates(dir template.TrustedSource) {
loadOnce.Do(func() {
join := template.TrustedSourceJoin
tc := template.TrustedSourceFromConstant

example := join(dir, tc("example.tmpl"))
declaration := join(dir, tc("declaration.tmpl"))
unitTemplate = template.Must(template.New("unit.tmpl").
bodyTemplate = template.Must(template.New("body.tmpl").
Funcs(tmpl).
ParseFilesFromTrustedSources(
join(dir, tc("unit.tmpl")),
join(dir, tc("outline.tmpl")),
join(dir, tc("sidenav-mobile.tmpl")),
join(dir, tc("body.tmpl")),
example,
declaration))
join(dir, tc("declaration.tmpl")),
join(dir, tc("example.tmpl"))))
outlineTemplate = template.Must(template.New("outline.tmpl").
Funcs(tmpl).
ParseFilesFromTrustedSources(join(dir, tc("outline.tmpl"))))
sidenavTemplate = template.Must(template.New("sidenav-mobile.tmpl").
Funcs(tmpl).
ParseFilesFromTrustedSources(join(dir, tc("sidenav-mobile.tmpl"))))
})
}

Expand Down
2 changes: 1 addition & 1 deletion internal/godoc/render.go
Original file line number Diff line number Diff line change
Expand Up @@ -193,7 +193,7 @@ func (p *Package) Render(ctx context.Context, innerPath string,
nameToVersion = map[string]string{}
}
opts := p.renderOptions(innerPath, sourceInfo, modInfo, nameToVersion)
parts, err := dochtml.RenderParts(ctx, p.Fset, d, opts)
parts, err := dochtml.Render(ctx, p.Fset, d, opts)
if errors.Is(err, ErrTooLarge) {
return &dochtml.Parts{Body: template.MustParseAndExecuteToHTML(DocTooLargeReplacement)}, nil
}
Expand Down

0 comments on commit 2ccf768

Please sign in to comment.