Skip to content

Commit 82ed904

Browse files
authored
Merge pull request pappasam#283 from PeterJCLaw/remove-pydantic
2 parents b127f2e + 436a710 commit 82ed904

File tree

2 files changed

+66
-4
lines changed

2 files changed

+66
-4
lines changed

jedi_language_server/initialization_options.py

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,23 @@
44
initialization options.
55
"""
66

7-
from dataclasses import dataclass, field
7+
import re
8+
import sys
9+
from dataclasses import dataclass, field, fields, is_dataclass
810
from typing import Any, List, Optional, Pattern, Set
911

10-
from attrs import fields, has
1112
from cattrs import Converter
1213
from cattrs.gen import make_dict_structure_fn, override
1314
from lsprotocol.types import MarkupKind
1415

1516
# pylint: disable=missing-class-docstring
1617
# pylint: disable=too-few-public-methods
1718

18-
light_dataclass = dataclass(kw_only=True, eq=False, match_args=False)
19+
if sys.version_info >= (3, 10):
20+
# pylint: disable-next=unexpected-keyword-arg
21+
light_dataclass = dataclass(kw_only=True, eq=False, match_args=False)
22+
else:
23+
light_dataclass = dataclass(eq=False)
1924

2025

2126
@light_dataclass
@@ -148,5 +153,16 @@ def structure(cls: type) -> Any:
148153

149154

150155
initialization_options_converter.register_structure_hook_factory(
151-
has, structure
156+
is_dataclass, structure
157+
)
158+
159+
160+
initialization_options_converter.register_structure_hook_factory(
161+
lambda x: x == Pattern[str],
162+
lambda _: lambda x, _: re.compile(x),
163+
)
164+
165+
initialization_options_converter.register_unstructure_hook_factory(
166+
lambda x: x == Pattern[str],
167+
lambda _: lambda x: x.pattern,
152168
)

tests/test_initialization_options.py

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
"""Test parsing of the initialization options."""
2+
3+
import re
4+
5+
from hamcrest import assert_that, is_
6+
7+
from jedi_language_server.initialization_options import (
8+
InitializationOptions,
9+
initialization_options_converter,
10+
)
11+
12+
13+
def test_initialization_options() -> None:
14+
"""Test our adjustments to parsing of the initialization options."""
15+
16+
initialization_options = initialization_options_converter.structure(
17+
{
18+
"completion": {
19+
"resolveEagerly": True,
20+
"ignorePatterns": [r"foo", r"bar/.*"],
21+
},
22+
"hover": {
23+
"disable": {
24+
"keyword": {"all": False},
25+
"class": {"all": True},
26+
"function": {"all": True},
27+
},
28+
},
29+
"extra": "ignored",
30+
},
31+
InitializationOptions,
32+
)
33+
34+
assert_that(initialization_options.completion.resolve_eagerly, is_(True))
35+
assert_that(
36+
initialization_options.completion.ignore_patterns,
37+
is_(
38+
[
39+
re.compile(r"foo"),
40+
re.compile(r"bar/.*"),
41+
]
42+
),
43+
)
44+
assert_that(initialization_options.hover.disable.keyword_.all, is_(False))
45+
assert_that(initialization_options.hover.disable.class_.all, is_(True))
46+
assert_that(initialization_options.hover.disable.function_.all, is_(True))

0 commit comments

Comments
 (0)