Skip to content

Commit 75396d8

Browse files
author
Oscar Otero
committed
add extracted comments
1 parent a9dcb4c commit 75396d8

1 file changed

Lines changed: 75 additions & 8 deletions

File tree

src/Scanner/CodeScanner.php

Lines changed: 75 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ abstract class CodeScanner extends Scanner
1414
{
1515
protected $ignoreInvalidFunctions = false;
1616

17+
protected $commentsPrefixes = [];
18+
1719
protected $functions = [
1820
'gettext' => 'gettext',
1921
'__' => 'gettext',
@@ -60,6 +62,13 @@ public function ignoreInvalidFunctions($ignore = true): self
6062
return $this;
6163
}
6264

65+
public function extractCommentsStartingWith(string ...$prefixes): self
66+
{
67+
$this->commentsPrefixes = $prefixes;
68+
69+
return $this;
70+
}
71+
6372
public function scanString(string $string, string $filename): void
6473
{
6574
$functionsScanner = $this->getFunctionsScanner();
@@ -94,7 +103,11 @@ protected function gettext(ParsedFunction $function): ?Translation
94103
return null;
95104
}
96105
list($original) = $function->getArguments();
97-
return $this->saveTranslation(null, null, $original);
106+
107+
return $this->addComments(
108+
$function,
109+
$this->saveTranslation(null, null, $original)
110+
);
98111
}
99112

100113
protected function ngettext(ParsedFunction $function): ?Translation
@@ -103,7 +116,11 @@ protected function ngettext(ParsedFunction $function): ?Translation
103116
return null;
104117
}
105118
list($original, $plural) = $function->getArguments();
106-
return $this->saveTranslation(null, null, $original, $plural);
119+
120+
return $this->addComments(
121+
$function,
122+
$this->saveTranslation(null, null, $original, $plural)
123+
);
107124
}
108125

109126
protected function pgettext(ParsedFunction $function): ?Translation
@@ -112,7 +129,11 @@ protected function pgettext(ParsedFunction $function): ?Translation
112129
return null;
113130
}
114131
list($context, $original) = $function->getArguments();
115-
return $this->saveTranslation(null, $context, $original);
132+
133+
return $this->addComments(
134+
$function,
135+
$this->saveTranslation(null, $context, $original)
136+
);
116137
}
117138

118139
protected function dgettext(ParsedFunction $function): ?Translation
@@ -121,7 +142,11 @@ protected function dgettext(ParsedFunction $function): ?Translation
121142
return null;
122143
}
123144
list($domain, $original) = $function->getArguments();
124-
return $this->saveTranslation($domain, null, $original);
145+
146+
return $this->addComments(
147+
$function,
148+
$this->saveTranslation($domain, null, $original)
149+
);
125150
}
126151

127152
protected function dpgettext(ParsedFunction $function): ?Translation
@@ -130,7 +155,11 @@ protected function dpgettext(ParsedFunction $function): ?Translation
130155
return null;
131156
}
132157
list($domain, $context, $original) = $function->getArguments();
133-
return $this->saveTranslation($domain, $context, $original);
158+
159+
return $this->addComments(
160+
$function,
161+
$this->saveTranslation($domain, $context, $original)
162+
);
134163
}
135164

136165
protected function npgettext(ParsedFunction $function): ?Translation
@@ -139,7 +168,11 @@ protected function npgettext(ParsedFunction $function): ?Translation
139168
return null;
140169
}
141170
list($context, $original, $plural) = $function->getArguments();
142-
return $this->saveTranslation(null, $context, $original, $plural);
171+
172+
return $this->addComments(
173+
$function,
174+
$this->saveTranslation(null, $context, $original, $plural)
175+
);
143176
}
144177

145178
protected function dngettext(ParsedFunction $function): ?Translation
@@ -148,7 +181,11 @@ protected function dngettext(ParsedFunction $function): ?Translation
148181
return null;
149182
}
150183
list($domain, $original, $plural) = $function->getArguments();
151-
return $this->saveTranslation($domain, null, $original, $plural);
184+
185+
return $this->addComments(
186+
$function,
187+
$this->saveTranslation($domain, null, $original, $plural)
188+
);
152189
}
153190

154191
protected function dnpgettext(ParsedFunction $function): ?Translation
@@ -157,7 +194,26 @@ protected function dnpgettext(ParsedFunction $function): ?Translation
157194
return null;
158195
}
159196
list($domain, $context, $original, $plural) = $function->getArguments();
160-
return $this->saveTranslation($domain, $context, $original, $plural);
197+
198+
return $this->addComments(
199+
$function,
200+
$this->saveTranslation($domain, $context, $original, $plural)
201+
);
202+
}
203+
204+
protected function addComments(ParsedFunction $function, Translation $translation): Translation
205+
{
206+
if (empty($this->commentsPrefixes)) {
207+
return $translation;
208+
}
209+
210+
foreach ($function->getComments() as $comment) {
211+
if ($this->checkComment($comment)) {
212+
$translation->getExtractedComments()->add($comment);
213+
}
214+
}
215+
216+
return $translation;
161217
}
162218

163219
protected function checkFunction(ParsedFunction $function, int $minLength): bool
@@ -195,4 +251,15 @@ protected function checkFunction(ParsedFunction $function, int $minLength): bool
195251

196252
return true;
197253
}
254+
255+
protected function checkComment(string $comment): bool
256+
{
257+
foreach ($this->commentsPrefixes as $prefix) {
258+
if (strpos($comment, $prefix) === 0) {
259+
return true;
260+
}
261+
}
262+
263+
return false;
264+
}
198265
}

0 commit comments

Comments
 (0)