Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit dc55db2

Browse filesBrowse files
k0pernikusstof
authored andcommitted
add expression text to SyntaxError
fixes #19445
1 parent 11a06cc commit dc55db2
Copy full SHA for dc55db2

File tree

3 files changed

+42
-6
lines changed
Filter options

3 files changed

+42
-6
lines changed

‎src/Symfony/Component/ExpressionLanguage/Lexer.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/ExpressionLanguage/Lexer.php
+3-2Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -87,15 +87,16 @@ public function tokenize($expression)
8787
$cursor += strlen($match[0]);
8888
} else {
8989
// unlexable
90-
throw new SyntaxError(sprintf('Unexpected character "%s"', $expression[$cursor]), $cursor);
90+
$message = sprintf('Unexpected character "%s"', $expression[$cursor]);
91+
throw new SyntaxError($message, $cursor, $expression);
9192
}
9293
}
9394

9495
$tokens[] = new Token(Token::EOF_TYPE, null, $cursor + 1);
9596

9697
if (!empty($brackets)) {
9798
list($expect, $cur) = array_pop($brackets);
98-
throw new SyntaxError(sprintf('Unclosed "%s"', $expect), $cur);
99+
throw new SyntaxError(sprintf('Unclosed "%s"', $expect), $cur, $expression);
99100
}
100101

101102
return new TokenStream($tokens);

‎src/Symfony/Component/ExpressionLanguage/SyntaxError.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/ExpressionLanguage/SyntaxError.php
+8-2Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,14 @@
1313

1414
class SyntaxError extends \LogicException
1515
{
16-
public function __construct($message, $cursor = 0)
16+
public function __construct($message, $cursor = 0, $expression = '')
1717
{
18-
parent::__construct(sprintf('%s around position %d.', $message, $cursor));
18+
$message = sprintf('%s around position %d', $message, $cursor);
19+
if ($expression) {
20+
$message = sprintf('%s for expression "%s"', $message, $expression);
21+
}
22+
$message .= '.';
23+
24+
parent::__construct($message);
1925
}
2026
}

‎src/Symfony/Component/ExpressionLanguage/Tests/LexerTest.php

Copy file name to clipboardExpand all lines: src/Symfony/Component/ExpressionLanguage/Tests/LexerTest.php
+31-2Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,43 @@
1818

1919
class LexerTest extends TestCase
2020
{
21+
/**
22+
* @var Lexer
23+
*/
24+
private $lexer;
25+
26+
protected function setUp()
27+
{
28+
$this->lexer = new Lexer();
29+
}
30+
2131
/**
2232
* @dataProvider getTokenizeData
2333
*/
2434
public function testTokenize($tokens, $expression)
2535
{
2636
$tokens[] = new Token('end of expression', null, strlen($expression) + 1);
27-
$lexer = new Lexer();
28-
$this->assertEquals(new TokenStream($tokens), $lexer->tokenize($expression));
37+
$this->assertEquals(new TokenStream($tokens), $this->lexer->tokenize($expression));
38+
}
39+
40+
/**
41+
* @expectedException Symfony\Component\ExpressionLanguage\SyntaxError
42+
* @expectedExceptionMessage Unexpected character "'" around position 33 for expression "service(faulty.expression.example').dummyMethod()".
43+
*/
44+
public function testTokenizeThrowsErrorWithMessage()
45+
{
46+
$expression = "service(faulty.expression.example').dummyMethod()";
47+
$this->lexer->tokenize($expression);
48+
}
49+
50+
/**
51+
* @expectedException Symfony\Component\ExpressionLanguage\SyntaxError
52+
* @expectedExceptionMessage Unclosed "(" around position 7 for expression "service(unclosed.expression.dummyMethod()".
53+
*/
54+
public function testTokenizeThrowsErrorOnUnclosedBrace()
55+
{
56+
$expression = 'service(unclosed.expression.dummyMethod()';
57+
$this->lexer->tokenize($expression);
2958
}
3059

3160
public function getTokenizeData()

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.