diff --git a/ui/src/components/MarkdownBody.test.tsx b/ui/src/components/MarkdownBody.test.tsx index 6350f660eaa..08362b7f3f0 100644 --- a/ui/src/components/MarkdownBody.test.tsx +++ b/ui/src/components/MarkdownBody.test.tsx @@ -188,10 +188,11 @@ describe("MarkdownBody", () => { }); it("does not auto-link non-issue internal route paths", () => { - const html = renderMarkdown("Use /issues/new for the creation form and /api/issues for data."); + const html = renderMarkdown("Use /issues/new for the creation form, /issues/PAP-42extra as text, and /api/issues for data."); - expect(html).toContain("Use /issues/new for the creation form and /api/issues for data."); + expect(html).toContain("Use /issues/new for the creation form, /issues/PAP-42extra as text, and /api/issues for data."); expect(html).not.toContain('href="/issues/new"'); + expect(html).not.toContain('href="/issues/PAP-42"'); expect(html).not.toContain('data-mention-kind="issue"'); }); diff --git a/ui/src/lib/issue-reference.ts b/ui/src/lib/issue-reference.ts index 2566c1e8fdd..cbef86ffd8c 100644 --- a/ui/src/lib/issue-reference.ts +++ b/ui/src/lib/issue-reference.ts @@ -7,7 +7,7 @@ type MarkdownNode = { const BARE_ISSUE_IDENTIFIER_RE = /^[A-Z][A-Z0-9]+-\d+$/i; const ISSUE_SCHEME_RE = /^issue:\/\/:?([^?#\s]+)(?:[?#].*)?$/i; -const ISSUE_REFERENCE_TOKEN_RE = /issue:\/\/:?[^\s<>()]+|https?:\/\/[^\s<>()]+|\/(?:[^\s<>()/]+\/)*issues\/[A-Z][A-Z0-9]+-\d+\b|\b[A-Z][A-Z0-9]+-\d+\b/gi; +const ISSUE_REFERENCE_TOKEN_RE = /issue:\/\/:?[^\s<>()]+|https?:\/\/[^\s<>()]+|\/(?:[^\s<>()/]+\/)*issues\/[A-Z][A-Z0-9]+-\d+(?=$|[\s<>)\],.;!?:])|\b[A-Z][A-Z0-9]+-\d+\b/gi; export function parseIssuePathIdFromPath(pathOrUrl: string | null | undefined): string | null { if (!pathOrUrl) return null;