Skip to content

Commit 949ada2

Browse files
authored
Fix #312: Fix MarkdownHighlightTrait::highlight() behavior for PHP 8.3
1 parent 761851a commit 949ada2

10 files changed

+101
-73
lines changed

.github/workflows/build.yml

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,7 @@ jobs:
1313
fail-fast: false
1414
matrix:
1515
os: [ubuntu-latest]
16-
php: ['7.4', '8.0', '8.1', '8.2']
17-
16+
php: ['7.4', '8.0', '8.1', '8.2', '8.3', '8.4', '8.5']
1817
steps:
1918
- name: Checkout
2019
uses: actions/checkout@v5
@@ -33,15 +32,9 @@ jobs:
3332
restore-keys: ${{ runner.os }}-composer-
3433
- name: Install dependencies
3534
run: composer update $DEFAULT_COMPOSER_FLAGS
36-
- name: Run unit tests with coverage
37-
run: vendor/bin/phpunit --verbose --coverage-clover=coverage.clover --colors=always
38-
if: matrix.php == '7.1'
39-
- name: Run unit tests without coverage
40-
run: vendor/bin/phpunit --verbose --colors=always
41-
if: matrix.php != '7.1'
42-
- name: Upload code coverage
43-
run: |
44-
wget https://scrutinizer-ci.com/ocular.phar
45-
php ocular.phar code-coverage:upload --format=php-clover coverage.clover
46-
if: matrix.php == '7.1'
47-
continue-on-error: true # if is fork
35+
- name: Run unit tests PHP 7.x.
36+
run: vendor/bin/phpunit -c phpunit-7x.xml.dist
37+
if: matrix.php == '7.4'
38+
- name: Run unit tests PHP 8.x.
39+
run: vendor/bin/phpunit
40+
if: matrix.php != '7.4'

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ Yii Framework 2 apidoc extension Change Log
77
- Bug #313: Fix deprecation error `Method deprecated, use ::getParameters()` (mspirkov)
88
- Bug #317: Fix `trim` deprecation errors `Passing null to parameter #1 ($string) of type string is deprecated` (mspirkov)
99
- Bug #318: Fix deprecation errors `mb_convert_encoding(): Handling HTML entities via mbstring is deprecated` (mspirkov)
10+
- Bug #312: Fix `MarkdownHighlightTrait::highlight()` behavior for PHP 8.3 (mspirkov)
1011
- Enh #319, #328: Determining types by type hints for properties, methods and params (mspirkov)
1112
- Enh #320: Expand the list of built-in PHP types (mspirkov)
1213
- Bug #311: Support `nikic/php-parser` v5 (mspirkov)

composer.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,8 +32,8 @@
3232
"scrivo/highlight.php": "^9.0"
3333
},
3434
"require-dev": {
35-
"phpunit/phpunit": "^9.6",
36-
"spatie/phpunit-snapshot-assertions": "^4.2"
35+
"phpunit/phpunit": "^9.6 || ^10.0",
36+
"spatie/phpunit-snapshot-assertions": "^4.2 || ^5.0"
3737
},
3838
"repositories": [
3939
{

helpers/MarkdownHighlightTrait.php

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,8 +78,14 @@ public static function highlight($code, $language)
7878
$text = substr($text, 0, $pos) . substr($text, $pos + 6);
7979
}
8080
}
81-
// remove <code><span style="color: #000000">\n and </span>tags added by php
82-
$text = substr(trim($text), 36, -16);
81+
82+
// Remove prefixes and suffixes added by php
83+
if (PHP_VERSION_ID >= 80300) {
84+
// The `highlight_string` result format has changed since PHP8.3
85+
$text = substr($text, 34, -13);
86+
} else {
87+
$text = substr($text, 36, -16);
88+
}
8389

8490
return $text;
8591
}

phpunit-7x.xml.dist

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<phpunit
3+
bootstrap="./tests/bootstrap.php"
4+
colors="true"
5+
verbose="true"
6+
stopOnFailure="false"
7+
failOnRisky="true"
8+
failOnWarning="true"
9+
convertErrorsToExceptions="true"
10+
convertNoticesToExceptions="true"
11+
convertWarningsToExceptions="true"
12+
>
13+
<testsuites>
14+
<testsuite name="Test Suite">
15+
<directory>./tests</directory>
16+
</testsuite>
17+
</testsuites>
18+
</phpunit>

phpunit.xml.dist

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
11
<?xml version="1.0" encoding="utf-8"?>
2-
<phpunit bootstrap="./tests/bootstrap.php"
3-
colors="true"
4-
verbose="true"
5-
convertErrorsToExceptions="true"
6-
convertNoticesToExceptions="true"
7-
convertWarningsToExceptions="true"
8-
stopOnFailure="false">
9-
<testsuites>
10-
<testsuite name="Test Suite">
11-
<directory>./tests</directory>
12-
</testsuite>
13-
</testsuites>
2+
<phpunit
3+
bootstrap="./tests/bootstrap.php"
4+
colors="true"
5+
stopOnFailure="false"
6+
failOnRisky="true"
7+
failOnWarning="true"
8+
displayDetailsOnPhpunitDeprecations="true"
9+
displayDetailsOnTestsThatTriggerWarnings="true"
10+
displayDetailsOnTestsThatTriggerNotices="true"
11+
displayDetailsOnTestsThatTriggerDeprecations="true"
12+
>
13+
<testsuites>
14+
<testsuite name="Test Suite">
15+
<directory>./tests</directory>
16+
</testsuite>
17+
</testsuites>
1418
</phpunit>

tests/commands/ApiControllerTest.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,12 @@ public function testGenerateBootstrap()
8686
$fileContent = preg_replace('/\s+href\s*=\s*(["\'])#[^"\']*\1/i', '', $fileContent);
8787
$fileContent = preg_replace('/\s+data-target\s*=\s*(["\'])#[^"\']*\1/i', '', $fileContent);
8888

89+
// The `highlight_string` result format has changed since PHP8.3
90+
// To prevent test failures, we remove some spaces.
91+
$fileContent = str_replace('> $', '>$', $fileContent);
92+
$fileContent = str_replace('> <', '><', $fileContent);
93+
$fileContent = str_replace('=&nbsp;', '= ', $fileContent);
94+
8995
$this->assertMatchesHtmlSnapshot($fileContent);
9096
$filesCount++;
9197
}

tests/commands/__snapshots__/ApiControllerTest__testGenerateBootstrap__1.html

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ <h2>Property Details</h2>
261261
</div>
262262

263263
<div class="signature">
264-
<span class="signature-defs">public</span> <span class="signature-type"><a href="https://www.php.net/language.types.integer">integer</a></span> <a href="yiiunit-apidoc-data-api-animal-animal.html#%24age-detail">$age</a> <span style="color: #0000BB"></span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">null</span>
264+
<span class="signature-defs">public</span><span class="signature-type"><a href="https://www.php.net/language.types.integer">integer</a></span><a href="yiiunit-apidoc-data-api-animal-animal.html#%24age-detail">$age</a><span style="color: #0000BB"></span><span style="color: #007700">= </span><span style="color: #0000BB">null</span>
265265
</div>
266266

267267

@@ -284,7 +284,7 @@ <h2>Property Details</h2>
284284
</div>
285285

286286
<div class="signature">
287-
<span class="signature-defs">public</span> <span class="signature-type"><a href="https://www.php.net/language.types.integer">integer</a></span> <a href="yiiunit-apidoc-data-api-animal-animal.html#%24birthDate-detail">$birthDate</a> <span style="color: #0000BB"></span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">null</span>
287+
<span class="signature-defs">public</span><span class="signature-type"><a href="https://www.php.net/language.types.integer">integer</a></span><a href="yiiunit-apidoc-data-api-animal-animal.html#%24birthDate-detail">$birthDate</a><span style="color: #0000BB"></span><span style="color: #007700">= </span><span style="color: #0000BB">null</span>
288288
</div>
289289

290290

@@ -307,7 +307,7 @@ <h2>Property Details</h2>
307307
</div>
308308

309309
<div class="signature">
310-
<span class="signature-defs">public</span> <span class="signature-type"><a href="https://www.php.net/language.types.string">string</a></span> <a href="yiiunit-apidoc-data-api-animal-animal.html#%24name-detail">$name</a> <span style="color: #0000BB"></span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">null</span>
310+
<span class="signature-defs">public</span><span class="signature-type"><a href="https://www.php.net/language.types.string">string</a></span><a href="yiiunit-apidoc-data-api-animal-animal.html#%24name-detail">$name</a><span style="color: #0000BB"></span><span style="color: #007700">= </span><span style="color: #0000BB">null</span>
311311
</div>
312312

313313

@@ -329,7 +329,7 @@ <h2>Property Details</h2>
329329
</div>
330330

331331
<div class="signature">
332-
<span class="signature-defs">public</span> <span class="signature-type"><a href="https://www.php.net/language.types.string">string</a></span> <a href="yiiunit-apidoc-data-api-animal-animal.html#%24propertyWithoutDoc-detail">$propertyWithoutDoc</a> <span style="color: #0000BB"></span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">''</span>
332+
<span class="signature-defs">public</span><span class="signature-type"><a href="https://www.php.net/language.types.string">string</a></span><a href="yiiunit-apidoc-data-api-animal-animal.html#%24propertyWithoutDoc-detail">$propertyWithoutDoc</a><span style="color: #0000BB"></span><span style="color: #007700">= </span><span style="color: #DD0000">''</span>
333333
</div>
334334

335335

@@ -351,7 +351,7 @@ <h2>Property Details</h2>
351351
</div>
352352

353353
<div class="signature">
354-
<span class="signature-defs">public</span> <span class="signature-type"></span> <a href="yiiunit-apidoc-data-api-animal-animal.html#%24propertyWithoutDocAndTypeHint-detail">$propertyWithoutDocAndTypeHint</a> <span style="color: #0000BB"></span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">''</span>
354+
<span class="signature-defs">public</span><span class="signature-type"></span><a href="yiiunit-apidoc-data-api-animal-animal.html#%24propertyWithoutDocAndTypeHint-detail">$propertyWithoutDocAndTypeHint</a><span style="color: #0000BB"></span><span style="color: #007700">= </span><span style="color: #DD0000">''</span>
355355
</div>
356356

357357

@@ -383,7 +383,7 @@ <h2>Method Details</h2>
383383

384384
<table class="detail-table table table-striped table-bordered table-hover">
385385
<tr><td colspan="3" class="signature">
386-
<span class="signature-defs">public</span> <span class="signature-type"><a href="https://www.php.net/language.types.integer">integer</a></span> <strong><a href="yiiunit-apidoc-data-api-animal-animal.html#getAge()-detail">getAge</a></strong> ( )</td></tr>
386+
<span class="signature-defs">public</span><span class="signature-type"><a href="https://www.php.net/language.types.integer">integer</a></span><strong><a href="yiiunit-apidoc-data-api-animal-animal.html#getAge()-detail">getAge</a></strong> ( )</td></tr>
387387

388388

389389
<tr>
@@ -407,7 +407,7 @@ <h2>Method Details</h2>
407407
<div class="collapse">
408408
<div class="card card-body">
409409
<pre>
410-
<code class="hljs php language-php"><span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">getAge</span><span class="hljs-params">()</span>
410+
<code class="hljs php language-php"><span class="hljs-keyword">public</span><span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-title">getAge</span><span class="hljs-params">()</span>
411411
</span>{
412412
<span class="hljs-keyword">return</span> time() - <span class="hljs-keyword">$this</span>-&gt;birthDate;
413413
}
@@ -437,7 +437,7 @@ <h2>Method Details</h2>
437437

438438
<table class="detail-table table table-striped table-bordered table-hover">
439439
<tr><td colspan="3" class="signature">
440-
<span class="signature-defs">public</span> <span class="signature-type"><a href="https://www.php.net/language.types.integer">integer</a></span> <strong><a href="yiiunit-apidoc-data-api-animal-animal.html#getSomething()-detail">getSomething</a></strong> ( <span class="signature-type"><a href="https://www.php.net/language.types.mixed">mixed</a></span> <span style="color: #0000BB">$test</span>, <span class="signature-type"><a href="https://www.php.net/language.types.integer">integer</a></span> <span style="color: #0000BB">$test2</span>, <span class="signature-type"><a href="https://www.php.net/language.types.integer">integer</a>|<a href="https://www.php.net/language.types.string">string</a></span> <span style="color: #0000BB">$test3</span> )</td></tr>
440+
<span class="signature-defs">public</span><span class="signature-type"><a href="https://www.php.net/language.types.integer">integer</a></span><strong><a href="yiiunit-apidoc-data-api-animal-animal.html#getSomething()-detail">getSomething</a></strong> ( <span class="signature-type"><a href="https://www.php.net/language.types.mixed">mixed</a></span><span style="color: #0000BB">$test</span>, <span class="signature-type"><a href="https://www.php.net/language.types.integer">integer</a></span><span style="color: #0000BB">$test2</span>, <span class="signature-type"><a href="https://www.php.net/language.types.integer">integer</a>|<a href="https://www.php.net/language.types.string">string</a></span><span style="color: #0000BB">$test3</span> )</td></tr>
441441

442442
<tr>
443443
<td class="param-name-col"><span style="color: #0000BB">$test</span></td>
@@ -493,7 +493,7 @@ <h2>Method Details</h2>
493493

494494
<table class="detail-table table table-striped table-bordered table-hover">
495495
<tr><td colspan="3" class="signature">
496-
<span class="signature-defs">public</span> <span class="signature-type"><a href="https://www.php.net/language.types.boolean">boolean</a></span> <strong><a href="yiiunit-apidoc-data-api-animal-animal.html#isOlder()-detail">isOlder</a></strong> ( <span class="signature-type"><a href="https://www.php.net/language.types.integer">integer</a></span> <span style="color: #0000BB">$date</span> )</td></tr>
496+
<span class="signature-defs">public</span><span class="signature-type"><a href="https://www.php.net/language.types.boolean">boolean</a></span><strong><a href="yiiunit-apidoc-data-api-animal-animal.html#isOlder()-detail">isOlder</a></strong> ( <span class="signature-type"><a href="https://www.php.net/language.types.integer">integer</a></span><span style="color: #0000BB">$date</span> )</td></tr>
497497

498498
<tr>
499499
<td class="param-name-col"><span style="color: #0000BB">$date</span></td>
@@ -517,9 +517,9 @@ <h2>Method Details</h2>
517517
<div class="collapse">
518518
<div class="card card-body">
519519
<pre>
520-
<code class="hljs php language-php"><span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">isOlder</span><span class="hljs-params">($date)</span>
520+
<code class="hljs php language-php"><span class="hljs-keyword">public</span><span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-title">isOlder</span><span class="hljs-params">($date)</span>
521521
</span>{
522-
<span class="hljs-keyword">return</span> <span class="hljs-keyword">$this</span>-&gt;getAge() &gt; $date;
522+
<span class="hljs-keyword">return</span><span class="hljs-keyword">$this</span>-&gt;getAge() &gt; $date;
523523
}
524524
</code>
525525
</pre>
@@ -547,7 +547,7 @@ <h2>Method Details</h2>
547547

548548
<table class="detail-table table table-striped table-bordered table-hover">
549549
<tr><td colspan="3" class="signature">
550-
<span class="signature-defs">public abstract</span> <span class="signature-type"><a href="https://www.php.net/language.types.string">string</a></span> <strong><a href="yiiunit-apidoc-data-api-animal-animal.html#render()-detail">render</a></strong> ( )</td></tr>
550+
<span class="signature-defs">public abstract</span><span class="signature-type"><a href="https://www.php.net/language.types.string">string</a></span><strong><a href="yiiunit-apidoc-data-api-animal-animal.html#render()-detail">render</a></strong> ( )</td></tr>
551551

552552

553553
<tr>
@@ -571,7 +571,7 @@ <h2>Method Details</h2>
571571
<div class="collapse">
572572
<div class="card card-body">
573573
<pre>
574-
<code class="hljs php language-php"><span class="hljs-keyword">abstract</span> <span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">render</span><span class="hljs-params">()</span></span>;
574+
<code class="hljs php language-php"><span class="hljs-keyword">abstract</span><span class="hljs-keyword">public</span><span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-title">render</span><span class="hljs-params">()</span></span>;
575575
</code>
576576
</pre>
577577
</div>
@@ -598,7 +598,7 @@ <h2>Method Details</h2>
598598

599599
<table class="detail-table table table-striped table-bordered table-hover">
600600
<tr><td colspan="3" class="signature">
601-
<span class="signature-defs">public</span> <span class="signature-type">self</span> <strong><a href="yiiunit-apidoc-data-api-animal-animal.html#setBirthDate()-detail">setBirthDate</a></strong> ( <span class="signature-type"><a href="https://www.php.net/language.types.integer">integer</a></span> <span style="color: #0000BB">$birthDate</span> )</td></tr>
601+
<span class="signature-defs">public</span><span class="signature-type">self</span><strong><a href="yiiunit-apidoc-data-api-animal-animal.html#setBirthDate()-detail">setBirthDate</a></strong> ( <span class="signature-type"><a href="https://www.php.net/language.types.integer">integer</a></span><span style="color: #0000BB">$birthDate</span> )</td></tr>
602602

603603
<tr>
604604
<td class="param-name-col"><span style="color: #0000BB">$birthDate</span></td>
@@ -621,10 +621,10 @@ <h2>Method Details</h2>
621621
<div class="collapse">
622622
<div class="card card-body">
623623
<pre>
624-
<code class="hljs php language-php"><span class="hljs-keyword">public</span> <span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">setBirthDate</span><span class="hljs-params">(int $birthDate)</span>: <span class="hljs-title">self</span>
624+
<code class="hljs php language-php"><span class="hljs-keyword">public</span><span class="hljs-function"><span class="hljs-keyword">function</span><span class="hljs-title">setBirthDate</span><span class="hljs-params">(int $birthDate)</span>: <span class="hljs-title">self</span>
625625
</span>{
626626
<span class="hljs-keyword">$this</span>-&gt;birthDate = $birthDate;
627-
<span class="hljs-keyword">return</span> <span class="hljs-keyword">$this</span>;
627+
<span class="hljs-keyword">return</span><span class="hljs-keyword">$this</span>;
628628
}
629629
</code>
630630
</pre>

0 commit comments

Comments
 (0)