diff --git a/composer.json b/composer.json index 50b9a55..479aebc 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,7 @@ "phpactor/console-extension": "^0.1.6", "phpactor/container": "^2.0.0", "phpactor/file-path-resolver-extension": "^0.3.4", - "phpactor/language-server": "^1.1.0", + "phpactor/language-server": "^1.1.1", "phpactor/logging-extension": "^0.3.4", "phpactor/text-document": "^1.2.3" }, @@ -26,7 +26,8 @@ "phpactor/test-utils": "^1.1.3", "phpspec/prophecy-phpunit": "^2.0", "phpstan/phpstan": "~0.12.0", - "phpunit/phpunit": "^9.0" + "phpunit/phpunit": "^9.0", + "symfony/var-dumper": "^5.3" }, "extra": { "branch-alias": { diff --git a/tests/LanguageServer/Example/TestExtension.php b/tests/LanguageServer/Example/TestExtension.php index c4ddc05..02fece2 100644 --- a/tests/LanguageServer/Example/TestExtension.php +++ b/tests/LanguageServer/Example/TestExtension.php @@ -14,11 +14,15 @@ use Phpactor\LanguageServerProtocol\Range; use Phpactor\LanguageServerProtocol\TextDocumentItem; use Phpactor\LanguageServer\Core\CodeAction\CodeActionProvider; +use Phpactor\LanguageServer\Core\Command\ClosureCommand; use Phpactor\LanguageServer\Core\Command\Command as CoreCommand; +use Phpactor\LanguageServer\Core\Handler\ClosureHandler; use Phpactor\LanguageServer\Core\Handler\Handler; use Phpactor\LanguageServer\Core\Rpc\NotificationMessage; use Phpactor\LanguageServer\Core\Server\ClientApi; use Phpactor\LanguageServer\Core\Service\ServiceProvider; +use Phpactor\LanguageServer\WorkDoneProgress\ProgressNotifier; +use Phpactor\LanguageServer\WorkDoneProgress\WorkDoneToken; use Phpactor\MapResolver\Resolver; class TestExtension implements Extension @@ -70,18 +74,31 @@ public function test() }, [ LanguageServerExtension::TAG_SERVICE_PROVIDER => []]); $container->register('test.command', function (Container $container) { - return new class implements CoreCommand { - public function __invoke(string $text): Promise - { - return new Success($text); - } - }; + return new ClosureCommand(function (string $text): Promise { + return new Success($text); + }); }, [ LanguageServerExtension::TAG_COMMAND => [ 'name' => 'echo', ], ]); + $container->register('test.progress_notifier_handler', function (Container $container) { + + return new ClosureHandler('test/progress_notifier', function () use ($container){ + $notifier = $container->get(ProgressNotifier::class); + assert($notifier instanceof ProgressNotifier); + $token = WorkDoneToken::generate(); + $notifier->begin($token, 'Test'); + $notifier->report($token); + $notifier->end($token, 'Done'); + + return new Success(true); + }); + }, [ + LanguageServerExtension::TAG_METHOD_HANDLER => [], + ]); + $container->register('test.code_action_provider', function (Container $container) { return new class implements CodeActionProvider { public function provideActionsFor(TextDocumentItem $textDocument, Range $range): Promise diff --git a/tests/LanguageServer/Unit/LanguageServerExtensionTest.php b/tests/LanguageServer/Unit/LanguageServerExtensionTest.php index b1bcd28..d475a55 100644 --- a/tests/LanguageServer/Unit/LanguageServerExtensionTest.php +++ b/tests/LanguageServer/Unit/LanguageServerExtensionTest.php @@ -9,6 +9,7 @@ use Phpactor\LanguageServer\Core\Rpc\RequestMessage; use Phpactor\LanguageServer\Core\Server\Exception\ExitSession; use Phpactor\LanguageServer\Listener\WorkspaceListener; +use Phpactor\LanguageServer\WorkDoneProgress\ProgressNotifier; use RuntimeException; use function Amp\Promise\wait; use function Amp\delay; @@ -161,4 +162,14 @@ public function testEnableFileEvents(): void assert($message instanceof RequestMessage); self::assertEquals('client/registerCapability', $message->method); } + + public function testProgressNotifier(): void + { + $serverTester = $this->createTester(null, [ + LanguageServerExtension::PARAM_FILE_EVENTS => true + ]); + $serverTester->initialize(); + $response = wait($serverTester->notify('test/progress_notifier', [])); + dump($response); + } }