Skip to content

Commit f723d98

Browse files
authored
feat(robocop): Robocop 8.0 support
1 parent e1abda2 commit f723d98

File tree

3 files changed

+34
-15
lines changed

3 files changed

+34
-15
lines changed

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

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,17 +83,26 @@ def format_robocop(
8383

8484
config_manager = self.parent.robocop_helper.get_config_manager(workspace_folder)
8585

86+
source = document.uri.to_path()
8687
config = config_manager.get_config_for_source_file(document.uri.to_path())
8788

8889
if range is not None:
8990
config.formatter.start_line = range.start.line + 1
9091
config.formatter.end_line = range.end.line + 1
9192

93+
# TODO: not cached, we load all formatters everytime - but it's small cost
9294
runner = RobocopFormatter(config_manager)
9395
runner.config = config
9496

9597
model = self.parent.documents_cache.get_model(document, False)
96-
_, _, new, _ = runner.format_until_stable(model)
98+
if get_robot_version() >= (8, 0):
99+
from robocop.source_file import SourceFile
100+
101+
# overwrite _model to stop Robocop from loading it
102+
source_file = SourceFile(path=source, config=config, _model=model)
103+
_, _, new, _ = runner.format_until_stable(source_file)
104+
else:
105+
_, _, new, _ = runner.format_until_stable(model)
97106

98107
if new.text == document.text():
99108
return None

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

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,15 @@ def get_config(self, document: TextDocument) -> Optional[RoboCopConfig]:
4444

4545
return self.parent.workspace.get_configuration(RoboCopConfig, folder.uri)
4646

47+
def get_linter(self, workspace_folder: WorkspaceFolder) -> "RobocopLinter":
48+
linter = self._robocop_linters.get(workspace_folder, None)
49+
50+
if linter is None:
51+
config_manager = self.parent.robocop_helper.get_config_manager(workspace_folder)
52+
linter = RobocopLinter(config_manager)
53+
self._robocop_linters[workspace_folder] = linter
54+
return linter
55+
4756
@language_id("robotframework")
4857
@_logger.call
4958
def collect_diagnostics(
@@ -69,23 +78,21 @@ def collect_diagnostics(
6978
@_logger.call
7079
def collect(self, document: TextDocument, workspace_folder: WorkspaceFolder) -> List[Diagnostic]:
7180
from robocop.linter.rules import RuleSeverity
72-
from robocop.linter.runner import RobocopLinter
7381

74-
linter = self._robocop_linters.get(workspace_folder, None)
75-
76-
if linter is None:
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-
81-
linter = RobocopLinter(config_manager)
82-
self._robocop_linters[workspace_folder] = linter
82+
linter = self.get_linter(workspace_folder)
8383

8484
source = document.uri.to_path()
85-
8685
config = linter.config_manager.get_config_for_source_file(source)
8786
model = self.parent.documents_cache.get_model(document, False)
88-
diagnostics = linter.run_check(model, source, config)
87+
88+
if self.parent.robocop_helper.robocop_version >= (8, 0):
89+
from robocop.source_file import SourceFile
90+
91+
# overwrite _model to stop Robocop from loading it
92+
source_file = SourceFile(path=source, config=config, _model=model)
93+
diagnostics = linter.run_check(source_file)
94+
else:
95+
diagnostics = linter.run_check(model, source, config)
8996

9097
return [
9198
Diagnostic(

packages/language_server/src/robotcode/language_server/robotframework/parts/robocop_helper.py

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from ..protocol import RobotLanguageServerProtocol
1616

1717
if TYPE_CHECKING:
18-
from robocop.config import ConfigManager
18+
from robocop.config.manager import ConfigManager
1919

2020

2121
class RobocopConfigError(Exception):
@@ -59,7 +59,10 @@ def get_robocop_config(self, resource: Union[TextDocument, WorkspaceFolder]) ->
5959
return self.parent.workspace.get_configuration(RoboCopConfig, folder.uri)
6060

6161
def get_config_manager(self, workspace_folder: WorkspaceFolder) -> "ConfigManager":
62-
from robocop.config import ConfigManager
62+
if self.parent.robocop_helper.robocop_version >= (8, 0):
63+
from robocop.config.manager import ConfigManager
64+
else:
65+
from robocop.config import ConfigManager
6366

6467
if workspace_folder in self._config_managers:
6568
return self._config_managers[workspace_folder]

0 commit comments

Comments
 (0)