Skip to content

Commit bd704c2

Browse files
committed
feat: first support for RF 7
start implementing #177
1 parent e468a0f commit bd704c2

File tree

14 files changed

+247
-89
lines changed

14 files changed

+247
-89
lines changed

packages/analyze/src/robotcode/analyze/cli.py

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import click
44
from robotcode.analyze.config import AnalyzerConfig
55
from robotcode.plugin import Application, pass_application
6-
from robotcode.robot.config.loader import load_config_from_path
6+
from robotcode.robot.config.loader import load_config_from_path, load_robot_config_from_path
77
from robotcode.robot.config.utils import get_config_files
88

99
from .__version__ import __version__
@@ -32,12 +32,18 @@ def analyze(
3232
config_files, root_folder, _ = get_config_files(paths, app.config.config_files, verbose_callback=app.verbose)
3333

3434
try:
35-
robot_profile = load_config_from_path(
35+
analizer_config = load_config_from_path(
3636
AnalyzerConfig, *config_files, tool_name="robotcode-analyze", robot_toml_tool_name="robotcode-analyze"
3737
).evaluated()
38+
39+
robot_config = (
40+
load_robot_config_from_path(*config_files).combine_profiles(*(app.config.profiles or [])).evaluated()
41+
)
42+
3843
except (TypeError, ValueError) as e:
3944
raise click.ClickException(str(e)) from e
4045

41-
app.print_data(robot_profile)
46+
app.print_data(analizer_config)
47+
app.print_data(robot_config)
4248

4349
return 0

packages/core/src/robotcode/core/logging.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ class _HasLoggerEntries:
7979
__logging_entries__: List[_LoggerEntry]
8080

8181

82-
_FUNC_TYPE = Union[Callable[[], logging.Logger], Callable[[], None], staticmethod, None]
82+
_FUNC_TYPE = Union[Callable[[], logging.Logger], Callable[[], None], None]
8383

8484
_F = TypeVar("_F", bound=Callable[..., Any])
8585

packages/debugger/src/robotcode/debugger/debugger.py

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -219,15 +219,31 @@ class PathMapping(NamedTuple):
219219
remote_root: Optional[str]
220220

221221

222-
class DebugLogger:
223-
def __init__(self) -> None:
224-
self.steps: List[Any] = []
222+
if get_robot_version() < (7, 0):
223+
224+
class DebugLogger:
225+
def __init__(self) -> None:
226+
self.steps: List[Any] = []
227+
228+
def start_keyword(self, kw: Any) -> None:
229+
self.steps.append(kw)
230+
231+
def end_keyword(self, kw: Any) -> None:
232+
self.steps.pop()
233+
234+
else:
235+
from robot import result, running
236+
from robot.output.loggerapi import LoggerApi
237+
238+
class DebugLogger(LoggerApi): # type: ignore[no-redef]
239+
def __init__(self) -> None:
240+
self.steps: List[Any] = []
225241

226-
def start_keyword(self, kw: Any) -> None:
227-
self.steps.append(kw)
242+
def start_keyword(self, data: "running.Keyword", result: "result.Keyword") -> None:
243+
self.steps.append(data)
228244

229-
def end_keyword(self, kw: Any) -> None:
230-
self.steps.pop()
245+
def end_keyword(self, data: "running.Keyword", result: "result.Keyword") -> None:
246+
self.steps.pop()
231247

232248

233249
class Debugger:

packages/language_server/src/robotcode/language_server/common/text_document.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,7 @@ def remove_data(self, key: Any) -> None:
286286
except KeyError:
287287
pass
288288

289-
def get_data(self, key: Any, default: Optional[_T] = None) -> _T:
289+
def get_data(self, key: Any, default: Optional[Any] = None) -> Any:
290290
return self._data.get(key, default)
291291

292292
def _clear(self) -> None:

packages/language_server/src/robotcode/language_server/robotframework/diagnostics/analyzer.py

Lines changed: 31 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -914,16 +914,29 @@ async def visit_Keyword(self, node: ast.AST) -> None: # noqa: N802
914914
self.current_testcase_or_keyword_name = None
915915

916916
def _format_template(self, template: str, arguments: Tuple[str, ...]) -> Tuple[str, Tuple[str, ...]]:
917-
from robot.variables import VariableIterator
918-
919-
variables = VariableIterator(template, identifiers="$")
917+
if get_robot_version() < (7, 0):
918+
from robot.variables import VariableIterator
919+
920+
variables = VariableIterator(template, identifiers="$")
921+
count = len(variables)
922+
if count == 0 or count != len(arguments):
923+
return template, arguments
924+
temp = []
925+
for (before, _, after), arg in zip(variables, arguments):
926+
temp.extend([before, arg])
927+
temp.append(after)
928+
return "".join(temp), ()
929+
930+
from robot.variables import VariableMatches
931+
932+
variables = VariableMatches(template, identifiers="$")
920933
count = len(variables)
921934
if count == 0 or count != len(arguments):
922935
return template, arguments
923936
temp = []
924-
for (before, _, after), arg in zip(variables, arguments):
925-
temp.extend([before, arg])
926-
temp.append(after)
937+
for var, arg in zip(variables, arguments):
938+
temp.extend([var.before, arg])
939+
temp.append(var.after)
927940
return "".join(temp), ()
928941

929942
async def visit_TemplateArguments(self, node: ast.AST) -> None: # noqa: N802
@@ -981,22 +994,23 @@ async def visit_ForceTags(self, node: ast.AST) -> None: # noqa: N802
981994
message="`Force Tags` is deprecated in favour of new `Test Tags` setting.",
982995
severity=DiagnosticSeverity.INFORMATION,
983996
tags=[DiagnosticTag.DEPRECATED],
984-
code=Error.DEPRECATED_HYPHEN_TAG,
997+
code=Error.DEPRECATED_FORCE_TAG,
985998
)
986999

987-
async def visit_DefaultTags(self, node: ast.AST) -> None: # noqa: N802
1000+
async def visit_TestTags(self, node: ast.AST) -> None: # noqa: N802
9881001
from robot.parsing.lexer.tokens import Token as RobotToken
989-
from robot.parsing.model.statements import ForceTags
1002+
from robot.parsing.model.statements import TestTags
9901003

9911004
if get_robot_version() >= (6, 0):
992-
tag = cast(ForceTags, node).get_token(RobotToken.DEFAULT_TAGS)
993-
self.append_diagnostics(
994-
range=range_from_node_or_token(node, tag),
995-
message="`Force Tags` is deprecated in favour of new `Test Tags` setting.",
996-
severity=DiagnosticSeverity.INFORMATION,
997-
tags=[DiagnosticTag.DEPRECATED],
998-
code=Error.DEPRECATED_HYPHEN_TAG,
999-
)
1005+
tag = cast(TestTags, node).get_token(RobotToken.FORCE_TAGS)
1006+
if tag is not None and tag.value.upper() == "FORCE TAGS":
1007+
self.append_diagnostics(
1008+
range=range_from_node_or_token(node, tag),
1009+
message="`Force Tags` is deprecated in favour of new `Test Tags` setting.",
1010+
severity=DiagnosticSeverity.INFORMATION,
1011+
tags=[DiagnosticTag.DEPRECATED],
1012+
code=Error.DEPRECATED_FORCE_TAG,
1013+
)
10001014

10011015
async def visit_Tags(self, node: ast.AST) -> None: # noqa: N802
10021016
from robot.parsing.lexer.tokens import Token as RobotToken

packages/language_server/src/robotcode/language_server/robotframework/diagnostics/errors.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,6 @@ class Error:
2727
TESTCASE_NAME_EMPTY = "TestCaseNameEmpty"
2828
KEYWORD_CONTAINS_NORMAL_AND_EMBBEDED_ARGUMENTS = "KeywordContainsNormalAndEmbbededArguments"
2929
DEPRECATED_HYPHEN_TAG = "DeprecatedHyphenTag"
30+
DEPRECATED_FORCE_TAG = "DeprecatedForceTag"
3031
IMPORT_REQUIRES_VALUE = "ImportRequiresValue"
3132
KEYWORD_ERROR = "KeywordError"

packages/language_server/src/robotcode/language_server/robotframework/diagnostics/imports_manager.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -581,7 +581,7 @@ async def get_command_line_variables(self) -> List[VariableDefinition]:
581581
name, args = split_args_from_name_or_path(str(variable_file))
582582
try:
583583
lib_doc = await self.get_libdoc_for_variables_import(
584-
name,
584+
name.replace("\\", "\\\\"),
585585
tuple(args),
586586
str(self.folder.to_path()),
587587
self,

0 commit comments

Comments
 (0)