On 29 juillet 16:30, Derek Harland wrote:
> Hi Sylvain
> 
> * First up, I should point out that I think pylint is a great tool
> ... I use it in combination with flymake in emacs to give me
> realtime error checking which is very helpful.
> * I have already posted the suggested fix to the PyQt mailing list,
> along with the note of a bus error
> * On the bus error I have more information but will post that separately
> * As request, attached is an example simple PyQt app.  Here is what
> the unpatched pylint output appears as
 
thanks. Attached is another patch that should do the trick nicely. 
Could you apply it and  tell me if it works well in your environement?

-- 
Sylvain Thénault                               LOGILAB, Paris (France)
Formations Python, Debian, Méth. Agiles: http://www.logilab.fr/formations
Développement logiciel sur mesure:       http://www.logilab.fr/services
CubicWeb, the semantic web framework:    http://www.cubicweb.org

diff -r 5486bcbcd862 builder.py
--- a/builder.py	Mon Jul 20 20:40:15 2009 +0200
+++ b/builder.py	Wed Jul 29 13:44:09 2009 +0200
@@ -173,13 +173,13 @@
                 if member.func_code.co_filename != getattr(self._module, '__file__', None):
                     attach_dummy_node(node, name, member)
                     continue
-                object_build_function(node, member)
+                object_build_function(node, member, name)
             elif isbuiltin(member):
                 # verify this is not an imported member
                 if self._member_module(member) != self._module.__name__:
                     imported_member(node, member, name)
                     continue
-                object_build_methoddescriptor(node, member)
+                object_build_methoddescriptor(node, member, name)
             elif isclass(member):
                 # verify this is not an imported class
                 if self._member_module(member) != self._module.__name__:
@@ -190,12 +190,12 @@
                     if not class_node in node.locals.get(name, ()):
                         node.add_local_node(class_node, name)
                 else:
-                    class_node = object_build_class(node, member)
+                    class_node = object_build_class(node, member, name)
                     # recursion
                     self.object_build(class_node, member)
             elif ismethoddescriptor(member):
                 assert isinstance(member, object)
-                object_build_methoddescriptor(node, member)
+                object_build_methoddescriptor(node, member, name)
             elif isdatadescriptor(member):
                 assert isinstance(member, object)
                 object_build_datadescriptor(node, member, name)
diff -r 5486bcbcd862 raw_building.py
--- a/raw_building.py	Mon Jul 20 20:40:15 2009 +0200
+++ b/raw_building.py	Wed Jul 29 13:44:09 2009 +0200
@@ -124,42 +124,44 @@
             register_arguments(func, arg.elts)
 
 
-def object_build_class(node, member):
+def object_build_class(node, member, localname):
     """create astng for a living class object"""
     basenames = [base.__name__ for base in member.__bases__]
-    return _base_class_object_build(node, member, basenames)
+    return _base_class_object_build(node, member, basenames,
+                                    localname=localname)
 
-def object_build_function(node, member):
+def object_build_function(node, member, localname):
     """create astng for a living function object"""
     args, varargs, varkw, defaults = getargspec(member)
     if varargs is not None:
         args.append(varargs)
     if varkw is not None:
         args.append(varkw)
-    func = build_function(member.__name__, args, defaults,
+    func = build_function(member.__name__ or localname, args, defaults,
                           member.func_code.co_flags, member.__doc__)
-    node.add_local_node(func)
+    node.add_local_node(func, localname)
 
 def object_build_datadescriptor(node, member, name):
     """create astng for a living data descriptor object"""
     return _base_class_object_build(node, member, [], name)
 
-def object_build_methoddescriptor(node, member):
+def object_build_methoddescriptor(node, member, localname):
     """create astng for a living method descriptor object"""
     # FIXME get arguments ?
-    func = build_function(member.__name__, doc=member.__doc__)
+    func = build_function(member.__name__ or localname, doc=member.__doc__)
     # set node's arguments to None to notice that we have no information, not
     # and empty argument list
     func.args.args = None
-    node.add_local_node(func)
+    node.add_local_node(func, localname)
 
-def _base_class_object_build(node, member, basenames, name=None):
+def _base_class_object_build(node, member, basenames, name=None, localname=None):
     """create astng for a living class object, with a given set of base names
     (e.g. ancestors)
     """
-    klass = build_class(name or member.__name__, basenames, member.__doc__)
+    klass = build_class(name or member.__name__ or localname, basenames,
+                        member.__doc__)
     klass._newstyle = isinstance(member, type)
-    node.add_local_node(klass)
+    node.add_local_node(klass, localname)
     try:
         # limit the instantiation trick since it's too dangerous
         # (such as infinite test execution...)
_______________________________________________
Python-Projects mailing list
Python-Projects@lists.logilab.org
http://lists.logilab.org/mailman/listinfo/python-projects

Reply via email to