ReplaceWithVAR#

Replace Set Variable, Create Dictionary, Create List and Catenate keywords with VAR.

Enabling the transformer

ReplaceWithVAR is not included in default transformers, that’s why you need to call it with --transform explicitly:

robotidy --transform ReplaceWithVAR src

Or configure enabled parameter:

robotidy --configure ReplaceWithVAR:enabled=True
*** Keywords ***
Custom Keyword
    ${var}    Set Variable    value
    Set Suite Variable    ${SUITE_VAR}    ${var}
    ${list}    Create List    ${var}    second value
    ${string}    Catenate    join  with  spaces
*** Keywords ***
Custom Keyword
    VAR    ${var}    value
    VAR    ${SUITE_VAR}    ${var}    scope=SUITE
    VAR    @{list}    ${var}    second value
    VAR    ${string}    join    with    spaces    separator=${SPACE}

Variable scope#

VAR syntax supports setting the scope of the variable with scope= parameter. It’s equivalent of the following keywords:

  • Set Local Variable

  • Set Task Variable

  • Set Test Variable

  • Set Suite Variable

  • Set Global Variable

Other keywords such as Set Variable, Catenate, Create Dictionary and Create List create variable in the local scope. Local scope is omitted by default but can be explicitly set by using explicit_local parameter.

Set Suite Variable with children=True is ignored as it is not possible to have the same behaviour with VAR.

*** Keywords ***
Custom Keyword
    ${var}   Set Variable    value
    Set Local Variable    ${local_variable}    value
    Set Task Variable    ${task_variable}    value
    Set Test Variable    ${test_variable}
    Set Suite Variable    ${suite_variable}    value with ${value}
    Set Suite Variable    ${suite_variable}    value with ${value}    children=${True}  # ignored
    Set Global Variable   ${global_variable}    value
*** Keywords ***
Custom Keyword
    VAR    ${var}    value
    VAR    ${local_variable}    value
    VAR    ${task_variable}    value    scope=TASK
    VAR    ${test_variable}    ${test_variable}    scope=TEST
    VAR    ${suite_variable}    value with ${value}    scope=SUITE
    Set Suite Variable    ${suite_variable}    value with ${value}    children=${True}  # ignored
    VAR    ${global_variable}    value    scope=GLOBAL
*** Keywords ***
Custom Keyword
    VAR    ${var}    value    scope=LOCAL
    VAR    ${local_variable}    value    scope=LOCAL
    VAR    ${task_variable}    value    scope=TASK
    VAR    ${test_variable}    ${test_variable}    scope=TEST
    VAR    ${suite_variable}    value with ${value}    scope=SUITE
    Set Suite Variable    ${suite_variable}    value with ${value}    children=${True}  # ignored
    VAR    ${global_variable}    value    scope=GLOBAL

Catenate#

Catenate keyword will be replaced with VAR. Separator is set using separator= parameter. Catenate keywords can be ignored by setting replace_catenate parameter to False.

Create Dictionary#

Create Dictionary keyword will be replaced with VAR. Variable name will change from ${name} to &{name} to reflect the type of the variable. Create Dictionary keywords can be ignored by setting replace_create_dictionary parameter to False.

Create List#

Create List keyword will be replaced with VAR. Variable name will change from ${name} to @{name} to reflect the type of the variable. Create List keywords can be ignored by setting replace_create_list parameter to False.

Set Variable If#

Set Variable If keyword will be replaced with IF and VAR. If value in ELSE branch is not set, implicit ${None} value will be used. Keywords with dynamic values (@{values}) are ignored since they may contain ELSE IF and ELSE branches that should be also converted. Set Variable If keywords can be ignored by setting replace_set_variable_if parameter to False.

*** Keywords ***
Custom Keyword
    ${var} =    Set Variable If    ${rc} > 0    whatever
    ${var}=    Set Variable If    ${rc} == 0    zero
    ...    ${rc} > 0    greater than zero    less then zero
    ${var}    Set Variable If    ${condition}    @{items}  # ignored
*** Keywords ***
Custom Keyword
    IF    ${rc} > 0
        VAR    ${var}    whatever
    ELSE
        VAR    ${var}    ${None}
    END
    IF    ${rc} == 0
        VAR    ${var}    zero
    ELSE IF    ${rc} > 0
        VAR    ${var}    greater than zero
    ELSE
        VAR    ${var}    less then zero
    END
    ${var}    Set Variable If    ${condition}    @{items}  # ignored