88from robotcode .robot .diagnostics .diagnostics_modifier import (
99 DiagnosticModifiersConfig ,
1010 DiagnosticsModifier ,
11- DisablersVisitor ,
11+ ModifierAction ,
12+ ModifiersVisitor ,
1213)
1314
1415
1516@pytest .mark .parametrize (
1617 ("text" , "expected_action_and_codes" ),
1718 [
18- ("ignore" , {"ignore" : ["*" ]}),
19- ("warn" , {"warn" : ["*" ]}),
20- ("error" , {"error" : ["*" ]}),
21- ("hint" , {"hint" : ["*" ]}),
19+ ("ignore" , {ModifierAction .IGNORE : ["*" ]}),
20+ ("warn" , {ModifierAction .WARNING : ["*" ]}),
21+ ("warning" , {ModifierAction .WARNING : ["*" ]}),
22+ ("info" , {ModifierAction .INFORMATION : ["*" ]}),
23+ ("information" , {ModifierAction .INFORMATION : ["*" ]}),
24+ ("error" , {ModifierAction .ERROR : ["*" ]}),
25+ ("hint" , {ModifierAction .HINT : ["*" ]}),
2226 ("garbage" , {}),
23- ("ignore[message]" , {"ignore" : ["message" ]}),
24- ("ignore[message1, message2]" , {"ignore" : ["message1" , "message2" ]}),
27+ ("ignore[message]" , {ModifierAction . IGNORE : ["message" ]}),
28+ ("ignore[message1, message2]" , {ModifierAction . IGNORE : ["message1" , "message2" ]}),
2529 (
2630 "ignore[message1, message2] hint[message3, message4]" ,
27- {"ignore" : ["message1" , "message2" ], "hint" : ["message3" , "message4" ]},
31+ {ModifierAction . IGNORE : ["message1" , "message2" ], ModifierAction . HINT : ["message3" , "message4" ]},
2832 ),
2933 (
3034 " ignore[message1, message2] hint[message3, message4] garbage " ,
31- {"ignore" : ["message1" , "message2" ], "hint" : ["message3" , "message4" ]},
35+ {ModifierAction . IGNORE : ["message1" , "message2" ], ModifierAction . HINT : ["message3" , "message4" ]},
3236 ),
3337 ],
3438)
35- def test_disabler_parser_should_work (text : str , expected_action_and_codes : Dict [str , List [str ]]) -> None :
36- visitor = DisablersVisitor ()
39+ def test_disabler_parser_should_work (text : str , expected_action_and_codes : Dict [ModifierAction , List [str ]]) -> None :
40+ visitor = ModifiersVisitor ()
3741 assert dict (visitor ._parse_robotcode_disabler (text )) == expected_action_and_codes
3842
3943
@@ -49,7 +53,7 @@ def test_find_disablers_at_line_end() -> None:
4953"""
5054
5155 model = get_model (io .StringIO (file ))
52- visitor = DisablersVisitor ()
56+ visitor = ModifiersVisitor ()
5357 visitor .visit (model )
5458 assert visitor .rules_and_codes .codes == {
5559 "*" : {2 , 3 },
@@ -60,14 +64,14 @@ def test_find_disablers_at_line_end() -> None:
6064 "message4" : {6 },
6165 }
6266 assert visitor .rules_and_codes .actions == {
63- 2 : {"*" : "ignore" },
64- 3 : {"*" : "warn" },
65- 5 : {"unknownvariable" : "ignore" },
67+ 2 : {"*" : ModifierAction . IGNORE },
68+ 3 : {"*" : ModifierAction . WARNING },
69+ 5 : {"unknownvariable" : ModifierAction . IGNORE },
6670 6 : {
67- "message1" : "ignore" ,
68- "message2" : "ignore" ,
69- "message3" : "hint" ,
70- "message4" : "hint" ,
71+ "message1" : ModifierAction . IGNORE ,
72+ "message2" : ModifierAction . IGNORE ,
73+ "message3" : ModifierAction . HINT ,
74+ "message4" : ModifierAction . HINT ,
7175 },
7276 }
7377
@@ -361,3 +365,53 @@ def test_diagnostics_modifier_should_be_configurable() -> None:
361365 severity = DiagnosticSeverity .HINT ,
362366 )
363367 ]
368+
369+
370+ def test_diagnostics_modifier_should_work_as_option_in_implicit_comment () -> None :
371+ file = """\
372+ language: en
373+ robotcode: ignore[unknown-variable]
374+ *** Test Cases ***
375+ first
376+ # robotcode: ignore[message_1, message_2] hint[message 3, message 4]
377+
378+ unknown keyword
379+ unknown keyword1
380+ log ${unknown}
381+ log hello
382+
383+ """
384+ model = get_model (io .StringIO (file ))
385+ modifier = DiagnosticsModifier (model )
386+
387+ diagnostics = [
388+ Diagnostic (
389+ range = Range (start = Position (line = 5 , character = 4 ), end = Position (line = 5 , character = 12 )),
390+ message = "UnknownVariable" ,
391+ code = "UnknownVariable" ,
392+ severity = DiagnosticSeverity .INFORMATION ,
393+ ),
394+ Diagnostic (
395+ range = Range (start = Position (line = 6 , character = 4 ), end = Position (line = 6 , character = 12 )),
396+ message = "Message1" ,
397+ code = "message1" ,
398+ severity = DiagnosticSeverity .ERROR ,
399+ ),
400+ Diagnostic (
401+ range = Range (start = Position (line = 6 , character = 4 ), end = Position (line = 6 , character = 12 )),
402+ message = "Message3" ,
403+ code = "Message3" ,
404+ severity = DiagnosticSeverity .ERROR ,
405+ ),
406+ ]
407+
408+ result = modifier .modify_diagnostics (diagnostics )
409+
410+ assert result == [
411+ Diagnostic (
412+ range = Range (start = Position (line = 6 , character = 4 ), end = Position (line = 6 , character = 12 )),
413+ message = "Message3" ,
414+ code = "Message3" ,
415+ severity = DiagnosticSeverity .HINT ,
416+ )
417+ ]
0 commit comments