From 789f6b1fc67d06df01664f96303256e2c4392ae3 Mon Sep 17 00:00:00 2001 From: Camille Dejoye Date: Sun, 19 Sep 2021 17:04:44 +0200 Subject: [PATCH] IndexerHandler: use ProgressNotifier --- .../Handler/IndexerHandler.php | 30 ++++++++++++++----- .../LanguageServerIndexerExtension.php | 2 ++ 2 files changed, 25 insertions(+), 7 deletions(-) diff --git a/lib/LanguageServerIndexer/Handler/IndexerHandler.php b/lib/LanguageServerIndexer/Handler/IndexerHandler.php index 86cd9e98..0e9ecd96 100644 --- a/lib/LanguageServerIndexer/Handler/IndexerHandler.php +++ b/lib/LanguageServerIndexer/Handler/IndexerHandler.php @@ -17,6 +17,8 @@ use Phpactor\Indexer\Model\Indexer; use Phpactor\LanguageServer\Core\Service\ServiceManager; use Phpactor\LanguageServer\Core\Service\ServiceProvider; +use Phpactor\LanguageServer\WorkDoneProgress\ProgressNotifier; +use Phpactor\LanguageServer\WorkDoneProgress\WorkDoneToken; use Phpactor\TextDocument\Exception\TextDocumentNotFound; use Phpactor\TextDocument\TextDocumentBuilder; use Psr\EventDispatcher\EventDispatcherInterface; @@ -46,6 +48,11 @@ class IndexerHandler implements Handler, ServiceProvider */ private $clientApi; + /** + * @var ProgressNotifier + */ + private $progressNotifier; + /** * @var ServiceManager */ @@ -65,6 +72,7 @@ public function __construct( Indexer $indexer, Watcher $watcher, ClientApi $clientApi, + ProgressNotifier $progressNotifier, LoggerInterface $logger, EventDispatcherInterface $eventDispatcher ) { @@ -72,6 +80,7 @@ public function __construct( $this->watcher = $watcher; $this->logger = $logger; $this->clientApi = $clientApi; + $this->progressNotifier = $progressNotifier; $this->eventDispatcher = $eventDispatcher; } @@ -103,22 +112,29 @@ public function indexer(CancellationToken $cancel): Promise return \Amp\call(function () use ($cancel) { $job = $this->indexer->getJob(); $size = $job->size(); - $this->clientApi->window()->showMessage()->info(sprintf('Indexing "%s" PHP files', $size)); + $workDoneToken = WorkDoneToken::generate(); + $this->progressNotifier->create($workDoneToken); + $this->progressNotifier->begin( + $workDoneToken, + 'Indexing', + sprintf('Indexing "%s" PHP files', $size), + 0, + false, + ); $start = microtime(true); $index = 0; foreach ($job->generator() as $file) { $index++; - if ($index % 500 === 0) { + if ($index % 50 === 0) { $usage = MemoryUsage::create(); - $this->clientApi->window()->showMessage()->info(sprintf( - 'Indexed %s/%s (%s%%) %s', + $this->progressNotifier->report($workDoneToken, sprintf( + 'Indexed %s/%s %s', $index, $size, - number_format($index / $size * 100, 2), $usage->memoryUsageFormatted() - )); + ), (int) ($index / $size * 100), false); } try { @@ -131,7 +147,7 @@ public function indexer(CancellationToken $cancel): Promise } $process = yield $this->watcher->watch(); - $this->clientApi->window()->showMessage()->info(sprintf( + $this->progressNotifier->end($workDoneToken, sprintf( 'Done indexing (%ss, %s), watching with %s', number_format(microtime(true) - $start, 2), MemoryUsage::create()->memoryUsageFormatted(), diff --git a/lib/LanguageServerIndexer/LanguageServerIndexerExtension.php b/lib/LanguageServerIndexer/LanguageServerIndexerExtension.php index 110b0ffa..5359fbf0 100644 --- a/lib/LanguageServerIndexer/LanguageServerIndexerExtension.php +++ b/lib/LanguageServerIndexer/LanguageServerIndexerExtension.php @@ -19,6 +19,7 @@ use Phpactor\LanguageServerProtocol\ClientCapabilities; use Phpactor\LanguageServer\Core\Server\ClientApi; use Phpactor\LanguageServer\Core\Service\ServiceManager; +use Phpactor\LanguageServer\WorkDoneProgress\ProgressNotifier; use Phpactor\MapResolver\Resolver; use Phpactor\TextDocument\TextDocumentLocator; use Psr\EventDispatcher\EventDispatcherInterface; @@ -61,6 +62,7 @@ private function registerSessionHandler(ContainerBuilder $container): void $container->get(Indexer::class), $container->get(Watcher::class), $container->get(ClientApi::class), + $container->get(ProgressNotifier::class), $container->get(LoggingExtension::SERVICE_LOGGER), $container->get(EventDispatcherInterface::class) );