From 9f2e39320d332d98e59e8dd466d2377598b34943 Mon Sep 17 00:00:00 2001 From: Bartlomiej Hirsz Date: Tue, 9 Nov 2021 15:48:37 +0100 Subject: [PATCH 1/4] Fix statements inside IF only if the END is missing --- CHANGES.md | 5 +++++ robotidy/transformers/AddMissingEnd.py | 14 +++++++------- .../AddMissingEnd/expected/test.robot | 16 ++++++++++++++++ .../AddMissingEnd/expected/test_selected.robot | 16 ++++++++++++++++ .../transformers/AddMissingEnd/source/test.robot | 16 ++++++++++++++++ .../AddMissingEnd/test_transformer.py | 2 +- 6 files changed, 61 insertions(+), 8 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index fff19643..836c2f2e 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,6 +2,11 @@ ## Unreleased +### Fixes +- `AddMissingEnd` transformer now properly handles IFs without indented block of code ([#226](https://github.com/MarketSquare/robotframework-tidy/issues/226)) + +## 1.6.1 + ### Fixes - Trailing whitespace is no longer added to blank lines in multiline statements when using align transformers ([#219](https://github.com/MarketSquare/robotframework-tidy/issues/219)) - `*** Tasks ***` is no longer converted to `*** Test Cases ***` by NormalizeSectionHeaderName ([#218](https://github.com/MarketSquare/robotframework-tidy/issues/218)) diff --git a/robotidy/transformers/AddMissingEnd.py b/robotidy/transformers/AddMissingEnd.py index 84258b70..280592c7 100644 --- a/robotidy/transformers/AddMissingEnd.py +++ b/robotidy/transformers/AddMissingEnd.py @@ -37,13 +37,13 @@ def visit_If(self, node): # noqa self.fix_header_name(node, node.type) if node.type != Token.IF: return node - node.body, outside = self.collect_inside_statements(node) - if node.orelse: - orelse = node.orelse - while orelse.orelse: - orelse = orelse.orelse - orelse.body, outside_orelse = self.collect_inside_statements(orelse) - outside += outside_orelse + outside = [] + if not node.end: + node.body, outside = self.collect_inside_statements(node) + orelse = self.get_last_or_else(node) + if orelse: + orelse.body, outside_orelse = self.collect_inside_statements(orelse) + outside += outside_orelse self.fix_end(node) return (node, *outside) diff --git a/tests/atest/transformers/AddMissingEnd/expected/test.robot b/tests/atest/transformers/AddMissingEnd/expected/test.robot index aa75f016..9cfff451 100644 --- a/tests/atest/transformers/AddMissingEnd/expected/test.robot +++ b/tests/atest/transformers/AddMissingEnd/expected/test.robot @@ -129,6 +129,11 @@ Mixed For and If END END +Bad Indent + IF ${i}==1 + Log "one" + END + *** Keywords *** Missing In For FOR ${x} IN foo bar @@ -268,3 +273,14 @@ Nested For With Identical Indent Log ${x}${y}${z} END END + +Bad Indent + IF ${i}==1 + Log "one" + END + + IF ${i}>5 + Log ${i} + ELSE + Log ${i}+1 + END diff --git a/tests/atest/transformers/AddMissingEnd/expected/test_selected.robot b/tests/atest/transformers/AddMissingEnd/expected/test_selected.robot index 9f014778..adda440c 100644 --- a/tests/atest/transformers/AddMissingEnd/expected/test_selected.robot +++ b/tests/atest/transformers/AddMissingEnd/expected/test_selected.robot @@ -111,6 +111,11 @@ Mixed For and If IF ${condition} Log foo${x} +Bad Indent + IF ${i}==1 + Log "one" + END + *** Keywords *** Missing In For FOR ${x} IN foo bar @@ -235,3 +240,14 @@ Nested For With Identical Indent Log ${x}${y}${z} END END + +Bad Indent + IF ${i}==1 + Log "one" + END + + IF ${i}>5 + Log ${i} + ELSE + Log ${i}+1 + END diff --git a/tests/atest/transformers/AddMissingEnd/source/test.robot b/tests/atest/transformers/AddMissingEnd/source/test.robot index dc6af034..ce1008e5 100644 --- a/tests/atest/transformers/AddMissingEnd/source/test.robot +++ b/tests/atest/transformers/AddMissingEnd/source/test.robot @@ -111,6 +111,11 @@ Mixed For and If IF ${condition} Log foo${x} +Bad Indent + IF ${i}==1 + Log "one" + END + *** Keywords *** Missing In For FOR ${x} IN foo bar @@ -231,3 +236,14 @@ Nested For With Identical Indent Log ${x}${y}${z} END END + +Bad Indent + IF ${i}==1 + Log "one" + END + + IF ${i}>5 + Log ${i} + ELSE + Log ${i}+1 + END diff --git a/tests/atest/transformers/AddMissingEnd/test_transformer.py b/tests/atest/transformers/AddMissingEnd/test_transformer.py index 65b5c452..8012dc9a 100644 --- a/tests/atest/transformers/AddMissingEnd/test_transformer.py +++ b/tests/atest/transformers/AddMissingEnd/test_transformer.py @@ -12,5 +12,5 @@ def test_selected(self): self.TRANSFORMER_NAME, source='test.robot', expected='test_selected.robot', - config=' --startline 161 --endline 183' + config=' --startline 166 --endline 188' ) From 892f437601788d779b412cb6ddfa6c96e39aebdd Mon Sep 17 00:00:00 2001 From: Bartlomiej Hirsz Date: Sun, 14 Nov 2021 14:16:12 +0100 Subject: [PATCH 2/4] orelse -> or_else --- robotidy/transformers/AddMissingEnd.py | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/robotidy/transformers/AddMissingEnd.py b/robotidy/transformers/AddMissingEnd.py index 280592c7..6e1d639c 100644 --- a/robotidy/transformers/AddMissingEnd.py +++ b/robotidy/transformers/AddMissingEnd.py @@ -40,10 +40,10 @@ def visit_If(self, node): # noqa outside = [] if not node.end: node.body, outside = self.collect_inside_statements(node) - orelse = self.get_last_or_else(node) - if orelse: - orelse.body, outside_orelse = self.collect_inside_statements(orelse) - outside += outside_orelse + or_else = self.get_last_or_else(node) + if or_else: + or_else.body, outside_or_else = self.collect_inside_statements(or_else) + outside += outside_or_else self.fix_end(node) return (node, *outside) @@ -95,7 +95,7 @@ def get_column(node): def get_last_or_else(node): if not node.orelse: return None - orelse = node.orelse - while orelse.orelse: - orelse = orelse.orelse - return orelse + or_else = node.orelse + while or_else.orelse: + or_else = or_else.orelse + return or_else From 8fce59de82bbbd30c41d7ded322b035b45e5627d Mon Sep 17 00:00:00 2001 From: Bartlomiej Hirsz Date: Sun, 14 Nov 2021 14:20:44 +0100 Subject: [PATCH 3/4] Update changelog --- CHANGES.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGES.md b/CHANGES.md index 836c2f2e..884744d8 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -2,8 +2,11 @@ ## Unreleased +## 1.6.2 + ### Fixes - `AddMissingEnd` transformer now properly handles IFs without indented block of code ([#226](https://github.com/MarketSquare/robotframework-tidy/issues/226)) +- Paths passed from command line are now checked against excluded paths (previously it was only checked when iterating over directories) ([#227](https://github.com/MarketSquare/robotframework-tidy/issues/227)) ## 1.6.1 From 3be1fb7b2be4cdafeb9026777dc50d21595be972 Mon Sep 17 00:00:00 2001 From: Bartlomiej Hirsz Date: Sun, 14 Nov 2021 14:45:24 +0100 Subject: [PATCH 4/4] Add config file for codespell --- .codespellrc | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .codespellrc diff --git a/.codespellrc b/.codespellrc new file mode 100644 index 00000000..9b71e403 --- /dev/null +++ b/.codespellrc @@ -0,0 +1,2 @@ +[codespell] +ignore-words-list = ba \ No newline at end of file