This repository was archived by the owner on Mar 6, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathTestExtension.php
139 lines (126 loc) · 5.07 KB
/
TestExtension.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<?php
namespace Phpactor\Extension\LanguageServer\Tests\Example;
use Amp\Promise;
use Amp\Success;
use Phpactor\LanguageServerProtocol\Command;
use Phpactor\LanguageServerProtocol\CodeAction;
use Phpactor\LanguageServerProtocol\MessageType;
use Phpactor\Container\Container;
use Phpactor\Container\ContainerBuilder;
use Phpactor\Container\Extension;
use Phpactor\Extension\LanguageServer\LanguageServerExtension;
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
{
/**
* {@inheritDoc}
*/
public function load(ContainerBuilder $container): void
{
$container->register('test.handler', function (Container $container) {
return new class implements Handler {
public function methods(): array
{
return ['test' => 'test'];
}
public function test()
{
return new Success(new NotificationMessage('window/showMessage', [
'type' => MessageType::INFO,
'message' => 'Hallo',
]));
}
};
}, [ LanguageServerExtension::TAG_METHOD_HANDLER => []]);
$container->register('test.service', function (Container $container) {
return new class($container->get(ClientApi::class)) implements ServiceProvider {
/** @var ClientApi */
private $api;
public function __construct(ClientApi $api)
{
$this->api = $api;
}
public function services(): array
{
return ['test'];
}
public function test()
{
$this->api->window()->showmessage()->info('service started');
return new Success(new NotificationMessage('window/showMessage', [
'type' => MessageType::INFO,
'message' => 'Hallo',
]));
}
};
}, [ LanguageServerExtension::TAG_SERVICE_PROVIDER => []]);
$container->register('test.command', function (Container $container) {
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
{
return new Success([
CodeAction::fromArray([
'title' => 'Alice',
'command' => new Command('Hello Alice', 'phpactor.say_hello', [
'Alice',
])
]),
CodeAction::fromArray([
'title' => 'Bob',
'command' => new Command('Hello Bob', 'phpactor.say_hello', [
'Bob',
])
])
]);
}
/**
* {@inheritDoc}
*/
public function kinds(): array
{
return ['example'];
}
};
}, [ LanguageServerExtension::TAG_CODE_ACTION_PROVIDER => []]);
}
/**
* {@inheritDoc}
*/
public function configure(Resolver $schema): void
{
}
}