Skip to content

Commit 15094cf

Browse files
committed
feat: Refactor lint/format methods for Robocop 8.0+
1 parent 6c86914 commit 15094cf

File tree

2 files changed

+29
-12
lines changed

2 files changed

+29
-12
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 & 11 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(
@@ -71,21 +80,20 @@ def collect(self, document: TextDocument, workspace_folder: WorkspaceFolder) ->
7180
from robocop.linter.rules import RuleSeverity
7281
from robocop.linter.runner import RobocopLinter
7382

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
83+
linter = self.get_linter(workspace_folder)
8384

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

9098
return [
9199
Diagnostic(

0 commit comments

Comments
 (0)