Skip to content

Commit

Permalink
Update extractors (#143)
Browse files Browse the repository at this point in the history
* An extractor may support multiple file types

* Update extractors interface

Co-authored-by: Tobias Nyholm <tobias.nyholm@gmail.com>
  • Loading branch information
Olivier Dolbeau and Nyholm committed Dec 26, 2019
1 parent 3231e7a commit cf6a992
Show file tree
Hide file tree
Showing 6 changed files with 30 additions and 57 deletions.
48 changes: 19 additions & 29 deletions src/Extractor.php
Original file line number Diff line number Diff line change
Expand Up @@ -42,29 +42,6 @@ public function extractFromDirectory(string $dir): SourceCollection
return $this->doExtract($finder);
}

private function getType(SplFileInfo $file): string
{
$filename = $file->getFilename();
if (preg_match('|.+\.blade\.php$|', $filename)) {
$ext = 'blade.php';
} else {
$ext = $file->getExtension();
}

switch ($ext) {
case 'php':
case 'php5':
case 'phtml':
return 'php';
case 'twig':
return 'twig';
case 'blade.php':
return 'blade';
default:
return $ext;
}
}

public function addFileExtractor(FileExtractor $fileExtractor): void
{
$this->fileExtractors[] = $fileExtractor;
Expand All @@ -74,16 +51,29 @@ private function doExtract(Finder $finder): SourceCollection
{
$collection = new SourceCollection();
foreach ($finder as $file) {
$type = $this->getType($file);
foreach ($this->fileExtractors as $extractor) {
if ($extractor->getType() !== $type) {
continue;
}

if (null !== $extractor = $this->getRelevantExtractorForFile($file)) {
$extractor->getSourceLocations($file, $collection);
}
}

return $collection;
}

private function getRelevantExtractorForFile(SplFileInfo $file): ?FileExtractor
{
$filename = $file->getFilename();
if (preg_match('|.+\.blade\.php$|', $filename)) {
$ext = 'blade.php';
} else {
$ext = $file->getExtension();
}

foreach ($this->fileExtractors as $extractor) {
if ($extractor->supportsExtension($ext)) {
return $extractor;
}
}

return null;
}
}
4 changes: 2 additions & 2 deletions src/FileExtractor/BladeFileExtractor.php
Original file line number Diff line number Diff line change
Expand Up @@ -67,8 +67,8 @@ public function findTranslations(SplFileInfo $file): array
/**
* {@inheritdoc}
*/
public function getType(): string
public function supportsExtension(string $extension): bool
{
return 'blade';
return 'blade.php' === $extension;
}
}
5 changes: 1 addition & 4 deletions src/FileExtractor/FileExtractor.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,5 @@ interface FileExtractor
{
public function getSourceLocations(SplFileInfo $file, SourceCollection $collection): void;

/**
* The file type the extractor supports.
*/
public function getType(): string;
public function supportsExtension(string $extension): bool;
}
4 changes: 2 additions & 2 deletions src/FileExtractor/PHPFileExtractor.php
Original file line number Diff line number Diff line change
Expand Up @@ -53,9 +53,9 @@ public function getSourceLocations(SplFileInfo $file, SourceCollection $collecti
/**
* {@inheritdoc}
*/
public function getType(): string
public function supportsExtension(string $extension): bool
{
return 'php';
return \in_array($extension, ['php', 'php5', 'phtml']);
}

public function addVisitor(NodeVisitor $visitor): void
Expand Down
4 changes: 2 additions & 2 deletions src/FileExtractor/TwigFileExtractor.php
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,9 @@ public function getSourceLocations(SplFileInfo $file, SourceCollection $collecti
/**
* {@inheritdoc}
*/
public function getType(): string
public function supportsExtension(string $extension): bool
{
return 'twig';
return 'twig' === $extension;
}

public function addVisitor(NodeVisitorInterface $visitor): void
Expand Down
22 changes: 4 additions & 18 deletions tests/Smoke/AllExtractorsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -94,13 +94,8 @@ public function testNoException()

/**
* Assert that a translation key exists in source collection.
*
* @param $translationKey
* @param string $message
*
* @return SourceLocation
*/
private function translationExists(SourceCollection $sc, $translationKey, $message = null)
private function translationExists(SourceCollection $sc, string $translationKey, string $message = null): SourceLocation
{
if (empty($message)) {
$message = sprintf('Tried to find "%s" but failed', $translationKey);
Expand All @@ -123,11 +118,8 @@ private function translationExists(SourceCollection $sc, $translationKey, $messa

/**
* Assert that a translation key is missing in source collection.
*
* @param $translationKey
* @param string $message
*/
private function translationMissing(SourceCollection $sc, $translationKey, $message = null)
private function translationMissing(SourceCollection $sc, string $translationKey, string $message = null)
{
if (empty($message)) {
$message = sprintf('The translation key "%s" should not exist', $translationKey);
Expand All @@ -145,10 +137,7 @@ private function translationMissing(SourceCollection $sc, $translationKey, $mess
$this->assertFalse($found, $message);
}

/**
* @return PHPFileExtractor
*/
private function getPHPFileExtractor()
private function getPHPFileExtractor(): PHPFileExtractor
{
$file = new PHPFileExtractor();
$file->addVisitor(new ContainerAwareTrans());
Expand All @@ -166,10 +155,7 @@ private function getPHPFileExtractor()
return $file;
}

/**
* @return TwigFileExtractor
*/
private function getTwigFileExtractor()
private function getTwigFileExtractor(): TwigFileExtractor
{
$file = new TwigFileExtractor(TwigEnvironmentFactory::create());
$file->addVisitor(new TwigVisitor());
Expand Down

0 comments on commit cf6a992

Please sign in to comment.