Skip to content

Commit 44b5818

Browse files
authored
Make behavior of PHP and GitHub references consistent (#191)
1 parent 720b52b commit 44b5818

File tree

8 files changed

+29
-18
lines changed

8 files changed

+29
-18
lines changed

src/Reference/MethodReference.php

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -30,20 +30,19 @@ public function getName(): string
3030

3131
public function resolve(Environment $environment, string $data): ResolvedReference
3232
{
33-
$className = explode('::', $data)[0];
34-
$className = str_replace('\\\\', '\\', $className);
35-
36-
if (!u($data)->containsAny('::')) {
33+
$data = u($data);
34+
if (!$data->containsAny('::')) {
3735
throw new \RuntimeException(sprintf('Malformed method reference "%s" in file "%s"', $data, $environment->getCurrentFileName()));
3836
}
3937

40-
$methodName = explode('::', $data)[1];
38+
[$className, $methodName] = $data->split('::', 2);
39+
$className = $className->replace('\\\\', '\\');
4140

4241
$scrollTextFragment = sprintf('#:~:text=%s', rawurlencode('function '.$methodName));
4342
return new ResolvedReference(
4443
$environment->getCurrentFileName(),
4544
$methodName.'()',
46-
sprintf('%s/%s.php%s', $this->symfonyRepositoryUrl, str_replace('\\', '/', $className), $scrollTextFragment),
45+
sprintf('%s/%s.php%s', $this->symfonyRepositoryUrl, $className->replace('\\', '/'), $scrollTextFragment),
4746
[],
4847
[
4948
'title' => sprintf('%s::%s()', $className, $methodName),

src/Reference/PhpClassReference.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use Doctrine\RST\Environment;
1313
use Doctrine\RST\References\Reference;
1414
use Doctrine\RST\References\ResolvedReference;
15+
use function Symfony\Component\String\u;
1516

1617
class PhpClassReference extends Reference
1718
{
@@ -29,14 +30,15 @@ public function getName(): string
2930

3031
public function resolve(Environment $environment, string $data): ResolvedReference
3132
{
32-
$classnamePath = str_replace('\\', '-', strtolower($data));
33+
$className = u($data)->replace('\\\\', '\\');
34+
3335
return new ResolvedReference(
3436
$environment->getCurrentFileName(),
35-
$data,
36-
sprintf('%s/class.%s.php', $this->phpDocUrl, $classnamePath),
37+
$className->afterLast('\\'),
38+
sprintf('%s/class.%s.php', $this->phpDocUrl, $className->replace('\\', '-')->lower()),
3739
[],
3840
[
39-
'title' => $data,
41+
'title' => $className,
4042
]
4143
);
4244
}

src/Reference/PhpMethodReference.php

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
use Doctrine\RST\Environment;
1313
use Doctrine\RST\References\Reference;
1414
use Doctrine\RST\References\ResolvedReference;
15+
use function Symfony\Component\String\u;
1516

1617
class PhpMethodReference extends Reference
1718
{
@@ -29,15 +30,21 @@ public function getName(): string
2930

3031
public function resolve(Environment $environment, string $data): ResolvedReference
3132
{
32-
[$class, $method] = explode('::', $data, 2);
33+
$data = u($data);
34+
if (!$data->containsAny('::')) {
35+
throw new \RuntimeException(sprintf('Malformed method reference "%s" in file "%s"', $data, $environment->getCurrentFileName()));
36+
}
37+
38+
[$className, $methodName] = $data->split('::', 2);
39+
$className = $className->replace('\\\\', '\\');
3340

3441
return new ResolvedReference(
3542
$environment->getCurrentFileName(),
36-
$data.'()',
37-
sprintf('%s/%s.%s.php', $this->phpDocUrl, strtolower($class), strtolower($method)),
43+
$methodName.'()',
44+
sprintf('%s/%s.%s.php', $this->phpDocUrl, $className->replace('\\', '-')->lower(), $methodName->lower()),
3845
[],
3946
[
40-
'title' => $class,
47+
'title' => sprintf('%s::%s()', $className, $methodName),
4148
]
4249
);
4350
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
<p><a href="https://secure.php.net/manual/en/class.arrayaccess.php" class="reference external" title="ArrayAccess" rel="external noopener noreferrer" target="_blank">ArrayAccess</a></p>
2-
<p><a href="https://secure.php.net/manual/en/class.bcmath-number.php" class="reference external" title="BcMath\Number" rel="external noopener noreferrer" target="_blank">BcMath\Number</a></p>
2+
<p><a href="https://secure.php.net/manual/en/class.bcmath-number.php" class="reference external" title="BcMath\Number" rel="external noopener noreferrer" target="_blank">Number</a></p>
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1-
<p><a href="https://secure.php.net/manual/en/locale.getdefault.php" class="reference external" title="Locale" rel="external noopener noreferrer" target="_blank">Locale::getDefault()</a></p>
1+
<p><a href="https://secure.php.net/manual/en/locale.getdefault.php" class="reference external" title="Locale::getDefault()" rel="external noopener noreferrer" target="_blank">getDefault()</a></p>
2+
<p><a href="https://secure.php.net/manual/en/bcmath-number.add.php" class="reference external" title="BcMath\Number::add()" rel="external noopener noreferrer" target="_blank">add()</a></p>

tests/fixtures/expected/main/datetime.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ <h3 id="the-date-format-option">
7979
methods: <a href="https://github.com/symfony/symfony/blob/4.0/src/Symfony/Component/BrowserKit/Client.php#:~:text=function%20doRequest" class="reference external" title="Symfony\Component\BrowserKit\Client::doRequest()" rel="external noopener noreferrer" target="_blank">doRequest()</a>.
8080
Or a namespace: <a href="https://github.com/symfony/symfony/blob/4.0/src/Symfony/Component/Validator/Constraints" class="reference external" title="Symfony\Component\Validator\Constraints" rel="external noopener noreferrer" target="_blank">Constraints</a>.
8181
Or a PHP function: <a href="https://secure.php.net/manual/en/function.parse-ini-file.php" class="reference external" title="parse_ini_file" rel="external noopener noreferrer" target="_blank">parse_ini_file</a>.
82-
Or a PHP method! <a href="https://secure.php.net/manual/en/locale.getdefault.php" class="reference external" title="Locale" rel="external noopener noreferrer" target="_blank">Locale::getDefault()</a>.</p>
82+
Or a PHP method! <a href="https://secure.php.net/manual/en/locale.getdefault.php" class="reference external" title="Locale::getDefault()" rel="external noopener noreferrer" target="_blank">getDefault()</a>.</p>
8383
</div>
8484
</div>
8585
<div class="section">
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11

22
:phpclass:`ArrayAccess`
33

4-
:phpclass:`BcMath\Number`
4+
:phpclass:`BcMath\\Number`
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
11

22
:phpmethod:`Locale::getDefault`
3+
4+
:phpmethod:`BcMath\\Number::add`

0 commit comments

Comments
 (0)