InstallDocFormatter: Hyperlink Phabricator task numbers
authorKevin Israel <pleasestand@live.com>
Fri, 21 Nov 2014 07:49:18 +0000 (02:49 -0500)
committerKevin Israel <pleasestand@live.com>
Fri, 21 Nov 2014 08:05:44 +0000 (03:05 -0500)
Also removed the callback functions for the existing regexes. Nothing
has to be or is encoded or escaped at this time, so preg_replace()
can be used instead of preg_replace_callback().

Change-Id: I8cdddd602dcf7b67b8f2b06149b6a0859c70342c

includes/installer/InstallDocFormatter.php
tests/phpunit/includes/installer/InstallDocFormatterTest.php

index 3250ff8..0d52e64 100644 (file)
@@ -44,25 +44,31 @@ class InstallDocFormatter {
                // Replace tab indents with colons
                $text = preg_replace( '/^\t\t/m', '::', $text );
                $text = preg_replace( '/^\t/m', ':', $text );
+
+               $linkStart = '<span class="config-plainlink">[';
+               $linkEnd = ' $0]</span>';
+
+               // turn (Tnnnn) into links
+               $text = preg_replace(
+                       '/T\d+/',
+                       "{$linkStart}https://phabricator.wikimedia.org/$0{$linkEnd}",
+                       $text
+               );
+
                // turn (bug nnnn) into links
-               $text = preg_replace_callback( '/bug (\d+)/', array( $this, 'replaceBugLinks' ), $text );
+               $text = preg_replace(
+                       '/bug (\d+)/',
+                       "{$linkStart}https://bugzilla.wikimedia.org/$1{$linkEnd}",
+                       $text
+               );
+
                // add links to manual to every global variable mentioned
-               $text = preg_replace_callback(
-                       '/(\$wg[a-z0-9_]+)/i',
-                       array( $this, 'replaceConfigLinks' ),
+               $text = preg_replace(
+                       '/\$wg[a-z0-9_]+/i',
+                       "{$linkStart}https://www.mediawiki.org/wiki/Manual:$0{$linkEnd}",
                        $text
                );
 
                return $text;
        }
-
-       protected function replaceBugLinks( $matches ) {
-               return '<span class="config-plainlink">[https://bugzilla.wikimedia.org/' .
-                       $matches[1] . ' bug ' . $matches[1] . ']</span>';
-       }
-
-       protected function replaceConfigLinks( $matches ) {
-               return '<span class="config-plainlink">[https://www.mediawiki.org/wiki/Manual:' .
-                       $matches[1] . ' ' . $matches[1] . ']</span>';
-       }
 }
index 064d518..724f0c8 100644 (file)
@@ -34,6 +34,21 @@ class InstallDocFormatterTest extends MediaWikiTestCase {
                        array( ':One indentation', "\tOne indentation", 'Replacing a single \t' ),
                        array( '::Two indentations', "\t\tTwo indentations", 'Replacing 2 x \t' ),
 
+                       # Transform 'T123' links
+                       array(
+                               '<span class="config-plainlink">[https://phabricator.wikimedia.org/T123 T123]</span>',
+                               'T123', 'Testing T123 links' ),
+                       array(
+                               'bug <span class="config-plainlink">[https://phabricator.wikimedia.org/T123 T123]</span>',
+                               'bug T123', 'Testing bug T123 links' ),
+                       array(
+                               '(<span class="config-plainlink">[https://phabricator.wikimedia.org/T987654 T987654]</span>)',
+                               '(T987654)', 'Testing (T987654) links' ),
+
+                       # "Tabc" shouldn't work
+                       array( 'Tfoobar', 'Tfoobar', "Don't match T followed by non-digits" ),
+                       array( 'T!!fakefake!!', 'T!!fakefake!!', "Don't match T followed by non-digits" ),
+
                        # Transform 'bug 123' links
                        array(
                                '<span class="config-plainlink">[https://bugzilla.wikimedia.org/123 bug 123]</span>',