| Commit message (Collapse) | Author | Age | Files | Lines |
| | |
|
| | |
|
| |
|
|
| |
raised when there's a problem with any argument of the super call (invalid types).
|
| |
|
|
| |
type.
|
| |
|
|
| |
on the accessed object.
|
| |
|
|
|
|
|
|
|
|
|
|
| |
This patch also adds support for understanding super calls.
astroid understands the zero-argument form of super, specific to
Python 3, where the interpreter fills itself the arguments of the call. Also, we
are understanding the 2-argument form of super, both for bounded lookups
(super(X, instance)) as well as for unbounded lookups (super(X, Y)),
having as well support for validating that the object-or-type is a subtype
of the first argument. The unbounded form of super (one argument) is not
understood, since it's useless in practice and should be removed from
Python's specification. Closes issue #89.
|
| |
|
|
| |
pylintrc.
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
|
| |
Inference objects are similar with AST nodes, but they can be obtained
only after inference, so they can't be found inside the AST tree.
Their purpose is to handle at astroid level some operations which can't
be handled when using brain transforms. For instance, the first object
added is FrozenSet, which can be manipulated at astroid's level
(inferred, itered etc). Code such as this 'frozenset((1,2))'
will not return an Instance of frozenset, without having access to its
content, but a new objects.FrozenSet, which can be used just as a nodes.Set.
|
| |\ |
|
| | | |
|
| |/ |
|
| |
|
|
| |
manager, but the result doesn't have those indices.
|
| | |
|
| |
|
|
| |
contextlib.contextmanager.
|
| |
|
|
| |
with the same name leads to an invalid MRO.
|
| | |
|
| | |
|
| |
|
|
|
|
|
| |
Currently, there's no way to understand whatever __enter__ returns in a
context manager and what it is binded using the ``as`` keyword. With these changes,
we can understand ``bar`` in ``with foo() as bar``, which will be the result of __enter__.
There's no support for contextlib.contextmanager yet.
|
| | |
|
| | |
|
| | |
|
| | |
|
| | |
|
| |
|
|
|
|
|
|
|
|
| |
aren't implemented in pure Python.
Since most likely the methods were coming from a live object, this implies
that all of them will have __getattr__ and __getattribute__ present and it
is wrong to consider that those methods were actually implemented
(the descriptors will be there, not necessarily implying that the function
is user implemented).
|
| |
|
|
| |
io.BufferedReader and friends.
|
| | |
|
| |
|
|
|
|
|
| |
Commit 83053ac added MRO lookup support for new-style only class
hierarchies. Due to a typo old-style / mixed-style class hierarchies
were either not traversed recursively or traversed with the wrong
context.
|
| |
|
|
|
|
|
| |
DuplicateBasesError is emitted when duplicate bases are found in a class,
InconsistentMroError is raised when the method resolution is determined
to be inconsistent. They share a common class, MroError, which
is a subclass of ResolveError, meaning that this change is backwards compatible.
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
Enum values should share the same base classes as their defining class.
If this is not the case it may lead to wrong inference results when an
enum member is used - e.g. for the following snippet:
class X(enum.IntEnum):
one = 1
print([1, 2][X.one])
pylint will detect a "invalid-sequence-index" error as the __index__
method of X.one is not detected.
|
| |
|
|
|
| |
This test verifies that the generated enum member stubs behave
implement the correct interface.
|
| | |
|
| |
|
|
|
| |
This will return a builtins.type instance for newstyle classes, otherwise it will
return None.
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
lookup, using .mro() method, if they can.
That means for newstyle classes, when trying to lookup a member
using one of these functions, the first one according to the
mro will be returned. This reflects nicely the reality,
but it can have as a drawback the fact that it is a behaviour
change (the previous behaviour was incorrect though). Also,
having bases which can return multiple values when inferred
will not work with the new approach, because .mro() only
retrieves the first value inferred from a base.
|
| |
|
|
|
|
|
| |
newstyle and old style classes.
The class in question is actually newstyle (and the __mro__ can be retrieved using Python).
.mro() fallbacks to using .ancestors() in that case.
|
| | |
|
| | |
|
| | |
|
| | |
|
| |\ |
|
| | |
| |
| |
| |
| |
| | |
It previously crashed, since it called super(...).getattr(..) and the
first ancestor in its mro was bases.Proxy and bases.Proxy doesn't implement
the .getattr method. Closes issue #91.
|
| |\ \
| |/
| |
| | |
Work around the Python 2 part of issue https://bitbucket.org/logilab/astroid/issue/72/installing-astroid-via-setuptools-as-a
|
| | |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
from the abc module.
In astroid.bases.Instance._wrap_attr we had a detection
code for properties, which basically inferred whatever
a property returned, passing the results up the stack,
to the igetattr() method. It handled only the builtin property
but the new patch also handles abc.abstractproperty.
|
| | |
| |
| |
| |
| |
| | |
Previously it returned None, which is the same value for
classes without slots at all. This was changed in order
to better reflect what's actually happening.
|
| | |
| |
| |
| |
| |
| |
| | |
The only change is that astroid understands members
passed in as dictionaries as the third argument. This improves
the understanding of classes generated on-the-fly, using
the type function.
|
| | | |
|
| | |
| |
| |
| |
| |
| |
| | |
In Python 3.4+, the module level functions are retrieved with getattr
from a context object, leading to many no-member errors
in Pylint. This patch ensures us that we can retrieve those attributes,
no matter what.
|
| | | |
|
| | |
| |
| |
| | |
`infer_call_result`.
|