@@ -216,6 +216,17 @@ class PathMapping(NamedTuple):
216216 remote_root : Optional [str ]
217217
218218
219+ class DebugLogger :
220+ def __init__ (self ) -> None :
221+ self .steps : List [Any ] = []
222+
223+ def start_keyword (self , kw : Any ) -> None :
224+ self .steps .append (kw )
225+
226+ def end_keyword (self , kw : Any ) -> None :
227+ self .steps .pop ()
228+
229+
219230class Debugger :
220231 __instance : ClassVar [Optional [Debugger ]] = None
221232 __lock : ClassVar = threading .RLock ()
@@ -285,6 +296,9 @@ def __init__(self) -> None:
285296 self ._after_evaluate_keyword_event .set ()
286297 self .expression_mode = False
287298
299+ self .debug_logger : Optional [DebugLogger ] = None
300+ self .run_started = False
301+
288302 @property
289303 def state (self ) -> State :
290304 return self ._state
@@ -785,6 +799,11 @@ def remove_stackframe_entry(
785799 self .stack_frames [0 ].stack_frames .popleft ()
786800
787801 def start_suite (self , name : str , attributes : Dict [str , Any ]) -> None :
802+ if not self .run_started :
803+ self .run_started = True
804+ self .debug_logger = DebugLogger ()
805+ LOGGER .register_logger (self .debug_logger )
806+
788807 source = attributes .get ("source" , None )
789808 line_no = attributes .get ("lineno" , 1 )
790809 longname = attributes .get ("longname" , "" )
@@ -956,18 +975,17 @@ def _should_run_except(self, branch: Any, error: str) -> bool:
956975 return False
957976
958977 def is_not_caugthed_by_except (self , message : Optional [str ]) -> bool :
959- if get_robot_version () >= ( 5 , 0 ) :
960- from robot . running . model import Try
978+ if not message :
979+ return True
961980
962- if not message :
963- return True
981+ if get_robot_version () >= ( 5 , 0 ) and self . debug_logger :
982+ from robot . running . model import Try
964983
965- if EXECUTION_CONTEXTS . current .steps :
966- for branch in [f .data for f in reversed (EXECUTION_CONTEXTS . current .steps ) if isinstance (f .data , Try )]:
984+ if self . debug_logger .steps :
985+ for branch in [f .data for f in reversed (self . debug_logger .steps ) if isinstance (f .data , Try )]:
967986 for except_branch in branch .except_branches :
968987 if self ._should_run_except (except_branch , message ):
969988 return False
970-
971989 return True
972990
973991 def end_keyword (self , name : str , attributes : Dict [str , Any ]) -> None :
@@ -1541,7 +1559,7 @@ def completions(
15411559 CompletionItem (
15421560 label = library .name ,
15431561 text = library .name ,
1544- sort_text = f"010_ { library .name } " ,
1562+ sort_text = f"020_ { library .name } " ,
15451563 type = CompletionItemType .MODULE ,
15461564 )
15471565 )
@@ -1561,7 +1579,7 @@ def completions(
15611579 CompletionItem (
15621580 label = resource .name ,
15631581 text = resource .name ,
1564- sort_text = f"010_ { resource .name } " ,
1582+ sort_text = f"020_ { resource .name } " ,
15651583 type = CompletionItemType .MODULE ,
15661584 )
15671585 )
@@ -1576,4 +1594,13 @@ def completions(
15761594 )
15771595 )
15781596
1597+ for var in evaluate_context .variables .as_dict ().keys ():
1598+ result .append (
1599+ CompletionItem (
1600+ label = var ,
1601+ text = var ,
1602+ sort_text = f"010_{ var } " ,
1603+ type = CompletionItemType .VARIABLE ,
1604+ )
1605+ )
15791606 return result
0 commit comments