On Sat, Apr 4, 2015 at 1:25 AM, Daniel Balparda (梅巴達) <code-quality@python.org> wrote: > > Hi, > > Inside Google we use pylint in many ways. In some we have plenty > context for imports, etc. In others we have only on file in isolation and > need to lint it the best we can without any context for imports, etc. To > support that we have a pylint mode where it should ignore everything > but the file given to it. > > This has been kind of working for a long time, but some bugs were > filed where we noticed our pylint was in fact behaving differently for > files with context available and those without. I eventually traced the > issue to the fact that when astroid sees a star import (from foo import *) > it will try to load symbols for the import. When the import makes sense > (in one example, the file is in a directory where it may work) it succeeds > in importing symbols; when the import makes no sense (in another example, > the file is isolated somewhere python won't find any symbol to import) > then it will not add the symbols. > > The specific place this happens is in astroid/builder.py: > > def add_from_names_to_locals(self, node): > """store imported names to the locals; > resort the locals if coming from a delayed node > """ > _key_func = lambda node: node.fromlineno > def sort_locals(my_list): > my_list.sort(key=_key_func) > for (name, asname) in node.names: > if name == '*': > try: > imported = node.do_import_module() > except InferenceError: > continue > for name in imported.wildcard_import_names(): > node.parent.set_local(name, node) > sort_locals(node.parent.scope().locals[name]) > else: > node.parent.set_local(asname or name, node) > sort_locals(node.parent.scope().locals[asname or name]) > > My questions is: Is there a (non-hacky) way of telling astroid/pylint > that I really really don't want them to consider anything else from > context and actually use only the file I provided? If not, is it reasonable > to add an option for that? (I can do the coding, but not before discussing > our options.)
No, currently there's no way to do that, but I can see this as an option in astroid, which is propagated from Pylint. The use case sounds reasonable enough, so if you can provide a patch, I'll be sure to review it. _______________________________________________ code-quality mailing list code-quality@python.org https://mail.python.org/mailman/listinfo/code-quality