Skip to content

Commit 86e67ca

Browse files
committed
feat: Variable type conversion - support possible-variable-overwriting' rule
1 parent 97f4725 commit 86e67ca

File tree

4 files changed

+300
-4
lines changed

4 files changed

+300
-4
lines changed

src/robocop/linter/rules/naming.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1339,7 +1339,9 @@ def find_similar_variables(self, tokens, node, ignore_overwriting: bool = False)
13391339
for token in tokens:
13401340
variable_match = search_variable(token.value, ignore_errors=True)
13411341
name = variable_match.base
1342-
normalized = utils.normalize_robot_name(variable_match.base)
1342+
if TYPE_SUPPORTED:
1343+
name, *_ = name.split(": ", maxsplit=1)
1344+
normalized = utils.normalize_robot_name(name)
13431345
if (
13441346
not ignore_overwriting
13451347
and normalized in self.assigned_variables
Lines changed: 276 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,276 @@
1+
test.robot:5:5 VAR08 Variable '${MY VAR}' may overwrite similar variable inside 'Test With Overwritten Variables' TestCase
2+
|
3+
3 | ${my_var} Set Variable 1
4+
4 | ${my_var} Set Variable 2
5+
5 | ${MY VAR} Set Variable 2
6+
| ^^^^^^^^^ VAR08
7+
6 | ${myVar} Set Variable 3
8+
7 | ${another_var} Set Variable 4
9+
|
10+
11+
test.robot:6:5 VAR08 Variable '${myVar}' may overwrite similar variable inside 'Test With Overwritten Variables' TestCase
12+
|
13+
4 | ${my_var} Set Variable 2
14+
5 | ${MY VAR} Set Variable 2
15+
6 | ${myVar} Set Variable 3
16+
| ^^^^^^^^ VAR08
17+
7 | ${another_var} Set Variable 4
18+
8 | ${MYVAR} Set Variable 5
19+
|
20+
21+
test.robot:8:5 VAR08 Variable '${MYVAR}' may overwrite similar variable inside 'Test With Overwritten Variables' TestCase
22+
|
23+
6 | ${myVar} Set Variable 3
24+
7 | ${another_var} Set Variable 4
25+
8 | ${MYVAR} Set Variable 5
26+
| ^^^^^^^^ VAR08
27+
9 | ${M Y V A R} Set Variable 6
28+
10 | ${mYvAr} Some Keyword 123
29+
|
30+
31+
test.robot:9:5 VAR08 Variable '${M Y V A R}' may overwrite similar variable inside 'Test With Overwritten Variables' TestCase
32+
|
33+
7 | ${another_var} Set Variable 4
34+
8 | ${MYVAR} Set Variable 5
35+
9 | ${M Y V A R} Set Variable 6
36+
| ^^^^^^^^^^^^ VAR08
37+
10 | ${mYvAr} Some Keyword 123
38+
|
39+
40+
test.robot:10:5 VAR08 Variable '${mYvAr}' may overwrite similar variable inside 'Test With Overwritten Variables' TestCase
41+
|
42+
8 | ${MYVAR} Set Variable 5
43+
9 | ${M Y V A R} Set Variable 6
44+
10 | ${mYvAr} Some Keyword 123
45+
| ^^^^^^^^ VAR08
46+
|
47+
48+
test.robot:22:9 VAR08 Variable '${VAL}' may overwrite similar variable inside 'Keyword With For Loops' Keyword
49+
|
50+
20 | Keyword With For Loops
51+
21 | FOR ${val} IN @{some_list}
52+
22 | ${VAL} Some Variable 1
53+
| ^^^^^^ VAR08
54+
23 | END
55+
24 | FOR ${my_var} IN @{my_list}
56+
|
57+
58+
test.robot:29:13 VAR08 Variable '${this var}' may overwrite similar variable inside 'Keyword With For Loops' Keyword
59+
|
60+
27 | FOR ${this_var} IN @{this_list}
61+
28 | My Keyword ${myVar}
62+
29 | ${this var} This Keyword ${MY_VAR}
63+
| ^^^^^^^^^^^ VAR08
64+
30 | END
65+
31 | ${unique} ${myVar} Keyword
66+
|
67+
68+
test.robot:31:20 VAR08 Variable '${myVar}' may overwrite similar variable inside 'Keyword With For Loops' Keyword
69+
|
70+
29 | ${this var} This Keyword ${MY_VAR}
71+
30 | END
72+
31 | ${unique} ${myVar} Keyword
73+
| ^^^^^^^^ VAR08
74+
32 | FOR ${this_var} IN @{this_list}
75+
33 | My Keyword ${myVar}
76+
|
77+
78+
test.robot:41:9 VAR08 Variable '${VAL}' may overwrite similar variable inside 'Keyword With If Conditions' Keyword
79+
|
80+
39 | ${v a l} Some Keyword
81+
40 | IF ${val}
82+
41 | ${VAL} Set Variable 1
83+
| ^^^^^^ VAR08
84+
42 | END
85+
43 | IF ${my_val} == ${True}
86+
|
87+
88+
test.robot:46:5 VAR08 Variable '${MY_VAL}' may overwrite similar variable inside 'Keyword With If Conditions' Keyword
89+
|
90+
44 | ${my val} Change To False
91+
45 | END
92+
46 | ${MY_VAL} Change To True
93+
| ^^^^^^^^^ VAR08
94+
47 | IF ${some_val}
95+
48 | ${some val} ${another val} ${val} Return Three Values
96+
|
97+
98+
test.robot:48:38 VAR08 Variable '${val}' may overwrite similar variable inside 'Keyword With If Conditions' Keyword
99+
|
100+
46 | ${MY_VAL} Change To True
101+
47 | IF ${some_val}
102+
48 | ${some val} ${another val} ${val} Return Three Values
103+
| ^^^^^^ VAR08
104+
49 | IF ${another_val}
105+
50 | ${some val} ${another val} ${val} Return Three Values
106+
|
107+
108+
test.robot:57:5 VAR08 Variable '${SOME_VAR}' may overwrite similar variable inside 'Keyword With Overwritten Variables' Keyword
109+
|
110+
55 | [Arguments] ${my_var}
111+
56 | ${someVar} Set Variable 1
112+
57 | ${SOME_VAR} Set Variable 2
113+
| ^^^^^^^^^^^ VAR08
114+
58 | ${myvar} Set Variable 3
115+
59 | ${myvar} Set Variable 4
116+
|
117+
118+
test.robot:58:5 VAR08 Variable '${myvar}' may overwrite similar variable inside 'Keyword With Overwritten Variables' Keyword
119+
|
120+
56 | ${someVar} Set Variable 1
121+
57 | ${SOME_VAR} Set Variable 2
122+
58 | ${myvar} Set Variable 3
123+
| ^^^^^^^^ VAR08
124+
59 | ${myvar} Set Variable 4
125+
60 | ${somevar} ${some var} Return Two Values
126+
|
127+
128+
test.robot:60:5 VAR08 Variable '${somevar}' may overwrite similar variable inside 'Keyword With Overwritten Variables' Keyword
129+
|
130+
58 | ${myvar} Set Variable 3
131+
59 | ${myvar} Set Variable 4
132+
60 | ${somevar} ${some var} Return Two Values
133+
| ^^^^^^^^^^ VAR08
134+
|
135+
136+
test.robot:60:21 VAR08 Variable '${some var}' may overwrite similar variable inside 'Keyword With Overwritten Variables' Keyword
137+
|
138+
58 | ${myvar} Set Variable 3
139+
59 | ${myvar} Set Variable 4
140+
60 | ${somevar} ${some var} Return Two Values
141+
| ^^^^^^^^^^^ VAR08
142+
|
143+
144+
test.robot:65:5 VAR08 Variable '${simpleVar}' may overwrite similar variable inside 'Keyword With Different Types Of Variables' Keyword
145+
|
146+
63 | [Arguments] ${simple_var}
147+
64 | ${simple_var} Set Variable 1
148+
65 | ${simpleVar} Set Variable 2
149+
| ^^^^^^^^^^^^ VAR08
150+
66 | @{SIMPLE_VAR} Create List 1 2 3
151+
67 | &{SIMPLE_VAR} Create Dictionary a=1 b=2 c=3
152+
|
153+
154+
test.robot:66:5 VAR08 Variable '@{SIMPLE_VAR}' may overwrite similar variable inside 'Keyword With Different Types Of Variables' Keyword
155+
|
156+
64 | ${simple_var} Set Variable 1
157+
65 | ${simpleVar} Set Variable 2
158+
66 | @{SIMPLE_VAR} Create List 1 2 3
159+
| ^^^^^^^^^^^^^ VAR08
160+
67 | &{SIMPLE_VAR} Create Dictionary a=1 b=2 c=3
161+
|
162+
163+
test.robot:71:5 VAR08 Variable '${VARIABLE}' may overwrite similar variable inside 'Argument With Default Value' Keyword
164+
|
165+
69 | Argument With Default Value
166+
70 | [Arguments] ${variable}='default'
167+
71 | ${VARIABLE} Keyword # possible overwriting
168+
| ^^^^^^^^^^^ VAR08
169+
|
170+
171+
test.robot:75:5 VAR08 Variable '${VARIABLE}' may overwrite similar variable inside 'Embedded ${variable} with ${possible:pattern}' Keyword
172+
|
173+
73 | Embedded ${variable} with ${possible:pattern}
174+
74 | ${other} Keyword ${variable}
175+
75 | ${VARIABLE} Possible Overwriting
176+
| ^^^^^^^^^^^ VAR08
177+
76 | ${poss_ible} IF $cond RETURN
178+
|
179+
180+
test.robot:76:5 VAR08 Variable '${poss_ible}' may overwrite similar variable inside 'Embedded ${variable} with ${possible:pattern}' Keyword
181+
|
182+
74 | ${other} Keyword ${variable}
183+
75 | ${VARIABLE} Possible Overwriting
184+
76 | ${poss_ible} IF $cond RETURN
185+
| ^^^^^^^^^^^^ VAR08
186+
|
187+
188+
test.robot:80:5 VAR08 Variable '${_initiaL}' may overwrite similar variable inside 'IF Assignment' Keyword
189+
|
190+
78 | IF Assignment
191+
79 | ${initial} IF ${condition} > 0 Keyword
192+
80 | ${_initiaL} Possible Overwriting
193+
| ^^^^^^^^^^^ VAR08
194+
|
195+
196+
test.robot:84:5 VAR08 Variable '${VARiable}' may overwrite similar variable inside 'Assignment Sign' Keyword
197+
|
198+
82 | Assignment Sign
199+
83 | ${variable} Keyword
200+
84 | ${VARiable} = Keyword
201+
| ^^^^^^^^^^^^^ VAR08
202+
|
203+
204+
test.robot:92:5 VAR08 Variable '${keywordArgs}' may overwrite similar variable inside 'Keyword With Possible Overwritten Kwargs' Keyword
205+
|
206+
90 | Keyword With Possible Overwritten Kwargs
207+
91 | [Arguments] ${argument} &{keyword_args}
208+
92 | ${keywordArgs} Create Dictionary &{keyword_args}
209+
| ^^^^^^^^^^^^^^ VAR08
210+
|
211+
212+
test.robot:102:5 VAR08 Variable '${VARIABLE}' may overwrite similar variable inside 'Item Assignment' Keyword
213+
|
214+
100 | Item Assignment
215+
101 | ${variable} Create Dictionary
216+
102 | ${VARIABLE}[item] Set Variable value
217+
| ^^^^^^^^^^^^^^^^^ VAR08
218+
|
219+
220+
test.robot:106:12 VAR08 Variable '${variableName}' may overwrite similar variable inside 'VAR Syntax' Keyword
221+
|
222+
104 | VAR Syntax
223+
105 | ${variable_name} = Set Variable value
224+
106 | VAR ${variableName} value
225+
| ^^^^^^^^^^^^^^^ VAR08
226+
107 | VAR ${variable name} value scope=GLOBAL
227+
108 | VAR ${variable namE}= value scope=local
228+
|
229+
230+
test.robot:108:12 VAR08 Variable '${variable namE}' may overwrite similar variable inside 'VAR Syntax' Keyword
231+
|
232+
106 | VAR ${variableName} value
233+
107 | VAR ${variable name} value scope=GLOBAL
234+
108 | VAR ${variable namE}= value scope=local
235+
| ^^^^^^^^^^^^^^^^^ VAR08
236+
109 | VAR ${variable_name} Value with ${Variable_Name} scope=SUITE
237+
|
238+
239+
test.robot:120:5 VAR08 Variable '${variablE: int}' may overwrite similar variable inside 'Variable type conversion' Keyword
240+
|
241+
118 | VAR ${variable3} value
242+
119 | VAR ${variable4: int} value
243+
120 | ${variablE: int} Keyword
244+
| ^^^^^^^^^^^^^^^^ VAR08
245+
121 | ${Variable2} Keyword
246+
122 | VAR ${Variable3: int} value
247+
|
248+
249+
test.robot:121:5 VAR08 Variable '${Variable2}' may overwrite similar variable inside 'Variable type conversion' Keyword
250+
|
251+
119 | VAR ${variable4: int} value
252+
120 | ${variablE: int} Keyword
253+
121 | ${Variable2} Keyword
254+
| ^^^^^^^^^^^^ VAR08
255+
122 | VAR ${Variable3: int} value
256+
123 | VAR ${varI_able4} value
257+
|
258+
259+
test.robot:122:12 VAR08 Variable '${Variable3: int}' may overwrite similar variable inside 'Variable type conversion' Keyword
260+
|
261+
120 | ${variablE: int} Keyword
262+
121 | ${Variable2} Keyword
263+
122 | VAR ${Variable3: int} value
264+
| ^^^^^^^^^^^^^^^^^ VAR08
265+
123 | VAR ${varI_able4} value
266+
|
267+
268+
test.robot:123:12 VAR08 Variable '${varI_able4}' may overwrite similar variable inside 'Variable type conversion' Keyword
269+
|
270+
121 | ${Variable2} Keyword
271+
122 | VAR ${Variable3: int} value
272+
123 | VAR ${varI_able4} value
273+
| ^^^^^^^^^^^^^ VAR08
274+
|
275+
276+
Found 30 issues.

tests/linter/rules/variables/possible_variable_overwriting/test.robot

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,3 +111,13 @@ VAR Syntax
111111
Dictionary item
112112
VAR &{data} = &{EMPTY}
113113
${data}[key] = Browser.Get Text ${LABEL.contentItem('${content}')}
114+
115+
Variable type conversion
116+
${variable} Keyword
117+
${variable2: list[str]} Keyword
118+
VAR ${variable3} value
119+
VAR ${variable4: int} value
120+
${variablE: int} Keyword
121+
${Variable2} Keyword
122+
VAR ${Variable3: int} value
123+
VAR ${varI_able4} value

tests/linter/rules/variables/possible_variable_overwriting/test_rule.py

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,15 +2,23 @@
22

33

44
class TestRuleAcceptance(RuleAcceptance):
5-
def test_rule(self):
6-
self.check_rule(src_files=["test.robot"], expected_file="expected_output.txt", test_on_version=">=7")
5+
def test(self):
6+
self.check_rule(
7+
src_files=["test.robot"],
8+
expected_file="expected_extended_7_3.txt",
9+
output_format="extended",
10+
test_on_version=">=7.3",
11+
)
12+
13+
def test_rule_pre_var_typing(self):
14+
self.check_rule(src_files=["test.robot"], expected_file="expected_output.txt", test_on_version=">=7;<7.3")
715

816
def test_extended(self):
917
self.check_rule(
1018
src_files=["test.robot"],
1119
expected_file="expected_extended.txt",
1220
output_format="extended",
13-
test_on_version=">=7",
21+
test_on_version=">=7;<7.3",
1422
)
1523

1624
def test_rule_pre_rf7(self):

0 commit comments

Comments
 (0)