Skip to content

Commit 49378b2

Browse files
committed
remove hack for LSP-Clients wrong InlineValueContext definition and handling
1 parent 6814b6f commit 49378b2

File tree

4 files changed

+38
-10
lines changed

4 files changed

+38
-10
lines changed

robotcode/language_server/common/lsp_types.py

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -604,6 +604,12 @@ class InlineValueClientCapabilities(Model):
604604
dynamic_registration: Optional[bool] = None
605605

606606

607+
@dataclass(repr=False)
608+
class DiagnosticClientCapabilities(Model):
609+
dynamic_registration: Optional[bool] = None
610+
related_document_support: Optional[bool] = None
611+
612+
607613
@dataclass(repr=False)
608614
class TextDocumentClientCapabilities(Model):
609615
synchronization: Optional[TextDocumentSyncClientCapabilities] = None
@@ -635,7 +641,7 @@ class TextDocumentClientCapabilities(Model):
635641
# TODO typeHierarchy?: TypeHierarchyClientCapabilities;
636642
inline_value: Optional[InlineValueClientCapabilities] = None
637643
inlay_hint: Optional[InlayHintClientCapabilities] = None
638-
# TODO diagnostic?: DiagnosticClientCapabilities;
644+
diagnostic: Optional[DiagnosticClientCapabilities] = None
639645

640646

641647
@dataclass(repr=False)
@@ -682,6 +688,16 @@ class InlineValueWorkspaceClientCapabilities(Model):
682688
refresh_support: Optional[bool] = None
683689

684690

691+
@dataclass(repr=False)
692+
class InlayHintWorkspaceClientCapabilities(Model):
693+
refresh_support: Optional[bool] = None
694+
695+
696+
@dataclass(repr=False)
697+
class DiagnosticWorkspaceClientCapabilities(Model):
698+
refresh_support: Optional[bool] = None
699+
700+
685701
@dataclass(repr=False)
686702
class ClientCapabilitiesWorkspace(Model):
687703
apply_edit: Optional[bool] = None
@@ -696,6 +712,8 @@ class ClientCapabilitiesWorkspace(Model):
696712
code_lens: Optional[CodeLensWorkspaceClientCapabilities] = None
697713
file_operations: Optional[ClientCapabilitiesWorkspaceFileOperationsWorkspaceClientCapabilities] = None
698714
inline_value: Optional[InlineValueWorkspaceClientCapabilities] = None
715+
inlay_hint: Optional[InlayHintWorkspaceClientCapabilities] = None
716+
diagnostics: Optional[DiagnosticWorkspaceClientCapabilities] = None
699717

700718

701719
@dataclass(repr=False)
@@ -705,10 +723,18 @@ class ClientCapabilitiesWindow(Model):
705723
show_document: Optional[ShowDocumentClientCapabilities] = None
706724

707725

726+
PositionEncodingKind = str
727+
728+
UTF8: PositionEncodingKind = "utf-8"
729+
UTF16: PositionEncodingKind = "utf-16"
730+
UTF32: PositionEncodingKind = "utf-32"
731+
732+
708733
@dataclass(repr=False)
709734
class ClientCapabilitiesGeneral(Model):
710735
regular_expressions: Optional[RegularExpressionsClientCapabilities] = None
711736
markdown: Optional[MarkdownClientCapabilities] = None
737+
position_encodings: Optional[List[PositionEncodingKind]] = None
712738

713739

714740
@dataclass(repr=False)
@@ -1058,6 +1084,7 @@ class InlineValueRegistrationOptions(InlineValueOptions, TextDocumentRegistratio
10581084

10591085
@dataclass(repr=False)
10601086
class ServerCapabilities(Model):
1087+
position_encoding: Optional[PositionEncodingKind] = None
10611088
text_document_sync: Union[TextDocumentSyncOptions, TextDocumentSyncKind, None] = None
10621089
completion_provider: Optional[CompletionOptions] = None
10631090
hover_provider: Union[bool, HoverOptions, None] = None
@@ -2097,9 +2124,8 @@ class PrepareRenameResultWithDefaultBehavior(Model):
20972124

20982125
@dataclass(repr=False)
20992126
class InlineValueContext(Model):
2100-
# TODO: this differs from definition in the LSP 3.17 spec
2101-
stopped_location: Union[Range, List[Position]]
2102-
frame_id: Optional[int] = None
2127+
frame_id: int
2128+
stopped_location: Range
21032129

21042130

21052131
@dataclass(repr=False)

robotcode/language_server/common/parts/inline_value.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,6 @@ async def _text_document_inline_value(
6666
if document is None:
6767
return None
6868

69-
if isinstance(context.stopped_location, list): # TODO this is a hack, fix it
70-
context.stopped_location = Range(*context.stopped_location)
71-
7269
for result in await self.collect(self, document, range, context, callback_filter=language_id_filter(document)):
7370
if isinstance(result, BaseException):
7471
if not isinstance(result, CancelledError):

robotcode/language_server/common/protocol.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
from ...utils.logging import LoggingDescriptor
1717
from .has_extend_capabilities import HasExtendCapabilities
1818
from .lsp_types import (
19+
UTF16,
1920
CancelParams,
2021
ClientCapabilities,
2122
ClientInfo,
@@ -193,6 +194,13 @@ async def _initialize(
193194
try:
194195
self.initialization_options = initialization_options
195196
try:
197+
if (
198+
self.client_capabilities.general
199+
and self.client_capabilities.general.position_encodings
200+
and UTF16 in self.client_capabilities.general.position_encodings
201+
):
202+
self.capabilities.position_encoding = UTF16
203+
196204
await self.on_initialize(self, initialization_options)
197205
except (asyncio.CancelledError, SystemExit, KeyboardInterrupt):
198206
raise

robotcode/language_server/robotframework/parts/inline_value.py

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -53,9 +53,6 @@ async def collect(
5353

5454
model = await self.parent.documents_cache.get_model(document, False)
5555

56-
if isinstance(context.stopped_location, list):
57-
return None
58-
5956
real_range = Range(range.start, min(range.end, context.stopped_location.end))
6057

6158
nodes = await get_nodes_at_position(model, context.stopped_location.start)

0 commit comments

Comments
 (0)