Skip to content
This repository was archived by the owner on Mar 6, 2022. It is now read-only.

Commit c34bac9

Browse files
committed
Allow to disable the rest of method
1 parent 94c2e59 commit c34bac9

12 files changed

+145
-28
lines changed

lib/LanguageServerHover/Handler/HoverHandler.php

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

55
use Amp\Promise;
66
use Phpactor\Extension\LanguageServerBridge\Converter\PositionConverter;
7+
use Phpactor\LanguageServerProtocol\ClientCapabilities;
78
use Phpactor\LanguageServerProtocol\Hover;
89
use Phpactor\LanguageServerProtocol\MarkupContent;
910
use Phpactor\LanguageServerProtocol\Position;
@@ -43,11 +44,21 @@ class HoverHandler implements Handler, CanRegisterCapabilities
4344
*/
4445
private $workspace;
4546

46-
public function __construct(Workspace $workspace, Reflector $reflector, ObjectRenderer $renderer)
47-
{
47+
/**
48+
* @var ClientCapabilities
49+
*/
50+
private ClientCapabilities $clientCapabilities;
51+
52+
public function __construct(
53+
Workspace $workspace,
54+
Reflector $reflector,
55+
ObjectRenderer $renderer,
56+
ClientCapabilities $clientCapabilities
57+
) {
4858
$this->reflector = $reflector;
4959
$this->renderer = $renderer;
5060
$this->workspace = $workspace;
61+
$this->clientCapabilities = $clientCapabilities;
5162
}
5263

5364
public function methods(): array
@@ -73,7 +84,7 @@ public function hover(
7384
$symbolContext = $offsetReflection->symbolContext();
7485
$info = $this->infoFromReflecionOffset($offsetReflection);
7586
$string = new MarkupContent('markdown', $info);
76-
87+
7788
return new Hover($string, new Range(
7889
PositionConverter::byteOffsetToPosition(
7990
ByteOffset::fromInt($symbolContext->symbol()->position()->start()),
@@ -89,7 +100,7 @@ public function hover(
89100

90101
public function registerCapabiltiies(ServerCapabilities $capabilities): void
91102
{
92-
$capabilities->hoverProvider = true;
103+
$capabilities->hoverProvider = null !== $this->clientCapabilities->textDocument->hover;
93104
}
94105

95106
private function infoFromReflecionOffset(ReflectionOffset $offset): string

lib/LanguageServerHover/LanguageServerHoverExtension.php

+10-3
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Phpactor\Extension\Php\Model\PhpVersionResolver;
1010
use Phpactor\Extension\WorseReflection\WorseReflectionExtension;
1111
use Phpactor\FilePathResolverExtension\FilePathResolverExtension;
12+
use Phpactor\LanguageServerProtocol\ClientCapabilities;
1213
use Phpactor\ObjectRenderer\ObjectRendererBuilder;
1314
use Phpactor\Extension\LanguageServer\LanguageServerExtension;
1415
use Phpactor\Extension\LanguageServerHover\Handler\HoverHandler;
@@ -18,7 +19,7 @@
1819
class LanguageServerHoverExtension implements Extension
1920
{
2021
public const PARAM_TEMPLATE_PATHS = 'language_server_hover.template_paths';
21-
22+
2223
private const SERVICE_MARKDOWN_RENDERER = 'language_server_completion.object_renderer.markdown';
2324

2425
/**
@@ -47,7 +48,8 @@ public function load(ContainerBuilder $container): void
4748
return new HoverHandler(
4849
$container->get(LanguageServerExtension::SERVICE_SESSION_WORKSPACE),
4950
$container->get(WorseReflectionExtension::SERVICE_REFLECTOR),
50-
$container->get(self::SERVICE_MARKDOWN_RENDERER)
51+
$container->get(self::SERVICE_MARKDOWN_RENDERER),
52+
$this->clientCapabilities($container)
5153
);
5254
}, [ LanguageServerExtension::TAG_METHOD_HANDLER => []]);
5355

@@ -71,8 +73,13 @@ public function load(ContainerBuilder $container): void
7173
foreach ($paths as $path) {
7274
$builder = $builder->addTemplatePath($path);
7375
}
74-
76+
7577
return $builder->build();
7678
});
7779
}
80+
81+
private function clientCapabilities(Container $container): ClientCapabilities
82+
{
83+
return $container->get(ClientCapabilities::class);
84+
}
7885
}

lib/LanguageServerIndexer/Handler/WorkspaceSymbolHandler.php

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

55
use Amp\Promise;
66
use Phpactor\Extension\LanguageServerIndexer\Model\WorkspaceSymbolProvider;
7+
use Phpactor\LanguageServerProtocol\ClientCapabilities;
78
use Phpactor\LanguageServerProtocol\ServerCapabilities;
89
use Phpactor\LanguageServerProtocol\SymbolInformation;
910
use Phpactor\LanguageServerProtocol\WorkspaceSymbolParams;
@@ -17,9 +18,15 @@ class WorkspaceSymbolHandler implements Handler, CanRegisterCapabilities
1718
*/
1819
private $provider;
1920

20-
public function __construct(WorkspaceSymbolProvider $provider)
21+
/**
22+
* @var ClientCapabilities
23+
*/
24+
private ClientCapabilities $clientCapabilities;
25+
26+
public function __construct(WorkspaceSymbolProvider $provider, ClientCapabilities $clientCapabilities)
2127
{
2228
$this->provider = $provider;
29+
$this->clientCapabilities = $clientCapabilities;
2330
}
2431

2532
public function methods(): array
@@ -42,6 +49,6 @@ public function symbol(
4249

4350
public function registerCapabiltiies(ServerCapabilities $capabilities): void
4451
{
45-
$capabilities->workspaceSymbolProvider = true;
52+
$capabilities->workspaceSymbolProvider = null !== ($this->clientCapabilities->workspace['symbol'] ?? null);
4653
}
4754
}

lib/LanguageServerIndexer/LanguageServerIndexerExtension.php

+7-1
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ public function load(ContainerBuilder $container): void
4040
$container->get(SearchClient::class),
4141
$container->get(TextDocumentLocator::class),
4242
$container->getParameter(self::WORKSPACE_SYMBOL_SEARCH_LIMIT)
43-
)
43+
),
44+
$this->clientCapabilities($container)
4445
);
4546
}, [ LanguageServerExtension::TAG_METHOD_HANDLER => [] ]);
4647

@@ -84,4 +85,9 @@ private function registerSessionHandler(ContainerBuilder $container): void
8485
LanguageServerExtension::TAG_LISTENER_PROVIDER => [],
8586
]);
8687
}
88+
89+
private function clientCapabilities(Container $container): ClientCapabilities
90+
{
91+
return $container->get(ClientCapabilities::class);
92+
}
8793
}

lib/LanguageServerReferenceFinder/Handler/GotoDefinitionHandler.php

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

55
use Amp\Promise;
66
use Phpactor\Extension\LanguageServerBridge\Converter\PositionConverter;
7+
use Phpactor\LanguageServerProtocol\ClientCapabilities;
78
use Phpactor\LanguageServerProtocol\DefinitionParams;
89
use Phpactor\LanguageServerProtocol\ServerCapabilities;
910
use Phpactor\Extension\LanguageServerBridge\Converter\LocationConverter;
@@ -31,11 +32,21 @@ class GotoDefinitionHandler implements Handler, CanRegisterCapabilities
3132
*/
3233
private $locationConverter;
3334

34-
public function __construct(Workspace $workspace, DefinitionLocator $definitionLocator, LocationConverter $locationConverter)
35-
{
35+
/**
36+
* @var ClientCapabilities
37+
*/
38+
private ClientCapabilities $clientCapabilities;
39+
40+
public function __construct(
41+
Workspace $workspace,
42+
DefinitionLocator $definitionLocator,
43+
LocationConverter $locationConverter,
44+
ClientCapabilities $clientCapabilities
45+
) {
3646
$this->definitionLocator = $definitionLocator;
3747
$this->workspace = $workspace;
3848
$this->locationConverter = $locationConverter;
49+
$this->clientCapabilities = $clientCapabilities;
3950
}
4051

4152
public function methods(): array
@@ -70,6 +81,6 @@ public function definition(
7081

7182
public function registerCapabiltiies(ServerCapabilities $capabilities): void
7283
{
73-
$capabilities->definitionProvider = true;
84+
$capabilities->definitionProvider = null !== $this->clientCapabilities->textDocument->definition;
7485
}
7586
}

lib/LanguageServerReferenceFinder/Handler/GotoImplementationHandler.php

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

55
use Amp\Promise;
66
use Phpactor\Extension\LanguageServerBridge\Converter\PositionConverter;
7+
use Phpactor\LanguageServerProtocol\ClientCapabilities;
78
use Phpactor\LanguageServerProtocol\ImplementationParams;
89
use Phpactor\LanguageServerProtocol\ServerCapabilities;
910
use Phpactor\Extension\LanguageServerBridge\Converter\LocationConverter;
@@ -30,11 +31,22 @@ class GotoImplementationHandler implements Handler, CanRegisterCapabilities
3031
*/
3132
private $locationConverter;
3233

33-
public function __construct(Workspace $workspace, ClassImplementationFinder $finder, LocationConverter $locationConverter)
34+
/**
35+
* @var ClientCapabilities
36+
*/
37+
private ClientCapabilities $clientCapabilities;
38+
39+
public function __construct(
40+
Workspace $workspace,
41+
ClassImplementationFinder $finder,
42+
LocationConverter $locationConverter,
43+
ClientCapabilities $clientCapabilities
44+
)
3445
{
3546
$this->workspace = $workspace;
3647
$this->finder = $finder;
3748
$this->locationConverter = $locationConverter;
49+
$this->clientCapabilities = $clientCapabilities;
3850
}
3951

4052
/**
@@ -68,6 +80,6 @@ public function gotoImplementation(ImplementationParams $params): Promise
6880

6981
public function registerCapabiltiies(ServerCapabilities $capabilities): void
7082
{
71-
$capabilities->implementationProvider = true;
83+
$capabilities->implementationProvider = null !== $this->clientCapabilities->textDocument->implementation;
7284
}
7385
}

lib/LanguageServerReferenceFinder/Handler/HighlightHandler.php

+12-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
use Amp\Success;
77
use Phpactor\Extension\LanguageServerBridge\Converter\PositionConverter;
88
use Phpactor\Extension\LanguageServerReferenceFinder\Model\Highlighter;
9+
use Phpactor\LanguageServerProtocol\ClientCapabilities;
910
use Phpactor\LanguageServerProtocol\DocumentHighlight;
1011
use Phpactor\LanguageServerProtocol\DocumentHighlightOptions;
1112
use Phpactor\LanguageServerProtocol\DocumentHighlightParams;
@@ -27,10 +28,16 @@ class HighlightHandler implements Handler, CanRegisterCapabilities
2728
*/
2829
private $highlighter;
2930

30-
public function __construct(Workspace $workspace, Highlighter $highlighter)
31+
/**
32+
* @var ClientCapabilities
33+
*/
34+
private ClientCapabilities $clientCapabilities;
35+
36+
public function __construct(Workspace $workspace, Highlighter $highlighter, ClientCapabilities $clientCapabilities)
3137
{
3238
$this->workspace = $workspace;
3339
$this->highlighter = $highlighter;
40+
$this->clientCapabilities = $clientCapabilities;
3441
}
3542

3643
/**
@@ -56,6 +63,10 @@ public function highlight(DocumentHighlightParams $params): Promise
5663

5764
public function registerCapabiltiies(ServerCapabilities $capabilities): void
5865
{
66+
if (null === $this->clientCapabilities->textDocument->documentHighlight) {
67+
return;
68+
}
69+
5970
$options = new DocumentHighlightOptions();
6071
$capabilities->documentHighlightProvider = $options;
6172
}

lib/LanguageServerReferenceFinder/Handler/ReferencesHandler.php

+10-2
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
use Amp\Delayed;
66
use Amp\Promise;
77
use Phpactor\Extension\LanguageServerBridge\Converter\PositionConverter;
8+
use Phpactor\LanguageServerProtocol\ClientCapabilities;
89
use Phpactor\LanguageServerProtocol\Location as LspLocation;
910
use Phpactor\LanguageServerProtocol\Position;
1011
use Phpactor\LanguageServerProtocol\ReferenceContext;
@@ -55,20 +56,27 @@ class ReferencesHandler implements Handler, CanRegisterCapabilities
5556
*/
5657
private $clientApi;
5758

59+
/**
60+
* @var ClientCapabilities
61+
*/
62+
private ClientCapabilities $clientCapabilities;
63+
5864
public function __construct(
5965
Workspace $workspace,
6066
ReferenceFinder $finder,
6167
DefinitionLocator $definitionLocator,
6268
LocationConverter $locationConverter,
6369
ClientApi $clientApi,
64-
float $timeoutSeconds = 5.0
70+
float $timeoutSeconds = 5.0,
71+
ClientCapabilities $clientCapabilities
6572
) {
6673
$this->workspace = $workspace;
6774
$this->finder = $finder;
6875
$this->definitionLocator = $definitionLocator;
6976
$this->timeoutSeconds = $timeoutSeconds;
7077
$this->locationConverter = $locationConverter;
7178
$this->clientApi = $clientApi;
79+
$this->clientCapabilities = $clientCapabilities;
7280
}
7381

7482
/**
@@ -157,7 +165,7 @@ public function references(
157165

158166
public function registerCapabiltiies(ServerCapabilities $capabilities): void
159167
{
160-
$capabilities->referencesProvider = true;
168+
$capabilities->referencesProvider = null !== $this->clientCapabilities->textDocument->references;
161169
}
162170

163171
/**

lib/LanguageServerReferenceFinder/Handler/TypeDefinitionHandler.php

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

55
use Amp\Promise;
66
use Phpactor\Extension\LanguageServerBridge\Converter\PositionConverter;
7+
use Phpactor\LanguageServerProtocol\ClientCapabilities;
78
use Phpactor\LanguageServerProtocol\Position;
89
use Phpactor\LanguageServerProtocol\ServerCapabilities;
910
use Phpactor\LanguageServerProtocol\TextDocumentIdentifier;
@@ -32,11 +33,22 @@ class TypeDefinitionHandler implements Handler, CanRegisterCapabilities
3233
*/
3334
private $locationConverter;
3435

35-
public function __construct(Workspace $workspace, TypeLocator $typeLocator, LocationConverter $locationConverter)
36+
/**
37+
* @var ClientCapabilities
38+
*/
39+
private ClientCapabilities $clientCapabilities;
40+
41+
public function __construct(
42+
Workspace $workspace,
43+
TypeLocator $typeLocator,
44+
LocationConverter $locationConverter,
45+
ClientCapabilities $clientCapabilities
46+
)
3647
{
3748
$this->typeLocator = $typeLocator;
3849
$this->workspace = $workspace;
3950
$this->locationConverter = $locationConverter;
51+
$this->clientCapabilities = $clientCapabilities;
4052
}
4153

4254
public function methods(): array
@@ -70,6 +82,6 @@ public function type(
7082

7183
public function registerCapabiltiies(ServerCapabilities $capabilities): void
7284
{
73-
$capabilities->typeDefinitionProvider = true;
85+
$capabilities->typeDefinitionProvider = null !== $this->clientCapabilities->textDocument->typeDefinition;
7486
}
7587
}

0 commit comments

Comments
 (0)