Skip to content

Commit 677f6d5

Browse files
committed
type hints, return types, promoted properties
1 parent 63c96c1 commit 677f6d5

31 files changed

+330
-679
lines changed

src/Github/Api.php

+43-137
Large diffs are not rendered by default.

src/Github/Helpers.php

+6-17
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,13 @@
1515
*/
1616
class Helpers
1717
{
18-
/** @var Http\IClient */
19-
private static $client;
18+
private static Http\IClient $client;
2019

2120

2221
/**
23-
* @param mixed
24-
* @return string
25-
*
2622
* @throws JsonException
2723
*/
28-
public static function jsonEncode($value)
24+
public static function jsonEncode(mixed $value): string
2925
{
3026
$json = json_encode($value, JSON_UNESCAPED_UNICODE);
3127
if ($error = json_last_error()) {
@@ -36,28 +32,21 @@ public static function jsonEncode($value)
3632

3733

3834
/**
39-
* @param mixed
40-
* @return string
41-
*
4235
* @throws JsonException
4336
*/
44-
public static function jsonDecode($json)
37+
public static function jsonDecode(string $json): mixed
4538
{
46-
$value = json_decode((string) $json, false, 512, JSON_BIGINT_AS_STRING);
39+
$value = json_decode($json, false, 512, JSON_BIGINT_AS_STRING);
4740
if ($error = json_last_error()) {
4841
throw new JsonException(json_last_error_msg(), $error);
4942
}
5043
return $value;
5144
}
5245

5346

54-
/**
55-
* @param bool
56-
* @return Http\IClient
57-
*/
58-
public static function createDefaultClient($newInstance = false)
47+
public static function createDefaultClient(bool $newInstance = false): Http\IClient
5948
{
60-
if (self::$client === null || $newInstance) {
49+
if (empty(self::$client) || $newInstance) {
6150
self::$client = extension_loaded('curl')
6251
? new Http\CurlClient
6352
: new Http\StreamClient;

src/Github/Http/AbstractClient.php

+10-20
Original file line numberDiff line numberDiff line change
@@ -17,14 +17,14 @@ abstract class AbstractClient implements IClient
1717
use Github\Strict;
1818

1919
/** @var int[] will follow Location header on these response codes */
20-
public $redirectCodes = [
20+
public array $redirectCodes = [
2121
Response::S301_MOVED_PERMANENTLY,
2222
Response::S302_FOUND,
2323
Response::S307_TEMPORARY_REDIRECT,
2424
];
2525

26-
/** @var int maximum redirects per request*/
27-
public $maxRedirects = 5;
26+
/** Maximum redirects per request */
27+
public int $maxRedirects = 5;
2828

2929
/** @var callable|null */
3030
private $onRequest;
@@ -36,11 +36,9 @@ abstract class AbstractClient implements IClient
3636
/**
3737
* @see https://developer.github.com/v3/#http-redirects
3838
*
39-
* @return Response
40-
*
4139
* @throws BadResponseException
4240
*/
43-
public function request(Request $request)
41+
public function request(Request $request): Response
4442
{
4543
$request = clone $request;
4644

@@ -75,38 +73,30 @@ public function request(Request $request)
7573
}
7674

7775

78-
/**
79-
* @param callable|null function(Request $request)
80-
* @return self
81-
*/
82-
public function onRequest($callback)
76+
/** @inheritdoc */
77+
public function onRequest(?callable $callback): static
8378
{
8479
$this->onRequest = $callback;
8580
return $this;
8681
}
8782

8883

89-
/**
90-
* @param callable|null function(Response $response)
91-
* @return self
92-
*/
93-
public function onResponse($callback)
84+
/** @inheritdoc */
85+
public function onResponse(?callable $callback): static
9486
{
9587
$this->onResponse = $callback;
9688
return $this;
9789
}
9890

9991

100-
protected function setupRequest(Request $request)
92+
protected function setupRequest(Request $request): void
10193
{
10294
$request->addHeader('Expect', '');
10395
}
10496

10597

10698
/**
107-
* @return Response
108-
*
10999
* @throws BadResponseException
110100
*/
111-
abstract protected function process(Request $request);
101+
abstract protected function process(Request $request): Response;
112102
}

src/Github/Http/CachedClient.php

+16-37
Original file line numberDiff line numberDiff line change
@@ -17,47 +17,34 @@ class CachedClient implements IClient
1717
{
1818
use Github\Strict;
1919

20-
/** @var Storages\ICache|null */
21-
private $cache;
20+
private IClient $client;
2221

23-
/** @var IClient */
24-
private $client;
25-
26-
/** @var bool */
27-
private $forbidRecheck;
28-
29-
/** @var callable|null */
22+
/** @var ?callable(Response $response): void */
3023
private $onResponse;
3124

3225

3326
/**
34-
* @param Storages\ICache
35-
* @param IClient
36-
* @param bool forbid checking Github for new data; more or less development purpose only
27+
* @param bool $forbidRecheck Forbid checking GitHub for new data; more or less development purpose only
3728
*/
38-
public function __construct(Storages\ICache $cache, IClient $client = null, $forbidRecheck = false)
39-
{
40-
$this->cache = $cache;
29+
public function __construct(
30+
private Storages\ICache $cache,
31+
IClient $client = null,
32+
private bool $forbidRecheck = false,
33+
) {
4134
$this->client = $client ?: Github\Helpers::createDefaultClient();
42-
$this->forbidRecheck = (bool) $forbidRecheck;
4335
}
4436

4537

46-
/**
47-
* @return IClient
48-
*/
49-
public function getInnerClient()
38+
public function getInnerClient(): IClient
5039
{
5140
return $this->client;
5241
}
5342

5443

5544
/**
56-
* @return Response
57-
*
5845
* @throws BadResponseException
5946
*/
60-
public function request(Request $request)
47+
public function request(Request $request): Response
6148
{
6249
$request = clone $request;
6350

@@ -106,37 +93,29 @@ public function request(Request $request)
10693
}
10794

10895

109-
/**
110-
* @param callable|null function(Request $request)
111-
* @return self
112-
*/
113-
public function onRequest($callback)
96+
/** @inheritdoc */
97+
public function onRequest(?callable $callback): static
11498
{
11599
$this->client->onRequest($callback);
116100
return $this;
117101
}
118102

119103

120-
/**
121-
* @param callable|null function(Response $response)
122-
* @return self
123-
*/
124-
public function onResponse($callback)
104+
/** @inheritdoc */
105+
public function onResponse(?callable $callback): static
125106
{
126107
$this->client->onResponse(null);
127108
$this->onResponse = $callback;
128109
return $this;
129110
}
130111

131112

132-
/**
133-
* @return bool
134-
*/
135-
protected function isCacheable(Response $response)
113+
protected function isCacheable(Response $response): bool
136114
{
137115
/** @todo Do it properly. Vary:, Pragma:, TTL... */
138116
if (!$response->isCode(200)) {
139117
return false;
118+
140119
} elseif (preg_match('#max-age=0|must-revalidate#i', $response->getHeader('Cache-Control', ''))) {
141120
return false;
142121
}

src/Github/Http/CurlClient.php

+8-15
Original file line numberDiff line numberDiff line change
@@ -14,41 +14,34 @@
1414
*/
1515
class CurlClient extends AbstractClient
1616
{
17-
/** @var array|null */
18-
private $options;
19-
2017
/** @var resource */
2118
private $curl;
2219

2320

2421
/**
25-
* @param array cURL options {@link http://php.net/manual/en/function.curl-setopt.php}
26-
*
22+
* @param ?array $options cURL options {@link http://php.net/manual/en/function.curl-setopt.php}
2723
* @throws Github\LogicException
2824
*/
29-
public function __construct(array $options = null)
30-
{
25+
public function __construct(
26+
private ?array $options = null,
27+
) {
3128
if (!extension_loaded('curl')) {
3229
throw new Github\LogicException('cURL extension is not loaded.');
3330
}
34-
35-
$this->options = $options;
3631
}
3732

3833

39-
protected function setupRequest(Request $request)
34+
protected function setupRequest(Request $request): void
4035
{
4136
parent::setupRequest($request);
4237
$request->addHeader('Connection', 'keep-alive');
4338
}
4439

4540

4641
/**
47-
* @return Response
48-
*
4942
* @throws BadResponseException
5043
*/
51-
protected function process(Request $request)
44+
protected function process(Request $request): Response
5245
{
5346
$headers = [];
5447
foreach ($request->getHeaders() as $name => $value) {
@@ -84,7 +77,7 @@ protected function process(Request $request)
8477
$responseHeaders[$last] .= ' ' . trim($line); # RFC2616, 2.2
8578

8679
} elseif ($line !== "\r\n") {
87-
list($name, $value) = explode(':', $line, 2);
80+
[$name, $value] = explode(':', $line, 2);
8881
$responseHeaders[$last = trim($name)] = trim($value);
8982
}
9083

@@ -118,6 +111,6 @@ protected function process(Request $request)
118111
throw new BadResponseException('HTTP status code is missing:' . curl_error($this->curl), curl_errno($this->curl));
119112
}
120113

121-
return new Response($code, $responseHeaders, $content);
114+
return new Response((int) $code, $responseHeaders, $content);
122115
}
123116
}

src/Github/Http/IClient.php

+5-10
Original file line numberDiff line numberDiff line change
@@ -12,20 +12,15 @@
1212
*/
1313
interface IClient
1414
{
15-
/**
16-
* @return Response
17-
*/
18-
function request(Request $request);
15+
function request(Request $request): Response;
1916

2017
/**
21-
* @param callable|null
22-
* @return self
18+
* @param ?callable(Request $request): void $callback
2319
*/
24-
function onRequest($callback);
20+
function onRequest(?callable $callback): static;
2521

2622
/**
27-
* @param callable|null
28-
* @return self
23+
* @param ?callable(Response $response): void $callback
2924
*/
30-
function onResponse($callback);
25+
function onResponse(?callable $callback): static;
3126
}

0 commit comments

Comments
 (0)