Improve error reporting

This commit is contained in:
Fabien Potencier
2025-02-22 10:22:21 +01:00
parent d13d31bb68
commit d5dc3eee99
2 changed files with 11 additions and 26 deletions
+9 -24
View File
@@ -106,41 +106,26 @@ class Error extends \Exception
private function updateRepr(): void private function updateRepr(): void
{ {
$this->message = $this->rawMessage; if ($this->lineno > 0) {
if ($this->source && $this->source->getPath() && $this->lineno > 0) {
$this->file = $this->source->getPath();
$this->line = $this->lineno; $this->line = $this->lineno;
}
return; if ($this->source && $this->source->getPath()) {
$this->file = $this->source->getPath();
} }
$dot = false; $this->message = $this->rawMessage;
if (str_ends_with($this->message, '.')) { $last = substr($this->message, -1);
if ($punctuation = '.' === $last || '?' === $last ? $last : '') {
$this->message = substr($this->message, 0, -1); $this->message = substr($this->message, 0, -1);
$dot = true;
} }
$questionMark = false;
if (str_ends_with($this->message, '?')) {
$this->message = substr($this->message, 0, -1);
$questionMark = true;
}
if ($this->source && $this->source->getName()) { if ($this->source && $this->source->getName()) {
$this->message .= \sprintf(' in "%s"', $this->source->getName()); $this->message .= \sprintf(' in "%s"', $this->source->getName());
} }
if ($this->lineno > 0) { if ($this->lineno > 0) {
$this->message .= \sprintf(' at line %d', $this->lineno); $this->message .= \sprintf(' at line %d', $this->lineno);
} }
if ($punctuation) {
if ($dot) { $this->message .= $punctuation;
$this->message .= '.';
}
if ($questionMark) {
$this->message .= '?';
} }
} }
+2 -2
View File
@@ -97,7 +97,7 @@ EOHTML,
$this->fail(); $this->fail();
} catch (RuntimeError $e) { } catch (RuntimeError $e) {
$this->assertEquals('Variable "foo" does not exist.', $e->getMessage()); $this->assertEquals('Variable "foo" does not exist in "index.html" at line 3.', $e->getMessage());
$this->assertEquals(3, $e->getTemplateLine()); $this->assertEquals(3, $e->getTemplateLine());
$this->assertEquals('index.html', $e->getSourceContext()->getName()); $this->assertEquals('index.html', $e->getSourceContext()->getName());
$this->assertEquals(3, $e->getLine()); $this->assertEquals(3, $e->getLine());
@@ -116,7 +116,7 @@ EOHTML,
$this->fail(); $this->fail();
} catch (RuntimeError $e) { } catch (RuntimeError $e) {
$this->assertEquals('An exception has been thrown during the rendering of a template ("Runtime error...").', $e->getMessage()); $this->assertEquals('An exception has been thrown during the rendering of a template ("Runtime error...") in "index.html" at line 3.', $e->getMessage());
$this->assertEquals(3, $e->getTemplateLine()); $this->assertEquals(3, $e->getTemplateLine());
$this->assertEquals('index.html', $e->getSourceContext()->getName()); $this->assertEquals('index.html', $e->getSourceContext()->getName());
$this->assertEquals(3, $e->getLine()); $this->assertEquals(3, $e->getLine());