Skip to content

Commit e696efd

Browse files
committed
[+]: improve check for phpstan stubs
1 parent 5c95b0a commit e696efd

File tree

4 files changed

+55
-27
lines changed

4 files changed

+55
-27
lines changed

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,11 @@ php bin/phpdocfixer static_analysis [--remove-array-value-info="true"] [--stubs-
2525
php bin/phpdocfixer static_analysis --remove-array-value-info="true" --stubs-path="../php-src/" --stubs-file-extension=".stub.php" ../phpstan-src/resources/functionMap.php
2626
```
2727
28+
#### example: check types from phpstorm-stubs (mysqli) against static code analysis stubs from PHPStan
29+
```
30+
php bin/phpdocfixer static_analysis --stubs-path=../phpstorm-stubs/mysqli/ ../phpstan-src/resources/functionMap.php
31+
```
32+
2833
#### example: check types from PhpStorm stubs against static code analysis stubs from Psalm
2934
```
3035
php bin/phpdocfixer static_analysis ../psalm/src/Psalm/Internal/CallMap.php

src/voku/PhpDocFixer/CliCommand/StaticAnalysisFixerCommand.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,8 +100,8 @@ public function execute(InputInterface $input, OutputInterface $output): int
100100
(array_values($stubsInfo[$functionName_or_classAndMethodName]['params'] ?? [])) !== (array_values($types['params'] ?? []))
101101
) {
102102
$errors[$functionName_or_classAndMethodName] = [
103-
'phpStubTypes' => $stubsInfo[$functionName_or_classAndMethodName],
104-
'phpStanTypes' => $types,
103+
'phpStubTypes' => $stubsInfo[$functionName_or_classAndMethodName],
104+
'phpStaticAnalysisTypes' => $types,
105105
];
106106
}
107107
}

src/voku/PhpDocFixer/PhpStubs/PhpStubsReader.php

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -42,27 +42,35 @@ public function parse(): array
4242
foreach ($functionInfo as $functionName => $info) {
4343

4444
$returnTypeTmp = explode('|', $info['returnTypes']['typeFromPhpDocSimple'] ?? '');
45+
foreach ($returnTypeTmp as &$returnTypeInnerTmp) {
46+
if ($this->removeArrayValueInfo) {
47+
$returnTypeInnerTmp = $this->removeArrayValueInfo($returnTypeInnerTmp);
48+
}
49+
50+
$returnTypeInnerTmp = \ltrim($returnTypeInnerTmp, '\\');
51+
}
4552
sort($returnTypeTmp);
4653
$returnTypeTmp = implode('|', $returnTypeTmp);
4754

48-
$return[$functionName]['return'] = \ltrim($returnTypeTmp, '\\');
49-
if ($this->removeArrayValueInfo) {
50-
$return[$functionName]['return'] = $this->removeArrayValueInfo($return[$functionName]['return']);
51-
}
55+
$return[$functionName]['return'] = $returnTypeTmp;
5256
if ($return[$functionName]['return'] === '') {
5357
$return[$functionName]['return'] = 'void';
5458
}
5559

5660
foreach ($info['paramsTypes'] as $paramName => $paramTypes) {
5761

5862
$paramTypeTmp = explode('|', $paramTypes['typeFromPhpDocSimple'] ?? '');
63+
foreach ($paramTypeTmp as &$paramTypeInnerTmp) {
64+
if ($this->removeArrayValueInfo) {
65+
$paramTypeInnerTmp = $this->removeArrayValueInfo($paramTypeInnerTmp);
66+
}
67+
68+
$paramTypeInnerTmp = \ltrim($paramTypeInnerTmp, '\\');
69+
}
5970
sort($paramTypeTmp);
6071
$paramTypeTmp = implode('|', $paramTypeTmp);
6172

62-
$return[$functionName]['params'][$paramName] = \ltrim($paramTypeTmp, '\\');
63-
if ($this->removeArrayValueInfo) {
64-
$return[$functionName]['params'][$paramName] = $this->removeArrayValueInfo($return[$functionName]['params'][$paramName]);
65-
}
73+
$return[$functionName]['params'][$paramName] = $paramTypeTmp;
6674
}
6775
}
6876

@@ -72,27 +80,35 @@ public function parse(): array
7280
foreach ($methodInfo as $methodName => $info) {
7381

7482
$returnTypeTmp = explode('|', $info['returnTypes']['typeFromPhpDocSimple'] ?? '');
83+
foreach ($returnTypeTmp as &$returnTypeInnerTmp) {
84+
if ($this->removeArrayValueInfo) {
85+
$returnTypeInnerTmp = $this->removeArrayValueInfo($returnTypeInnerTmp);
86+
}
87+
88+
$returnTypeInnerTmp = \ltrim($returnTypeInnerTmp, '\\');
89+
}
7590
sort($returnTypeTmp);
7691
$returnTypeTmp = implode('|', $returnTypeTmp);
7792

78-
$return[$className . '::' . $methodName]['return'] = \ltrim($returnTypeTmp, '\\');
79-
if ($this->removeArrayValueInfo) {
80-
$return[$className . '::' . $methodName]['return'] = $this->removeArrayValueInfo($return[$className . '::' . $methodName]['return']);
81-
}
93+
$return[$className . '::' . $methodName]['return'] = $returnTypeTmp;
8294
if ($return[$className . '::' . $methodName]['return'] === '') {
8395
$return[$className . '::' . $methodName]['return'] = 'void';
8496
}
8597

8698
foreach ($info['paramsTypes'] as $paramName => $paramTypes) {
8799

88100
$paramTypeTmp = explode('|', $paramTypes['typeFromPhpDocSimple'] ?? '');
101+
foreach ($paramTypeTmp as &$paramTypeInnerTmp) {
102+
if ($this->removeArrayValueInfo) {
103+
$paramTypeInnerTmp = $this->removeArrayValueInfo($paramTypeInnerTmp);
104+
}
105+
106+
$paramTypeInnerTmp = \ltrim($paramTypeInnerTmp, '\\');
107+
}
89108
sort($paramTypeTmp);
90109
$paramTypeTmp = implode('|', $paramTypeTmp);
91110

92-
$return[$className . '::' . $methodName]['params'][$paramName] = \ltrim($paramTypeTmp, '\\');
93-
if ($this->removeArrayValueInfo) {
94-
$return[$className . '::' . $methodName]['params'][$paramName] = $this->removeArrayValueInfo($return[$className . '::' . $methodName]['params'][$paramName]);
95-
}
111+
$return[$className . '::' . $methodName]['params'][$paramName] = $paramTypeTmp;
96112
}
97113
}
98114
}

src/voku/PhpDocFixer/StaticCodeAnalysisStubs/StaticCodeAnalysisReader.php

Lines changed: 16 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -42,13 +42,17 @@ public function parse(): array
4242
}
4343

4444
$returnType = explode('|', $returnType);
45+
foreach ($returnType as &$returnTypeInnerTmp) {
46+
if ($this->removeArrayValueInfo) {
47+
$returnTypeInnerTmp = $this->removeArrayValueInfo($returnTypeInnerTmp);
48+
}
49+
50+
$returnTypeInnerTmp = \ltrim($returnTypeInnerTmp, '\\');
51+
}
4552
sort($returnType);
4653
$returnType = implode('|', $returnType);
4754

48-
$return[$functionName]['return'] = \ltrim($returnType, '\\');
49-
if ($this->removeArrayValueInfo) {
50-
$return[$functionName]['return'] = $this->removeArrayValueInfo($return[$functionName]['return']);
51-
}
55+
$return[$functionName]['return'] = $returnType;
5256
if ($return[$functionName]['return'] === '') {
5357
$return[$functionName]['return'] = 'void';
5458
}
@@ -60,14 +64,17 @@ public function parse(): array
6064
}
6165

6266
$paramTypes = explode('|', $paramTypes);
67+
foreach ($paramTypes as &$paramTypeInnerTmp) {
68+
if ($this->removeArrayValueInfo) {
69+
$paramTypeInnerTmp = $this->removeArrayValueInfo($paramTypeInnerTmp);
70+
}
71+
72+
$paramTypeInnerTmp = \ltrim($paramTypeInnerTmp, '\\');
73+
}
6374
sort($paramTypes);
6475
$paramTypes = implode('|', $paramTypes);
6576

66-
67-
$return[$functionName]['params'][$paramName] = \ltrim($paramTypes ?? '', '\\');
68-
if ($this->removeArrayValueInfo) {
69-
$return[$functionName]['params'][$paramName] = $this->removeArrayValueInfo($return[$functionName]['params'][$paramName]);
70-
}
77+
$return[$functionName]['params'][$paramName] = $paramTypes ?? '';
7178
}
7279
}
7380

0 commit comments

Comments
 (0)