Skip to content

Commit 5934ca9

Browse files
bhirszmnojek
andauthored
Do not split single values in SplitTooLongLine transformer (#487)
* Do not split single values in SplitTooLongLine transformer * Apply suggestions from code review Co-authored-by: Mateusz Nojek <matnojek@gmail.com>
1 parent d94dcb3 commit 5934ca9

File tree

9 files changed

+131
-10
lines changed

9 files changed

+131
-10
lines changed

docs/releasenotes/4.0.0.rst

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -117,6 +117,7 @@ Is now equivalent of::
117117

118118
> robotidy -c NormalizeSeparators:skip_sections=keywords
119119

120+
120121
Group comments with settings in OrderSettings #468
121122
---------------------------------------------------
122123

@@ -149,3 +150,16 @@ together with settings::
149150
[Arguments] ${arg}
150151
# comment about step
151152
Step
153+
154+
SplitTooLongLine and splitting single values #436
155+
--------------------------------------------------
156+
157+
``SplitTooLongLine`` splits all too long values including single values (not lists)::
158+
159+
${SHORT_NAME}
160+
... really long value really long value really long value really long value really long value really long value
161+
162+
This behaviour didn't improve the readability and now single too long values will not be split. You can configure
163+
this using ``split_single_value`` parameter (default ``False``)::
164+
165+
> robotidy -c SplitTooLongLine:split_single_value=True

docs/source/transformers/SplitTooLongLine.rst

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,50 @@ Assignments will be split to multi lines if they don't fit together with Keyword
185185
... ${arg1}
186186
... ${arg2}
187187
188+
Single values
189+
----------------
190+
191+
By default single values (``${variable} value``) are not split. You can configure ``SplitTooLine`` transformer
192+
to split on single too long values using ``split_single_value`` option::
193+
194+
robotidy --configure SplitTooLongLine:split_single_value=True
195+
196+
.. tab-set::
197+
198+
.. tab-item:: Before
199+
200+
.. code:: robotframework
201+
202+
*** Variables ***
203+
&{USER_PROFILE} name=John Doe age=12 hobby=coding
204+
${SHORT_VALUE} value
205+
${SINGLE_HEADER} veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeery
206+
207+
.. tab-item:: After (default)
208+
209+
.. code:: robotframework
210+
211+
*** Variables ***
212+
&{USER_PROFILE}
213+
... name=John Doe
214+
... age=12
215+
... hobby=coding
216+
${SHORT_VALUE} value
217+
${SINGLE_HEADER} veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeery
218+
219+
.. tab-item:: After (split_single_value = True)
220+
221+
.. code:: robotframework
222+
223+
*** Variables ***
224+
&{USER_PROFILE}
225+
... name=John Doe
226+
... age=12
227+
... hobby=coding
228+
${SHORT_VALUE} value
229+
${SINGLE_HEADER}
230+
... veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeery
231+
188232
Ignore comments
189233
----------------
190234

robotidy/transformers/SplitTooLongLine.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,15 @@ def __init__(
8282
split_on_every_arg: bool = True,
8383
split_on_every_value: bool = True,
8484
split_on_every_setting_arg: bool = True,
85+
split_single_value: bool = False,
8586
skip: Skip = None,
8687
):
8788
super().__init__(skip)
8889
self._line_length = line_length
8990
self.split_on_every_arg = split_on_every_arg
9091
self.split_on_every_value = split_on_every_value
9192
self.split_on_every_setting_arg = split_on_every_setting_arg
93+
self.split_single_value = split_single_value
9294
self.robocop_disabler_pattern = re.compile(
9395
r"(# )+(noqa|robocop: ?(?P<disabler>disable|enable)=?(?P<rules>[\w\-,]*))"
9496
)
@@ -265,6 +267,8 @@ def split_tokens(self, tokens, line, split_on, indent=None):
265267
return split_tokens, comments
266268

267269
def split_variable_def(self, node):
270+
if len(node.value) < 2 and not self.split_single_value:
271+
return node
268272
line = [node.data_tokens[0]]
269273
tokens, comments = self.split_tokens(node.tokens, line, self.split_on_every_value)
270274
comments = [Comment([comment, EOL]) for comment in comments]

tests/atest/transformers/SplitTooLongLine/expected/comments.robot

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@
22
${VARIABLE_01} a_value # a short one-liner description for variable
33
${VARIABLE_02} a_value # a short one-liner description for variable
44
${VARIABLE_03} a_value # a short one-liner description for variable
5-
# a longer one-liner description for variable maybe with an URL https://github.com/MarketSquare/robotframework-tidy/pull/454 and some notes
6-
${VARIABLE_04} a_value
7-
# a longer one-liner description for variable maybe with an URL https://github.com/MarketSquare/robotframework-tidy/pull/454 and some notes
8-
${VARIABLE_05} a_value
9-
# a longer one-liner description for variable maybe with an URL https://github.com/MarketSquare/robotframework-tidy/pull/454 and some notes
10-
${VARIABLE_06} a_value
5+
${VARIABLE_04} a_value # a longer one-liner description for variable maybe with an URL https://github.com/MarketSquare/robotframework-tidy/pull/454 and some notes
6+
${VARIABLE_05} a_value # a longer one-liner description for variable maybe with an URL https://github.com/MarketSquare/robotframework-tidy/pull/454 and some notes
7+
${VARIABLE_06} a_value # a longer one-liner description for variable maybe with an URL https://github.com/MarketSquare/robotframework-tidy/pull/454 and some notes
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
*** Variables ***
2+
${VARIABLE_01} a_value # a short one-liner description for variable
3+
${VARIABLE_02} a_value # a short one-liner description for variable
4+
${VARIABLE_03} a_value # a short one-liner description for variable
5+
# a longer one-liner description for variable maybe with an URL https://github.com/MarketSquare/robotframework-tidy/pull/454 and some notes
6+
${VARIABLE_04} a_value
7+
# a longer one-liner description for variable maybe with an URL https://github.com/MarketSquare/robotframework-tidy/pull/454 and some notes
8+
${VARIABLE_05} a_value
9+
# a longer one-liner description for variable maybe with an URL https://github.com/MarketSquare/robotframework-tidy/pull/454 and some notes
10+
${VARIABLE_06} a_value

tests/atest/transformers/SplitTooLongLine/expected/variables_feed.robot

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ ${SCALAR} with comment value value
1919
... veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeery
2020
... looooooooooooooooooooooooooooooooooooooooong
2121

22-
${SINGLE_HEADER}
23-
... veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeery
22+
${SINGLE_HEADER} veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeery
2423
@{LONG_WITH_SINGLE} short short
2524
... veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeery

tests/atest/transformers/SplitTooLongLine/expected/variables_split_on_every_value.robot

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,7 @@ ${SCALAR}
3333
... veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeery
3434
... looooooooooooooooooooooooooooooooooooooooong
3535

36-
${SINGLE_HEADER}
37-
... veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeery
36+
${SINGLE_HEADER} veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeery
3837
@{LONG_WITH_SINGLE}
3938
... short
4039
... short
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
*** Variables ***
2+
&{USER_PROFILE}
3+
... name=John Doe
4+
... age=12
5+
... hobby=coding
6+
@{VERY_LONG_VARIABLE_NAME_CONTAINING_FRUITS}
7+
... apple
8+
... banana
9+
... pineapple
10+
... tomato
11+
${NO_VALUE}
12+
13+
error
14+
15+
# comment
16+
${SCALAR}
17+
... with
18+
... comment
19+
... value
20+
... value
21+
22+
*** Variables ***
23+
# comment1
24+
# comment2
25+
# comment3
26+
# comment4 with extra words
27+
# comment5
28+
@{LIST}
29+
... value
30+
... ${EMPTY}
31+
... value2
32+
... value3
33+
... veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeery
34+
... looooooooooooooooooooooooooooooooooooooooong
35+
36+
${SINGLE_HEADER}
37+
... veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeery
38+
@{LONG_WITH_SINGLE}
39+
... short
40+
... short
41+
... veeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeery

tests/atest/transformers/SplitTooLongLine/test_transformer.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,11 @@ def test_skip_keywords(self):
9999

100100
def test_comments(self):
101101
self.compare(source="comments.robot", config=":split_on_every_value=False --transform AlignVariablesSection")
102+
self.compare(
103+
source="comments.robot",
104+
expected="comments_split_scalar.robot",
105+
config=":split_on_every_value=False:split_single_value=True --transform AlignVariablesSection",
106+
)
102107

103108
def test_ignore_comments(self):
104109
self.compare(
@@ -126,6 +131,7 @@ def test_split_settings_feed_until_line_length_skip_comments(self):
126131
config=":split_on_every_setting_arg=False:skip_comments=True",
127132
)
128133

134+
129135
@pytest.mark.parametrize(
130136
"skip_config",
131137
[
@@ -142,3 +148,10 @@ def test_skip_sections(self, skip_config):
142148
self.compare(source="settings.robot", config=skip_multiple, not_modified=True)
143149
skip_partial = skip_config.format(section_names="settings,testcases")
144150
self.compare(source="settings.robot", expected="settings_skip_tests.robot", config=skip_partial)
151+
152+
def test_split_on_single_value(self):
153+
self.compare(
154+
source="variables.robot",
155+
expected="variables_split_scalar.robot",
156+
config=":split_single_value=True:line_length=80",
157+
)

0 commit comments

Comments
 (0)