From fe69e8ab4a57f38d4730e9c33d6068708250f5d4 Mon Sep 17 00:00:00 2001 From: Bartlomiej Hirsz Date: Tue, 14 May 2024 15:12:21 +0200 Subject: [PATCH] Fix RenameVariables replacing = with _= and renaming numerical values --- docs/releasenotes/unreleased/fixes.2.rst | 9 +++++++ .../unreleased/transformers.2.rst | 9 +++++++ docs/source/transformers/RenameVariables.rst | 7 +++++- robotidy/transformers/RenameVariables.py | 24 +++++++++++++++---- .../expected/configure_ignore_vars.robot | 5 ++++ .../expected/equal_sign_in_section.robot | 7 ++++++ .../expected/excluded_vars.robot | 7 +++++- .../source/equal_sign_in_section.robot | 7 ++++++ .../source/excluded_vars.robot | 5 ++++ .../RenameVariables/test_transformer.py | 8 +++---- 10 files changed, 78 insertions(+), 10 deletions(-) create mode 100644 docs/releasenotes/unreleased/fixes.2.rst create mode 100644 docs/releasenotes/unreleased/transformers.2.rst create mode 100644 tests/atest/transformers/RenameVariables/expected/equal_sign_in_section.robot create mode 100644 tests/atest/transformers/RenameVariables/source/equal_sign_in_section.robot diff --git a/docs/releasenotes/unreleased/fixes.2.rst b/docs/releasenotes/unreleased/fixes.2.rst new file mode 100644 index 00000000..44479e35 --- /dev/null +++ b/docs/releasenotes/unreleased/fixes.2.rst @@ -0,0 +1,9 @@ +RenameVariables adding _ to variables with equal sign in Variables section (#692) +--------------------------------------------------------------------------------- + +Following code:: + + *** Variables *** + ${random_seed} = ${None} + +was formatted incorrectly - ``_`` was added before ``=``. diff --git a/docs/releasenotes/unreleased/transformers.2.rst b/docs/releasenotes/unreleased/transformers.2.rst new file mode 100644 index 00000000..c1a1cc08 --- /dev/null +++ b/docs/releasenotes/unreleased/transformers.2.rst @@ -0,0 +1,9 @@ +Ignoring additional variables in RenameVariables (#692) +------------------------------------------------------- + +``RenameVariables`` will now ignore and do not transform following variables: + +- ``${None}`` +- ``${True}`` +- ``${False}`` +- numerical values such as ``${0x1A}`` or ``${0b01010}`` diff --git a/docs/source/transformers/RenameVariables.rst b/docs/source/transformers/RenameVariables.rst index b58fa353..f88545a6 100644 --- a/docs/source/transformers/RenameVariables.rst +++ b/docs/source/transformers/RenameVariables.rst @@ -178,7 +178,12 @@ Ignore variable case -------------------- Case of all variables is converted according to the configured conventions. It is possible to pass the names of the -variables that should be ignored. By default, only ${\n} ``${\n}`` variable case is ignored and not transformed. +variables that should be ignored. By default, following variables case is ignored and not transformerd: + +- ``${\n}`` +- ``${None}`` +- ``${True}`` +- ``${False}`` Configure ``ignore_case`` to ignore an additional list. This parameter accepts comma-separated list of variable names (case-sensitive):: diff --git a/robotidy/transformers/RenameVariables.py b/robotidy/transformers/RenameVariables.py index 0c99b5b7..6a4d771c 100644 --- a/robotidy/transformers/RenameVariables.py +++ b/robotidy/transformers/RenameVariables.py @@ -69,6 +69,20 @@ def is_nested_variable(variable: str) -> bool: return bool(match.base) +def is_name_hex_or_binary(variable: str) -> bool: + if "x" in variable: + base = 16 + elif "b" in variable: + base = 2 + else: + return False + try: + int(variable, base) + except ValueError: + return False + return True + + def resolve_var_name(name: str) -> str: """Resolve name of the variable from \\${name} or $name syntax.""" if name.startswith("\\"): @@ -201,7 +215,7 @@ class RenameVariables(Transformer): MORE_THAN_2_SPACES: Pattern = re.compile(r"\s{2,}") CAMEL_CASE: Pattern = re.compile(r"((?<=[a-z0-9])[A-Z]|(?!^)[A-Z](?=[a-z]))") EXTENDED_SYNTAX: Pattern = re.compile(r"(.+?)([^\s\w].+)", re.UNICODE) - DEFAULT_IGNORE_CASE = {"\\n"} + DEFAULT_IGNORE_CASE = {"\\n", "None", "True", "False"} def __init__( self, @@ -493,10 +507,10 @@ def rename_value(self, value: str, variable_case: VariableCase, is_var: bool = F name += base after = match.after if after: - if is_var: - name += self.rename(after, case=variable_case, strip_fn="rstrip") - else: + if not is_var or after.strip() == "=": name += after + else: + name += self.rename(after, case=variable_case, strip_fn="rstrip") return name def set_name_case(self, name: str, case: VariableCase): @@ -524,6 +538,8 @@ def set_case_for_local_and_global(self, name): def rename(self, variable_value: str, case: VariableCase, strip_fn: str = "strip"): if not variable_value: return variable_value + if is_name_hex_or_binary(variable_value): + return variable_value # split on variable attribute access like ${var['item']}, ${var.item}, ${var(method)}.. variable_name, item_access = split_string_on_delimiter(variable_value) if self.convert_camel_case: diff --git a/tests/atest/transformers/RenameVariables/expected/configure_ignore_vars.robot b/tests/atest/transformers/RenameVariables/expected/configure_ignore_vars.robot index af676924..8c22707a 100644 --- a/tests/atest/transformers/RenameVariables/expected/configure_ignore_vars.robot +++ b/tests/atest/transformers/RenameVariables/expected/configure_ignore_vars.robot @@ -37,3 +37,8 @@ True and False ELIF ${False} Log The lie. END + +Numerical Values + Log ${0x1A} + Log ${0b0110101} + Log ${5} diff --git a/tests/atest/transformers/RenameVariables/expected/equal_sign_in_section.robot b/tests/atest/transformers/RenameVariables/expected/equal_sign_in_section.robot new file mode 100644 index 00000000..74ec21a2 --- /dev/null +++ b/tests/atest/transformers/RenameVariables/expected/equal_sign_in_section.robot @@ -0,0 +1,7 @@ +*** Variables *** +${RANDOM_SEED} = ${None} + + +*** Keywords *** +Keyword With Sign + ${value} = Keyword Call ${RANDOM_SEED} diff --git a/tests/atest/transformers/RenameVariables/expected/excluded_vars.robot b/tests/atest/transformers/RenameVariables/expected/excluded_vars.robot index 15caa203..37ef3876 100644 --- a/tests/atest/transformers/RenameVariables/expected/excluded_vars.robot +++ b/tests/atest/transformers/RenameVariables/expected/excluded_vars.robot @@ -34,6 +34,11 @@ Environment variable True and False IF $True Log The truth. - ELIF ${FALSE} + ELIF ${False} Log The lie. END + +Numerical Values + Log ${0x1A} + Log ${0b0110101} + Log ${5} diff --git a/tests/atest/transformers/RenameVariables/source/equal_sign_in_section.robot b/tests/atest/transformers/RenameVariables/source/equal_sign_in_section.robot new file mode 100644 index 00000000..0e441574 --- /dev/null +++ b/tests/atest/transformers/RenameVariables/source/equal_sign_in_section.robot @@ -0,0 +1,7 @@ +*** Variables *** +${random_seed} = ${None} + + +*** Keywords *** +Keyword With Sign + ${value} = Keyword Call ${random_seed} diff --git a/tests/atest/transformers/RenameVariables/source/excluded_vars.robot b/tests/atest/transformers/RenameVariables/source/excluded_vars.robot index f3107453..5581f7fe 100644 --- a/tests/atest/transformers/RenameVariables/source/excluded_vars.robot +++ b/tests/atest/transformers/RenameVariables/source/excluded_vars.robot @@ -37,3 +37,8 @@ True and False ELIF ${False} Log The lie. END + +Numerical Values + Log ${0x1A} + Log ${0b0110101} + Log ${5} diff --git a/tests/atest/transformers/RenameVariables/test_transformer.py b/tests/atest/transformers/RenameVariables/test_transformer.py index 4d7f55fa..695e482a 100644 --- a/tests/atest/transformers/RenameVariables/test_transformer.py +++ b/tests/atest/transformers/RenameVariables/test_transformer.py @@ -110,7 +110,7 @@ def test_extended_variables_syntax(self): self.compare(source="math_operations.robot") def test_var_syntax(self): - self.compare( - source="VAR_syntax.robot", - target_version=">6.1.1", - ) + self.compare(source="VAR_syntax.robot", target_version=">6.1.1") + + def test_equal_sign_in_section(self): + self.compare(source="equal_sign_in_section.robot")