feat: highlight issue references with : (#8101)

* feat: highlight issue references with :

e.g. #1287: my commit msg
e.g. ABC-1234: my commit msg

* ref: update model regex to consistent with issueNumericPattern

* test: check highlight issue with : in commits messages
This commit is contained in:
Rinat 2019-09-06 03:39:54 +03:00 committed by techknowlogick
parent 79c8bc0e51
commit b660a732ae
4 changed files with 11 additions and 3 deletions

View file

@ -65,7 +65,7 @@ var (
) )
const issueRefRegexpStr = `(?:([0-9a-zA-Z-_\.]+)/([0-9a-zA-Z-_\.]+))?(#[0-9]+)+` const issueRefRegexpStr = `(?:([0-9a-zA-Z-_\.]+)/([0-9a-zA-Z-_\.]+))?(#[0-9]+)+`
const issueRefRegexpStrNoKeyword = `(?:\s|^|\(|\[)(?:([0-9a-zA-Z-_\.]+)/([0-9a-zA-Z-_\.]+))?(#[0-9]+)(?:\s|$|\)|\]|\.(\s|$))` const issueRefRegexpStrNoKeyword = `(?:\s|^|\(|\[)(?:([0-9a-zA-Z-_\.]+)/([0-9a-zA-Z-_\.]+))?(#[0-9]+)(?:\s|$|\)|\]|:|\.(\s|$))`
func assembleKeywordsPattern(words []string) string { func assembleKeywordsPattern(words []string) string {
return fmt.Sprintf(`(?i)(?:%s)(?::?) %s`, strings.Join(words, "|"), issueRefRegexpStr) return fmt.Sprintf(`(?i)(?:%s)(?::?) %s`, strings.Join(words, "|"), issueRefRegexpStr)

View file

@ -186,6 +186,7 @@ func TestRegExp_issueReferenceKeywordsPat(t *testing.T) {
"#2", "#2",
"[#2]", "[#2]",
"please see go-gitea/gitea#5", "please see go-gitea/gitea#5",
"#2:",
} }
falseTestCases := []string{ falseTestCases := []string{
"kb#2", "kb#2",

View file

@ -40,9 +40,9 @@ var (
mentionPattern = regexp.MustCompile(`(?:\s|^|\(|\[)(@[0-9a-zA-Z-_\.]+)(?:\s|$|\)|\])`) mentionPattern = regexp.MustCompile(`(?:\s|^|\(|\[)(@[0-9a-zA-Z-_\.]+)(?:\s|$|\)|\])`)
// issueNumericPattern matches string that references to a numeric issue, e.g. #1287 // issueNumericPattern matches string that references to a numeric issue, e.g. #1287
issueNumericPattern = regexp.MustCompile(`(?:\s|^|\(|\[)(#[0-9]+)(?:\s|$|\)|\]|\.(\s|$))`) issueNumericPattern = regexp.MustCompile(`(?:\s|^|\(|\[)(#[0-9]+)(?:\s|$|\)|\]|:|\.(\s|$))`)
// issueAlphanumericPattern matches string that references to an alphanumeric issue, e.g. ABC-1234 // issueAlphanumericPattern matches string that references to an alphanumeric issue, e.g. ABC-1234
issueAlphanumericPattern = regexp.MustCompile(`(?:\s|^|\(|\[)([A-Z]{1,10}-[1-9][0-9]*)(?:\s|$|\)|\]|\.(\s|$))`) issueAlphanumericPattern = regexp.MustCompile(`(?:\s|^|\(|\[)([A-Z]{1,10}-[1-9][0-9]*)(?:\s|$|\)|\]|:|\.(\s|$))`)
// crossReferenceIssueNumericPattern matches string that references a numeric issue in a different repository // crossReferenceIssueNumericPattern matches string that references a numeric issue in a different repository
// e.g. gogits/gogs#12345 // e.g. gogits/gogs#12345
crossReferenceIssueNumericPattern = regexp.MustCompile(`(?:\s|^|\(|\[)([0-9a-zA-Z-_\.]+/[0-9a-zA-Z-_\.]+#[0-9]+)(?:\s|$|\)|\]|\.(\s|$))`) crossReferenceIssueNumericPattern = regexp.MustCompile(`(?:\s|^|\(|\[)([0-9a-zA-Z-_\.]+/[0-9a-zA-Z-_\.]+#[0-9]+)(?:\s|$|\)|\]|\.(\s|$))`)

View file

@ -118,6 +118,10 @@ func TestRender_IssueIndexPattern2(t *testing.T) {
test("wow (#54321 #1243)", "wow (%s %s)", 54321, 1243) test("wow (#54321 #1243)", "wow (%s %s)", 54321, 1243)
test("(#4)(#5)", "(%s)(%s)", 4, 5) test("(#4)(#5)", "(%s)(%s)", 4, 5)
test("#1 (#4321) test", "%s (%s) test", 1, 4321) test("#1 (#4321) test", "%s (%s) test", 1, 4321)
// should render with :
test("#1234: test", "%s: test", 1234)
test("wow (#54321: test)", "wow (%s: test)", 54321)
} }
func TestRender_IssueIndexPattern3(t *testing.T) { func TestRender_IssueIndexPattern3(t *testing.T) {
@ -237,6 +241,8 @@ func TestRegExp_issueNumericPattern(t *testing.T) {
"#0", "#0",
"#1234567890987654321", "#1234567890987654321",
" #12", " #12",
"#12:",
"ref: #12: msg",
} }
falseTestCases := []string{ falseTestCases := []string{
"# 1234", "# 1234",
@ -354,6 +360,7 @@ func TestRegExp_issueAlphanumericPattern(t *testing.T) {
"ABC-123.", "ABC-123.",
"(ABC-123)", "(ABC-123)",
"[ABC-123]", "[ABC-123]",
"ABC-123:",
} }
falseTestCases := []string{ falseTestCases := []string{
"RC-08", "RC-08",