MarketSquare / MarketSquare/robotframework-tidy
Improvement for splitting settings variables
- 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
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