Skip to content

Commit c84abb6

Browse files
authored
Merge pull request #100 from phug-php/feature/duplication-threshold
Fix duplicate code split: b009a074f8968e58ff88fb409c6f9bc3ab34a0b7
1 parent 2973d24 commit c84abb6

3 files changed

Lines changed: 36 additions & 20 deletions

File tree

Lexer/Scanner/FilterScanner.php

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,18 @@
77
namespace Phug\Lexer\Scanner;
88

99
use Phug\Lexer\Analyzer\LineAnalyzer;
10+
use Phug\Lexer\Scanner\Partial\TrailingOutdentHandlerTrait;
1011
use Phug\Lexer\ScannerInterface;
1112
use Phug\Lexer\State;
1213
use Phug\Lexer\Token\FilterToken;
1314
use Phug\Lexer\Token\IndentToken;
1415
use Phug\Lexer\Token\NewLineToken;
15-
use Phug\Lexer\Token\OutdentToken;
1616
use Phug\Lexer\Token\TextToken;
1717

1818
class FilterScanner implements ScannerInterface
1919
{
20+
use TrailingOutdentHandlerTrait;
21+
2022
public function scan(State $state)
2123
{
2224
$reader = $state->getReader();
@@ -66,14 +68,8 @@ public function scan(State $state)
6668
$token->getSourceLocation()->setOffsetLength(1); //Let it have at least 1 length for debugging
6769
yield $token;
6870

69-
if ($reader->hasLength()) {
70-
yield $state->createToken(NewLineToken::class);
71-
72-
$state->setLevel($analyzer->getNewLevel())->indent($analyzer->getLevel() + 1);
73-
74-
while ($state->nextOutdent() !== false) {
75-
yield $state->createToken(OutdentToken::class);
76-
}
71+
foreach ($this->yieldTrailingOutdent($analyzer, $state) as $token) {
72+
yield $token;
7773
}
7874
}
7975
}

Lexer/Scanner/MultilineScanner.php

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,21 @@
77
namespace Phug\Lexer\Scanner;
88

99
use Phug\Lexer\Analyzer\LineAnalyzer;
10+
use Phug\Lexer\Scanner\Partial\TrailingOutdentHandlerTrait;
1011
use Phug\Lexer\ScannerInterface;
1112
use Phug\Lexer\State;
1213
use Phug\Lexer\Token\IndentToken;
1314
use Phug\Lexer\Token\InterpolationEndToken;
1415
use Phug\Lexer\Token\InterpolationStartToken;
1516
use Phug\Lexer\Token\NewLineToken;
16-
use Phug\Lexer\Token\OutdentToken;
1717
use Phug\Lexer\Token\TagInterpolationEndToken;
1818
use Phug\Lexer\Token\TagInterpolationStartToken;
1919
use Phug\Lexer\Token\TextToken;
2020

2121
class MultilineScanner implements ScannerInterface
2222
{
23+
use TrailingOutdentHandlerTrait;
24+
2325
protected function unEscapedToken(State $state, $buffer)
2426
{
2527
/** @var TextToken $token */
@@ -83,8 +85,6 @@ protected function getUnescapedLines(State $state, $lines)
8385

8486
private function yieldLines(State $state, array $lines, LineAnalyzer $analyzer)
8587
{
86-
$reader = $state->getReader();
87-
8888
yield $state->createToken(IndentToken::class);
8989

9090
$maxIndent = $analyzer->getMaxIndent();
@@ -101,14 +101,8 @@ private function yieldLines(State $state, array $lines, LineAnalyzer $analyzer)
101101
yield $token;
102102
}
103103

104-
if ($reader->hasLength()) {
105-
yield $state->createToken(NewLineToken::class);
106-
107-
$state->setLevel($analyzer->getNewLevel())->indent($analyzer->getLevel() + 1);
108-
109-
while ($state->nextOutdent() !== false) {
110-
yield $state->createToken(OutdentToken::class);
111-
}
104+
foreach ($this->yieldTrailingOutdent($analyzer, $state) as $token) {
105+
yield $token;
112106
}
113107
}
114108

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
<?php
2+
3+
namespace Phug\Lexer\Scanner\Partial;
4+
5+
use Phug\Lexer\Analyzer\LineAnalyzer;
6+
use Phug\Lexer\State;
7+
use Phug\Lexer\Token\NewLineToken;
8+
use Phug\Lexer\Token\OutdentToken;
9+
10+
trait TrailingOutdentHandlerTrait
11+
{
12+
private function yieldTrailingOutdent(LineAnalyzer $analyzer, State $state)
13+
{
14+
$reader = $state->getReader();
15+
16+
if ($reader->hasLength()) {
17+
yield $state->createToken(NewLineToken::class);
18+
19+
$state->setLevel($analyzer->getNewLevel())->indent($analyzer->getLevel() + 1);
20+
21+
while ($state->nextOutdent() !== false) {
22+
yield $state->createToken(OutdentToken::class);
23+
}
24+
}
25+
}
26+
}

0 commit comments

Comments
 (0)