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