diff --git a/TwigCS/src/Token/Tokenizer.php b/TwigCS/src/Token/Tokenizer.php
index 07d6f27..3447529 100644
--- a/TwigCS/src/Token/Tokenizer.php
+++ b/TwigCS/src/Token/Tokenizer.php
@@ -631,14 +631,21 @@ protected function lexPunctuation(): void
{
$currentToken = $this->code[$this->cursor];
- if (':' === $currentToken) {
- $lastBracket = end($this->bracketsAndTernary);
- if (false !== $lastBracket && '?' === $lastBracket[0]) {
+ $lastBracket = end($this->bracketsAndTernary);
+ if (false !== $lastBracket && '?' === $lastBracket[0]) {
+ if (':' === $currentToken) {
// This is a ternary instead
$this->lexOperator($currentToken);
return;
}
+ if (false !== strpos(',)]}', $currentToken)) {
+ // Because {{ foo ? 'yes' }} is the same as {{ foo ? 'yes' : '' }}
+ do {
+ array_pop($this->bracketsAndTernary);
+ $lastBracket = end($this->bracketsAndTernary);
+ } while ('?' === $lastBracket[0]);
+ }
}
if (false !== strpos('([{', $currentToken)) {
@@ -649,10 +656,6 @@ protected function lexPunctuation(): void
}
$bracket = array_pop($this->bracketsAndTernary);
- if ('?' === $bracket[0]) {
- // Because {{ foo ? 'yes' }} is the same as {{ foo ? 'yes' : '' }}
- $bracket = array_pop($this->bracketsAndTernary);
- }
if (strtr($bracket[0], '([{', ')]}') !== $currentToken) {
throw new Exception(sprintf('Unclosed "%s"', $bracket[0]));
}
diff --git a/TwigCS/tests/Fixtures/BlankEOFTest.fixed.twig b/TwigCS/tests/Fixtures/BlankEOFTest.fixed.twig
deleted file mode 100644
index 1936aaf..0000000
--- a/TwigCS/tests/Fixtures/BlankEOFTest.fixed.twig
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
diff --git a/TwigCS/tests/Fixtures/BlankEOFTest.twig b/TwigCS/tests/Fixtures/BlankEOFTest.twig
deleted file mode 100644
index 99dfd42..0000000
--- a/TwigCS/tests/Fixtures/BlankEOFTest.twig
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/TwigCS/tests/Fixtures/DelimiterSpacingTest.fixed.twig b/TwigCS/tests/Fixtures/DelimiterSpacingTest.fixed.twig
deleted file mode 100644
index 692a539..0000000
--- a/TwigCS/tests/Fixtures/DelimiterSpacingTest.fixed.twig
+++ /dev/null
@@ -1,20 +0,0 @@
-{{ foo }}
-{# comment #}
-{% if foo %}{% endif %}
-
-{{- foo -}}
-{#- comment -#}
-{%- if foo -%}{%- endif -%}
-
-{{
- shouldNotCareAboutNewLine
-}}
-{%- if foo -%}{%- endif -%}
-
-{{ foo({'bar': {'baz': 'shouldNotCareAboutDoubleHashes'}}) }}
-
-
- {{
- shouldNotCareAboutNewLine
- }}
-
diff --git a/TwigCS/tests/Fixtures/DelimiterSpacingTest.twig b/TwigCS/tests/Fixtures/DelimiterSpacingTest.twig
deleted file mode 100644
index 0175972..0000000
--- a/TwigCS/tests/Fixtures/DelimiterSpacingTest.twig
+++ /dev/null
@@ -1,20 +0,0 @@
-{{ foo }}
-{# comment #}
-{% if foo %}{% endif %}
-
-{{- foo -}}
-{#- comment -#}
-{%- if foo -%}{%- endif -%}
-
-{{
- shouldNotCareAboutNewLine
-}}
-{%-if foo -%}{%- endif-%}
-
-{{ foo({'bar': {'baz': 'shouldNotCareAboutDoubleHashes'}}) }}
-
-
- {{
- shouldNotCareAboutNewLine
- }}
-
diff --git a/TwigCS/tests/Fixtures/EmptyLinesTest.fixed.twig b/TwigCS/tests/Fixtures/EmptyLinesTest.fixed.twig
deleted file mode 100644
index 70c6156..0000000
--- a/TwigCS/tests/Fixtures/EmptyLinesTest.fixed.twig
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/TwigCS/tests/Fixtures/EmptyLinesTest.twig b/TwigCS/tests/Fixtures/EmptyLinesTest.twig
deleted file mode 100644
index 018bc05..0000000
--- a/TwigCS/tests/Fixtures/EmptyLinesTest.twig
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/TwigCS/tests/Fixtures/OperatorSpacingTest.fixed.twig b/TwigCS/tests/Fixtures/OperatorSpacingTest.fixed.twig
deleted file mode 100644
index e99904f..0000000
--- a/TwigCS/tests/Fixtures/OperatorSpacingTest.fixed.twig
+++ /dev/null
@@ -1,35 +0,0 @@
-{{ 1 + 2 }}
-{{ 1 - 2 }}
-{{ 1 / 2 }}
-{{ 1 * 2 }}
-{{ 1 % 2 }}
-{{ 1 // 2 }}
-{{ 1 ** 2 }}
-{{ foo ~ bar }}
-{{ true ? true : false }}
-{{ 1 == 2 }}
-{{ not true }}
-{{ false and true }}
-{{ false or true }}
-{{ a in array }}
-{{ a is array }}
-
-Untouch +-/*%==:
-
-{{ [1, 2, 3] }}
-{{ {'foo': 'bar'} }}
-{{ 1 ?: 2 }}
-{{ 1 ?? 2 }}
-
-{{ 1 + -2 }}
-{{ 1 + (-2 + 3) }}
-{{ a[-2] }}
-{{ { 'foo': -2 } }}
-{{ foo.name }}
-{{ 1..10 }}
-{{ -5..-2 }}
-{{ [1, -2] }}
-{% if -2 == -3 or -2 == -3 %}{% endif %}
-{% if a - 2 == -4 %}{% endif %}
-{{ a in -2..-3 }}
-{{ "a_#{1 + 1}" }}
diff --git a/TwigCS/tests/Fixtures/OperatorSpacingTest.twig b/TwigCS/tests/Fixtures/OperatorSpacingTest.twig
deleted file mode 100644
index 6827dbb..0000000
--- a/TwigCS/tests/Fixtures/OperatorSpacingTest.twig
+++ /dev/null
@@ -1,35 +0,0 @@
-{{ 1+2 }}
-{{ 1-2 }}
-{{ 1/2 }}
-{{ 1*2 }}
-{{ 1%2 }}
-{{ 1//2 }}
-{{ 1**2 }}
-{{ foo~bar }}
-{{ true ? true : false }}
-{{ 1==2 }}
-{{ not true }}
-{{ false and true }}
-{{ false or true }}
-{{ a in array }}
-{{ a is array }}
-
-Untouch +-/*%==:
-
-{{ [1, 2, 3] }}
-{{ {'foo': 'bar'} }}
-{{ 1?:2 }}
-{{ 1??2 }}
-
-{{ 1 +-2 }}
-{{ 1 + (-2 + 3) }}
-{{ a[-2] }}
-{{ { 'foo': -2 } }}
-{{ foo.name }}
-{{ 1..10 }}
-{{ -5..-2 }}
-{{ [1, -2] }}
-{% if -2 == -3 or -2 == -3 %}{% endif %}
-{% if a - 2 == -4 %}{% endif %}
-{{ a in -2..-3 }}
-{{ "a_#{1+1}" }}
diff --git a/TwigCS/tests/Token/Tokenizer/TokenizerTest.php b/TwigCS/tests/Token/Tokenizer/TokenizerTest.php
index 50f27d0..f312a42 100644
--- a/TwigCS/tests/Token/Tokenizer/TokenizerTest.php
+++ b/TwigCS/tests/Token/Tokenizer/TokenizerTest.php
@@ -144,7 +144,36 @@ public function tokenizeDataProvider(): array
46 => Token::WHITESPACE_TYPE,
47 => Token::VAR_END_TYPE,
48 => Token::EOL_TYPE,
- 49 => Token::EOF_TYPE,
+ 49 => Token::BLOCK_START_TYPE,
+ 50 => Token::WHITESPACE_TYPE,
+ 51 => Token::BLOCK_TAG_TYPE,
+ 52 => Token::WHITESPACE_TYPE,
+ 53 => Token::NAME_TYPE,
+ 54 => Token::OPERATOR_TYPE,
+ 55 => Token::PUNCTUATION_TYPE,
+ 56 => Token::NAME_TYPE,
+ 57 => Token::PUNCTUATION_TYPE,
+ 58 => Token::WHITESPACE_TYPE,
+ 59 => Token::NAME_TYPE,
+ 60 => Token::WHITESPACE_TYPE,
+ 61 => Token::OPERATOR_TYPE,
+ 62 => Token::WHITESPACE_TYPE,
+ 63 => Token::NAME_TYPE,
+ 64 => Token::WHITESPACE_TYPE,
+ 65 => Token::OPERATOR_TYPE,
+ 66 => Token::WHITESPACE_TYPE,
+ 67 => Token::NUMBER_TYPE,
+ 68 => Token::PUNCTUATION_TYPE,
+ 69 => Token::WHITESPACE_TYPE,
+ 70 => Token::NAME_TYPE,
+ 71 => Token::PUNCTUATION_TYPE,
+ 72 => Token::WHITESPACE_TYPE,
+ 73 => Token::NUMBER_TYPE,
+ 74 => Token::PUNCTUATION_TYPE,
+ 75 => Token::WHITESPACE_TYPE,
+ 76 => Token::BLOCK_END_TYPE,
+ 77 => Token::EOL_TYPE,
+ 78 => Token::EOF_TYPE,
],
],
[
diff --git a/TwigCS/tests/Token/Tokenizer/TokenizerTest3.twig b/TwigCS/tests/Token/Tokenizer/TokenizerTest3.twig
index faf2023..4c76576 100644
--- a/TwigCS/tests/Token/Tokenizer/TokenizerTest3.twig
+++ b/TwigCS/tests/Token/Tokenizer/TokenizerTest3.twig
@@ -1,3 +1,4 @@
{{ 1+2-3*4%5 }}
{{ bar ? 'string' : "string#" }}
{{ baz ?: { a:[1, 2] } }}
+{% set a={foo: bar ? baz ? 1, test: 1} %}