From 0171dda7288b73995f929c7627f7292ae81090f2 Mon Sep 17 00:00:00 2001 From: mrsdizzie Date: Sat, 8 Aug 2020 06:17:02 -0400 Subject: [PATCH] Improved diff syntax highlighting fix (#12455) Make previous fix from #12238 more robust since I saw a case where a diff changes only a single character in a chroma class instead of the entire thing. Add another more complicated test to match. Co-authored-by: Lauris BH --- services/gitdiff/gitdiff.go | 47 ++++++++++++++++++-------------- services/gitdiff/gitdiff_test.go | 10 +++++++ 2 files changed, 37 insertions(+), 20 deletions(-) diff --git a/services/gitdiff/gitdiff.go b/services/gitdiff/gitdiff.go index 85354784d4..fca210bb10 100644 --- a/services/gitdiff/gitdiff.go +++ b/services/gitdiff/gitdiff.go @@ -16,6 +16,7 @@ import ( "net/url" "os" "os/exec" + "regexp" "sort" "strconv" "strings" @@ -180,55 +181,61 @@ var ( removedCodePrefix = []byte(``) codeTagSuffix = []byte(``) ) +var addSpanRegex = regexp.MustCompile(` 0 { + diffs[i].Text = addSpan + diffs[i].Text + addSpan = "" } - if strings.HasSuffix(diffs[i].Text, " 0 { + diffs[i].Text = addSpan + diffs[i].Text + addSpan = "" } // Print existing closing span first before opening added-code span so it doesn't unintentionally close it if strings.HasPrefix(diffs[i].Text, "") { buf.WriteString("") diffs[i].Text = strings.TrimPrefix(diffs[i].Text, "") } - if strings.HasSuffix(diffs[i].Text, " 0 { + diffs[i].Text = addSpan + diffs[i].Text + addSpan = "" } if strings.HasPrefix(diffs[i].Text, "") { buf.WriteString("") diffs[i].Text = strings.TrimPrefix(diffs[i].Text, "") } - if strings.HasSuffix(diffs[i].Text, " || r.GuessLanguage)"}, {Type: dmp.DiffEqual, Text: " {"}, }, DiffLineAdd)) + + assertEqual(t, "tagURL := fmt.Sprintf("## [%s](%s/%s/%s/%s?q=&type=all&state=closed&milestone=%d) - %s", ge.Milestone\", ge.BaseURL, ge.Owner, ge.Repo, from, milestoneID, time.Now().Format("2006-01-02"))", diffToHTML("", []dmp.Diff{ + {Type: dmp.DiffEqual, Text: "tagURL := fmt.Sprintf("## [%s](%s/%s/%s/%s?q=&type=all&state=closed&milestone=%d) - %s", ge.Milestone\""}, + {Type: dmp.DiffInsert, Text: "f\">getGiteaTagURL(client"}, + {Type: dmp.DiffEqual, Text: ", ge.BaseURL, ge.Owner, ge.Repo, "}, + {Type: dmp.DiffDelete, Text: "from, milestoneID, time.Now().Format("2006-01-02")"}, + {Type: dmp.DiffInsert, Text: "ge.Milestone, from, milestoneID"}, + {Type: dmp.DiffEqual, Text: ")"}, + }, DiffLineDel)) } func TestParsePatch(t *testing.T) {