def set_qualified_name(self, env, self_name):
self.module_name = env.global_scope().qualified_name
qualified_name = [self_name]
- while env and not env.is_module_scope:
- if env.is_closure_scope:
- qualified_name.append('<locals>')
- qualified_name.append(env.name)
- env = env.parent_scope
+ entry = env.lookup(self_name)
+ if not entry or not (entry.is_pyglobal and not entry.is_pyclass_attr):
+ while env and not env.is_module_scope:
+ if env.is_closure_scope:
+ qualified_name.append('<locals>')
+ qualified_name.append(env.name)
+ env = env.parent_scope
self.qualname = StringEncoding.EncodedString('.'.join(qualified_name[::-1]))
def get_py_mod_name(self, code):
def test_nested_qualname():
"""
- >>> func, lambda_func = test_nested_qualname()
+ >>> func, lambda_func, XYZ = test_nested_qualname()
>>> func().__qualname__
'test_nested_qualname.<locals>.outer.<locals>.Test'
>>> func().test.__qualname__
'test_nested_qualname.<locals>.outer.<locals>.Test.test'
+
+ >>> func()().__qualname__
+ 'test_nested_qualname.<locals>.outer.<locals>.Test'
>>> func()().test.__qualname__
'test_nested_qualname.<locals>.outer.<locals>.Test.test'
+ >>> func()().test().__qualname__
+ 'XYZinner'
+ >>> func()().test()().__qualname__
+ 'XYZinner'
+
>>> lambda_func.__qualname__
'test_nested_qualname.<locals>.<lambda>'
+
+ >>> XYZ.__qualname__
+ 'XYZ'
"""
def outer():
class Test(object):
def test(self):
- return 123
+ global XYZinner
+ class XYZinner(object): pass
+
+ return XYZinner
return Test
- return outer, lambda:None
+
+ global XYZ
+ class XYZ(object): pass
+
+ return outer, lambda:None, XYZ
def test_doc():