Skip to content

Commit 2f9010a

Browse files
authored
feat!: deprecate deprecated-statement rule and split into deprecated-return-setting (#1639)
1 parent a0fcd14 commit 2f9010a

File tree

9 files changed

+56
-21
lines changed

9 files changed

+56
-21
lines changed

src/robocop/linter/rules/deprecated.py

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,14 +44,16 @@ class IfCanBeUsedRule(Rule):
4444
deprecated_names = ("0908",)
4545

4646

47-
class DeprecatedStatementRule(Rule): # TODO: Split rule
47+
class DeprecatedStatementRule(Rule):
4848
"""
4949
Statement is deprecated.
5050
5151
Detects any piece of code that is marked as deprecated but still works in RF.
5252
5353
For example, ``Run Keyword`` and ``Continue For Loop`` keywords or ``[Return]`` setting.
5454
55+
Changes in 8.0.0: Rule is now split into separate deprecated-* rules and the original rule is deprecated.
56+
5557
"""
5658

5759
name = "deprecated-statement"
@@ -63,6 +65,7 @@ class DeprecatedStatementRule(Rule): # TODO: Split rule
6365
clean_code=sonar_qube.CleanCodeAttribute.CONVENTIONAL, issue_type=sonar_qube.SonarQubeIssueType.CODE_SMELL
6466
)
6567
deprecated_names = ("0319",)
68+
deprecated = True
6669

6770

6871
class DeprecatedWithNameRule(Rule):
@@ -360,3 +363,38 @@ class DeprecatedReturnKeyword(Rule):
360363
)
361364

362365
deprecated_names = {"returnfromkeyword": "RETURN", "returnfromkeywordif": "IF and RETURN"}
366+
367+
368+
class DeprecatedReturnSetting(Rule):
369+
"""
370+
``[Return]`` settings is deprecated.
371+
372+
Use ``RETURN`` instead.
373+
374+
Incorrect code example:
375+
376+
*** Keywords ***
377+
Return One Value
378+
[Arguments] ${arg}
379+
${value} Convert To Upper Case ${arg}
380+
[Return] ${value}
381+
382+
Correct code:
383+
384+
*** Keywords ***
385+
Return One Value
386+
[Arguments] ${arg}
387+
${value} Convert To Upper Case ${arg}
388+
RETURN ${value}
389+
390+
"""
391+
392+
name = "deprecated-return-setting"
393+
rule_id = "DEPR10"
394+
message = "'[Return]' is deprecated, use 'RETURN' instead"
395+
severity = RuleSeverity.WARNING
396+
version = ">=5.0"
397+
added_in_version = "8.0.0"
398+
sonar_qube_attrs = sonar_qube.SonarQubeAttributes(
399+
clean_code=sonar_qube.CleanCodeAttribute.CONVENTIONAL, issue_type=sonar_qube.SonarQubeIssueType.CODE_SMELL
400+
)

src/robocop/linter/rules/naming.py

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1374,13 +1374,13 @@ def find_similar_variables(self, tokens, node, ignore_overwriting: bool = False)
13741374
class DeprecatedStatementChecker(VisitorChecker):
13751375
"""Checker for deprecated statements."""
13761376

1377-
deprecated_statement: deprecated.DeprecatedStatementRule
13781377
deprecated_with_name: deprecated.DeprecatedWithNameRule
13791378
deprecated_singular_header: deprecated.DeprecatedSingularHeaderRule
13801379
deprecated_force_tags: deprecated.DeprecatedForceTagsRule
13811380
deprecated_run_keyword_if: deprecated.DeprecatedRunKeywordIfRule
13821381
deprecated_loop_keyword: deprecated.DeprecatedLoopKeywordRule
13831382
deprecated_return_keyword: deprecated.DeprecatedReturnKeyword
1383+
deprecated_return_setting: deprecated.DeprecatedReturnSetting
13841384
replace_set_variable_with_var: deprecated.ReplaceSetVariableWithVarRule
13851385
replace_create_with_var: deprecated.ReplaceCreateWithVarRule
13861386

@@ -1434,20 +1434,17 @@ def visit_Return(self, node) -> None: # noqa: N802
14341434
if ROBOT_VERSION.major not in (5, 6):
14351435
return
14361436
# TODO: check if our code for finding our return visitor would apply here
1437-
self.check_deprecated_return(node)
1437+
self.report_deprecated_return(node)
14381438

14391439
def visit_ReturnSetting(self, node) -> None: # noqa: N802
1440-
self.check_deprecated_return(node)
1440+
self.report_deprecated_return(node)
14411441

1442-
def check_deprecated_return(self, node) -> None:
1442+
def report_deprecated_return(self, node) -> None:
14431443
self.report(
1444-
self.deprecated_statement,
1445-
statement_name="[Return]",
1446-
alternative="RETURN",
1444+
self.deprecated_return_setting,
14471445
node=node,
14481446
col=utils.token_col(node, Token.RETURN),
14491447
end_col=node.end_col_offset,
1450-
version="5.*",
14511448
)
14521449

14531450
def visit_ForceTags(self, node) -> None: # noqa: N802

tests/linter/rules/deprecated/deprecated_statement/__init__.py renamed to tests/linter/rules/deprecated/deprecated_return_setting/__init__.py

File renamed without changes.
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
test.robot:6:5 DEPR10 '[Return]' is deprecated, use 'RETURN' instead
2+
|
3+
4 | BuiltIn.Return From Keyword
4+
5 | RETURN
5+
6 | [Return]
6+
| ^^^^^^^^ DEPR10
7+
|
8+
9+
Found 1 issue.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
test.robot:6:5 [W] DEPR10 '[Return]' is deprecated, use 'RETURN' instead
2+
3+
Found 1 issue.

tests/linter/rules/deprecated/deprecated_statement/test.robot renamed to tests/linter/rules/deprecated/deprecated_return_setting/test.robot

File renamed without changes.

tests/linter/rules/deprecated/deprecated_statement/test_rule.py renamed to tests/linter/rules/deprecated/deprecated_return_setting/test_rule.py

File renamed without changes.

tests/linter/rules/deprecated/deprecated_statement/expected_extended.txt

Lines changed: 0 additions & 9 deletions
This file was deleted.

tests/linter/rules/deprecated/deprecated_statement/expected_output.txt

Lines changed: 0 additions & 3 deletions
This file was deleted.

0 commit comments

Comments
 (0)