MarketSquare / MarketSquare/robotframework-tidy

Improvement for splitting settings variables

Open
#601 4 comments 0 reactions 0 assignees View on GitHub
Dominant language
RobotFramework
Stars
113
Forks
16
PR merge metrics
No merged PRs in 30d

Description

I would like to split and intend following lines:
```
*** Variables ***
${VARIABLE} = High
@{VARIABLE_LIST} = High High, Med High, Med,\nLow High, Med,\\nLow
@{SHORT_LIST} = valuevalue valuevaluevalue valuevaluevalue

&{SHORT_DICT} = name=John Doe age=12 hobby=coding
@{VERY_LONG_VARIABLE_NAME_CONTAINING_FRUITS} = apple banana pineapple tomato

@{OVER_LONG_LIST} = valuevaluevaluevaluevalue valuevaluevaluevaluevalue valuevaluevaluevaluevalue valuevaluevaluevaluevalue valuevaluevaluevaluevalue valuevaluevaluevaluevalue
&{OVER_LONG_DICT} = name=John Doe age=12 hobby=coding age=12 hobby=coding age=12 hobby=coding age=12 hobby=coding
```

into something like this:
```
*** Variables ***
${VARIABLE} = High
@{VARIABLE_LIST} = High High, Med High, Med,\nLow High, Med,\\nLow
@{SHORT_LIST} = valuevalue valuevaluevalue valuevaluevalue

&{SHORT_DICT} = name=John Doe age=12 hobby=coding

@{VERY_LONG_VARIABLE_NAME_CONTAINING_FRUITS} =
... apple banana pineapple tomato

@{OVER_LONG_LIST} = valuevaluevaluevaluevalue valuevaluevaluevaluevalue valuevaluevaluevaluevalue
... valuevaluevaluevaluevalue valuevaluevaluevaluevalue valuevaluevaluevaluevalue
&{OVER_LONG_DICT} = name=John Doe age=12 hobby=coding age=12 hobby=coding age=12 hobby=coding age=12
... hobby=coding
```

With following configuration: defaults +
```
"SplitTooLongLine:skip_comments=True:split_on_every_arg=False:split_on_every_setting_arg=False:split_on_every_value=False"
```
I get this:
```
${VARIABLE} = High
@{VARIABLE_LIST} = High High, Med High, Med,\nLow High, Med,\\nLow
@{SHORT_LIST} = valuevalue valuevaluevalue valuevaluevalue

&{SHORT_DICT} = name=John Doe age=12 hobby=coding

@{VERY_LONG_VARIABLE_NAME_CONTAINING_FRUITS} = apple banana pineapple tomato

@{OVER_LONG_LIST} = valuevaluevaluevaluevalue valuevaluevaluevaluevalue valuevaluevaluevaluevalue
... valuevaluevaluevaluevalue valuevaluevaluevaluevalue valuevaluevaluevaluevalue
&{OVER_LONG_DICT} = name=John Doe age=12 hobby=coding age=12 hobby=coding age=12 hobby=coding
... age=12 hobby=coding
```
Readable but lot of empty space. Also `OVER_LONG_LIST` & `OVER_LONG_DICT` are not aligned. To minimize that I'll use config:
```
"SplitTooLongLine:skip_comments=True:split_on_every_arg=False:split_on_every_setting_arg=False:split_on_every_value=False"
"AlignVariablesSection:fixed_width=4",
```
I get:
```
*** Variables ***
${VARIABLE} = High
@{VARIABLE_LIST} = High High, Med High, Med,\nLow High, Med,\\nLow
@{SHORT_LIST} = valuevalue valuevaluevalue valuevaluevalue

&{SHORT_DICT} = name=John Doe age=12 hobby=coding

@{VERY_LONG_VARIABLE_NAME_CONTAINING_FRUITS} = apple banana pineapple tomato

@{OVER_LONG_LIST} = valuevaluevaluevaluevalue valuevaluevaluevaluevalue valuevaluevaluevaluevalue
... valuevaluevaluevaluevalue valuevaluevaluevaluevalue valuevaluevaluevaluevalue
&{OVER_LONG_DICT} = name=John Doe age=12 hobby=coding age=12 hobby=coding age=12 hobby=coding
... age=12 hobby=coding
```
Now it become difficult to read.

I can manually split the line with long variable but rest of the lines are still quite unreadable:
```
@{VERY_LONG_VARIABLE_NAME_CONTAINING_FRUITS} =
... apple banana pineapple tomato
```
Removing `AlignVariablesSection:fixed_width` from config readability improves but that manually splitted line become awkward.
```
@{VERY_LONG_VARIABLE_NAME_CONTAINING_FRUITS} =
... apple banana pineapple tomato
```

I guess the reason why indentation is different between different variables (like `OVER_LONG_LIST` & `OVER_LONG_DICT`) is that they are formatted with `SplitTooLongLine` and other are formatted with `AlignVariablesSection`.

In my opinion, the formatting (splitting and aliging) should be done by same formatter so the aligning gets done the same way everywhere (mostly referring only to `Settings` and `variables` sections).

Other thing to mention.
If those `OVER_LONG_LIST` & `OVER_LONG_DICT` are manually splitted then they start to be formatted by `AlignVariablesSection` which means that if `AlignVariablesSection:fixed_width` is not set they become:
```
@{OVER_LONG_LIST} = valuevaluevaluevaluevalue
... valuevaluevaluevaluevalue valuevaluevaluevaluevalue
... valuevaluevaluevaluevalue
... valuevaluevaluevaluevalue valuevaluevaluevaluevalue
&{OVER_LONG_DICT} = name=John Doe age=12 hobby=coding
... age=12 hobby=coding age=12 hobby=coding
... age=12 hobby=coding
```
which is not what is wanted.

If `AlignVariablesSection:fixed_width` is set they become:
```
@{OVER_LONG_LIST} = valuevaluevaluevaluevalue
... valuevaluevaluevaluevalue valuevaluevaluevaluevalue
... valuevaluevaluevaluevalue
... valuevaluevaluevaluevalue valuevaluevaluevaluevalue
&{OVER_LONG_DICT} = name=John Doe age=12 hobby=coding
... age=12 hobby=coding age=12 hobby=coding
... age=12 hobby=coding
```

This is what is wanted but then the other variable lines becomes difficult to read.
In fact, also the lines above containing variables (like @{OVER_LONG_LIST} = valuevaluevaluevaluevalue) should be aligned with other lines having variable names.

Contributor guide

Open the contributing guide

Research direction

Start by reproducing the examples with SplitTooLongLine and AlignVariablesSection, including fixed_width and manually split variables. Trace how these formatters handle Variables-section continuation lines; done means long and short variables use consistent, readable alignment without the conflicting indentation shown in the report.

Written by the indexing model from the issue text.

Assessment

Domain
tooling
Issue type
Feature
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
45/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.