Skip to content

Commit 41e7f1f

Browse files
authored
Merge pull request #48 from MarketSquare/fix/extra_new_line
Fix Robotidy add extra new line at the end of file if Test Case or Keyword are last
2 parents a45cfdd + 85f5964 commit 41e7f1f

File tree

5 files changed

+44
-10
lines changed

5 files changed

+44
-10
lines changed

robotidy/transformers/NormalizeNewLines.py

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,8 @@
33

44
from robot.api.parsing import (
55
ModelTransformer,
6-
EmptyLine
6+
EmptyLine,
7+
Token
78
)
89

910

@@ -41,7 +42,6 @@ def visit_Section(self, node): # noqa
4142
self.trim_trailing_empty_lines(node)
4243
empty_line = EmptyLine.from_params()
4344
if node is self.last_section:
44-
node.body.append(empty_line)
4545
return self.generic_visit(node)
4646
node.body.extend([empty_line] * self.section_lines)
4747
return self.generic_visit(node)
@@ -57,23 +57,31 @@ def visit_KeywordSection(self, node): # noqa
5757
def visit_TestCase(self, node): # noqa
5858
self.trim_leading_empty_lines(node)
5959
self.trim_trailing_empty_lines(node)
60-
if node is self.last_test:
61-
return node
62-
if not self.templated:
60+
if node is not self.last_test and not self.templated:
6361
node.body.extend([EmptyLine.from_params()] * self.test_case_lines)
64-
return node
62+
return self.generic_visit(node)
6563

6664
def visit_Keyword(self, node): # noqa
6765
self.trim_leading_empty_lines(node)
6866
self.trim_trailing_empty_lines(node)
69-
if node is self.last_keyword:
70-
return node
71-
node.body.extend([EmptyLine.from_params()] * self.keyword_lines)
67+
if node is not self.last_keyword:
68+
node.body.extend([EmptyLine.from_params()] * self.keyword_lines)
69+
return self.generic_visit(node)
70+
71+
def visit_Statement(self, node): # noqa
72+
tokens = []
73+
for line in node.lines:
74+
if line[-1].type == Token.EOL:
75+
line[-1].value = '\n' # TODO: use global formatting in the future
76+
tokens.extend(line)
77+
node.tokens = tokens
7278
return node
7379

7480
@staticmethod
7581
def trim_trailing_empty_lines(node):
76-
while hasattr(node, 'body') and node.body and isinstance(node.body[-1], EmptyLine):
82+
if not hasattr(node, 'body'):
83+
return
84+
while node.body and isinstance(node.body[-1], EmptyLine):
7785
node.body.pop()
7886

7987
@staticmethod
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
*** Test Cases ***
2+
Values Are Equal Fails
3+
Log 1111
4+
5+
Values Are Equal Fails
6+
Log 1111
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
*** Test Cases ***
2+
Values Are Equal Fails
3+
Log 1111
4+
5+
Values Are Equal Fails
6+
Log 1111
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
*** Test Cases ***
2+
Values Are Equal Fails
3+
Log 1111
4+
5+
Values Are Equal Fails
6+
Log 1111

tests/atest/transformers/test_transformers.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,14 @@ def test_templated_tests_separated(self):
257257
config=':separate_templated_tests=True'
258258
)
259259

260+
@pytest.mark.parametrize('lines_at_the_end', [0, 1])
261+
def test_test_case_last(self, lines_at_the_end):
262+
run_tidy_and_compare(
263+
self.TRANSFORMER_NAME,
264+
sources=[f'test_case_last_{lines_at_the_end}_lines.robot'],
265+
expected=['test_case_last.robot']
266+
)
267+
260268

261269
@patch('robotidy.app.Robotidy.save_model', new=save_tmp_model)
262270
class TestSplitTooLongLine:

0 commit comments

Comments
 (0)