From 2ccf76831beb423cc16934e51b84530143ec3f4f Mon Sep 17 00:00:00 2001 From: Jonathan Amsterdam Date: Thu, 22 Apr 2021 09:25:42 -0400 Subject: [PATCH] internal/godoc/dochmtl: remove unused Render things - 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 Run-TryBot: Jonathan Amsterdam TryBot-Result: kokoro Reviewed-by: Jamal Carvalho --- content/static/html/doc/unit.tmpl | 11 ----- internal/godoc/dochtml/dochtml.go | 38 +++-------------- internal/godoc/dochtml/dochtml_test.go | 58 ++------------------------ internal/godoc/dochtml/template.go | 20 ++++----- internal/godoc/render.go | 2 +- 5 files changed, 20 insertions(+), 109 deletions(-) delete mode 100644 content/static/html/doc/unit.tmpl diff --git a/content/static/html/doc/unit.tmpl b/content/static/html/doc/unit.tmpl deleted file mode 100644 index 43ed94297..000000000 --- a/content/static/html/doc/unit.tmpl +++ /dev/null @@ -1,11 +0,0 @@ - - -{{if or .Doc .Consts .Vars .Funcs .Types}} - {{template "outline.tmpl" .}} - {{template "sidenav-mobile.tmpl" .}} -{{end}} -{{template "body.tmpl" .}} diff --git a/internal/godoc/dochtml/dochtml.go b/internal/godoc/dochtml/dochtml.go index d29f10942..6da7bbe64 100644 --- a/internal/godoc/dochtml/dochtml.go +++ b/internal/godoc/dochtml/dochtml.go @@ -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 @@ -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 { @@ -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(), diff --git a/internal/godoc/dochtml/dochtml_test.go b/internal/godoc/dochtml/dochtml_test.go index e2a74d137..e20bb83fb 100644 --- a/internal/godoc/dochtml/dochtml_test.go +++ b/internal/godoc/dochtml/dochtml_test.go @@ -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 "" }, @@ -160,7 +108,7 @@ 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" }, }) @@ -168,7 +116,7 @@ func TestExampleRender(t *testing.T) { 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) } diff --git a/internal/godoc/dochtml/template.go b/internal/godoc/dochtml/template.go index 99e54ccb0..3df5bedfa 100644 --- a/internal/godoc/dochtml/template.go +++ b/internal/godoc/dochtml/template.go @@ -18,7 +18,7 @@ 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. @@ -26,18 +26,18 @@ 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")))) }) } diff --git a/internal/godoc/render.go b/internal/godoc/render.go index dc8c5c51c..a96532292 100644 --- a/internal/godoc/render.go +++ b/internal/godoc/render.go @@ -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 }