From 13a619677a287ede14784872cf1179e383820ae6 Mon Sep 17 00:00:00 2001 From: Bartlomiej Hirsz Date: Tue, 23 Mar 2021 09:37:47 +0100 Subject: [PATCH 1/3] fix Robotidy adding extra new line if Test Case or Keyword is last in the file --- robotidy/cli.py | 2 -- robotidy/transformers/NormalizeNewLines.py | 28 ++++++++++++------- .../expected/test_case_last.robot | 6 ++++ .../source/test_case_last_0_lines.robot | 6 ++++ .../source/test_case_last_1_lines.robot | 6 ++++ tests/atest/transformers/test_transformers.py | 9 ++++++ 6 files changed, 45 insertions(+), 12 deletions(-) create mode 100644 tests/atest/transformers/NormalizeNewLines/expected/test_case_last.robot create mode 100644 tests/atest/transformers/NormalizeNewLines/source/test_case_last_0_lines.robot create mode 100644 tests/atest/transformers/NormalizeNewLines/source/test_case_last_1_lines.robot diff --git a/robotidy/cli.py b/robotidy/cli.py index fd2f2416..0cf36a46 100644 --- a/robotidy/cli.py +++ b/robotidy/cli.py @@ -273,7 +273,6 @@ def cli( list_transformers: bool, describe_transformer: Optional[str] ): - click.echo(overwrite) if list_transformers: transformers = load_transformers(None) click.echo('Run --describe-transformer to get more details. Transformers:') @@ -310,5 +309,4 @@ def cli( check=check ) status = tidy.transform_files() - click.echo(status) ctx.exit(status) diff --git a/robotidy/transformers/NormalizeNewLines.py b/robotidy/transformers/NormalizeNewLines.py index 5c713c75..e9376c7c 100644 --- a/robotidy/transformers/NormalizeNewLines.py +++ b/robotidy/transformers/NormalizeNewLines.py @@ -3,7 +3,8 @@ from robot.api.parsing import ( ModelTransformer, - EmptyLine + EmptyLine, + Token ) @@ -41,7 +42,6 @@ def visit_Section(self, node): # noqa self.trim_trailing_empty_lines(node) empty_line = EmptyLine.from_params() if node is self.last_section: - node.body.append(empty_line) return self.generic_visit(node) node.body.extend([empty_line] * self.section_lines) return self.generic_visit(node) @@ -57,23 +57,31 @@ def visit_KeywordSection(self, node): # noqa def visit_TestCase(self, node): # noqa self.trim_leading_empty_lines(node) self.trim_trailing_empty_lines(node) - if node is self.last_test: - return node - if not self.templated: + if node is not self.last_test and not self.templated: node.body.extend([EmptyLine.from_params()] * self.test_case_lines) - return node + return self.generic_visit(node) def visit_Keyword(self, node): # noqa self.trim_leading_empty_lines(node) self.trim_trailing_empty_lines(node) - if node is self.last_keyword: - return node - node.body.extend([EmptyLine.from_params()] * self.keyword_lines) + if node is not self.last_keyword: + node.body.extend([EmptyLine.from_params()] * self.keyword_lines) + return self.generic_visit(node) + + def visit_Statement(self, node): # noqa + tokens = [] + for line in node.lines: + if line[-1].type == Token.EOL: + line[-1].value = '\n' + tokens.extend(line) + node.tokens = tokens return node @staticmethod def trim_trailing_empty_lines(node): - while hasattr(node, 'body') and node.body and isinstance(node.body[-1], EmptyLine): + if not hasattr(node, 'body'): + return + while node.body and isinstance(node.body[-1], EmptyLine): node.body.pop() @staticmethod diff --git a/tests/atest/transformers/NormalizeNewLines/expected/test_case_last.robot b/tests/atest/transformers/NormalizeNewLines/expected/test_case_last.robot new file mode 100644 index 00000000..3d233c5a --- /dev/null +++ b/tests/atest/transformers/NormalizeNewLines/expected/test_case_last.robot @@ -0,0 +1,6 @@ +*** Test Cases *** +Values Are Equal Fails + Log 1111 + +Values Are Equal Fails + Log 1111 diff --git a/tests/atest/transformers/NormalizeNewLines/source/test_case_last_0_lines.robot b/tests/atest/transformers/NormalizeNewLines/source/test_case_last_0_lines.robot new file mode 100644 index 00000000..9d1a714c --- /dev/null +++ b/tests/atest/transformers/NormalizeNewLines/source/test_case_last_0_lines.robot @@ -0,0 +1,6 @@ +*** Test Cases *** +Values Are Equal Fails + Log 1111 + +Values Are Equal Fails + Log 1111 \ No newline at end of file diff --git a/tests/atest/transformers/NormalizeNewLines/source/test_case_last_1_lines.robot b/tests/atest/transformers/NormalizeNewLines/source/test_case_last_1_lines.robot new file mode 100644 index 00000000..3d233c5a --- /dev/null +++ b/tests/atest/transformers/NormalizeNewLines/source/test_case_last_1_lines.robot @@ -0,0 +1,6 @@ +*** Test Cases *** +Values Are Equal Fails + Log 1111 + +Values Are Equal Fails + Log 1111 diff --git a/tests/atest/transformers/test_transformers.py b/tests/atest/transformers/test_transformers.py index 1ef639f7..95527a1e 100644 --- a/tests/atest/transformers/test_transformers.py +++ b/tests/atest/transformers/test_transformers.py @@ -257,6 +257,15 @@ def test_templated_tests_separated(self): config=':separate_templated_tests=True' ) + @pytest.mark.parametrize('lines_at_the_end', [0, 1]) + def test_test_case_last(self, lines_at_the_end): + run_tidy_and_compare( + self.TRANSFORMER_NAME, + sources=[f'test_case_last_{lines_at_the_end}_lines.robot'], + expected=['test_case_last.robot'] + ) + + @patch('robotidy.app.Robotidy.save_model', new=save_tmp_model) class TestSplitTooLongLine: From f473b14582f0a48a949fb247bb17a89b53726fbd Mon Sep 17 00:00:00 2001 From: Bartlomiej Hirsz Date: Tue, 23 Mar 2021 09:39:34 +0100 Subject: [PATCH 2/3] add TODO comment --- robotidy/transformers/NormalizeNewLines.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/robotidy/transformers/NormalizeNewLines.py b/robotidy/transformers/NormalizeNewLines.py index e9376c7c..0c309727 100644 --- a/robotidy/transformers/NormalizeNewLines.py +++ b/robotidy/transformers/NormalizeNewLines.py @@ -72,7 +72,7 @@ def visit_Statement(self, node): # noqa tokens = [] for line in node.lines: if line[-1].type == Token.EOL: - line[-1].value = '\n' + line[-1].value = '\n' # TODO: use global formatting in the future tokens.extend(line) node.tokens = tokens return node From 85f5964bf2d6211d15ea39a098c228a6df24bf8a Mon Sep 17 00:00:00 2001 From: Bartlomiej Hirsz Date: Tue, 23 Mar 2021 09:40:16 +0100 Subject: [PATCH 3/3] fix test --- tests/atest/transformers/test_transformers.py | 1 - 1 file changed, 1 deletion(-) diff --git a/tests/atest/transformers/test_transformers.py b/tests/atest/transformers/test_transformers.py index 95527a1e..fe221312 100644 --- a/tests/atest/transformers/test_transformers.py +++ b/tests/atest/transformers/test_transformers.py @@ -266,7 +266,6 @@ def test_test_case_last(self, lines_at_the_end): ) - @patch('robotidy.app.Robotidy.save_model', new=save_tmp_model) class TestSplitTooLongLine: TRANSFORMER_NAME = 'SplitTooLongLine'