Skip to content

Commit e1383bf

Browse files
committed
Really fix empty line rendering
Fixes: #19331 Followup to #19798. Trim off both the .line and .cl classes from Chroma's HTML which made the old conditional work again. This fixed Copy of YAML files for me while also reducing the amount of rendered HTML nodes.
1 parent 460c03c commit e1383bf

File tree

2 files changed

+40
-30
lines changed

2 files changed

+40
-30
lines changed

modules/highlight/highlight.go

+12-5
Original file line numberDiff line numberDiff line change
@@ -196,18 +196,25 @@ func File(numLines int, fileName, language string, code []byte) []string {
196196
}
197197

198198
m := make([]string, 0, numLines)
199-
for _, v := range strings.SplitN(htmlbuf.String(), "\n", numLines) {
199+
for i, v := range strings.SplitN(htmlbuf.String(), "\n", numLines) {
200200
content := string(v)
201+
202+
// remove useless wrapper nodes that are always present
203+
content = strings.Replace(content, "<span class=\"line\"><span class=\"cl\">", "", 1)
204+
content = strings.TrimPrefix(content, `</span></span>`)
205+
206+
// if there's no final newline, closing tags will be on last line
207+
if (!finalNewLine && i == numLines - 1) {
208+
content = strings.TrimSuffix(content, `</span></span>`)
209+
}
210+
201211
// need to keep lines that are only \n so copy/paste works properly in browser
202212
if content == "" {
203213
content = "\n"
204214
} else if content == `</span><span class="w">` {
205-
content += "\n</span>"
206-
} else if content == `</span></span><span class="line"><span class="cl">` {
207215
content += "\n"
208216
}
209-
content = strings.TrimSuffix(content, `<span class="w">`)
210-
content = strings.TrimPrefix(content, `</span>`)
217+
211218
m = append(m, content)
212219
}
213220
if finalNewLine {

modules/highlight/highlight_test.go

+28-25
Original file line numberDiff line numberDiff line change
@@ -43,18 +43,19 @@ func TestFile(t *testing.T) {
4343
- go test -v -race -coverprofile=coverage.txt -covermode=atomic
4444
`),
4545
want: util.Dedent(`
46-
<span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">pipeline</span>
47-
</span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">default</span>
48-
</span></span><span class="line"><span class="cl">
49-
</span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">steps</span><span class="p">:</span>
50-
</span></span><span class="line"><span class="cl"><span class="w"></span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">test</span>
51-
</span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">golang:1.13</span>
52-
</span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">environment</span><span class="p">:</span>
53-
</span></span><span class="line"><span class="cl"><span class="w"></span><span class="w"> </span><span class="nt">GOPROXY</span><span class="p">:</span><span class="w"> </span><span class="l">https://goproxy.cn</span>
54-
</span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">commands</span><span class="p">:</span>
55-
</span></span><span class="line"><span class="cl"><span class="w"></span><span class="w"> </span>- <span class="l">go get -u</span>
56-
</span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">go build -v</span>
57-
</span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">go test -v -race -coverprofile=coverage.txt -covermode=atomic</span></span></span>
46+
<span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">pipeline</span><span class="w">
47+
</span><span class="w"></span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">default</span><span class="w">
48+
</span><span class="w">
49+
50+
</span><span class="w"></span><span class="nt">steps</span><span class="p">:</span><span class="w">
51+
</span><span class="w"></span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">test</span><span class="w">
52+
</span><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">golang:1.13</span><span class="w">
53+
</span><span class="w"> </span><span class="nt">environment</span><span class="p">:</span><span class="w">
54+
</span><span class="w"></span><span class="w"> </span><span class="nt">GOPROXY</span><span class="p">:</span><span class="w"> </span><span class="l">https://goproxy.cn</span><span class="w">
55+
</span><span class="w"> </span><span class="nt">commands</span><span class="p">:</span><span class="w">
56+
</span><span class="w"></span><span class="w"> </span>- <span class="l">go get -u</span><span class="w">
57+
</span><span class="w"> </span>- <span class="l">go build -v</span><span class="w">
58+
</span><span class="w"> </span>- <span class="l">go test -v -race -coverprofile=coverage.txt -covermode=atomic</span>
5859
`),
5960
},
6061
{
@@ -76,19 +77,20 @@ func TestFile(t *testing.T) {
7677
- go test -v -race -coverprofile=coverage.txt -covermode=atomic
7778
`)+"\n", "name: default", "name: default ", 1),
7879
want: util.Dedent(`
79-
<span class="line"><span class="cl"><span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">pipeline</span>
80-
</span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">default </span>
81-
</span></span><span class="line"><span class="cl">
82-
</span></span><span class="line"><span class="cl"><span class="w"></span><span class="nt">steps</span><span class="p">:</span>
83-
</span></span><span class="line"><span class="cl"><span class="w"></span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">test</span>
84-
</span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">golang:1.13</span>
85-
</span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">environment</span><span class="p">:</span>
86-
</span></span><span class="line"><span class="cl"><span class="w"></span><span class="w"> </span><span class="nt">GOPROXY</span><span class="p">:</span><span class="w"> </span><span class="l">https://goproxy.cn</span>
87-
</span></span><span class="line"><span class="cl"><span class="w"> </span><span class="nt">commands</span><span class="p">:</span>
88-
</span></span><span class="line"><span class="cl"><span class="w"></span><span class="w"> </span>- <span class="l">go get -u</span>
89-
</span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">go build -v</span>
90-
</span></span><span class="line"><span class="cl"><span class="w"> </span>- <span class="l">go test -v -race -coverprofile=coverage.txt -covermode=atomic</span>
91-
</span></span>
80+
<span class="nt">kind</span><span class="p">:</span><span class="w"> </span><span class="l">pipeline</span><span class="w">
81+
</span><span class="w"></span><span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">default </span><span class="w">
82+
</span><span class="w">
83+
84+
</span><span class="w"></span><span class="nt">steps</span><span class="p">:</span><span class="w">
85+
</span><span class="w"></span>- <span class="nt">name</span><span class="p">:</span><span class="w"> </span><span class="l">test</span><span class="w">
86+
</span><span class="w"> </span><span class="nt">image</span><span class="p">:</span><span class="w"> </span><span class="l">golang:1.13</span><span class="w">
87+
</span><span class="w"> </span><span class="nt">environment</span><span class="p">:</span><span class="w">
88+
</span><span class="w"></span><span class="w"> </span><span class="nt">GOPROXY</span><span class="p">:</span><span class="w"> </span><span class="l">https://goproxy.cn</span><span class="w">
89+
</span><span class="w"> </span><span class="nt">commands</span><span class="p">:</span><span class="w">
90+
</span><span class="w"></span><span class="w"> </span>- <span class="l">go get -u</span><span class="w">
91+
</span><span class="w"> </span>- <span class="l">go build -v</span><span class="w">
92+
</span><span class="w"> </span>- <span class="l">go test -v -race -coverprofile=coverage.txt -covermode=atomic</span><span class="w">
93+
</span>
9294
<span class="w">
9395
</span>
9496
`),
@@ -99,6 +101,7 @@ func TestFile(t *testing.T) {
99101
t.Run(tt.name, func(t *testing.T) {
100102
got := strings.Join(File(tt.numLines, tt.fileName, "", []byte(tt.code)), "\n")
101103
assert.Equal(t, tt.want, got)
104+
assert.Equal(t, strings.Count(got, "<span"), strings.Count(got, "</span>"))
102105
})
103106
}
104107
}

0 commit comments

Comments
 (0)