Skip to content

Commit 487e9ce

Browse files
committed
Consume data sooner, remove redundant classes
1 parent aa56fa9 commit 487e9ce

12 files changed

+18
-108
lines changed

src/Psalm/Internal/Codebase/Analyzer.php

+6-2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
namespace Psalm\Internal\Codebase;
66

7+
use Amp\Future;
78
use InvalidArgumentException;
89
use PhpParser;
910
use Psalm\CodeLocation;
@@ -31,6 +32,7 @@
3132
use SebastianBergmann\Diff\Output\StrictUnifiedDiffOutputBuilder;
3233
use UnexpectedValueException;
3334

35+
use function Amp\Future\await;
3436
use function array_filter;
3537
use function array_intersect_key;
3638
use function array_merge;
@@ -313,13 +315,15 @@ private function doAnalysis(ProjectAnalyzer $project_analyzer, int $pool_size):
313315
$this->progress->debug('Forking analysis' . "\n");
314316

315317
// Wait for all tasks to complete and collect the results.
316-
$pool->runAll(new InitAnalyzerTask);
318+
await($pool->runAll(new InitAnalyzerTask));
317319
$pool->run($this->files_to_analyze, AnalyzerTask::class, $task_done_closure);
318320
$forked_pool_data = $pool->runAll(new ShutdownAnalyzerTask);
319321

320322
$this->progress->debug('Collecting forked analysis results' . "\n");
321323

322-
foreach ($forked_pool_data as $pool_data) {
324+
foreach (Future::iterate($forked_pool_data) as $pool_data) {
325+
$pool_data = $pool_data->await();
326+
323327
IssueBuffer::addIssues($pool_data['issues']);
324328
IssueBuffer::addFixableIssues($pool_data['fixable_issue_counts']);
325329

src/Psalm/Internal/Codebase/Scanner.php

+6-6
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
use Throwable;
2626
use UnexpectedValueException;
2727

28+
use function Amp\Future\await;
2829
use function array_filter;
2930
use function array_merge;
3031
use function array_pop;
@@ -308,7 +309,7 @@ private function scanFilePaths(int $pool_size): bool
308309
$this->progress,
309310
);
310311

311-
$pool->runAll(new InitScannerTask);
312+
await($pool->runAll(new InitScannerTask));
312313
$pool->run($files_to_scan, ScannerTask::class, function (): void {
313314
$this->progress->taskDone(0);
314315
});
@@ -317,6 +318,8 @@ private function scanFilePaths(int $pool_size): bool
317318
$forked_pool_data = $pool->runAll(new ShutdownScannerTask);
318319

319320
foreach ($forked_pool_data as $pool_data) {
321+
$pool_data = $pool_data->await();
322+
320323
IssueBuffer::addIssues($pool_data['issues']);
321324

322325
$this->codebase->statements_provider->addChangedMembers(
@@ -351,12 +354,9 @@ private function scanFilePaths(int $pool_size): bool
351354
}
352355
}
353356
} else {
354-
$i = 0;
355-
356357
foreach ($files_to_scan as $file_path => $_) {
358+
$this->scanAPath($file_path);
357359
$this->progress->taskDone(0);
358-
$this->scanAPath($i, $file_path);
359-
++$i;
360360
}
361361
}
362362

@@ -707,7 +707,7 @@ public function isForked(): void
707707
$this->is_forked = true;
708708
}
709709

710-
public function scanAPath(int $_, string $file_path): void
710+
public function scanAPath(string $file_path): void
711711
{
712712
$this->scanFile(
713713
$file_path,

src/Psalm/Internal/Fork/ForkMessage.php

-9
This file was deleted.

src/Psalm/Internal/Fork/ForkProcessDoneMessage.php

-20
This file was deleted.

src/Psalm/Internal/Fork/ForkProcessErrorMessage.php

-20
This file was deleted.

src/Psalm/Internal/Fork/ForkTaskDoneMessage.php

-20
This file was deleted.

src/Psalm/Internal/Fork/InitAnalyzerTask.php

+1-5
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,6 @@
1717
final class InitAnalyzerTask implements Task
1818
{
1919
public function run(Channel $channel, Cancellation $cancellation): mixed
20-
{
21-
self::runStatic();
22-
return null;
23-
}
24-
public static function runStatic(): void
2520
{
2621
$project_analyzer = ProjectAnalyzer::getInstance();
2722
$codebase = $project_analyzer->getCodebase();
@@ -41,5 +36,6 @@ public static function runStatic(): void
4136
$file_reference_provider->setFileReferencesToMissingClassMembers([]);
4237
$file_reference_provider->setReferencesToMixedMemberNames([]);
4338
$file_reference_provider->setMethodParamUses([]);
39+
return null;
4440
}
4541
}

src/Psalm/Internal/Fork/InitScannerTask.php

+2-6
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,6 @@
2020
final class InitScannerTask implements Task
2121
{
2222
final public function run(Channel $channel, Cancellation $cancellation): mixed
23-
{
24-
self::runStatic();
25-
return null;
26-
}
27-
28-
public static function runStatic(): void
2923
{
3024
$analyzer = ProjectAnalyzer::getInstance();
3125
$analyzer->progress->debug('Initialising forked process for scanning' . PHP_EOL);
@@ -40,5 +34,7 @@ public static function runStatic(): void
4034
$statements_provider->resetDiffs();
4135

4236
$analyzer->progress->debug('Have initialised forked process for scanning' . PHP_EOL);
37+
38+
return null;
4339
}
4440
}

src/Psalm/Internal/Fork/Pool.php

+2-4
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ public function run(
110110
/**
111111
* @template T
112112
* @param Task<T, void, void> $task
113-
* @return array<int, T>
113+
* @return array<int, Future<T>>
114114
*/
115115
public function runAll(Task $task): array
116116
{
@@ -123,8 +123,6 @@ public function runAll(Task $task): array
123123
for ($x = 0; $x < $this->threads; $x++) {
124124
$workers []= $this->pool->getWorker();
125125
}
126-
return await(
127-
array_map(fn(Worker $w): Future => $w->submit($task)->getFuture(), $workers),
128-
);
126+
return array_map(fn(Worker $w): Future => $w->submit($task)->getFuture(), $workers);
129127
}
130128
}

src/Psalm/Internal/Fork/ScannerTask.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@ public function __construct(private string $file)
2020
}
2121
public function run(Channel $channel, Cancellation $cancellation): mixed
2222
{
23-
return ProjectAnalyzer::getInstance()->getCodebase()->scanner->scanAPath(0, $this->file);
23+
return ProjectAnalyzer::getInstance()->getCodebase()->scanner->scanAPath($this->file);
2424
}
2525
}

src/Psalm/Internal/Fork/ShutdownAnalyzerTask.php

-8
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,6 @@ final class ShutdownAnalyzerTask implements Task
2424
* @return WorkerData
2525
*/
2626
public function run(Channel $channel, Cancellation $cancellation): mixed
27-
{
28-
return self::getPoolData();
29-
}
30-
31-
/**
32-
* @return WorkerData
33-
*/
34-
public static function getPoolData(): array
3527
{
3628
$project_analyzer = ProjectAnalyzer::getInstance();
3729
$codebase = $project_analyzer->getCodebase();

src/Psalm/Internal/Fork/ShutdownScannerTask.php

-7
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,6 @@ final class ShutdownScannerTask implements Task
2424
* @return PoolData
2525
*/
2626
public function run(Channel $channel, Cancellation $cancellation): mixed
27-
{
28-
return self::getPoolData();
29-
}
30-
/**
31-
* @return PoolData
32-
*/
33-
public static function getPoolData(): array
3427
{
3528
$project_analyzer = ProjectAnalyzer::getInstance();
3629
$project_analyzer->progress->debug('Collecting data from forked scanner process' . PHP_EOL);

0 commit comments

Comments
 (0)