Skip to content

Commit 1503cd8

Browse files
committed
Moved php functions handler to a trait
1 parent 3dcb3b6 commit 1503cd8

2 files changed

Lines changed: 129 additions & 124 deletions

File tree

src/Scanner/CodeScanner.php

Lines changed: 7 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -18,27 +18,7 @@ abstract class CodeScanner extends Scanner
1818

1919
protected $commentsPrefixes = [];
2020

21-
protected $functions = [
22-
'gettext' => 'gettext',
23-
'_' => 'gettext',
24-
'__' => 'gettext',
25-
'ngettext' => 'ngettext',
26-
'n__' => 'ngettext',
27-
'pgettext' => 'pgettext',
28-
'p__' => 'pgettext',
29-
'dgettext' => 'dgettext',
30-
'd__' => 'dgettext',
31-
'dngettext' => 'dngettext',
32-
'dn__' => 'dngettext',
33-
'dpgettext' => 'dpgettext',
34-
'dp__' => 'dpgettext',
35-
'npgettext' => 'npgettext',
36-
'np__' => 'npgettext',
37-
'dnpgettext' => 'dnpgettext',
38-
'dnp__' => 'dnpgettext',
39-
'noop' => 'gettext',
40-
'noop__' => 'gettext',
41-
];
21+
protected $functions = [];
4222

4323
/**
4424
* @param array $functions [fnName => handler]
@@ -93,122 +73,25 @@ abstract public function getFunctionsScanner(): FunctionsScannerInterface;
9373

9474
protected function handleFunction(ParsedFunction $function)
9575
{
96-
$name = $function->getName();
97-
$handler = $this->functions[$name] ?? null;
76+
$handler = $this->getFunctionHandler($function);
9877

9978
if (is_null($handler)) {
10079
return;
10180
}
10281

103-
$translation = call_user_func([$this, $handler], $function);
82+
$translation = call_user_func($handler, $function);
10483

10584
if ($translation && $this->addReferences) {
10685
$translation->getReferences()->add($function->getFilename(), $function->getLine());
10786
}
10887
}
10988

110-
protected function gettext(ParsedFunction $function): ?Translation
111-
{
112-
if (!$this->checkFunction($function, 1)) {
113-
return null;
114-
}
115-
list($original) = $function->getArguments();
116-
117-
return $this->addComments(
118-
$function,
119-
$this->saveTranslation(null, null, $original)
120-
);
121-
}
122-
123-
protected function ngettext(ParsedFunction $function): ?Translation
124-
{
125-
if (!$this->checkFunction($function, 2)) {
126-
return null;
127-
}
128-
list($original, $plural) = $function->getArguments();
129-
130-
return $this->addComments(
131-
$function,
132-
$this->saveTranslation(null, null, $original, $plural)
133-
);
134-
}
135-
136-
protected function pgettext(ParsedFunction $function): ?Translation
137-
{
138-
if (!$this->checkFunction($function, 2)) {
139-
return null;
140-
}
141-
list($context, $original) = $function->getArguments();
142-
143-
return $this->addComments(
144-
$function,
145-
$this->saveTranslation(null, $context, $original)
146-
);
147-
}
148-
149-
protected function dgettext(ParsedFunction $function): ?Translation
150-
{
151-
if (!$this->checkFunction($function, 2)) {
152-
return null;
153-
}
154-
list($domain, $original) = $function->getArguments();
155-
156-
return $this->addComments(
157-
$function,
158-
$this->saveTranslation($domain, null, $original)
159-
);
160-
}
161-
162-
protected function dpgettext(ParsedFunction $function): ?Translation
163-
{
164-
if (!$this->checkFunction($function, 3)) {
165-
return null;
166-
}
167-
list($domain, $context, $original) = $function->getArguments();
168-
169-
return $this->addComments(
170-
$function,
171-
$this->saveTranslation($domain, $context, $original)
172-
);
173-
}
174-
175-
protected function npgettext(ParsedFunction $function): ?Translation
176-
{
177-
if (!$this->checkFunction($function, 3)) {
178-
return null;
179-
}
180-
list($context, $original, $plural) = $function->getArguments();
181-
182-
return $this->addComments(
183-
$function,
184-
$this->saveTranslation(null, $context, $original, $plural)
185-
);
186-
}
187-
188-
protected function dngettext(ParsedFunction $function): ?Translation
189-
{
190-
if (!$this->checkFunction($function, 3)) {
191-
return null;
192-
}
193-
list($domain, $original, $plural) = $function->getArguments();
194-
195-
return $this->addComments(
196-
$function,
197-
$this->saveTranslation($domain, null, $original, $plural)
198-
);
199-
}
200-
201-
protected function dnpgettext(ParsedFunction $function): ?Translation
89+
protected function getFunctionHandler(ParsedFunction $function): ?callable
20290
{
203-
if (!$this->checkFunction($function, 4)) {
204-
return null;
205-
}
206-
list($domain, $context, $original, $plural) = $function->getArguments();
91+
$name = $function->getName();
92+
$handler = $this->functions[$name] ?? null;
20793

208-
return $this->addComments(
209-
$function,
210-
$this->saveTranslation($domain, $context, $original, $plural)
211-
);
94+
return is_null($handler) ? null : [$this, $handler];
21295
}
21396

21497
protected function addComments(ParsedFunction $function, ?Translation $translation): ?Translation
Lines changed: 122 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,122 @@
1+
<?php
2+
declare(strict_types = 1);
3+
4+
namespace Gettext\Scanner;
5+
6+
use Gettext\Translation;
7+
8+
/**
9+
* Trait with common gettext function handlers
10+
*/
11+
trait FunctionsHandlersTrait
12+
{
13+
protected function gettext(ParsedFunction $function): ?Translation
14+
{
15+
if (!$this->checkFunction($function, 1)) {
16+
return null;
17+
}
18+
list($original) = $function->getArguments();
19+
20+
return $this->addComments(
21+
$function,
22+
$this->saveTranslation(null, null, $original)
23+
);
24+
}
25+
26+
protected function ngettext(ParsedFunction $function): ?Translation
27+
{
28+
if (!$this->checkFunction($function, 2)) {
29+
return null;
30+
}
31+
list($original, $plural) = $function->getArguments();
32+
33+
return $this->addComments(
34+
$function,
35+
$this->saveTranslation(null, null, $original, $plural)
36+
);
37+
}
38+
39+
protected function pgettext(ParsedFunction $function): ?Translation
40+
{
41+
if (!$this->checkFunction($function, 2)) {
42+
return null;
43+
}
44+
list($context, $original) = $function->getArguments();
45+
46+
return $this->addComments(
47+
$function,
48+
$this->saveTranslation(null, $context, $original)
49+
);
50+
}
51+
52+
protected function dgettext(ParsedFunction $function): ?Translation
53+
{
54+
if (!$this->checkFunction($function, 2)) {
55+
return null;
56+
}
57+
list($domain, $original) = $function->getArguments();
58+
59+
return $this->addComments(
60+
$function,
61+
$this->saveTranslation($domain, null, $original)
62+
);
63+
}
64+
65+
protected function dpgettext(ParsedFunction $function): ?Translation
66+
{
67+
if (!$this->checkFunction($function, 3)) {
68+
return null;
69+
}
70+
list($domain, $context, $original) = $function->getArguments();
71+
72+
return $this->addComments(
73+
$function,
74+
$this->saveTranslation($domain, $context, $original)
75+
);
76+
}
77+
78+
protected function npgettext(ParsedFunction $function): ?Translation
79+
{
80+
if (!$this->checkFunction($function, 3)) {
81+
return null;
82+
}
83+
list($context, $original, $plural) = $function->getArguments();
84+
85+
return $this->addComments(
86+
$function,
87+
$this->saveTranslation(null, $context, $original, $plural)
88+
);
89+
}
90+
91+
protected function dngettext(ParsedFunction $function): ?Translation
92+
{
93+
if (!$this->checkFunction($function, 3)) {
94+
return null;
95+
}
96+
list($domain, $original, $plural) = $function->getArguments();
97+
98+
return $this->addComments(
99+
$function,
100+
$this->saveTranslation($domain, null, $original, $plural)
101+
);
102+
}
103+
104+
protected function dnpgettext(ParsedFunction $function): ?Translation
105+
{
106+
if (!$this->checkFunction($function, 4)) {
107+
return null;
108+
}
109+
list($domain, $context, $original, $plural) = $function->getArguments();
110+
111+
return $this->addComments(
112+
$function,
113+
$this->saveTranslation($domain, $context, $original, $plural)
114+
);
115+
}
116+
117+
abstract protected function addComments(ParsedFunction $function, ?Translation $translation): ?Translation;
118+
119+
abstract protected function checkFunction(ParsedFunction $function, int $minLength): bool;
120+
121+
abstract protected function saveTranslation(?string $domain, ?string $context, string $original, string $plural = null): ?Translation;
122+
}

0 commit comments

Comments
 (0)