robotcode-language-server 1.3.0.dev2__tar.gz → 1.3.0.dev3__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.dev2 → robotcode_language_server-1.3.0.dev3}/PKG-INFO +5 -5
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/pyproject.toml +4 -4
- robotcode_language_server-1.3.0.dev3/src/robotcode/language_server/__version__.py +1 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/configuration.py +3 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/formatting.py +81 -34
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/project_info.py +6 -19
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/robocop_diagnostics.py +3 -10
- robotcode_language_server-1.3.0.dev3/src/robotcode/language_server/robotframework/parts/robocop_tidy_mixin.py +49 -0
- robotcode_language_server-1.3.0.dev2/src/robotcode/language_server/__version__.py +0 -1
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/.gitignore +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/LICENSE.txt +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/README.md +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/__init__.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/cli.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/__init__.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/decorators.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/__init__.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/code_action.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/code_lens.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/commands.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/completion.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/declaration.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/definition.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/diagnostics.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/document_highlight.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/document_symbols.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/documents.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/folding_range.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/formatting.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/hover.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/implementation.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/inlay_hint.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/inline_value.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/linked_editing_ranges.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/protocol_part.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/references.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/rename.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/selection_range.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/semantic_tokens.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/signature_help.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/window.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/workspace.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/parts/workspace_symbols.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/protocol.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/common/server.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/hooks.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/py.typed +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/__init__.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/__init__.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/code_action_documentation.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/code_action_helper_mixin.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/code_action_quick_fixes.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/code_action_refactor.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/code_lens.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/completion.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/debugging_utils.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/diagnostics.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/document_highlight.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/document_symbols.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/documents_cache.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/folding_range.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/goto.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/hover.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/http_server.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/inlay_hint.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/inline_value.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/keywords_treeview.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/protocol_part.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/references.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/rename.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/robot_workspace.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/selection_range.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/semantic_tokens.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/signature_help.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/parts/workspace_symbols.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/src/robotcode/language_server/robotframework/protocol.py +0 -0
- {robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/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.0.
|
|
3
|
+
Version: 1.3.0.dev3
|
|
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.3.0-dev.
|
|
29
|
-
Requires-Dist: robotcode-jsonrpc2==1.3.0-dev.
|
|
30
|
-
Requires-Dist: robotcode-robot==1.3.0-dev.
|
|
31
|
-
Requires-Dist: robotcode==1.3.0-dev.
|
|
28
|
+
Requires-Dist: robotcode-analyze==1.3.0-dev.3
|
|
29
|
+
Requires-Dist: robotcode-jsonrpc2==1.3.0-dev.3
|
|
30
|
+
Requires-Dist: robotcode-robot==1.3.0-dev.3
|
|
31
|
+
Requires-Dist: robotcode==1.3.0-dev.3
|
|
32
32
|
Requires-Dist: robotframework>=4.1.0
|
|
33
33
|
Description-Content-Type: text/markdown
|
|
34
34
|
|
{robotcode_language_server-1.3.0.dev2 → robotcode_language_server-1.3.0.dev3}/pyproject.toml
RENAMED
|
@@ -27,10 +27,10 @@ classifiers = [
|
|
|
27
27
|
]
|
|
28
28
|
dependencies = [
|
|
29
29
|
"robotframework>=4.1.0",
|
|
30
|
-
"robotcode-jsonrpc2==1.3.0-dev.
|
|
31
|
-
"robotcode-robot==1.3.0-dev.
|
|
32
|
-
"robotcode-analyze==1.3.0-dev.
|
|
33
|
-
"robotcode==1.3.0-dev.
|
|
30
|
+
"robotcode-jsonrpc2==1.3.0-dev.3",
|
|
31
|
+
"robotcode-robot==1.3.0-dev.3",
|
|
32
|
+
"robotcode-analyze==1.3.0-dev.3",
|
|
33
|
+
"robotcode==1.3.0-dev.3",
|
|
34
34
|
]
|
|
35
35
|
dynamic = ["version"]
|
|
36
36
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = "1.3.0-dev.3"
|
|
@@ -33,6 +33,9 @@ class RoboCopConfig(ConfigBase):
|
|
|
33
33
|
enabled: bool = True
|
|
34
34
|
include: List[str] = field(default_factory=list)
|
|
35
35
|
exclude: List[str] = field(default_factory=list)
|
|
36
|
+
ignore_git_dir: bool = False
|
|
37
|
+
ignore_file_config: bool = False
|
|
38
|
+
config_file: Optional[str] = None
|
|
36
39
|
configurations: List[str] = field(default_factory=list)
|
|
37
40
|
|
|
38
41
|
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import io
|
|
2
2
|
import os
|
|
3
|
-
import re
|
|
4
3
|
from concurrent.futures import CancelledError
|
|
5
4
|
from typing import TYPE_CHECKING, Any, List, Optional, cast
|
|
6
5
|
|
|
@@ -14,26 +13,17 @@ from robotcode.core.lsp.types import (
|
|
|
14
13
|
)
|
|
15
14
|
from robotcode.core.text_document import TextDocument
|
|
16
15
|
from robotcode.core.utils.logging import LoggingDescriptor
|
|
17
|
-
from robotcode.core.utils.version import create_version_from_str
|
|
18
|
-
from robotcode.robot.diagnostics.model_helper import ModelHelper
|
|
19
16
|
from robotcode.robot.utils import get_robot_version
|
|
20
17
|
|
|
21
|
-
from ..configuration import RoboTidyConfig
|
|
18
|
+
from ..configuration import RoboCopConfig, RoboTidyConfig
|
|
22
19
|
from .protocol_part import RobotLanguageServerProtocolPart
|
|
20
|
+
from .robocop_tidy_mixin import RoboCopTidyMixin
|
|
23
21
|
|
|
24
22
|
if TYPE_CHECKING:
|
|
25
23
|
from ..protocol import RobotLanguageServerProtocol
|
|
26
24
|
|
|
27
25
|
|
|
28
|
-
|
|
29
|
-
try:
|
|
30
|
-
__import__("robotidy")
|
|
31
|
-
except ImportError:
|
|
32
|
-
return False
|
|
33
|
-
return True
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
class RobotFormattingProtocolPart(RobotLanguageServerProtocolPart, ModelHelper):
|
|
26
|
+
class RobotFormattingProtocolPart(RobotLanguageServerProtocolPart, RoboCopTidyMixin):
|
|
37
27
|
_logger = LoggingDescriptor()
|
|
38
28
|
|
|
39
29
|
def __init__(self, parent: "RobotLanguageServerProtocol") -> None:
|
|
@@ -41,7 +31,7 @@ class RobotFormattingProtocolPart(RobotLanguageServerProtocolPart, ModelHelper):
|
|
|
41
31
|
|
|
42
32
|
parent.formatting.format.add(self.format)
|
|
43
33
|
|
|
44
|
-
if robotidy_installed():
|
|
34
|
+
if self.robotidy_installed or (self.robocop_installed and self.robocop_version >= (6, 0)):
|
|
45
35
|
parent.formatting.format_range.add(self.format_range)
|
|
46
36
|
|
|
47
37
|
self.space_count = 4
|
|
@@ -49,14 +39,22 @@ class RobotFormattingProtocolPart(RobotLanguageServerProtocolPart, ModelHelper):
|
|
|
49
39
|
self.line_separator = os.linesep
|
|
50
40
|
self.short_test_name_length = 18
|
|
51
41
|
self.setting_and_variable_name_length = 14
|
|
42
|
+
self.robocop_installed_message_shown = False
|
|
52
43
|
|
|
53
|
-
def
|
|
44
|
+
def get_tidy_config(self, document: TextDocument) -> RoboTidyConfig:
|
|
54
45
|
folder = self.parent.workspace.get_workspace_folder(document.uri)
|
|
55
46
|
if folder is None:
|
|
56
47
|
return RoboTidyConfig()
|
|
57
48
|
|
|
58
49
|
return self.parent.workspace.get_configuration(RoboTidyConfig, folder.uri)
|
|
59
50
|
|
|
51
|
+
def get_robocop_config(self, document: TextDocument) -> RoboCopConfig:
|
|
52
|
+
folder = self.parent.workspace.get_workspace_folder(document.uri)
|
|
53
|
+
if folder is None:
|
|
54
|
+
return RoboCopConfig()
|
|
55
|
+
|
|
56
|
+
return self.parent.workspace.get_configuration(RoboCopConfig, folder.uri)
|
|
57
|
+
|
|
60
58
|
@language_id("robotframework")
|
|
61
59
|
@_logger.call
|
|
62
60
|
def format(
|
|
@@ -66,23 +64,32 @@ class RobotFormattingProtocolPart(RobotLanguageServerProtocolPart, ModelHelper):
|
|
|
66
64
|
options: FormattingOptions,
|
|
67
65
|
**further_options: Any,
|
|
68
66
|
) -> Optional[List[TextEdit]]:
|
|
69
|
-
|
|
67
|
+
if (get_robot_version() >= (5, 0)) and self.robocop_installed and self.robocop_version >= (6, 0):
|
|
68
|
+
if not self.robocop_installed_message_shown and self.robotidy_installed:
|
|
69
|
+
self.parent.window.show_message(
|
|
70
|
+
"`robotframework-robocop >= 6.0` is installed and will be used for formatting.\n"
|
|
71
|
+
"`robotframework-tidy` is also detected in the workspace. "
|
|
72
|
+
"It is not needed as `robocop` handles formatting tasks.\n",
|
|
73
|
+
MessageType.INFO,
|
|
74
|
+
)
|
|
75
|
+
self.robocop_installed_message_shown = True
|
|
70
76
|
|
|
71
|
-
|
|
72
|
-
|
|
77
|
+
return self.format_robocop(document, options, **further_options)
|
|
78
|
+
|
|
79
|
+
tidy_config = self.get_tidy_config(document)
|
|
80
|
+
if (tidy_config.enabled or get_robot_version() >= (5, 0)) and self.robotidy_installed:
|
|
81
|
+
return self.format_robot_tidy(document, options, config=tidy_config, **further_options)
|
|
73
82
|
|
|
74
83
|
if get_robot_version() < (5, 0):
|
|
75
84
|
return self.format_internal(document, options, **further_options)
|
|
76
85
|
|
|
77
86
|
self.parent.window.show_message(
|
|
78
|
-
"RobotFramework formatter is not available, please install 'robotframework-
|
|
87
|
+
"RobotFramework formatter is not available, please install 'robotframework-robocop'.",
|
|
79
88
|
MessageType.ERROR,
|
|
80
89
|
)
|
|
81
90
|
|
|
82
91
|
return None
|
|
83
92
|
|
|
84
|
-
RE_LINEBREAKS = re.compile(r"\r\n|\r|\n")
|
|
85
|
-
|
|
86
93
|
def format_robot_tidy(
|
|
87
94
|
self,
|
|
88
95
|
document: TextDocument,
|
|
@@ -91,28 +98,24 @@ class RobotFormattingProtocolPart(RobotLanguageServerProtocolPart, ModelHelper):
|
|
|
91
98
|
config: Optional[RoboTidyConfig] = None,
|
|
92
99
|
**further_options: Any,
|
|
93
100
|
) -> Optional[List[TextEdit]]:
|
|
94
|
-
from robotidy.version import __version__
|
|
95
|
-
|
|
96
101
|
try:
|
|
97
102
|
if config is None:
|
|
98
|
-
config = self.
|
|
99
|
-
|
|
100
|
-
robotidy_version = create_version_from_str(__version__)
|
|
103
|
+
config = self.get_tidy_config(document)
|
|
101
104
|
|
|
102
105
|
model = self.parent.documents_cache.get_model(document, False)
|
|
103
106
|
|
|
104
|
-
if robotidy_version >= (3, 0):
|
|
107
|
+
if self.robotidy_version >= (3, 0):
|
|
105
108
|
from robotidy.api import get_robotidy
|
|
106
109
|
from robotidy.disablers import RegisterDisablers
|
|
107
110
|
|
|
108
|
-
if robotidy_version >= (4, 2):
|
|
111
|
+
if self.robotidy_version >= (4, 2):
|
|
109
112
|
robot_tidy = get_robotidy(
|
|
110
113
|
document.uri.to_path(),
|
|
111
114
|
None,
|
|
112
115
|
ignore_git_dir=config.ignore_git_dir,
|
|
113
116
|
config=config.config,
|
|
114
117
|
)
|
|
115
|
-
elif robotidy_version >= (4, 1):
|
|
118
|
+
elif self.robotidy_version >= (4, 1):
|
|
116
119
|
robot_tidy = get_robotidy(
|
|
117
120
|
document.uri.to_path(),
|
|
118
121
|
None,
|
|
@@ -131,14 +134,14 @@ class RobotFormattingProtocolPart(RobotLanguageServerProtocolPart, ModelHelper):
|
|
|
131
134
|
)
|
|
132
135
|
disabler_finder.visit(model)
|
|
133
136
|
|
|
134
|
-
if robotidy_version >= (4, 11):
|
|
137
|
+
if self.robotidy_version >= (4, 11):
|
|
135
138
|
if disabler_finder.is_disabled_in_file():
|
|
136
139
|
return None
|
|
137
140
|
else:
|
|
138
141
|
if disabler_finder.file_disabled:
|
|
139
142
|
return None
|
|
140
143
|
|
|
141
|
-
if robotidy_version >= (4, 0):
|
|
144
|
+
if self.robotidy_version >= (4, 0):
|
|
142
145
|
_, _, new, _ = robot_tidy.transform_until_stable(model, disabler_finder)
|
|
143
146
|
else:
|
|
144
147
|
_, _, new = robot_tidy.transform(model, disabler_finder.disablers)
|
|
@@ -152,7 +155,7 @@ class RobotFormattingProtocolPart(RobotLanguageServerProtocolPart, ModelHelper):
|
|
|
152
155
|
robot_tidy.formatting_config.start_line = range.start.line + 1
|
|
153
156
|
robot_tidy.formatting_config.end_line = range.end.line + 1
|
|
154
157
|
|
|
155
|
-
if robotidy_version >= (2, 2):
|
|
158
|
+
if self.robotidy_version >= (2, 2):
|
|
156
159
|
from robotidy.disablers import RegisterDisablers
|
|
157
160
|
|
|
158
161
|
disabler_finder = RegisterDisablers(
|
|
@@ -186,6 +189,50 @@ class RobotFormattingProtocolPart(RobotLanguageServerProtocolPart, ModelHelper):
|
|
|
186
189
|
self.parent.window.show_message(f"Executing `robotidy` failed: {e}", MessageType.ERROR)
|
|
187
190
|
return None
|
|
188
191
|
|
|
192
|
+
def format_robocop(
|
|
193
|
+
self,
|
|
194
|
+
document: TextDocument,
|
|
195
|
+
options: FormattingOptions,
|
|
196
|
+
range: Optional[Range] = None,
|
|
197
|
+
**further_options: Any,
|
|
198
|
+
) -> Optional[List[TextEdit]]:
|
|
199
|
+
from robocop.config import ConfigManager
|
|
200
|
+
from robocop.formatter.runner import RobocopFormatter
|
|
201
|
+
|
|
202
|
+
robocop_config = self.get_robocop_config(document)
|
|
203
|
+
|
|
204
|
+
config_manager = ConfigManager(
|
|
205
|
+
[document.uri.to_path()],
|
|
206
|
+
config=robocop_config.config_file,
|
|
207
|
+
ignore_git_dir=robocop_config.ignore_git_dir,
|
|
208
|
+
ignore_file_config=robocop_config.ignore_file_config,
|
|
209
|
+
)
|
|
210
|
+
|
|
211
|
+
config = config_manager.get_config_for_source_file(document.uri.to_path())
|
|
212
|
+
|
|
213
|
+
if range is not None:
|
|
214
|
+
config.formatter.start_line = range.start.line + 1
|
|
215
|
+
config.formatter.end_line = range.end.line + 1
|
|
216
|
+
|
|
217
|
+
runner = RobocopFormatter(config_manager)
|
|
218
|
+
runner.config = config
|
|
219
|
+
|
|
220
|
+
model = self.parent.documents_cache.get_model(document, False)
|
|
221
|
+
_, _, new, _ = runner.format_until_stable(model)
|
|
222
|
+
|
|
223
|
+
if new.text == document.text():
|
|
224
|
+
return None
|
|
225
|
+
|
|
226
|
+
return [
|
|
227
|
+
TextEdit(
|
|
228
|
+
range=Range(
|
|
229
|
+
start=Position(line=0, character=0),
|
|
230
|
+
end=Position(line=len(document.get_lines()), character=0),
|
|
231
|
+
),
|
|
232
|
+
new_text=new.text,
|
|
233
|
+
)
|
|
234
|
+
]
|
|
235
|
+
|
|
189
236
|
def format_internal(
|
|
190
237
|
self,
|
|
191
238
|
document: TextDocument,
|
|
@@ -233,8 +280,8 @@ class RobotFormattingProtocolPart(RobotLanguageServerProtocolPart, ModelHelper):
|
|
|
233
280
|
options: FormattingOptions,
|
|
234
281
|
**further_options: Any,
|
|
235
282
|
) -> Optional[List[TextEdit]]:
|
|
236
|
-
config = self.
|
|
237
|
-
if config.enabled and robotidy_installed():
|
|
283
|
+
config = self.get_tidy_config(document)
|
|
284
|
+
if (config.enabled and self.robotidy_installed) or (self.robocop_installed and self.robocop_version >= (6, 0)):
|
|
238
285
|
return self.format_robot_tidy(document, options, range=range, config=config, **further_options)
|
|
239
286
|
|
|
240
287
|
return None
|
|
@@ -7,9 +7,8 @@ from robotcode.core.utils.dataclasses import CamelSnakeMixin
|
|
|
7
7
|
from robotcode.core.utils.logging import LoggingDescriptor
|
|
8
8
|
from robotcode.jsonrpc2.protocol import rpc_method
|
|
9
9
|
|
|
10
|
-
from .formatting import robotidy_installed
|
|
11
10
|
from .protocol_part import RobotLanguageServerProtocolPart
|
|
12
|
-
from .
|
|
11
|
+
from .robocop_tidy_mixin import RoboCopTidyMixin
|
|
13
12
|
|
|
14
13
|
if TYPE_CHECKING:
|
|
15
14
|
from ..protocol import RobotLanguageServerProtocol
|
|
@@ -22,7 +21,7 @@ class ProjectInfo(CamelSnakeMixin):
|
|
|
22
21
|
tidy_version_string: Optional[str] = None
|
|
23
22
|
|
|
24
23
|
|
|
25
|
-
class ProjectInfoPart(RobotLanguageServerProtocolPart):
|
|
24
|
+
class ProjectInfoPart(RobotLanguageServerProtocolPart, RoboCopTidyMixin):
|
|
26
25
|
_logger = LoggingDescriptor()
|
|
27
26
|
|
|
28
27
|
def __init__(self, parent: "RobotLanguageServerProtocol") -> None:
|
|
@@ -36,24 +35,12 @@ class ProjectInfoPart(RobotLanguageServerProtocolPart):
|
|
|
36
35
|
**kwargs: Any,
|
|
37
36
|
) -> ProjectInfo:
|
|
38
37
|
robocop_version_string = None
|
|
39
|
-
if robocop_installed
|
|
40
|
-
|
|
41
|
-
from robocop.version import __version__
|
|
42
|
-
|
|
43
|
-
robocop_version_string = __version__
|
|
44
|
-
except ImportError:
|
|
45
|
-
try:
|
|
46
|
-
from robocop import __version__
|
|
47
|
-
|
|
48
|
-
robocop_version_string = __version__
|
|
49
|
-
except ImportError:
|
|
50
|
-
pass
|
|
38
|
+
if self.robocop_installed:
|
|
39
|
+
robocop_version_string = self.robocop_version_str
|
|
51
40
|
|
|
52
41
|
tidy_version_string = None
|
|
53
|
-
if robotidy_installed
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
tidy_version_string = __version__
|
|
42
|
+
if self.robotidy_installed:
|
|
43
|
+
tidy_version_string = self.robotidy_version_str
|
|
57
44
|
|
|
58
45
|
return ProjectInfo(
|
|
59
46
|
robot_version_string=get_version(),
|
|
@@ -17,20 +17,13 @@ from robotcode.core.workspace import WorkspaceFolder
|
|
|
17
17
|
from ...common.parts.diagnostics import DiagnosticsCollectType, DiagnosticsResult
|
|
18
18
|
from ..configuration import RoboCopConfig
|
|
19
19
|
from .protocol_part import RobotLanguageServerProtocolPart
|
|
20
|
+
from .robocop_tidy_mixin import RoboCopTidyMixin
|
|
20
21
|
|
|
21
22
|
if TYPE_CHECKING:
|
|
22
23
|
from ..protocol import RobotLanguageServerProtocol
|
|
23
24
|
|
|
24
25
|
|
|
25
|
-
|
|
26
|
-
try:
|
|
27
|
-
__import__("robocop")
|
|
28
|
-
except ImportError:
|
|
29
|
-
return False
|
|
30
|
-
return True
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
class RobotRoboCopDiagnosticsProtocolPart(RobotLanguageServerProtocolPart):
|
|
26
|
+
class RobotRoboCopDiagnosticsProtocolPart(RobotLanguageServerProtocolPart, RoboCopTidyMixin):
|
|
34
27
|
_logger = LoggingDescriptor()
|
|
35
28
|
|
|
36
29
|
def __init__(self, parent: "RobotLanguageServerProtocol") -> None:
|
|
@@ -38,7 +31,7 @@ class RobotRoboCopDiagnosticsProtocolPart(RobotLanguageServerProtocolPart):
|
|
|
38
31
|
|
|
39
32
|
self.source_name = "robocop"
|
|
40
33
|
|
|
41
|
-
if robocop_installed():
|
|
34
|
+
if self.robocop_installed and self.robocop_version < (6, 0):
|
|
42
35
|
parent.diagnostics.collect.add(self.collect_diagnostics)
|
|
43
36
|
|
|
44
37
|
def get_config(self, document: TextDocument) -> Optional[RoboCopConfig]:
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import functools
|
|
2
|
+
|
|
3
|
+
from robotcode.core.utils.version import Version, create_version_from_str
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
class RoboCopTidyMixin:
|
|
7
|
+
"""
|
|
8
|
+
Mixin class for handling Robocop tidy operations.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
@functools.cached_property
|
|
12
|
+
def robotidy_installed(self) -> bool:
|
|
13
|
+
try:
|
|
14
|
+
__import__("robotidy")
|
|
15
|
+
except ImportError:
|
|
16
|
+
return False
|
|
17
|
+
return True
|
|
18
|
+
|
|
19
|
+
@functools.cached_property
|
|
20
|
+
def robotidy_version(self) -> Version:
|
|
21
|
+
from robotidy.version import __version__
|
|
22
|
+
|
|
23
|
+
return create_version_from_str(__version__)
|
|
24
|
+
|
|
25
|
+
@functools.cached_property
|
|
26
|
+
def robotidy_version_str(self) -> str:
|
|
27
|
+
from robotidy.version import __version__
|
|
28
|
+
|
|
29
|
+
return str(__version__)
|
|
30
|
+
|
|
31
|
+
@functools.cached_property
|
|
32
|
+
def robocop_installed(self) -> bool:
|
|
33
|
+
try:
|
|
34
|
+
__import__("robocop")
|
|
35
|
+
except ImportError:
|
|
36
|
+
return False
|
|
37
|
+
return True
|
|
38
|
+
|
|
39
|
+
@functools.cached_property
|
|
40
|
+
def robocop_version(self) -> Version:
|
|
41
|
+
from robocop import __version__
|
|
42
|
+
|
|
43
|
+
return create_version_from_str(__version__)
|
|
44
|
+
|
|
45
|
+
@functools.cached_property
|
|
46
|
+
def robocop_version_str(self) -> str:
|
|
47
|
+
from robocop import __version__
|
|
48
|
+
|
|
49
|
+
return str(__version__)
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = "1.3.0-dev.2"
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|