From 2b46e2a6527bc1348d684a29335d6a75f0006eae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tinjo=20Sch=C3=B6ni?= <32767367+tscni@users.noreply.github.com> Date: Sun, 9 Jun 2024 20:42:34 +0200 Subject: [PATCH] [ErrorHandler] Fix rendered exception code highlighting on PHP 8.3 --- src/Symfony/Bridge/Twig/Extension/CodeExtension.php | 8 +++----- .../ErrorHandler/ErrorRenderer/HtmlErrorRenderer.php | 8 +++----- .../ErrorHandler/Resources/assets/css/exception.css | 2 +- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/src/Symfony/Bridge/Twig/Extension/CodeExtension.php b/src/Symfony/Bridge/Twig/Extension/CodeExtension.php index d76924633efe0..e7a3329478d98 100644 --- a/src/Symfony/Bridge/Twig/Extension/CodeExtension.php +++ b/src/Symfony/Bridge/Twig/Extension/CodeExtension.php @@ -129,12 +129,10 @@ public function fileExcerpt(string $file, int $line, int $srcContext = 3): ?stri if (\PHP_VERSION_ID >= 80300) { // remove main pre/code tags $code = preg_replace('#^
]++)>((?:[^<]*+\\n)++[^<]*+)
#', function ($m) {
- return "".str_replace("\n", "
\n", $m[2]).'
';
+ // split multiline span tags
+ $code = preg_replace_callback('#]++)>((?:[^<\\n]*+\\n)++[^<]*+)#', function ($m) {
+ return "".str_replace("\n", "\n", $m[2]).'';
}, $code);
- // Convert spaces to html entities to preserve indentation when rendered
- $code = str_replace(' ', ' ', $code);
$content = explode("\n", $code);
} else {
// remove main code/span tags
diff --git a/src/Symfony/Component/ErrorHandler/ErrorRenderer/HtmlErrorRenderer.php b/src/Symfony/Component/ErrorHandler/ErrorRenderer/HtmlErrorRenderer.php
index 5b264fa5a7e90..05cbeec166b6e 100644
--- a/src/Symfony/Component/ErrorHandler/ErrorRenderer/HtmlErrorRenderer.php
+++ b/src/Symfony/Component/ErrorHandler/ErrorRenderer/HtmlErrorRenderer.php
@@ -274,12 +274,10 @@ private function fileExcerpt(string $file, int $line, int $srcContext = 3): stri
if (\PHP_VERSION_ID >= 80300) {
// remove main pre/code tags
$code = preg_replace('#^]++)>((?:[^<]*+\\n)++[^<]*+)
#', function ($m) {
- return "".str_replace("\n", "
\n", $m[2]).'
';
+ // split multiline span tags
+ $code = preg_replace_callback('#]++)>((?:[^<\\n]*+\\n)++[^<]*+)#', function ($m) {
+ return "".str_replace("\n", "\n", $m[2]).'';
}, $code);
- // Convert spaces to html entities to preserve indentation when rendered
- $code = str_replace(' ', ' ', $code);
$content = explode("\n", $code);
} else {
// remove main code/span tags
diff --git a/src/Symfony/Component/ErrorHandler/Resources/assets/css/exception.css b/src/Symfony/Component/ErrorHandler/Resources/assets/css/exception.css
index 7cb3206da2055..2d05a5e6a6620 100644
--- a/src/Symfony/Component/ErrorHandler/Resources/assets/css/exception.css
+++ b/src/Symfony/Component/ErrorHandler/Resources/assets/css/exception.css
@@ -242,7 +242,7 @@ header .container { display: flex; justify-content: space-between; }
.trace-code li { color: #969896; margin: 0; padding-left: 10px; float: left; width: 100%; }
.trace-code li + li { margin-top: 5px; }
.trace-code li.selected { background: var(--trace-selected-background); margin-top: 2px; }
-.trace-code li code { color: var(--base-6); white-space: nowrap; }
+.trace-code li code { color: var(--base-6); white-space: pre; }
.trace-as-text .stacktrace { line-height: 1.8; margin: 0 0 15px; white-space: pre-wrap; }