robotcode-language-server 1.3.0.dev6__tar.gz → 1.5.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/PKG-INFO +5 -5
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/pyproject.toml +4 -4
- robotcode_language_server-1.5.0/src/robotcode/language_server/__version__.py +1 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/diagnostics.py +0 -3
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/documents.py +0 -4
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/rename.py +4 -6
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/workspace.py +1 -1
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/protocol.py +0 -9
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/formatting.py +19 -22
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/hover.py +1 -1
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/inlay_hint.py +1 -1
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/project_info.py +5 -6
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/references.py +1 -1
- robotcode_language_server-1.5.0/src/robotcode/language_server/robotframework/parts/rename.py +260 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/robocop_diagnostics.py +11 -24
- robotcode_language_server-1.5.0/src/robotcode/language_server/robotframework/parts/robocop_helper.py +117 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/robot_workspace.py +0 -4
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/signature_help.py +1 -1
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/protocol.py +2 -0
- robotcode_language_server-1.3.0.dev6/src/robotcode/language_server/__version__.py +0 -1
- robotcode_language_server-1.3.0.dev6/src/robotcode/language_server/robotframework/parts/rename.py +0 -693
- robotcode_language_server-1.3.0.dev6/src/robotcode/language_server/robotframework/parts/robocop_tidy_mixin.py +0 -49
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/.gitignore +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/LICENSE.txt +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/README.md +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/__init__.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/cli.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/__init__.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/decorators.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/__init__.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/code_action.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/code_lens.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/commands.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/completion.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/declaration.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/definition.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/document_highlight.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/document_symbols.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/folding_range.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/formatting.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/hover.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/implementation.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/inlay_hint.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/inline_value.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/linked_editing_ranges.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/protocol_part.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/references.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/selection_range.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/semantic_tokens.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/signature_help.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/window.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/parts/workspace_symbols.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/common/server.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/hooks.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/py.typed +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/__init__.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/configuration.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/__init__.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/code_action_documentation.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/code_action_helper_mixin.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/code_action_quick_fixes.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/code_action_refactor.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/code_lens.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/completion.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/debugging_utils.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/diagnostics.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/document_highlight.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/document_symbols.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/documents_cache.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/folding_range.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/goto.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/http_server.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/inline_value.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/keywords_treeview.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/protocol_part.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/selection_range.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/semantic_tokens.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/parts/workspace_symbols.py +0 -0
- {robotcode_language_server-1.3.0.dev6 → robotcode_language_server-1.5.0}/src/robotcode/language_server/robotframework/server.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: robotcode-language-server
|
|
3
|
-
Version: 1.
|
|
3
|
+
Version: 1.5.0
|
|
4
4
|
Summary: RobotCode Language Server for Robot Framework
|
|
5
5
|
Project-URL: Homepage, https://robotcode.io
|
|
6
6
|
Project-URL: Donate, https://opencollective.com/robotcode
|
|
@@ -25,10 +25,10 @@ Classifier: Programming Language :: Python :: Implementation :: PyPy
|
|
|
25
25
|
Classifier: Topic :: Utilities
|
|
26
26
|
Classifier: Typing :: Typed
|
|
27
27
|
Requires-Python: >=3.8
|
|
28
|
-
Requires-Dist: robotcode-analyze==1.
|
|
29
|
-
Requires-Dist: robotcode-jsonrpc2==1.
|
|
30
|
-
Requires-Dist: robotcode-robot==1.
|
|
31
|
-
Requires-Dist: robotcode==1.
|
|
28
|
+
Requires-Dist: robotcode-analyze==1.5.0
|
|
29
|
+
Requires-Dist: robotcode-jsonrpc2==1.5.0
|
|
30
|
+
Requires-Dist: robotcode-robot==1.5.0
|
|
31
|
+
Requires-Dist: robotcode==1.5.0
|
|
32
32
|
Requires-Dist: robotframework>=4.1.0
|
|
33
33
|
Description-Content-Type: text/markdown
|
|
34
34
|
|
|
@@ -27,10 +27,10 @@ classifiers = [
|
|
|
27
27
|
]
|
|
28
28
|
dependencies = [
|
|
29
29
|
"robotframework>=4.1.0",
|
|
30
|
-
"robotcode-jsonrpc2==1.
|
|
31
|
-
"robotcode-robot==1.
|
|
32
|
-
"robotcode-analyze==1.
|
|
33
|
-
"robotcode==1.
|
|
30
|
+
"robotcode-jsonrpc2==1.5.0",
|
|
31
|
+
"robotcode-robot==1.5.0",
|
|
32
|
+
"robotcode-analyze==1.5.0",
|
|
33
|
+
"robotcode==1.5.0",
|
|
34
34
|
]
|
|
35
35
|
dynamic = ["version"]
|
|
36
36
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "1.5.0"
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import concurrent.futures
|
|
2
2
|
import functools
|
|
3
3
|
import itertools
|
|
4
|
-
import logging
|
|
5
4
|
import time
|
|
6
5
|
import uuid
|
|
7
6
|
from concurrent.futures import CancelledError
|
|
@@ -361,7 +360,6 @@ class DiagnosticsProtocolPart(LanguageServerProtocolPart):
|
|
|
361
360
|
with self._logger.measure_time(
|
|
362
361
|
lambda: f"analyzing workspace for {len(documents)} documents",
|
|
363
362
|
context_name="workspace_diagnostics",
|
|
364
|
-
level=logging.CRITICAL,
|
|
365
363
|
):
|
|
366
364
|
self.on_workspace_diagnostics_analyze(self)
|
|
367
365
|
|
|
@@ -444,7 +442,6 @@ class DiagnosticsProtocolPart(LanguageServerProtocolPart):
|
|
|
444
442
|
with self._logger.measure_time(
|
|
445
443
|
lambda: f"collect workspace diagnostic for {len(documents_to_collect)} documents",
|
|
446
444
|
context_name="collect_workspace_diagnostics",
|
|
447
|
-
level=logging.CRITICAL,
|
|
448
445
|
):
|
|
449
446
|
breaked = False
|
|
450
447
|
for document in set(documents) - set(documents_to_collect):
|
|
@@ -46,12 +46,7 @@ class RenameProtocolPart(LanguageServerProtocolPart):
|
|
|
46
46
|
)
|
|
47
47
|
|
|
48
48
|
@event
|
|
49
|
-
def collect(
|
|
50
|
-
sender,
|
|
51
|
-
document: TextDocument,
|
|
52
|
-
position: Position,
|
|
53
|
-
new_name: str,
|
|
54
|
-
) -> Optional[WorkspaceEdit]: ...
|
|
49
|
+
def collect(sender, document: TextDocument, position: Position, new_name: str) -> Optional[WorkspaceEdit]: ...
|
|
55
50
|
|
|
56
51
|
@event
|
|
57
52
|
def collect_prepare(sender, document: TextDocument, position: Position) -> Optional[PrepareRenameResult]: ...
|
|
@@ -81,6 +76,9 @@ class RenameProtocolPart(LanguageServerProtocolPart):
|
|
|
81
76
|
check_current_task_canceled()
|
|
82
77
|
|
|
83
78
|
if isinstance(result, BaseException):
|
|
79
|
+
if isinstance(result, CantRenameError):
|
|
80
|
+
raise JsonRPCErrorException(ErrorCodes.INVALID_PARAMS, str(result))
|
|
81
|
+
|
|
84
82
|
if not isinstance(result, CancelledError):
|
|
85
83
|
self._logger.exception(result, exc_info=result)
|
|
86
84
|
else:
|
|
@@ -315,7 +315,7 @@ class Workspace(LanguageServerProtocolPart, CoreWorkspace, FileWatcherManagerBas
|
|
|
315
315
|
List[Any],
|
|
316
316
|
)
|
|
317
317
|
|
|
318
|
-
result = self.settings
|
|
318
|
+
result: Any = self.settings
|
|
319
319
|
for sub_key in str(section).split("."):
|
|
320
320
|
if sub_key in result:
|
|
321
321
|
result = result.get(sub_key, None)
|
|
@@ -98,15 +98,6 @@ class LanguageServerLogHandler(logging.Handler):
|
|
|
98
98
|
if self.trace != TraceValues.OFF:
|
|
99
99
|
self.protocol.log_trace(record.getMessage())
|
|
100
100
|
|
|
101
|
-
type = self.MAPPING.get(record.levelno, None)
|
|
102
|
-
if type is None:
|
|
103
|
-
type = MessageType.LOG
|
|
104
|
-
|
|
105
|
-
self.protocol.window_log_message(
|
|
106
|
-
type=type,
|
|
107
|
-
message=record.getMessage(),
|
|
108
|
-
)
|
|
109
|
-
|
|
110
101
|
|
|
111
102
|
class LanguageServerProtocol(JsonRPCProtocol):
|
|
112
103
|
__logger = LoggingDescriptor()
|
|
@@ -17,13 +17,12 @@ from robotcode.robot.utils import get_robot_version
|
|
|
17
17
|
|
|
18
18
|
from ..configuration import RoboCopConfig, RoboTidyConfig
|
|
19
19
|
from .protocol_part import RobotLanguageServerProtocolPart
|
|
20
|
-
from .robocop_tidy_mixin import RoboCopTidyMixin
|
|
21
20
|
|
|
22
21
|
if TYPE_CHECKING:
|
|
23
22
|
from ..protocol import RobotLanguageServerProtocol
|
|
24
23
|
|
|
25
24
|
|
|
26
|
-
class RobotFormattingProtocolPart(RobotLanguageServerProtocolPart
|
|
25
|
+
class RobotFormattingProtocolPart(RobotLanguageServerProtocolPart):
|
|
27
26
|
_logger = LoggingDescriptor()
|
|
28
27
|
|
|
29
28
|
def __init__(self, parent: "RobotLanguageServerProtocol") -> None:
|
|
@@ -31,7 +30,9 @@ class RobotFormattingProtocolPart(RobotLanguageServerProtocolPart, RoboCopTidyMi
|
|
|
31
30
|
|
|
32
31
|
parent.formatting.format.add(self.format)
|
|
33
32
|
|
|
34
|
-
if self.robotidy_installed or (
|
|
33
|
+
if self.parent.robocop_helper.robotidy_installed or (
|
|
34
|
+
self.parent.robocop_helper.robocop_installed and self.parent.robocop_helper.robocop_version >= (6, 0)
|
|
35
|
+
):
|
|
35
36
|
parent.formatting.format_range.add(self.format_range)
|
|
36
37
|
|
|
37
38
|
self.space_count = 4
|
|
@@ -64,8 +65,8 @@ class RobotFormattingProtocolPart(RobotLanguageServerProtocolPart, RoboCopTidyMi
|
|
|
64
65
|
options: FormattingOptions,
|
|
65
66
|
**further_options: Any,
|
|
66
67
|
) -> Optional[List[TextEdit]]:
|
|
67
|
-
if self.robocop_installed and self.robocop_version >= (6, 0):
|
|
68
|
-
if not self.is_robocop_notification_shown and self.robotidy_installed:
|
|
68
|
+
if self.parent.robocop_helper.robocop_installed and self.parent.robocop_helper.robocop_version >= (6, 0):
|
|
69
|
+
if not self.is_robocop_notification_shown and self.parent.robocop_helper.robotidy_installed:
|
|
69
70
|
self.parent.window.show_message(
|
|
70
71
|
"`robotframework-robocop >= 6.0` is installed and will be used for formatting.\n\n"
|
|
71
72
|
"`robotframework-tidy` is also detected in the workspace, but its use is redundant.\n"
|
|
@@ -78,7 +79,7 @@ class RobotFormattingProtocolPart(RobotLanguageServerProtocolPart, RoboCopTidyMi
|
|
|
78
79
|
return self.format_robocop(document, options, **further_options)
|
|
79
80
|
|
|
80
81
|
tidy_config = self.get_tidy_config(document)
|
|
81
|
-
if (tidy_config.enabled or get_robot_version() >= (5, 0)) and self.robotidy_installed:
|
|
82
|
+
if (tidy_config.enabled or get_robot_version() >= (5, 0)) and self.parent.robocop_helper.robotidy_installed:
|
|
82
83
|
return self.format_robot_tidy(document, options, config=tidy_config, **further_options)
|
|
83
84
|
|
|
84
85
|
if get_robot_version() < (5, 0):
|
|
@@ -105,18 +106,18 @@ class RobotFormattingProtocolPart(RobotLanguageServerProtocolPart, RoboCopTidyMi
|
|
|
105
106
|
|
|
106
107
|
model = self.parent.documents_cache.get_model(document, False)
|
|
107
108
|
|
|
108
|
-
if self.robotidy_version >= (3, 0):
|
|
109
|
+
if self.parent.robocop_helper.robotidy_version >= (3, 0):
|
|
109
110
|
from robotidy.api import get_robotidy
|
|
110
111
|
from robotidy.disablers import RegisterDisablers
|
|
111
112
|
|
|
112
|
-
if self.robotidy_version >= (4, 2):
|
|
113
|
+
if self.parent.robocop_helper.robotidy_version >= (4, 2):
|
|
113
114
|
robot_tidy = get_robotidy(
|
|
114
115
|
document.uri.to_path(),
|
|
115
116
|
None,
|
|
116
117
|
ignore_git_dir=config.ignore_git_dir,
|
|
117
118
|
config=config.config,
|
|
118
119
|
)
|
|
119
|
-
elif self.robotidy_version >= (4, 1):
|
|
120
|
+
elif self.parent.robocop_helper.robotidy_version >= (4, 1):
|
|
120
121
|
robot_tidy = get_robotidy(
|
|
121
122
|
document.uri.to_path(),
|
|
122
123
|
None,
|
|
@@ -135,14 +136,14 @@ class RobotFormattingProtocolPart(RobotLanguageServerProtocolPart, RoboCopTidyMi
|
|
|
135
136
|
)
|
|
136
137
|
disabler_finder.visit(model)
|
|
137
138
|
|
|
138
|
-
if self.robotidy_version >= (4, 11):
|
|
139
|
+
if self.parent.robocop_helper.robotidy_version >= (4, 11):
|
|
139
140
|
if disabler_finder.is_disabled_in_file():
|
|
140
141
|
return None
|
|
141
142
|
else:
|
|
142
143
|
if disabler_finder.file_disabled:
|
|
143
144
|
return None
|
|
144
145
|
|
|
145
|
-
if self.robotidy_version >= (4, 0):
|
|
146
|
+
if self.parent.robocop_helper.robotidy_version >= (4, 0):
|
|
146
147
|
_, _, new, _ = robot_tidy.transform_until_stable(model, disabler_finder)
|
|
147
148
|
else:
|
|
148
149
|
_, _, new = robot_tidy.transform(model, disabler_finder.disablers)
|
|
@@ -156,7 +157,7 @@ class RobotFormattingProtocolPart(RobotLanguageServerProtocolPart, RoboCopTidyMi
|
|
|
156
157
|
robot_tidy.formatting_config.start_line = range.start.line + 1
|
|
157
158
|
robot_tidy.formatting_config.end_line = range.end.line + 1
|
|
158
159
|
|
|
159
|
-
if self.robotidy_version >= (2, 2):
|
|
160
|
+
if self.parent.robocop_helper.robotidy_version >= (2, 2):
|
|
160
161
|
from robotidy.disablers import RegisterDisablers
|
|
161
162
|
|
|
162
163
|
disabler_finder = RegisterDisablers(
|
|
@@ -197,19 +198,13 @@ class RobotFormattingProtocolPart(RobotLanguageServerProtocolPart, RoboCopTidyMi
|
|
|
197
198
|
range: Optional[Range] = None,
|
|
198
199
|
**further_options: Any,
|
|
199
200
|
) -> Optional[List[TextEdit]]:
|
|
200
|
-
from robocop.config import ConfigManager
|
|
201
201
|
from robocop.formatter.runner import RobocopFormatter
|
|
202
202
|
|
|
203
|
-
robocop_config = self.get_robocop_config(document)
|
|
204
203
|
workspace_folder = self.parent.workspace.get_workspace_folder(document.uri)
|
|
204
|
+
if workspace_folder is None:
|
|
205
|
+
return None
|
|
205
206
|
|
|
206
|
-
config_manager =
|
|
207
|
-
[document.uri.to_path()],
|
|
208
|
-
root=workspace_folder.uri.to_path() if workspace_folder else None,
|
|
209
|
-
config=robocop_config.config_file,
|
|
210
|
-
ignore_git_dir=robocop_config.ignore_git_dir,
|
|
211
|
-
ignore_file_config=robocop_config.ignore_file_config,
|
|
212
|
-
)
|
|
207
|
+
config_manager = self.parent.robocop_helper.get_config_manager(workspace_folder)
|
|
213
208
|
|
|
214
209
|
config = config_manager.get_config_for_source_file(document.uri.to_path())
|
|
215
210
|
|
|
@@ -284,7 +279,9 @@ class RobotFormattingProtocolPart(RobotLanguageServerProtocolPart, RoboCopTidyMi
|
|
|
284
279
|
**further_options: Any,
|
|
285
280
|
) -> Optional[List[TextEdit]]:
|
|
286
281
|
config = self.get_tidy_config(document)
|
|
287
|
-
if (config.enabled and self.robotidy_installed) or (
|
|
282
|
+
if (config.enabled and self.parent.robocop_helper.robotidy_installed) or (
|
|
283
|
+
self.parent.robocop_helper.robocop_installed and self.parent.robocop_helper.robocop_version >= (6, 0)
|
|
284
|
+
):
|
|
288
285
|
return self.format_robot_tidy(document, options, range=range, config=config, **further_options)
|
|
289
286
|
|
|
290
287
|
return None
|
|
@@ -10,7 +10,6 @@ from robotcode.jsonrpc2.protocol import rpc_method
|
|
|
10
10
|
|
|
11
11
|
from ...__version__ import __version__ as robotcode_version
|
|
12
12
|
from .protocol_part import RobotLanguageServerProtocolPart
|
|
13
|
-
from .robocop_tidy_mixin import RoboCopTidyMixin
|
|
14
13
|
|
|
15
14
|
if TYPE_CHECKING:
|
|
16
15
|
from ..protocol import RobotLanguageServerProtocol
|
|
@@ -26,7 +25,7 @@ class ProjectInfo(CamelSnakeMixin):
|
|
|
26
25
|
robot_code_version_string: Optional[str] = None
|
|
27
26
|
|
|
28
27
|
|
|
29
|
-
class ProjectInfoPart(RobotLanguageServerProtocolPart
|
|
28
|
+
class ProjectInfoPart(RobotLanguageServerProtocolPart):
|
|
30
29
|
_logger = LoggingDescriptor()
|
|
31
30
|
|
|
32
31
|
def __init__(self, parent: "RobotLanguageServerProtocol") -> None:
|
|
@@ -40,12 +39,12 @@ class ProjectInfoPart(RobotLanguageServerProtocolPart, RoboCopTidyMixin):
|
|
|
40
39
|
**kwargs: Any,
|
|
41
40
|
) -> ProjectInfo:
|
|
42
41
|
robocop_version_string = None
|
|
43
|
-
if self.robocop_installed:
|
|
44
|
-
robocop_version_string = self.robocop_version_str
|
|
42
|
+
if self.parent.robocop_helper.robocop_installed:
|
|
43
|
+
robocop_version_string = self.parent.robocop_helper.robocop_version_str
|
|
45
44
|
|
|
46
45
|
tidy_version_string = None
|
|
47
|
-
if self.robotidy_installed:
|
|
48
|
-
tidy_version_string = self.robotidy_version_str
|
|
46
|
+
if self.parent.robocop_helper.robotidy_installed:
|
|
47
|
+
tidy_version_string = self.parent.robocop_helper.robotidy_version_str
|
|
49
48
|
|
|
50
49
|
return ProjectInfo(
|
|
51
50
|
robot_version_string=get_version(),
|
|
@@ -113,7 +113,7 @@ class RobotReferencesProtocolPart(RobotLanguageServerProtocolPart, ModelHelper):
|
|
|
113
113
|
for base in cls.__bases__:
|
|
114
114
|
method = self._find_method(base)
|
|
115
115
|
if method:
|
|
116
|
-
return
|
|
116
|
+
return method
|
|
117
117
|
return None
|
|
118
118
|
|
|
119
119
|
@language_id("robotframework")
|
|
@@ -0,0 +1,260 @@
|
|
|
1
|
+
import ast
|
|
2
|
+
from typing import (
|
|
3
|
+
TYPE_CHECKING,
|
|
4
|
+
Any,
|
|
5
|
+
Callable,
|
|
6
|
+
List,
|
|
7
|
+
Optional,
|
|
8
|
+
Tuple,
|
|
9
|
+
TypeVar,
|
|
10
|
+
Union,
|
|
11
|
+
cast,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
from robotcode.core.concurrent import check_current_task_canceled
|
|
15
|
+
from robotcode.core.language import language_id
|
|
16
|
+
from robotcode.core.lsp.types import (
|
|
17
|
+
AnnotatedTextEdit,
|
|
18
|
+
ChangeAnnotation,
|
|
19
|
+
CreateFile,
|
|
20
|
+
DeleteFile,
|
|
21
|
+
OptionalVersionedTextDocumentIdentifier,
|
|
22
|
+
Position,
|
|
23
|
+
PrepareRenameResult,
|
|
24
|
+
PrepareRenameResultType1,
|
|
25
|
+
Range,
|
|
26
|
+
RenameFile,
|
|
27
|
+
TextDocumentEdit,
|
|
28
|
+
WorkspaceEdit,
|
|
29
|
+
)
|
|
30
|
+
from robotcode.core.text_document import TextDocument
|
|
31
|
+
from robotcode.core.utils.logging import LoggingDescriptor
|
|
32
|
+
from robotcode.robot.diagnostics.entities import (
|
|
33
|
+
VariableDefinition,
|
|
34
|
+
VariableDefinitionType,
|
|
35
|
+
)
|
|
36
|
+
from robotcode.robot.diagnostics.library_doc import KeywordDoc
|
|
37
|
+
from robotcode.robot.diagnostics.model_helper import ModelHelper
|
|
38
|
+
|
|
39
|
+
from ...common.parts.rename import CantRenameError
|
|
40
|
+
from .protocol_part import RobotLanguageServerProtocolPart
|
|
41
|
+
|
|
42
|
+
if TYPE_CHECKING:
|
|
43
|
+
from ..protocol import RobotLanguageServerProtocol
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
_RenameMethod = Callable[[ast.AST, TextDocument, Position, str], Optional[WorkspaceEdit]]
|
|
47
|
+
_PrepareRenameMethod = Callable[[ast.AST, TextDocument, Position], Optional[PrepareRenameResult]]
|
|
48
|
+
|
|
49
|
+
_T = TypeVar("_T", bound=Callable[..., Any])
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class RobotRenameProtocolPart(RobotLanguageServerProtocolPart, ModelHelper):
|
|
53
|
+
_logger = LoggingDescriptor()
|
|
54
|
+
|
|
55
|
+
def __init__(self, parent: "RobotLanguageServerProtocol") -> None:
|
|
56
|
+
super().__init__(parent)
|
|
57
|
+
|
|
58
|
+
parent.rename.collect.add(self.collect)
|
|
59
|
+
parent.rename.collect_prepare.add(self.collect_prepare)
|
|
60
|
+
|
|
61
|
+
@language_id("robotframework")
|
|
62
|
+
@_logger.call
|
|
63
|
+
def collect(
|
|
64
|
+
self, sender: Any, document: TextDocument, position: Position, new_name: str
|
|
65
|
+
) -> Optional[WorkspaceEdit]:
|
|
66
|
+
result = self._rename_variable(document, position, new_name)
|
|
67
|
+
if result:
|
|
68
|
+
return result
|
|
69
|
+
|
|
70
|
+
result = self._rename_keyword(document, position, new_name)
|
|
71
|
+
if result:
|
|
72
|
+
return result
|
|
73
|
+
|
|
74
|
+
return None
|
|
75
|
+
|
|
76
|
+
@language_id("robotframework")
|
|
77
|
+
@_logger.call
|
|
78
|
+
def collect_prepare(self, sender: Any, document: TextDocument, position: Position) -> Optional[PrepareRenameResult]:
|
|
79
|
+
result = self._prepare_rename_variable(document, position)
|
|
80
|
+
if result:
|
|
81
|
+
return result
|
|
82
|
+
|
|
83
|
+
result = self._prepare_rename_keyword(document, position)
|
|
84
|
+
if result:
|
|
85
|
+
return result
|
|
86
|
+
|
|
87
|
+
return None
|
|
88
|
+
|
|
89
|
+
def _prepare_rename_variable(self, document: TextDocument, position: Position) -> Optional[PrepareRenameResult]:
|
|
90
|
+
result = self._find_variable_definition_on_pos(document, position)
|
|
91
|
+
if result is not None:
|
|
92
|
+
var, found_range = result
|
|
93
|
+
|
|
94
|
+
if var.type == VariableDefinitionType.BUILTIN_VARIABLE:
|
|
95
|
+
self.parent.window.show_message("You cannot rename a builtin variable, only references are renamed.")
|
|
96
|
+
|
|
97
|
+
elif var.type == VariableDefinitionType.IMPORTED_VARIABLE:
|
|
98
|
+
self.parent.window.show_message(
|
|
99
|
+
"You are about to rename an imported variable. "
|
|
100
|
+
"Only references are renamed and you have to rename the variable definition yourself."
|
|
101
|
+
)
|
|
102
|
+
elif var.type == VariableDefinitionType.COMMAND_LINE_VARIABLE:
|
|
103
|
+
self.parent.window.show_message(
|
|
104
|
+
"You are about to rename a variable defined at commandline. "
|
|
105
|
+
"Only references are renamed and you have to rename the variable definition yourself."
|
|
106
|
+
)
|
|
107
|
+
elif var.type == VariableDefinitionType.ENVIRONMENT_VARIABLE:
|
|
108
|
+
self.parent.window.show_message(
|
|
109
|
+
"You are about to rename an environment variable. "
|
|
110
|
+
"Only references are renamed and you have to rename the variable definition yourself."
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
return PrepareRenameResultType1(found_range, document.get_text(found_range))
|
|
114
|
+
|
|
115
|
+
return None
|
|
116
|
+
|
|
117
|
+
def _rename_variable(self, document: TextDocument, position: Position, new_name: str) -> Optional[WorkspaceEdit]:
|
|
118
|
+
if " " in new_name or "\t" in new_name:
|
|
119
|
+
raise CantRenameError(
|
|
120
|
+
"Variable names cannot contain more then one spaces or tabs. "
|
|
121
|
+
"Please use only one space or underscores instead.",
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
result = self._find_variable_definition_on_pos(document, position)
|
|
125
|
+
|
|
126
|
+
if result is not None:
|
|
127
|
+
var, _ = result
|
|
128
|
+
|
|
129
|
+
references = self.parent.robot_references.find_variable_references(
|
|
130
|
+
document,
|
|
131
|
+
var,
|
|
132
|
+
include_declaration=var.type
|
|
133
|
+
in [
|
|
134
|
+
VariableDefinitionType.VARIABLE,
|
|
135
|
+
VariableDefinitionType.ARGUMENT,
|
|
136
|
+
VariableDefinitionType.LOCAL_VARIABLE,
|
|
137
|
+
],
|
|
138
|
+
)
|
|
139
|
+
changes: List[Union[TextDocumentEdit, CreateFile, RenameFile, DeleteFile]] = []
|
|
140
|
+
|
|
141
|
+
for reference in references:
|
|
142
|
+
changes.append(
|
|
143
|
+
TextDocumentEdit(
|
|
144
|
+
OptionalVersionedTextDocumentIdentifier(reference.uri, None),
|
|
145
|
+
[AnnotatedTextEdit("rename_variable", reference.range, new_name)],
|
|
146
|
+
)
|
|
147
|
+
)
|
|
148
|
+
|
|
149
|
+
return WorkspaceEdit(
|
|
150
|
+
document_changes=changes,
|
|
151
|
+
change_annotations={"rename_variable": ChangeAnnotation("Rename Variable", False)},
|
|
152
|
+
)
|
|
153
|
+
|
|
154
|
+
return None
|
|
155
|
+
|
|
156
|
+
def _find_variable_definition_on_pos(
|
|
157
|
+
self, document: TextDocument, position: Position
|
|
158
|
+
) -> Optional[Tuple[VariableDefinition, Range]]:
|
|
159
|
+
namespace = self.parent.documents_cache.get_namespace(document)
|
|
160
|
+
|
|
161
|
+
all_variable_refs = namespace.get_variable_references()
|
|
162
|
+
if all_variable_refs:
|
|
163
|
+
for variable, var_refs in all_variable_refs.items():
|
|
164
|
+
check_current_task_canceled()
|
|
165
|
+
|
|
166
|
+
found_range = (
|
|
167
|
+
variable.name_range
|
|
168
|
+
if variable.source == namespace.source and position.is_in_range(variable.name_range, False)
|
|
169
|
+
else cast(
|
|
170
|
+
Optional[Range],
|
|
171
|
+
next(
|
|
172
|
+
(r.range for r in var_refs if position.is_in_range(r.range)),
|
|
173
|
+
None,
|
|
174
|
+
),
|
|
175
|
+
)
|
|
176
|
+
)
|
|
177
|
+
|
|
178
|
+
if found_range is not None:
|
|
179
|
+
return variable, found_range
|
|
180
|
+
return None
|
|
181
|
+
|
|
182
|
+
def _prepare_rename_keyword(self, document: TextDocument, position: Position) -> Optional[PrepareRenameResult]:
|
|
183
|
+
result = self._find_keyword_definition_on_pos(document, position)
|
|
184
|
+
if result is not None:
|
|
185
|
+
kw_doc, found_range = result
|
|
186
|
+
|
|
187
|
+
if kw_doc.is_embedded:
|
|
188
|
+
raise CantRenameError("Renaming of keywords with embedded parameters is not supported.")
|
|
189
|
+
|
|
190
|
+
if kw_doc.is_library_keyword:
|
|
191
|
+
self.parent.window.show_message(
|
|
192
|
+
"You are about to rename a library keyword. "
|
|
193
|
+
"Only references are renamed and you have to rename the keyword definition yourself."
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
return PrepareRenameResultType1(found_range, document.get_text(found_range))
|
|
197
|
+
|
|
198
|
+
return None
|
|
199
|
+
|
|
200
|
+
def _rename_keyword(self, document: TextDocument, position: Position, new_name: str) -> Optional[WorkspaceEdit]:
|
|
201
|
+
if " " in new_name or "\t" in new_name:
|
|
202
|
+
raise CantRenameError(
|
|
203
|
+
"Keyword names cannot contain more then one spaces or tabs. "
|
|
204
|
+
"Please use only one space or underscores instead.",
|
|
205
|
+
)
|
|
206
|
+
|
|
207
|
+
result = self._find_keyword_definition_on_pos(document, position)
|
|
208
|
+
if result is not None:
|
|
209
|
+
kw_doc, _ = result
|
|
210
|
+
|
|
211
|
+
references = self.parent.robot_references.find_keyword_references(
|
|
212
|
+
document,
|
|
213
|
+
kw_doc,
|
|
214
|
+
include_declaration=kw_doc.is_resource_keyword,
|
|
215
|
+
)
|
|
216
|
+
changes: List[Union[TextDocumentEdit, CreateFile, RenameFile, DeleteFile]] = []
|
|
217
|
+
|
|
218
|
+
for reference in references:
|
|
219
|
+
changes.append(
|
|
220
|
+
TextDocumentEdit(
|
|
221
|
+
OptionalVersionedTextDocumentIdentifier(reference.uri, None),
|
|
222
|
+
[AnnotatedTextEdit("rename_keyword", reference.range, new_name)],
|
|
223
|
+
)
|
|
224
|
+
)
|
|
225
|
+
|
|
226
|
+
return WorkspaceEdit(
|
|
227
|
+
document_changes=changes,
|
|
228
|
+
change_annotations={"rename_keyword": ChangeAnnotation("Rename Keyword", False)},
|
|
229
|
+
)
|
|
230
|
+
|
|
231
|
+
return None
|
|
232
|
+
|
|
233
|
+
def _find_keyword_definition_on_pos(
|
|
234
|
+
self, document: TextDocument, position: Position
|
|
235
|
+
) -> Optional[Tuple[KeywordDoc, Range]]:
|
|
236
|
+
namespace = self.parent.documents_cache.get_namespace(document)
|
|
237
|
+
|
|
238
|
+
all_refs = namespace.get_keyword_references()
|
|
239
|
+
if all_refs:
|
|
240
|
+
for keyword, kw_refs in all_refs.items():
|
|
241
|
+
check_current_task_canceled()
|
|
242
|
+
|
|
243
|
+
found_range = (
|
|
244
|
+
keyword.name_range
|
|
245
|
+
if keyword.source == namespace.source and position.is_in_range(keyword.name_range, False)
|
|
246
|
+
else cast(
|
|
247
|
+
Optional[Range],
|
|
248
|
+
next(
|
|
249
|
+
(r.range for r in kw_refs if position.is_in_range(r.range)),
|
|
250
|
+
None,
|
|
251
|
+
),
|
|
252
|
+
)
|
|
253
|
+
)
|
|
254
|
+
|
|
255
|
+
if found_range is not None:
|
|
256
|
+
return keyword, found_range
|
|
257
|
+
return None
|
|
258
|
+
|
|
259
|
+
# TODO: rename tags
|
|
260
|
+
# TODO: rename resource files and libraries
|
|
@@ -18,7 +18,6 @@ from robotcode.core.workspace import WorkspaceFolder
|
|
|
18
18
|
from ...common.parts.diagnostics import DiagnosticsCollectType, DiagnosticsResult
|
|
19
19
|
from ..configuration import RoboCopConfig
|
|
20
20
|
from .protocol_part import RobotLanguageServerProtocolPart
|
|
21
|
-
from .robocop_tidy_mixin import RoboCopTidyMixin
|
|
22
21
|
|
|
23
22
|
if TYPE_CHECKING:
|
|
24
23
|
from robocop.linter.runner import RobocopLinter
|
|
@@ -26,7 +25,7 @@ if TYPE_CHECKING:
|
|
|
26
25
|
from ..protocol import RobotLanguageServerProtocol
|
|
27
26
|
|
|
28
27
|
|
|
29
|
-
class RobotRoboCopDiagnosticsProtocolPart(RobotLanguageServerProtocolPart
|
|
28
|
+
class RobotRoboCopDiagnosticsProtocolPart(RobotLanguageServerProtocolPart):
|
|
30
29
|
_logger = LoggingDescriptor()
|
|
31
30
|
|
|
32
31
|
def __init__(self, parent: "RobotLanguageServerProtocol") -> None:
|
|
@@ -35,7 +34,7 @@ class RobotRoboCopDiagnosticsProtocolPart(RobotLanguageServerProtocolPart, RoboC
|
|
|
35
34
|
self.source_name = "robocop"
|
|
36
35
|
self._robocop_linters: WeakKeyDictionary[WorkspaceFolder, "RobocopLinter"] = WeakKeyDictionary()
|
|
37
36
|
|
|
38
|
-
if self.robocop_installed:
|
|
37
|
+
if self.parent.robocop_helper.robocop_installed:
|
|
39
38
|
parent.diagnostics.collect.add(self.collect_diagnostics)
|
|
40
39
|
|
|
41
40
|
def get_config(self, document: TextDocument) -> Optional[RoboCopConfig]:
|
|
@@ -50,18 +49,15 @@ class RobotRoboCopDiagnosticsProtocolPart(RobotLanguageServerProtocolPart, RoboC
|
|
|
50
49
|
def collect_diagnostics(
|
|
51
50
|
self, sender: Any, document: TextDocument, diagnostics_type: DiagnosticsCollectType
|
|
52
51
|
) -> Optional[DiagnosticsResult]:
|
|
53
|
-
if self.robocop_installed:
|
|
52
|
+
if self.parent.robocop_helper.robocop_installed:
|
|
54
53
|
workspace_folder = self.parent.workspace.get_workspace_folder(document.uri)
|
|
55
54
|
if workspace_folder is not None:
|
|
56
55
|
config = self.get_config(document)
|
|
57
56
|
|
|
58
57
|
if config is not None and config.enabled:
|
|
59
|
-
if self.robocop_version >= (6, 0):
|
|
58
|
+
if self.parent.robocop_helper.robocop_version >= (6, 0):
|
|
60
59
|
# In Robocop 6.0, the diagnostics are collected in a different way
|
|
61
|
-
return DiagnosticsResult(
|
|
62
|
-
self.collect_diagnostics,
|
|
63
|
-
self.collect(document, workspace_folder, config),
|
|
64
|
-
)
|
|
60
|
+
return DiagnosticsResult(self.collect_diagnostics, self.collect(document, workspace_folder))
|
|
65
61
|
|
|
66
62
|
return DiagnosticsResult(
|
|
67
63
|
self.collect_diagnostics,
|
|
@@ -71,26 +67,17 @@ class RobotRoboCopDiagnosticsProtocolPart(RobotLanguageServerProtocolPart, RoboC
|
|
|
71
67
|
return None
|
|
72
68
|
|
|
73
69
|
@_logger.call
|
|
74
|
-
def collect(
|
|
75
|
-
self,
|
|
76
|
-
document: TextDocument,
|
|
77
|
-
workspace_folder: WorkspaceFolder,
|
|
78
|
-
extension_config: RoboCopConfig,
|
|
79
|
-
) -> List[Diagnostic]:
|
|
80
|
-
from robocop.config import ConfigManager
|
|
70
|
+
def collect(self, document: TextDocument, workspace_folder: WorkspaceFolder) -> List[Diagnostic]:
|
|
81
71
|
from robocop.linter.rules import RuleSeverity
|
|
82
72
|
from robocop.linter.runner import RobocopLinter
|
|
83
73
|
|
|
84
74
|
linter = self._robocop_linters.get(workspace_folder, None)
|
|
85
75
|
|
|
86
76
|
if linter is None:
|
|
87
|
-
config_manager =
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
ignore_git_dir=extension_config.ignore_git_dir,
|
|
92
|
-
ignore_file_config=extension_config.ignore_file_config,
|
|
93
|
-
)
|
|
77
|
+
config_manager = self.parent.robocop_helper.get_config_manager(workspace_folder)
|
|
78
|
+
|
|
79
|
+
config = config_manager.get_config_for_source_file(document.uri.to_path())
|
|
80
|
+
|
|
94
81
|
linter = RobocopLinter(config_manager)
|
|
95
82
|
self._robocop_linters[workspace_folder] = linter
|
|
96
83
|
|
|
@@ -128,7 +115,7 @@ class RobotRoboCopDiagnosticsProtocolPart(RobotLanguageServerProtocolPart, RoboC
|
|
|
128
115
|
),
|
|
129
116
|
source=self.source_name,
|
|
130
117
|
code=f"{diagnostic.rule.rule_id}-{diagnostic.rule.name}",
|
|
131
|
-
code_description=self.get_code_description(self.robocop_version, diagnostic),
|
|
118
|
+
code_description=self.get_code_description(self.parent.robocop_helper.robocop_version, diagnostic),
|
|
132
119
|
)
|
|
133
120
|
for diagnostic in diagnostics
|
|
134
121
|
]
|