Skip to content

Commit

Permalink
Add structure hook for Union[str, List[InlayHintLabelPart]]
Browse files Browse the repository at this point in the history
  • Loading branch information
alcarney committed Jun 17, 2023
1 parent bfe6212 commit 05bf213
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 0 deletions.
15 changes: 15 additions & 0 deletions packages/python/lsprotocol/_hooks.py
Original file line number Diff line number Diff line change
Expand Up @@ -383,6 +383,17 @@ def _inlay_hint_provider_hook(
else:
return converter.structure(object_, lsp_types.InlayHintOptions)

def _inlay_hint_label_part_hook(
object_: Any, _: type
) -> Union[str, List[lsp_types.InlayHintLabelPart]]:

if isinstance(object_, str):
return object_

return [
converter.structure(item, lsp_types.InlayHintLabelPart) for item in object_
]

def _diagnostic_provider_hook(
object_: Any, _: type
) -> Union[
Expand Down Expand Up @@ -775,6 +786,10 @@ def _watch_kind_hook(
],
_inlay_hint_provider_hook,
),
(
Union[str, List[lsp_types.InlayHintLabelPart]],
_inlay_hint_label_part_hook,
),
(
Optional[
Union[
Expand Down
86 changes: 86 additions & 0 deletions tests/python/requests/test_inlay_hint_resolve_request.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.

import json
import uuid

import hamcrest
import jsonrpc
import pytest
from cattrs.errors import ClassValidationError

ID = str(uuid.uuid4())

TEST_DATA = [
(
{
"id": ID,
"method": "inlayHint/resolve",
"params": {
"position": {"line": 6, "character": 5},
"label": "a label",
"kind": 1,
"paddingLeft": False,
"paddingRight": True,
},
"jsonrpc": "2.0",
},
json.dumps(
{
"id": ID,
"params": {
"position": {"line": 6, "character": 5},
"label": "a label",
"kind": 1,
"paddingLeft": False,
"paddingRight": True,
},
"method": "inlayHint/resolve",
"jsonrpc": "2.0",
}
),
),
(
{
"id": ID,
"method": "inlayHint/resolve",
"params": {
"position": {"line": 6, "character": 5},
"label": [
{"value": "part 1"},
{"value": "part 2", "tooltip": "a tooltip"},
],
"kind": 1,
"paddingLeft": False,
"paddingRight": True,
},
"jsonrpc": "2.0",
},
json.dumps(
{
"id": ID,
"params": {
"position": {"line": 6, "character": 5},
"label": [
{"value": "part 1"},
{"value": "part 2", "tooltip": "a tooltip"},
],
"kind": 1,
"paddingLeft": False,
"paddingRight": True,
},
"method": "inlayHint/resolve",
"jsonrpc": "2.0",
}
),
),
]


@pytest.mark.parametrize("index", list(range(0, len(TEST_DATA))))
def test_inlay_hint_resolve_request_serialization(index):
data, expected = TEST_DATA[index]
data_str = json.dumps(data)
parsed = jsonrpc.from_json(data_str)
actual_str = jsonrpc.to_json(parsed)
hamcrest.assert_that(actual_str, hamcrest.is_(expected))

0 comments on commit 05bf213

Please sign in to comment.