Skip to content

Commit e5ec7d7

Browse files
committed
implement entrypoint.
1 parent 24af332 commit e5ec7d7

File tree

6 files changed

+39
-14
lines changed

6 files changed

+39
-14
lines changed

bin/php-variable-hard-usage

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,12 @@
33

44
declare(strict_types=1);
55

6-
require __DIR__ . '/../vendor/autoload.php';
6+
foreach ([__DIR__ . '/../../../autoload.php', __DIR__ . '/../vendor/autoload.php'] as $file) {
7+
if (file_exists($file)) {
8+
require $file;
9+
break;
10+
}
11+
}
712

813
use Smeghead\PhpVariableHardUsage\Command;
914

src/Analyze/AnalysisResult.php

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,21 @@ public function __construct(
1616
public readonly array $scopes
1717
)
1818
{
19-
$maxVariableHardUsage = 0;
20-
$avarageVariableHardUsage = 0;
21-
foreach ($scopes as $scope) {
22-
foreach ($scope->getAnalyzedVariables() as $analyzedVariable) {
23-
$maxVariableHardUsage = max($maxVariableHardUsage, $analyzedVariable->variableHardUsage);
24-
$avarageVariableHardUsage += $analyzedVariable->variableHardUsage;
25-
}
19+
$this->maxVariableHardUsage = max(array_map(fn(Scope $scope) => $scope->getVariableHardUsage(), $scopes));
20+
if (count($scopes) === 0) {
21+
$this->avarageVariableHardUsage = 0;
22+
} else {
23+
$this->avarageVariableHardUsage = array_sum(array_map(fn(Scope $scope) => $scope->getVariableHardUsage(), $scopes)) / count($scopes);
2624
}
27-
$this->maxVariableHardUsage = $maxVariableHardUsage;
28-
$this->avarageVariableHardUsage = $avarageVariableHardUsage / count($scopes);
25+
}
26+
27+
public function format(): string
28+
{
29+
$output = [
30+
'maxVariableHardUsage' => $this->maxVariableHardUsage,
31+
'avarageVariableHardUsage' => $this->avarageVariableHardUsage,
32+
];
33+
$output['scopes'] = array_map(fn(Scope $scope) => ['name' => $scope->getName(), 'variableHardUsage' => $scope->getVariableHardUsage()], $this->scopes);
34+
return json_encode($output, JSON_PRETTY_PRINT) . PHP_EOL;
2935
}
3036
}

src/Analyze/FunctionScope.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,4 +25,9 @@ public function getAnalyzedVariables(): array
2525
{
2626
return $this->analyzedVariables;
2727
}
28+
29+
public function getVariableHardUsage(): int
30+
{
31+
return array_sum(array_map(fn(AnalyzedVariable $variable) => $variable->variableHardUsage, $this->analyzedVariables));
32+
}
2833
}

src/Analyze/Scope.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,6 @@ public function getName(): string;
1212
* @return list<AnalyzedVariable>
1313
*/
1414
public function getAnalyzedVariables(): array;
15+
16+
public function getVariableHardUsage(): int;
1517
}

src/Analyze/VariableAnalyzer.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,14 +32,14 @@ private function analyzeFunction(Func $function): Scope
3232

3333
foreach ($variableNames as $variableName) {
3434
$vars = array_filter($variables, fn($variable) => $variable->name === $variableName);
35-
$variableHardUsage = $this->calc($vars);
35+
$variableHardUsage = $this->calcVariableHardUsage($vars);
3636
$analyzedVars[] = new AnalyzedVariable($variableName, $variableHardUsage);
3737
}
3838

3939
return new FunctionScope($function->name, $analyzedVars);
4040
}
4141

42-
private function calc(array $vars): int
42+
private function calcVariableHardUsage(array $vars): int
4343
{
4444
$lineNumbers = array_map(fn($var) => $var->lineNumber, $vars);
4545
$avarageLinuNumber = intval(array_sum($lineNumbers) / count($lineNumbers));

src/Command.php

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,10 @@
44

55
namespace Smeghead\PhpVariableHardUsage;
66

7+
use Smeghead\PhpVariableHardUsage\Analyze\VariableAnalyzer;
8+
use Smeghead\PhpVariableHardUsage\Core\Analyzer;
9+
use Smeghead\PhpVariableHardUsage\Parse\VariableParser;
10+
711
final class Command
812
{
913
public function run(array $argv): void
@@ -19,8 +23,11 @@ public function run(array $argv): void
1923
return;
2024
}
2125

22-
$analyzer = new Analyzer();
23-
$analyzer->analyze($filePath);
26+
$parser = new VariableParser();
27+
$parseResult = $parser->parse(file_get_contents($filePath));
28+
$analyzer = new VariableAnalyzer($parseResult->functions);
29+
$result = $analyzer->analyze();
30+
echo $result->format();
2431
}
2532

2633
private function printHelp(): void

0 commit comments

Comments
 (0)