@@ -177,18 +177,24 @@ def __init__(self, name: str, extended: bool = False) -> None:
177177 from robot .utils .normalizing import normalize
178178 from robot .variables .search import VariableSearcher
179179
180+ self .name = name
181+ self .extended = extended
182+
180183 searcher = VariableSearcher ("$@&%" , ignore_errors = True )
181184 match = searcher .search (name )
182- self . name = name
185+
183186 if match .base is None :
184187 raise InvalidVariableError (f"Invalid variable '{ name } '" )
185188
186189 self .base = match .base
187190
191+ self .extended_base : Optional [str ] = None
192+ self .normalize_extended : Optional [str ] = None
188193 if extended :
189194 ext_match = self ._match_extended .match (self .name [2 :- 1 ])
190195 if ext_match is not None :
191- self .base , _ = ext_match .groups ()
196+ self .extended_base , _ = ext_match .groups ()
197+ self .normalize_extended = str (normalize (self .extended_base , "_" ))
192198
193199 self .normalized_name = str (normalize (self .base , "_" ))
194200
@@ -197,16 +203,16 @@ def __eq__(self, o: object) -> bool:
197203 from robot .variables .search import VariableSearcher
198204
199205 if isinstance (o , VariableMatcher ):
200- base = o . base
206+ return o . normalized_name == self . normalized_name or ( o . extended and self . normalized_name == o . extended_base )
201207 elif isinstance (o , str ):
202208 searcher = VariableSearcher ("$@&%" , ignore_errors = True )
203209 match = searcher .search (o )
204210 base = match .base
211+ normalized = str (normalize (base , "_" ))
212+ return self .normalized_name == normalized or (self .extended and self .normalize_extended == normalized )
205213 else :
206214 return False
207215
208- return self .normalized_name == str (normalize (base , "_" ))
209-
210216 def __hash__ (self ) -> int :
211217 return hash (self .normalized_name )
212218
@@ -475,11 +481,11 @@ class LibraryDoc(Model):
475481 line_no : int = - 1
476482 end_line_no : int = - 1
477483 inits : KeywordStore = KeywordStore ()
478- keywords : KeywordStore = KeywordStore ( )
484+ keywords : KeywordStore = field ( default_factory = KeywordStore , compare = False )
479485 module_spec : Optional [ModuleSpec ] = None
480- errors : Optional [List [Error ]] = None
486+ errors : Optional [List [Error ]] = field ( default = None , compare = False )
481487 python_path : Optional [List [str ]] = None
482- stdout : Optional [str ] = None
488+ stdout : Optional [str ] = field ( default = None , compare = False )
483489 has_listener : Optional [bool ] = None
484490
485491 @property
@@ -1123,10 +1129,15 @@ def get_test_library(
11231129 except BaseException :
11241130 pass
11251131
1132+ real_source = lib .source if lib is not None else source
11261133 libdoc = LibraryDoc (
11271134 name = library_name ,
1128- source = lib .source if lib is not None else source ,
1129- module_spec = module_spec ,
1135+ source = real_source ,
1136+ module_spec = module_spec
1137+ if module_spec is not None
1138+ and module_spec .origin != real_source
1139+ and module_spec .submodule_search_locations is None
1140+ else None ,
11301141 python_path = sys .path ,
11311142 type = "LIBRARY" ,
11321143 )
@@ -1151,8 +1162,10 @@ def get_test_library(
11511162 source = kw [0 ].source ,
11521163 line_no = kw [0 ].lineno ,
11531164 type = "library" ,
1154- libname = kw [1 ].libname ,
1155- longname = kw [1 ].longname ,
1165+ # libname=kw[1].libname,
1166+ # longname=kw[1].longname,
1167+ libname = libdoc .name ,
1168+ longname = f"{ libdoc .name } .{ kw [0 ].name } " ,
11561169 doc_format = str (lib .doc_format ) or DEFAULT_DOC_FORMAT ,
11571170 is_initializer = True ,
11581171 )
@@ -1187,8 +1200,8 @@ def get_test_library(
11871200 tags = tuple (kw [0 ].tags ),
11881201 source = kw [0 ].source ,
11891202 line_no = kw [0 ].lineno ,
1190- libname = kw [ 1 ]. libname ,
1191- longname = kw [1 ]. longname ,
1203+ libname = libdoc . name ,
1204+ longname = f" { libdoc . name } . { kw [0 ]. name } " ,
11921205 is_embedded = is_embedded_keyword (kw [0 ].name ),
11931206 doc_format = str (lib .doc_format ) or DEFAULT_DOC_FORMAT ,
11941207 is_error_handler = kw [1 ].is_error_handler ,
0 commit comments