@@ -478,6 +478,7 @@ async def get(self, model: ast.AST, namespace: Namespace) -> List[Diagnostic]:
478478 self ._namespace = namespace
479479
480480 self .current_testcase_or_keyword_name : Optional [str ] = None
481+ self .finder = KeywordFinder (self ._namespace )
481482
482483 await self .visit (model )
483484 return self ._results
@@ -492,11 +493,9 @@ async def _analyze_keyword_call(
492493 ) -> Optional [KeywordDoc ]:
493494 result : Optional [KeywordDoc ] = None
494495 try :
495- finder = KeywordFinder ( self ._namespace )
496+ result = await self .finder . find_keyword ( keyword )
496497
497- result = await finder .find_keyword (keyword )
498-
499- for e in finder .diagnostics :
498+ for e in self .finder .diagnostics :
500499 self ._results .append (
501500 Diagnostic (
502501 range = range_from_token_or_node (value , keyword_token ),
@@ -926,6 +925,7 @@ def __init__(
926925 def document (self ) -> Optional [TextDocument ]:
927926 return self ._document () if self ._document is not None else None
928927
928+ @_logger .call
929929 async def libraries_changed (self , sender : Any , libraries : List [LibraryDoc ]) -> None :
930930 for p in libraries :
931931 if any (e for e in self ._libraries .values () if e .library_doc == p ):
@@ -934,6 +934,7 @@ async def libraries_changed(self, sender: Any, libraries: List[LibraryDoc]) -> N
934934 self .invalidated_callback (self )
935935 break
936936
937+ @_logger .call
937938 async def resources_changed (self , sender : Any , resources : List [LibraryDoc ]) -> None :
938939 for p in resources :
939940 if any (e for e in self ._resources .values () if e .library_doc .source == p .source ):
@@ -956,6 +957,7 @@ async def get_libraries(self) -> OrderedDict[str, LibraryEntry]:
956957
957958 return self ._libraries
958959
960+ @_logger .call
959961 async def get_libraries_matchers (self ) -> Dict [KeywordMatcher , LibraryEntry ]:
960962 if self ._libraries_matchers is None :
961963 self ._libraries_matchers = {
@@ -969,13 +971,15 @@ async def get_resources(self) -> OrderedDict[str, ResourceEntry]:
969971
970972 return self ._resources
971973
974+ @_logger .call
972975 async def get_resources_matchers (self ) -> Dict [KeywordMatcher , ResourceEntry ]:
973976 if self ._resources_matchers is None :
974977 self ._resources_matchers = {
975978 KeywordMatcher (v .alias or v .name or v .import_name ): v for v in (await self .get_resources ()).values ()
976979 }
977980 return self ._resources_matchers
978981
982+ @_logger .call
979983 async def get_library_doc (self ) -> LibraryDoc :
980984 if self ._library_doc is None :
981985 async with self ._library_doc_lock :
@@ -1049,12 +1053,14 @@ async def ensure_initialized(self) -> bool:
10491053 def initialized (self ) -> bool :
10501054 return self ._initialized
10511055
1056+ @_logger .call
10521057 async def get_imports (self ) -> List [Import ]:
10531058 if self ._imports is None :
10541059 self ._imports = await ImportVisitor ().get (self .source , self .model )
10551060
10561061 return self ._imports
10571062
1063+ @_logger .call
10581064 async def get_own_variables (self ) -> List [VariableDefinition ]:
10591065 if self ._own_variables is None :
10601066 self ._own_variables = await VariablesVisitor ().get (self .source , self .model )
@@ -1070,6 +1076,7 @@ def get_builtin_variables(cls) -> List[BuiltInVariableDefinition]:
10701076
10711077 return cls ._builtin_variables
10721078
1079+ @_logger .call
10731080 def get_command_line_variables (self ) -> List [VariableDefinition ]:
10741081 if self .imports_manager .config is None :
10751082 return []
@@ -1079,6 +1086,7 @@ def get_command_line_variables(self) -> List[VariableDefinition]:
10791086 for k in self .imports_manager .config .variables .keys ()
10801087 ]
10811088
1089+ @_logger .call
10821090 async def get_variables (
10831091 self , nodes : Optional [List [ast .AST ]] = None , position : Optional [Position ] = None
10841092 ) -> Dict [VariableMatcher , VariableDefinition ]:
@@ -1104,11 +1112,13 @@ async def get_variables(
11041112
11051113 return result
11061114
1115+ @_logger .call
11071116 async def find_variable (
11081117 self , name : str , nodes : Optional [List [ast .AST ]], position : Optional [Position ] = None
11091118 ) -> Optional [VariableDefinition ]:
11101119 return (await self .get_variables (nodes , position )).get (VariableMatcher (name ), None )
11111120
1121+ @_logger .call
11121122 async def _import_imports (self , imports : Iterable [Import ], base_dir : str , * , top_level : bool = False ) -> None :
11131123 async def _import (value : Import ) -> Optional [LibraryEntry ]:
11141124 result : Optional [LibraryEntry ] = None
@@ -1396,6 +1406,7 @@ async def _import_lib(library: str) -> Optional[LibraryEntry]:
13961406 if e is not None :
13971407 self ._libraries [e .alias or e .name or e .import_name ] = e
13981408
1409+ @_logger .call
13991410 async def _get_library_entry (
14001411 self ,
14011412 name : str ,
@@ -1412,6 +1423,7 @@ async def _get_library_entry(
14121423
14131424 return LibraryEntry (name = library .name , import_name = name , library_doc = library , args = args , alias = alias )
14141425
1426+ @_logger .call
14151427 async def _get_resource_entry (self , name : str , base_dir : str , sentinel : Any = None ) -> ResourceEntry :
14161428 namespace = await self .imports_manager .get_namespace_for_resource_import (name , base_dir , sentinel = sentinel )
14171429 library_doc = await self .imports_manager .get_libdoc_for_resource_import (name , base_dir , sentinel = sentinel )
@@ -1451,6 +1463,9 @@ async def _analyze(self) -> None:
14511463 async with self ._analyze_lock :
14521464 if not self ._analyzed :
14531465 try :
1466+ # self._diagnostics += await asyncio.get_running_loop().run_in_executor(
1467+ # None, asyncio.run, Analyzer().get(self.model, self)
1468+ # )
14541469 self ._diagnostics += await Analyzer ().get (self .model , self )
14551470
14561471 lib_doc = await self .get_library_doc ()
@@ -1478,6 +1493,7 @@ async def _analyze(self) -> None:
14781493 finally :
14791494 self ._analyzed = True
14801495
1496+ @_logger .call
14811497 async def find_keyword (self , name : Optional [str ]) -> Optional [KeywordDoc ]:
14821498 await self .ensure_initialized ()
14831499
@@ -1499,9 +1515,15 @@ def __init__(self, namespace: Namespace) -> None:
14991515 super ().__init__ ()
15001516 self .namespace = namespace
15011517 self .diagnostics : List [DiagnosticsEntry ] = []
1518+ self .self_library_doc : Optional [LibraryDoc ] = None
1519+
1520+ def reset_diagnostics (self ) -> None :
1521+ self .diagnostics = []
15021522
15031523 async def find_keyword (self , name : Optional [str ]) -> Optional [KeywordDoc ]:
15041524 try :
1525+ self .reset_diagnostics ()
1526+
15051527 result = await self ._find_keyword (name )
15061528 if result is None :
15071529 self .diagnostics .append (
@@ -1539,7 +1561,9 @@ async def _find_keyword(self, name: Optional[str]) -> Optional[KeywordDoc]:
15391561 return result
15401562
15411563 async def _get_keyword_from_self (self , name : str ) -> Optional [KeywordDoc ]:
1542- return (await self .namespace .get_library_doc ()).keywords .get (name , None )
1564+ if self .self_library_doc is None :
1565+ self .self_library_doc = await self .namespace .get_library_doc ()
1566+ return self .self_library_doc .keywords .get (name , None )
15431567
15441568 async def _yield_owner_and_kw_names (self , full_name : str ) -> AsyncIterator [Tuple [str , ...]]:
15451569 tokens = full_name .split ("." )
0 commit comments