Skip to content

Commit b87a812

Browse files
authored
Merge pull request #563 from sasezaki/generics
refactor: add PHPStan generic type annotations and simplify detector implementations Enhance type safety with PHPStan generics and refactor detectors This merge introduces generic type annotations using @extends and @template-extends across all Extractor and Detector classes in adapters (Archive, Gist, ImageShack, Twitter, Wikipedia, Facebook, Github, Flickr, etc.). It also removes redundant intermediate variables in detectors by directly accessing the API, and simplifies createCustomDetectors() return types. Benefits include improved PHPStan type inference, better IDE support, and cleaner code overall.
2 parents ce4bf6c + 02a058b commit b87a812

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

78 files changed

+300
-129
lines changed

src/Adapters/Archive/Detectors/AuthorName.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@
33

44
namespace Embed\Adapters\Archive\Detectors;
55

6-
use Embed\Adapters\Archive\Extractor;
76
use Embed\Detectors\AuthorName as Detector;
87

8+
/**
9+
* @extends Detector<\Embed\Adapters\Archive\Extractor>
10+
*/
911
class AuthorName extends Detector
1012
{
1113
public function detect(): ?string
1214
{
13-
/** @var Extractor $extractor */
14-
$extractor = $this->extractor;
15-
$api = $extractor->getApi();
15+
$api = $this->extractor->getApi();
1616

1717
$result = $api->str('metadata', 'creator');
1818
return (is_string($result) && trim($result) !== '') ? $result : parent::detect();

src/Adapters/Archive/Detectors/Code.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,9 @@
88
use function Embed\html;
99
use function Embed\matchPath;
1010

11+
/**
12+
* @extends Detector<\Embed\Adapters\Archive\Extractor>
13+
*/
1114
class Code extends Detector
1215
{
1316
public function detect(): ?EmbedCode

src/Adapters/Archive/Detectors/Description.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@
33

44
namespace Embed\Adapters\Archive\Detectors;
55

6-
use Embed\Adapters\Archive\Extractor;
76
use Embed\Detectors\Description as Detector;
87

8+
/**
9+
* @extends Detector<\Embed\Adapters\Archive\Extractor>
10+
*/
911
class Description extends Detector
1012
{
1113
public function detect(): ?string
1214
{
13-
/** @var Extractor $extractor */
14-
$extractor = $this->extractor;
15-
$api = $extractor->getApi();
15+
$api = $this->extractor->getApi();
1616

1717
$result = $api->str('metadata', 'extract');
1818
return (is_string($result) && trim($result) !== '') ? $result : parent::detect();

src/Adapters/Archive/Detectors/ProviderName.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55

66
use Embed\Detectors\ProviderName as Detector;
77

8+
/**
9+
* @extends Detector<\Embed\Adapters\Archive\Extractor>
10+
*/
811
class ProviderName extends Detector
912
{
1013
public function detect(): string

src/Adapters/Archive/Detectors/PublishedTime.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,16 @@
44
namespace Embed\Adapters\Archive\Detectors;
55

66
use DateTime;
7-
use Embed\Adapters\Archive\Extractor;
87
use Embed\Detectors\PublishedTime as Detector;
98

9+
/**
10+
* @extends Detector<\Embed\Adapters\Archive\Extractor>
11+
*/
1012
class PublishedTime extends Detector
1113
{
1214
public function detect(): ?DateTime
1315
{
14-
/** @var Extractor $extractor */
15-
$extractor = $this->extractor;
16-
$api = $extractor->getApi();
16+
$api = $this->extractor->getApi();
1717

1818
$fields = ['publicdate', 'addeddate', 'date'];
1919
foreach ($fields as $field) {

src/Adapters/Archive/Detectors/Title.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,16 @@
33

44
namespace Embed\Adapters\Archive\Detectors;
55

6-
use Embed\Adapters\Archive\Extractor;
76
use Embed\Detectors\Title as Detector;
87

8+
/**
9+
* @extends Detector<\Embed\Adapters\Archive\Extractor>
10+
*/
911
class Title extends Detector
1012
{
1113
public function detect(): ?string
1214
{
13-
/** @var Extractor $extractor */
14-
$extractor = $this->extractor;
15-
$api = $extractor->getApi();
15+
$api = $this->extractor->getApi();
1616

1717
$result = $api->str('metadata', 'title');
1818
return (is_string($result) && trim($result) !== '') ? $result : parent::detect();

src/Adapters/Archive/Extractor.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
use Psr\Http\Message\ResponseInterface;
1010
use Psr\Http\Message\UriInterface;
1111

12+
/**
13+
* @template-extends Base<\Embed\Detectors\Detector<self>>
14+
*/
1215
class Extractor extends Base
1316
{
1417
private Api $api;
@@ -28,9 +31,6 @@ public function getApi(): Api
2831
return $this->api;
2932
}
3033

31-
/**
32-
* @return array<string, \Embed\Detectors\Detector>
33-
*/
3434
public function createCustomDetectors(): array
3535
{
3636
return [

src/Adapters/Bandcamp/Detectors/ProviderName.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,9 @@
55

66
use Embed\Detectors\ProviderName as Detector;
77

8+
/**
9+
* @extends Detector<\Embed\Adapters\Bandcamp\Extractor>
10+
*/
811
class ProviderName extends Detector
912
{
1013
public function detect(): string

src/Adapters/Bandcamp/Extractor.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55

66
use Embed\Extractor as Base;
77

8+
/**
9+
* @template-extends Base<\Embed\Detectors\Detector<self>>
10+
*/
811
class Extractor extends Base
912
{
10-
/**
11-
* @return array<string, \Embed\Detectors\Detector>
12-
*/
1313
public function createCustomDetectors(): array
1414
{
1515
return [

src/Adapters/CadenaSer/Detectors/Code.php

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,9 @@
99
use function Embed\html;
1010
use function Embed\matchPath;
1111

12+
/**
13+
* @extends Detector<\Embed\Adapters\CadenaSer\Extractor>
14+
*/
1215
class Code extends Detector
1316
{
1417
public function detect(): ?EmbedCode

0 commit comments

Comments
 (0)