Skip to content

Commit c5199ee

Browse files
committed
fix: The debugger no longer requires a dependency on the language server
1 parent f8b1872 commit c5199ee

File tree

5 files changed

+68
-56
lines changed

5 files changed

+68
-56
lines changed
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
import re
2+
from typing import NamedTuple, Optional
3+
4+
5+
class InvalidVersionError(Exception):
6+
def __init__(self) -> None:
7+
super().__init__("Invalid version string.")
8+
9+
10+
class Version(NamedTuple):
11+
major: int
12+
minor: int
13+
patch: Optional[int] = None
14+
pre_id: Optional[str] = None
15+
pre_number: Optional[int] = None
16+
dev: Optional[int] = None
17+
18+
19+
def create_version_from_str(version_str: str) -> Version:
20+
def s_to_i(s: Optional[str]) -> Optional[int]:
21+
return int(s) if s is not None else None
22+
23+
try:
24+
m = re.match(
25+
r"(?P<major>\d+)"
26+
r"(\.(?P<minor>\d+))"
27+
r"(\.(?P<patch>\d+))?"
28+
r"((?P<pre_id>a|b|rc)(?P<pre_number>\d+))?"
29+
r"(\.(dev(?P<dev>\d+)))?"
30+
r"(?P<rest>.+)?",
31+
version_str,
32+
)
33+
34+
if m is not None and m.group("rest") is None:
35+
return Version(
36+
int(m.group("major")),
37+
int(m.group("minor")),
38+
s_to_i(m.group("patch")) or 0,
39+
m.group("pre_id"),
40+
s_to_i(m.group("pre_number")),
41+
s_to_i(m.group("dev")),
42+
)
43+
except (SystemExit, KeyboardInterrupt):
44+
raise
45+
except BaseException as ex:
46+
raise InvalidVersionError from ex
47+
48+
raise InvalidVersionError

packages/debugger/robotcode/debugger/launcher/server.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from typing import Any, Dict, List, Literal, Optional
77

88
from robotcode.core.logging import LoggingDescriptor
9+
from robotcode.core.version import Version, create_version_from_str
910
from robotcode.debugger.client import DAPClient, DAPClientError
1011
from robotcode.debugger.dap_types import (
1112
AttachRequest,
@@ -35,7 +36,17 @@
3536
from robotcode.debugger.protocol import DebugAdapterProtocol
3637
from robotcode.jsonrpc2.protocol import rpc_method
3738
from robotcode.jsonrpc2.server import JsonRPCServer, JsonRpcServerMode, TcpParams
38-
from robotcode.language_server.robotframework.utils.version import get_robot_version
39+
40+
_robot_version: Optional[Version] = None
41+
42+
43+
def get_robot_version() -> Version:
44+
global _robot_version
45+
if _robot_version is None:
46+
import robot.version
47+
48+
_robot_version = create_version_from_str(robot.version.get_version())
49+
return _robot_version
3950

4051

4152
class OutputProtocol(asyncio.SubprocessProtocol):
@@ -296,7 +307,10 @@ async def _launch(
296307

297308
@rpc_method(name="configurationDone", param_type=ConfigurationDoneArguments)
298309
async def _configuration_done(
299-
self, arguments: Optional[ConfigurationDoneArguments] = None, *args: Any, **kwargs: Any
310+
self,
311+
arguments: Optional[ConfigurationDoneArguments] = None,
312+
*args: Any,
313+
**kwargs: Any,
300314
) -> None:
301315
await self.client.protocol.send_request_async(ConfigurationDoneRequest(arguments=arguments))
302316
await self.client.protocol.send_request_async(AttachRequest(arguments=AttachRequestArguments()))

packages/language_server/robotcode/language_server/robotframework/parts/formatting.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@
1515
if TYPE_CHECKING:
1616
from robotcode.language_server.robotframework.protocol import RobotLanguageServerProtocol
1717

18+
from robotcode.core.version import create_version_from_str
1819
from robotcode.language_server.robotframework.configuration import RoboTidyConfig
19-
from robotcode.language_server.robotframework.utils.version import create_version_from_str
2020

2121
from .model_helper import ModelHelperMixin
2222
from .protocol_part import RobotLanguageServerProtocolPart

packages/language_server/robotcode/language_server/robotframework/parts/robocop_diagnostics.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55

66
from robotcode.core.async_tools import check_canceled, threaded
77
from robotcode.core.logging import LoggingDescriptor
8+
from robotcode.core.version import create_version_from_str
89
from robotcode.language_server.common.decorators import language_id
910
from robotcode.language_server.common.lsp_types import (
1011
Diagnostic,
@@ -16,9 +17,6 @@
1617
from robotcode.language_server.common.parts.workspace import WorkspaceFolder
1718
from robotcode.language_server.common.text_document import TextDocument
1819
from robotcode.language_server.robotframework.configuration import RoboCopConfig
19-
from robotcode.language_server.robotframework.utils.version import (
20-
create_version_from_str,
21-
)
2220

2321
from .protocol_part import RobotLanguageServerProtocolPart
2422

Lines changed: 2 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,6 @@
1-
import re
2-
from typing import NamedTuple, Optional
3-
4-
__all__ = ["InvalidVersionError", "get_robot_version"]
5-
6-
7-
class InvalidVersionError(Exception):
8-
def __init__(self) -> None:
9-
super().__init__("Invalid robot version string.")
10-
11-
12-
class Version(NamedTuple):
13-
major: int
14-
minor: int
15-
patch: Optional[int] = None
16-
pre_id: Optional[str] = None
17-
pre_number: Optional[int] = None
18-
dev: Optional[int] = None
1+
from typing import Optional
192

3+
from robotcode.core.version import Version, create_version_from_str
204

215
_robot_version: Optional[Version] = None
226

@@ -34,35 +18,3 @@ def get_robot_version_str() -> str:
3418
import robot.version
3519

3620
return str(robot.version.get_version())
37-
38-
39-
def create_version_from_str(version_str: str) -> Version:
40-
def s_to_i(s: Optional[str]) -> Optional[int]:
41-
return int(s) if s is not None else None
42-
43-
try:
44-
m = re.match(
45-
r"(?P<major>\d+)"
46-
r"(\.(?P<minor>\d+))"
47-
r"(\.(?P<patch>\d+))?"
48-
r"((?P<pre_id>a|b|rc)(?P<pre_number>\d+))?"
49-
r"(\.(dev(?P<dev>\d+)))?"
50-
r"(?P<rest>.+)?",
51-
version_str,
52-
)
53-
54-
if m is not None and m.group("rest") is None:
55-
return Version(
56-
int(m.group("major")),
57-
int(m.group("minor")),
58-
s_to_i(m.group("patch")) or 0,
59-
m.group("pre_id"),
60-
s_to_i(m.group("pre_number")),
61-
s_to_i(m.group("dev")),
62-
)
63-
except (SystemExit, KeyboardInterrupt):
64-
raise
65-
except BaseException as ex:
66-
raise InvalidVersionError from ex
67-
68-
raise InvalidVersionError

0 commit comments

Comments
 (0)