content,internal/godoc/dochtml/internal/render: move pre tag to tmpl

The $out.decl <pre> tag is now generated in the declaration.tmpl,
instead of as a string concatentation in formatDeclHTML.

This will make it easier to style this element in a future CL.

For golang/go#40939
For golang/go#42486

Change-Id: I2f5c0a339020deac002ed32a12ccf68f691cba8f
Reviewed-on: https://go-review.googlesource.com/c/pkgsite/+/277633
Trust: Julie Qiu <julie@golang.org>
Run-TryBot: Julie Qiu <julie@golang.org>
TryBot-Result: kokoro <noreply+kokoro@google.com>
Reviewed-by: Jamal Carvalho <jamal@golang.org>
diff --git a/content/static/html/doc/declaration.tmpl b/content/static/html/doc/declaration.tmpl
index b24d017..00bed16 100644
--- a/content/static/html/doc/declaration.tmpl
+++ b/content/static/html/doc/declaration.tmpl
@@ -6,7 +6,9 @@
 
 {{- define "declaration" -}}
   {{- $out := render_decl .Doc .Decl -}}
-  {{- $out.Decl -}}
+  {{if $out.Decl}}
+    <pre>{{- $out.Decl -}}</pre>
+  {{end}}
   {{- $out.Doc -}}
   {{"\n"}}
 {{- end -}}
diff --git a/internal/godoc/dochtml/internal/render/linkify.go b/internal/godoc/dochtml/internal/render/linkify.go
index a6f189b..3e36fac 100644
--- a/internal/godoc/dochtml/internal/render/linkify.go
+++ b/internal/godoc/dochtml/internal/render/linkify.go
@@ -115,10 +115,7 @@
 		out.Doc = ExecuteToHTML(r.docTmpl, docData{Elements: els, DisablePermalinks: r.disablePermalinks})
 	}
 	if decl != nil {
-		out.Decl = safehtml.HTMLConcat(
-			template.MustParseAndExecuteToHTML("<pre>\n"),
-			r.formatDeclHTML(decl, idr),
-			template.MustParseAndExecuteToHTML("</pre>\n"))
+		out.Decl = r.formatDeclHTML(decl, idr)
 	}
 	return out
 }
diff --git a/internal/godoc/dochtml/internal/render/linkify_test.go b/internal/godoc/dochtml/internal/render/linkify_test.go
index 3313132..64ce6a1 100644
--- a/internal/godoc/dochtml/internal/render/linkify_test.go
+++ b/internal/godoc/dochtml/internal/render/linkify_test.go
@@ -184,8 +184,7 @@
 		{
 			name:   "const",
 			symbol: "Nanosecond",
-			want: `<pre>
-const (
+			want: `const (
 <span id="Nanosecond" data-kind="constant"></span>	Nanosecond  <a href="#Duration">Duration</a> = 1
 <span id="Microsecond" data-kind="constant"></span>	Microsecond          = 1000 * <a href="#Nanosecond">Nanosecond</a>
 <span id="Millisecond" data-kind="constant"></span>	Millisecond          = 1000 * <a href="#Microsecond">Microsecond</a> <span class="comment">// comment</span>
@@ -194,39 +193,30 @@
 	comment */</span>
 <span id="Minute" data-kind="constant"></span>	Minute = 60 * <a href="#Second">Second</a>
 <span id="Hour" data-kind="constant"></span>	Hour   = 60 * <a href="#Minute">Minute</a>
-)</pre>
-`,
+)`,
 		},
 		{
 			name:   "var",
 			symbol: "UTC",
-			want: `<pre>
-<span id="UTC" data-kind="variable"></span>var UTC *<a href="#Location">Location</a> = &amp;utcLoc</pre>
-`,
+			want:   `<span id="UTC" data-kind="variable"></span>var UTC *<a href="#Location">Location</a> = &amp;utcLoc`,
 		},
 		{
 			name:   "type",
 			symbol: "Ticker",
-			want: `<pre>
-type Ticker struct {
+			want: `type Ticker struct {
 <span id="Ticker.C" data-kind="field"></span>	C &lt;-chan <a href="#Time">Time</a> <span class="comment">// The channel on which the ticks are delivered.</span>
 	<span class="comment">// contains filtered or unexported fields</span>
-}</pre>
-`,
+}`,
 		},
 		{
 			name:   "func",
 			symbol: "Sleep",
-			want: `<pre>
-func Sleep(d <a href="#Duration">Duration</a>)</pre>
-`,
+			want:   `func Sleep(d <a href="#Duration">Duration</a>)`,
 		},
 		{
 			name:   "method",
 			symbol: "After",
-			want: `<pre>
-func After(d <a href="#Duration">Duration</a>) &lt;-chan <a href="#Time">Time</a></pre>
-`,
+			want:   `func After(d <a href="#Duration">Duration</a>) &lt;-chan <a href="#Time">Time</a>`,
 		},
 	} {
 		t.Run(test.name, func(t *testing.T) {