Simplify project regex further

Summary: Fixes T16028

Test Plan:
Assert that `#js-draw-lib` (or any other project name with one or two characters followed by a non-word) links correctly. It was previously parsed as `#js -draw-lib`.

Repeat the test plan for D25838 and observe it still works

Reviewers: aklapper, O1 Blessed Committers, bekay, valerio.bozzolan

Reviewed By: O1 Blessed Committers, bekay, valerio.bozzolan

Subscribers: mainframe98, bekay, tobiaswiese, valerio.bozzolan, Matthew, Cigaryno

Maniphest Tasks: T16028

Differential Revision: https://we.phorge.it/D25959
This commit is contained in:
Pppery 2025-04-11 11:23:57 -04:00
parent 7aee92b5e9
commit 4bd591e441
2 changed files with 16 additions and 6 deletions

View file

@ -40,12 +40,7 @@ final class ProjectRemarkupRule extends PhabricatorObjectRemarkupRule {
$never_edge = '.';
return '(?:'.
// Short project name with one or two characters not in $never_edge or
'[^'.$never_edge.$never.']{1,2}|'.
// A single character not in $never or $never_edge,
// then any number of characters not in $never then a single character
// not in $never or $never_edge
'[^'.$never_edge.$never.'][^'.$never.']+[^'.$never_edge.$never.']'.
'[^'.$never_edge.$never.'](?:[^'.$never.']*[^'.$never_edge.$never.'])?'.
')';
}

View file

@ -135,6 +135,21 @@ final class ProjectRemarkupRuleTestCase extends PhabricatorTestCase {
),
),
// This test case failed in an old version of the regex
'#js-draw' => array(
'embed' => array(),
'ref' => array(
array(
'offset' => 1,
'id' => 'js-draw',
),
),
),
// Don't match leading dots for consistency with trailing ones
'#.js' => array(
'embed' => array(),
'ref' => array(),
),
);
foreach ($cases as $input => $expect) {