| =================== |
| astroid's ChangeLog |
| =================== |
| |
| What's New in astroid 2.9.0? |
| ============================ |
| Release date: TBA |
| |
| |
| |
| What's New in astroid 2.8.6? |
| ============================ |
| Release date: TBA |
| |
| |
| |
| What's New in astroid 2.8.5? |
| ============================ |
| Release date: 2021-11-12 |
| |
| * Use more permissive versions for the ``typed-ast`` dependencie (<2.0 instead of <1.5) |
| |
| Closes #1237 |
| |
| * Fix crash on inference of ``__len__``. |
| |
| Closes PyCQA/pylint#5244 |
| |
| * Added missing ``kind`` (for ``Const``) and ``conversion`` (for ``FormattedValue``) fields to repr. |
| |
| * Fix crash with assignment expressions, nested if expressions and filtering of statements |
| |
| Closes PyCQA/pylint#5178 |
| |
| * Fix incorrect filtering of assignment expressions statements |
| |
| |
| What's New in astroid 2.8.4? |
| ============================ |
| Release date: 2021-10-25 |
| |
| * Fix the ``scope()`` and ``frame()`` methods of ``NamedExpr`` nodes. |
| When these nodes occur in ``Arguments``, ``Keyword`` or ``Comprehension`` nodes these |
| methods now correctly point to the outer-scope of the ``FunctionDef``, |
| ``ClassDef``, or ``Comprehension``. |
| |
| * Fix the ``set_local`` function for ``NamedExpr`` nodes. |
| When these nodes occur in ``Arguments``, ``Keyword``, or ``Comprehension`` nodes these |
| nodes are now correctly added to the locals of the ``FunctionDef``, |
| ``ClassDef``, or ``Comprehension``. |
| |
| |
| What's New in astroid 2.8.3? |
| ============================ |
| Release date: 2021-10-17 |
| |
| * Add support for wrapt 1.13 |
| |
| * Fixes handling of nested partial functions |
| |
| Closes PyCQA/pylint#2462 |
| Closes #1208 |
| |
| * Fix regression with the import resolver |
| |
| Closes PyCQA/pylint#5131 |
| |
| * Fix crash with invalid dataclass field call |
| |
| Closes PyCQA/pylint#5153 |
| |
| |
| What's New in astroid 2.8.2? |
| ============================ |
| Release date: 2021-10-07 |
| |
| Same content than 2.8.2-dev0 / 2.8.1, released in order to fix a |
| mistake when creating the tag. |
| |
| |
| What's New in astroid 2.8.1? |
| ============================ |
| Release date: 2021-10-06 |
| |
| * Adds support of type hints inside numpy's brains. |
| |
| Closes PyCQA/pylint#4326 |
| |
| * Enable inference of dataclass import from pydantic.dataclasses. |
| This allows the dataclasses brain to recognize pydantic dataclasses. |
| |
| Closes PyCQA/pylint#4899 |
| |
| * Fix regression on ClassDef inference |
| |
| Closes PyCQA/pylint#5030 |
| Closes PyCQA/pylint#5036 |
| |
| * Fix regression on Compare node inference |
| |
| Closes PyCQA/pylint#5048 |
| |
| * Extended attrs brain to support the provisional APIs |
| |
| * Astroid does not trigger it's own deprecation warning anymore. |
| |
| * Improve brain for ``typing.Callable`` and ``typing.Type``. |
| |
| * Fix bug with importing namespace packages with relative imports |
| |
| Closes PyCQA/pylint#5059 |
| |
| * The ``is_typing_guard`` and ``is_sys_guard`` functions are deprecated and will |
| be removed in 3.0.0. They are complex meta-inference functions that are better |
| suited for pylint. Import them from ``pylint.checkers.utils`` instead |
| (requires pylint ``2.12``). |
| |
| * Suppress the conditional between applied brains and dynamic import authorized |
| modules. (Revert the "The transforms related to a module are applied only if this |
| module has not been explicitly authorized to be imported" of version 2.7.3) |
| |
| * Adds a brain to infer the ``numpy.ma.masked_where`` function. |
| |
| Closes PyCQA/pylint#3342 |
| |
| |
| What's New in astroid 2.8.0? |
| ============================ |
| Release date: 2021-09-14 |
| |
| * Add additional deprecation warnings in preparation for astroid 3.0 |
| |
| * Require attributes for some node classes with ``__init__`` call. |
| |
| * ``name`` (``str``) for ``Name``, ``AssignName``, ``DelName`` |
| * ``attrname`` (``str``) for ``Attribute``, ``AssignAttr``, ``DelAttr`` |
| * ``op`` (``str``) for ``AugAssign``, ``BinOp``, ``BoolOp``, ``UnaryOp`` |
| * ``names`` (``list[tuple[str, str | None]]``) for ``Import`` |
| |
| * Support pyz imports |
| |
| Closes PyCQA/pylint#3887 |
| |
| * Add ``node_ancestors`` method to ``NodeNG`` for obtaining the ancestors of nodes. |
| |
| * It's now possible to infer the value of comparison nodes |
| |
| Closes #846 |
| |
| * Fixed bug in inference of dataclass field calls. |
| |
| Closes PyCQA/pylint#4963 |
| |
| |
| What's New in astroid 2.7.3? |
| ============================ |
| Release date: 2021-08-30 |
| |
| * The transforms related to a module are applied only if this module has not been explicitly authorized to be imported |
| (i.e is not in AstroidManager.extension_package_whitelist). Solves the following issues if numpy is authorized to be imported |
| through the `extension-pkg-allow-list` option. |
| |
| Closes PyCQA/pylint#3342 |
| Closes PyCQA/pylint#4326 |
| |
| * Fixed bug in attribute inference from inside method calls. |
| |
| Closes PyCQA/pylint#400 |
| |
| * Fixed bug in inference for superclass instance methods called |
| from the class rather than an instance. |
| |
| Closes #1008 |
| Closes PyCQA/pylint#4377 |
| |
| * Fixed bug in inference of chained attributes where a subclass |
| had an attribute that was an instance of its superclass. |
| |
| Closes PyCQA/pylint#4220 |
| |
| * Adds a brain for the ctypes module. |
| |
| Closes PyCQA/pylint#4896 |
| |
| * When processing dataclass attributes, exclude the same type hints from abc.collections |
| as from typing. |
| |
| Closes PyCQA/pylint#4895 |
| |
| * Apply dataclass inference to pydantic's dataclasses. |
| |
| Closes PyCQA/pylint#4899 |
| |
| |
| What's New in astroid 2.7.2? |
| ============================ |
| Release date: 2021-08-20 |
| |
| * ``BaseContainer`` is now public, and will replace ``_BaseContainer`` completely in astroid 3.0. |
| * The call cache used by inference functions produced by ``inference_tip`` |
| can now be cleared via ``clear_inference_tip_cache``. |
| |
| * ``astroid.const.BUILTINS`` and ``astroid.bases.BUILTINS`` are not used internally anymore |
| and will be removed in astroid 3.0. Simply replace this by the string 'builtins' for better |
| performances and clarity. |
| |
| * Add inference for dataclass initializer method. |
| |
| Closes PyCQA/pylint#3201 |
| |
| What's New in astroid 2.7.1? |
| ============================ |
| Release date: 2021-08-16 |
| |
| * When processing dataclass attributes, only do typing inference on collection types. |
| Support for instantiating other typing types is left for the future, if desired. |
| |
| Closes #1129 |
| |
| * Fixed LookupMixIn missing from ``astroid.node_classes``. |
| |
| |
| What's New in astroid 2.7.0? |
| ============================ |
| Release date: 2021-08-15 |
| |
| * Import from ``astroid.node_classes`` and ``astroid.scoped_nodes`` has been deprecated in favor of |
| ``astroid.nodes``. Only the imports from ``astroid.nodes`` will work in astroid 3.0.0. |
| |
| * Add support for arbitrary Enum subclass hierachies |
| |
| Closes PyCQA/pylint#533 |
| Closes PyCQA/pylint#2224 |
| Closes PyCQA/pylint#2626 |
| |
| * Add inference tips for dataclass attributes, including dataclasses.field calls. |
| Also add support for InitVar. |
| |
| Closes PyCQA/pylint#2600 |
| Closes PyCQA/pylint#2698 |
| Closes PyCQA/pylint#3405 |
| Closes PyCQA/pylint#3794 |
| |
| * Adds a brain that deals with dynamic import of `IsolatedAsyncioTestCase` class of the `unittest` module. |
| |
| Closes PyCQA/pylint#4060 |
| |
| |
| What's New in astroid 2.6.6? |
| ============================ |
| Release date: 2021-08-03 |
| |
| * Added support to infer return type of ``typing.cast()`` |
| |
| * Fix variable lookup's handling of exclusive statements |
| |
| Closes PyCQA/pylint#3711 |
| |
| * Fix variable lookup's handling of function parameters |
| |
| Closes PyCQA/astroid#180 |
| |
| * Fix variable lookup's handling of except clause variables |
| |
| * Fix handling of classes with duplicated bases with the same name |
| |
| Closes PyCQA/astroid#1088 |
| |
| What's New in astroid 2.6.5? |
| ============================ |
| Release date: 2021-07-21 |
| |
| * Fix a crash when there would be a 'TypeError object does not support |
| item assignment' in the code we parse. |
| |
| Closes PyCQA/pylint#4439 |
| |
| * Fix a crash when a AttributeInferenceError was raised when |
| failing to find the real name in infer_import_from. |
| |
| Closes PyCQA/pylint#4692 |
| |
| |
| What's New in astroid 2.6.4? |
| ============================ |
| Release date: 2021-07-19 |
| |
| * Fix a crash when a StopIteration was raised when inferring |
| a faulty function in a context manager. |
| |
| Closes PyCQA/pylint#4723 |
| |
| What's New in astroid 2.6.3? |
| ============================ |
| Release date: 2021-07-19 |
| |
| * Added ``If.is_sys_guard`` and ``If.is_typing_guard`` helper methods |
| |
| * Fix a bad inferenece type for yield values inside of a derived class. |
| |
| Closes PyCQA/astroid#1090 |
| |
| * Fix a crash when the node is a 'Module' in the brain builtin inference |
| |
| Closes PyCQA/pylint#4671 |
| |
| * Fix issues when inferring match variables |
| |
| Closes PyCQA/pylint#4685 |
| |
| * Fix lookup for nested non-function scopes |
| |
| * Fix issue that ``TypedDict`` instance wasn't callable. |
| |
| Closes PyCQA/pylint#4715 |
| |
| * Add dependency on setuptools and a guard to prevent related exceptions. |
| |
| |
| What's New in astroid 2.6.2? |
| ============================ |
| Release date: 2021-06-30 |
| |
| * Fix a crash when the inference of the length of a node failed |
| |
| Closes PyCQA/pylint#4633 |
| |
| * Fix unhandled StopIteration during inference, following the implementation |
| of PEP479 in python 3.7+ |
| |
| Closes PyCQA/pylint#4631 |
| Closes #1080 |
| |
| |
| What's New in astroid 2.6.1? |
| ============================ |
| Release date: 2021-06-29 |
| |
| * Fix issue with ``TypedDict`` for Python 3.9+ |
| |
| Closes PyCQA/pylint#4610 |
| |
| |
| What's New in astroid 2.6.0? |
| ============================ |
| Release date: 2021-06-22 |
| |
| * Appveyor and travis are no longer used in the continuous integration |
| |
| * ``setuptools_scm`` has been removed and replaced by ``tbump`` in order to not |
| have hidden runtime dependencies to setuptools |
| |
| * ``NodeNg``, the base node class, is now accessible from ``astroid`` or |
| ``astroid.nodes`` as it can be used for typing. |
| |
| * Update enum brain to improve inference of .name and .value dynamic class |
| attributes |
| |
| Closes PyCQA/pylint#1932 |
| Closes PyCQA/pylint#2062 |
| Closes PyCQA/pylint#2306 |
| |
| * Removed ``Repr``, ``Exec``, and ``Print`` nodes as the ``ast`` nodes |
| they represented have been removed with the change to Python 3 |
| |
| * Deprecate ``Ellipsis`` node. It will be removed with the next minor release. |
| Checkers that already support Python 3.8+ work without issues. It's only |
| necessary to remove all references to the ``astroid.Ellipsis`` node. |
| This changes will make development of checkers easier as the resulting tree for Ellipsis |
| will no longer depend on the python version. **Background**: With Python 3.8 the |
| ``ast.Ellipsis`` node, along with ``ast.Str``, ``ast.Bytes``, ``ast.Num``, |
| and ``ast.NamedConstant`` were merged into ``ast.Constant``. |
| |
| * Deprecated ``Index`` and ``ExtSlice`` nodes. They will be removed with the |
| next minor release. Both are now part of the ``Subscript`` node. |
| Checkers that already support Python 3.9+ work without issues. |
| It's only necessary to remove all references to the ``astroid.Index`` and |
| ``astroid.ExtSlice`` nodes. This change will make development of checkers |
| easier as the resulting tree for ``ast.Subscript`` nodes will no longer |
| depend on the python version. **Background**: With Python 3.9 ``ast.Index`` |
| and ``ast.ExtSlice`` were merged into the ``ast.Subscript`` node. |
| |
| * Updated all Match nodes to be internally consistent. |
| |
| * Add ``Pattern`` base class. |
| |
| |
| What's New in astroid 2.5.8? |
| ============================ |
| Release date: 2021-06-07 |
| |
| * Improve support for Pattern Matching |
| |
| * Add lineno and col_offset for ``Keyword`` nodes and Python 3.9+ |
| |
| * Add global inference cache to speed up inference of long statement blocks |
| |
| * Add a limit to the total number of nodes inferred indirectly as a result |
| of inferring some node |
| |
| |
| What's New in astroid 2.5.7? |
| ============================ |
| Release date: 2021-05-09 |
| |
| * Fix six.with_metaclass transformation so it doesn't break user defined transformations. |
| |
| * Fix detection of relative imports. |
| Closes #930 |
| Closes PyCQA/pylint#4186 |
| |
| * Fix inference of instance attributes defined in base classes |
| |
| Closes #932 |
| |
| * Update `infer_named_tuple` brain to reject namedtuple definitions |
| that would raise ValueError |
| |
| Closes #920 |
| |
| * Do not set instance attributes on builtin object() |
| |
| Closes #945 |
| Closes PyCQA/pylint#4232 |
| Closes PyCQA/pylint#4221 |
| Closes PyCQA/pylint#3970 |
| Closes PyCQA/pylint#3595 |
| |
| * Fix some spurious cycles detected in ``context.path`` leading to more cases |
| that can now be inferred |
| |
| Closes #926 |
| |
| * Add ``kind`` field to ``Const`` nodes, matching the structure of the built-in ast Const. |
| The kind field is "u" if the literal is a u-prefixed string, and ``None`` otherwise. |
| |
| Closes #898 |
| |
| * Fix property inference in class contexts for properties defined on the metaclass |
| |
| Closes #940 |
| |
| * Update enum brain to fix definition of __members__ for subclass-defined Enums |
| |
| Closes PyCQA/pylint#3535 |
| Closes PyCQA/pylint#4358 |
| |
| * Update random brain to fix a crash with inference of some sequence elements |
| |
| Closes #922 |
| |
| * Fix inference of attributes defined in a base class that is an inner class |
| |
| Closes #904 |
| |
| * Allow inferring a return value of None for non-abstract empty functions and |
| functions with no return statements (implicitly returning None) |
| |
| Closes #485 |
| |
| * scm_setuptools has been added to the packaging. |
| |
| * Astroid's tags are now the standard form ``vX.Y.Z`` and not ``astroid-X.Y.Z`` anymore. |
| |
| * Add initial support for Pattern Matching in Python 3.10 |
| |
| What's New in astroid 2.5.6? |
| ============================ |
| Release date: 2021-04-25 |
| |
| * Fix retro-compatibility issues with old version of pylint |
| Closes PyCQA/pylint#4402 |
| |
| What's New in astroid 2.5.5? |
| ============================ |
| Release date: 2021-04-24 |
| |
| * Fixes the discord link in the project urls of the package. |
| Closes PyCQA/pylint#4393 |
| |
| What's New in astroid 2.5.4? |
| ============================ |
| Release date: 2021-04-24 |
| |
| * The packaging is now done via setuptools exclusively. ``doc``, ``tests``, and ``Changelog`` are |
| not packaged anymore - reducing the size of the package greatly. |
| |
| * Debian packaging is now (officially) done in https://salsa.debian.org/python-team/packages/astroid. |
| |
| * ``__pkginfo__`` now only contain ``__version__`` (also accessible with ``astroid.__version__``), |
| other meta-information are still accessible with ``import importlib;metadata.metadata('astroid')``. |
| |
| * Added inference tip for ``typing.Tuple`` alias |
| |
| * Fix crash when evaluating ``typing.NamedTuple`` |
| |
| Closes PyCQA/pylint#4383 |
| |
| * COPYING was removed in favor of COPYING.LESSER and the latter was renamed to LICENSE to make more apparent |
| that the code is licensed under LGPLv2 or later. |
| |
| * Moved from appveyor and travis to Github Actions for continuous integration. |
| |
| What's New in astroid 2.5.3? |
| ============================ |
| Release date: 2021-04-10 |
| |
| * Takes into account the fact that subscript inferring for a ClassDef may involve __class_getitem__ method |
| |
| * Reworks the ``collections`` and ``typing`` brain so that pylint`s acceptance tests are fine. |
| |
| Closes PyCQA/pylint#4206 |
| |
| * Use ``inference_tip`` for ``typing.TypedDict`` brain. |
| |
| * Fix mro for classes that inherit from typing.Generic |
| |
| * Add inference tip for typing.Generic and typing.Annotated with ``__class_getitem__`` |
| |
| Closes PyCQA/pylint#2822 |
| |
| |
| What's New in astroid 2.5.2? |
| ============================ |
| Release date: 2021-03-28 |
| |
| * Detects `import numpy` as a valid `numpy` import. |
| |
| Closes PyCQA/pylint#3974 |
| |
| * Iterate over ``Keywords`` when using ``ClassDef.get_children`` |
| |
| Closes PyCQA/pylint#3202 |
| |
| What's New in astroid 2.5.1? |
| ============================ |
| Release date: 2021-02-28 |
| |
| * The ``context.path`` is reverted to a set because otherwise it leads to false positives |
| for non `numpy` functions. |
| |
| Closes #895 #899 |
| |
| * Don't transform dataclass ClassVars |
| |
| * Improve typing.TypedDict inference |
| |
| * Fix the `Duplicates found in MROs` false positive. |
| |
| Closes #905 |
| Closes PyCQA/pylint#2717 |
| Closes PyCQA/pylint#3247 |
| Closes PyCQA/pylint#4093 |
| Closes PyCQA/pylint#4131 |
| Closes PyCQA/pylint#4145 |
| |
| |
| What's New in astroid 2.5? |
| ============================ |
| Release date: 2021-02-15 |
| |
| * Adds `attr_fset` in the `PropertyModel` class. |
| |
| Fixes PyCQA/pylint#3480 |
| |
| * Remove support for Python 3.5. |
| * Remove the runtime dependency on ``six``. The ``six`` brain remains in |
| astroid. |
| |
| Fixes PyCQA/astroid#863 |
| |
| * Enrich the ``brain_collection`` module so that ``__class_getitem__`` method is added to `deque` for |
| ``python`` version above 3.9. |
| |
| * The ``context.path`` is now a ``dict`` and the ``context.push`` method |
| returns ``True`` if the node has been visited a certain amount of times. |
| |
| Close #669 |
| |
| * Adds a brain for type object so that it is possible to write `type[int]` in annotation. |
| |
| Fixes PyCQA/pylint#4001 |
| |
| * Add ``__class_getitem__`` method to ``subprocess.Popen`` brain under Python 3.9 so that it is seen as subscriptable by pylint. |
| |
| Fixes PyCQA/pylint#4034 |
| |
| |
| * Adds `degrees`, `radians`, which are `numpy ufunc` functions, in the `numpy` brain. Adds `random` function in the `numpy.random` brain. |
| |
| Fixes PyCQA/pylint#3856 |
| |
| * Fix deprecated importlib methods |
| |
| Closes #703 |
| |
| * Fix a crash in inference caused by `Uninferable` container elements |
| |
| Close #866 |
| |
| * Add `python 3.9` support. |
| |
| * The flat attribute of ``numpy.ndarray`` is now inferred as an ``numpy.ndarray`` itself. |
| It should be a ``numpy.flatiter`` instance, but this class is not yet available in the numpy brain. |
| |
| Fixes PyCQA/pylint#3640 |
| |
| * Fix a bug for dunder methods inference of function objects |
| |
| Fixes #819 |
| |
| * Fixes a bug in the signature of the ``ndarray.__or__`` method, |
| in the ``brain_numpy_ndarray.py`` module. |
| |
| Fixes #815 |
| |
| * Fixes a to-list cast bug in ``starred_assigned_stmts`` method, in the |
| ``protocols.py`` module. |
| |
| * Added a brain for ``hypothesis.strategies.composite`` |
| |
| * The transpose of a ``numpy.ndarray`` is also a ``numpy.ndarray`` |
| |
| Fixes PyCQA/pylint#3387 |
| |
| * Added a brain for ``sqlalchemy.orm.session`` |
| |
| * Separate string and bytes classes patching |
| |
| Fixes PyCQA/pylint#3599 |
| |
| * Prevent recursion error for self referential length calls |
| |
| Close #777 |
| |
| * Added missing methods to the brain for ``mechanize``, to fix pylint false positives |
| |
| Close #793 |
| |
| * Added more supported parameters to ``subprocess.check_output`` |
| |
| * Fix recursion errors with pandas |
| |
| Fixes PyCQA/pylint#2843 |
| Fixes PyCQA/pylint#2811 |
| |
| * Added exception inference for `UnicodeDecodeError` |
| |
| Close PyCQA/pylint#3639 |
| |
| * `FunctionDef.is_generator` properly handles `yield` nodes in `If` tests |
| |
| Close PyCQA/pylint#3583 |
| |
| * Fixed exception-chaining error messages. |
| |
| * Fix failure to infer base class type with multiple inheritance and qualified names |
| |
| Fixes #843 |
| |
| * Fix interpretation of ``six.with_metaclass`` class definitions. |
| |
| Fixes #713 |
| |
| * Reduce memory usage of astroid's module cache. |
| |
| * Remove dependency on `imp`. |
| |
| Close #594 |
| Close #681 |
| |
| * Do not crash when encountering starred assignments in enums. |
| |
| Close #835 |
| |
| * Fix a crash in functools.partial inference when the arguments cannot be determined |
| |
| Close PyCQA/pylint#3776 |
| |
| * Fix a crash caused by a lookup of a monkey-patched method |
| |
| Close PyCQA/pylint#3686 |
| |
| * ``is_generator`` correctly considers `Yield` nodes in `AugAssign` nodes |
| |
| This fixes a false positive with the `assignment-from-no-return` pylint check. |
| |
| Close PyCQA/pylint#3904 |
| |
| * Corrected the parent of function type comment nodes. |
| |
| These nodes used to be parented to their original ast.FunctionDef parent |
| but are now correctly parented to their astroid.FunctionDef parent. |
| |
| Close PyCQA/astroid#851 |
| |
| |
| What's New in astroid 2.4.2? |
| ============================ |
| Release date: 2020-06-08 |
| |
| * `FunctionDef.is_generator` properly handles `yield` nodes in `While` tests |
| |
| Close PyCQA/pylint#3519 |
| |
| * Properly construct the arguments of infered property descriptors |
| |
| Close PyCQA/pylint#3648 |
| |
| |
| What's New in astroid 2.4.1? |
| ============================ |
| Release date: 2020-05-05 |
| |
| * Handle the case where the raw builder fails to retrieve the ``__all__`` attribute |
| |
| Close #772 |
| |
| * Restructure the AST parsing heuristic to always pick the same module |
| |
| Close PyCQA/pylint#3540 |
| Close #773 |
| |
| * Changed setup.py to work with [distlib](https://pypi.org/project/distlib) |
| |
| Close #779 |
| |
| * Do not crash with SyntaxError when parsing namedtuples with invalid label |
| |
| Close PyCQA/pylint#3549 |
| |
| * Protect against ``infer_call_result`` failing with `InferenceError` in `Super.getattr()` |
| |
| Close PyCQA/pylint#3529 |
| |
| |
| What's New in astroid 2.4.0? |
| ============================ |
| Release date: 2020-04-27 |
| |
| * Expose a ast_from_string method in AstroidManager, which will accept |
| source code as a string and return the corresponding astroid object |
| |
| Closes PyCQA/astroid#725 |
| |
| * ``BoundMethod.implicit_parameters`` returns a proper value for ``__new__`` |
| |
| Close PyCQA/pylint#2335 |
| |
| * Allow slots added dynamically to a class to still be inferred |
| |
| Close PyCQA/pylint#2334 |
| |
| * Allow `FunctionDef.getattr` to look into both instance attrs and special attributes |
| |
| Close PyCQA/pylint#1078 |
| |
| * Infer qualified ``classmethod`` as a classmethod. |
| |
| Close PyCQA/pylint#3417 |
| |
| * Prevent a recursion error to happen when inferring the declared metaclass of a class |
| |
| Close #749 |
| |
| * Raise ``AttributeInferenceError`` when ``getattr()`` receives an empty name |
| |
| Close PyCQA/pylint#2991 |
| |
| * Prevent a recursion error for self reference variables and `type()` calls. |
| |
| Close #199 |
| |
| * Do not infer the first argument of a staticmethod in a metaclass as the class itself |
| |
| Close PyCQA/pylint#3032 |
| |
| * ``NodeNG.bool_value()`` gained an optional ``context`` parameter |
| |
| We need to pass an inference context downstream when inferring the boolean |
| value of a node in order to prevent recursion errors and double inference. |
| |
| This fix prevents a recursion error with dask library. |
| |
| Close PyCQA/pylint#2985 |
| |
| * Pass a context argument to ``astroid.Arguments`` to prevent recursion errors |
| |
| Close PyCQA/pylint#3414 |
| |
| * Better inference of class and static methods decorated with custom methods |
| |
| Close PyCQA/pylint#3209 |
| |
| * Reverse the order of decorators for `infer_subscript` |
| |
| `path_wrapper` needs to come first, followed by `raise_if_nothing_inferred`, |
| otherwise we won't handle `StopIteration` correctly. |
| |
| Close #762 |
| |
| * Prevent a recursion error when inferring self-referential variables without definition |
| |
| Close PyCQA/pylint#1285 |
| |
| * Numpy `datetime64.astype` return value is inferred as a `ndarray`. |
| |
| Close PyCQA/pylint#3332 |
| |
| * Skip non ``Assign`` and ``AnnAssign`` nodes from enum reinterpretation |
| |
| Closes PyCQA/pylint#3365 |
| |
| * Numpy ``ndarray`` attributes ``imag`` and ``real`` are now inferred as ``ndarray``. |
| |
| Close PyCQA/pylint#3322 |
| |
| * Added a call to ``register_transform`` for all functions of the ``brain_numpy_core_multiarray`` |
| module in case the current node is an instance of ``astroid.Name`` |
| |
| Close #666 |
| |
| * Use the parent of the node when inferring aug assign nodes instead of the statement |
| |
| Close PyCQA/pylint#2911 |
| Close PyCQA/pylint#3214 |
| |
| * Added some functions to the ``brain_numpy_core_umath`` module |
| |
| Close PyCQA/pylint#3319 |
| |
| * Added some functions of the ``numpy.core.multiarray`` module |
| |
| Close PyCQA/pylint#3208 |
| |
| * All the ``numpy ufunc`` functions derived now from a common class that |
| implements the specific ``reduce``, ``accumulate``, ``reduceat``, |
| ``outer`` and ``at`` methods. |
| |
| Close PyCQA/pylint#2885 |
| |
| * ``nodes.Const.itered`` returns a list of ``Const`` nodes, not strings |
| |
| Close PyCQA/pylint#3306 |
| |
| * The ``shape`` attribute of a ``numpy ndarray`` is now a ``ndarray`` |
| |
| Close PyCQA/pylint#3139 |
| |
| * Don't ignore special methods when inspecting gi classes |
| |
| Close #728 |
| |
| * Added transform for ``scipy.gaussian`` |
| |
| * Add suport for inferring properties. |
| |
| * Added a brain for ``responses`` |
| |
| * Allow inferring positional only arguments. |
| |
| * Retry parsing a module that has invalid type comments |
| |
| It is possible for a module to use comments that might be interpreted |
| as type comments by the `ast` library. We do not want to completely crash on those |
| invalid type comments. |
| |
| Close #708 |
| |
| * Scope the inference to the current bound node when inferring instances of classes |
| |
| When inferring instances of classes from arguments, such as ``self`` |
| in a bound method, we could use as a hint the context's ``boundnode``, |
| which indicates the instance from which the inference originated. |
| As an example, a subclass that uses a parent's method which returns |
| ``self``, will override the ``self`` to point to it instead of pointing |
| to the parent class. |
| |
| Close PyCQA/pylint#3157 |
| |
| * Add support for inferring exception instances in all contexts |
| |
| We were able to infer exception instances as ``ExceptionInstance`` |
| only for a handful of cases, but not all. ``ExceptionInstance`` has |
| support for better inference of `.args` and other exception related |
| attributes that normal instances do not have. |
| This additional support should remove certain false positives related |
| to ``.args`` and other exception attributes in ``pylint``. |
| |
| Close PyCQA/pylint#2333 |
| |
| * Add more supported parameters to ``subprocess.check_output`` |
| |
| Close #722 |
| |
| * Infer args unpacking of ``self`` |
| |
| Certain stdlib modules use ``*args`` to encapsulate |
| the ``self`` parameter, which results in uninferable |
| instances given we rely on the presence of the ``self`` |
| argument to figure out the instance where we should be |
| setting attributes. |
| |
| Close PyCQA/pylint#3216 |
| |
| * Clean up setup.py |
| |
| Make pytest-runner a requirement only if running tests, similar to what was |
| done with McCabe. |
| |
| Clean up the setup.py file, resolving a handful of minor warnings with it. |
| |
| * Handle StopIteration error in infer_int. |
| |
| Close PyCQA/pylint#3274 |
| |
| * Can access per argument type comments for positional only and keyword only arguments. |
| |
| The comments are accessed through through the new |
| ``Arguments.type_comment_posonlyargs`` and |
| ``Arguments.type_comment_kwonlyargs`` attributes respectively. |
| |
| * Relax upper bound on `wrapt` |
| |
| Close #755 |
| |
| * Properly analyze CFFI compiled extensions. |
| |
| What's New in astroid 2.3.2? |
| ============================ |
| Release date: 2019-10-18 |
| |
| * All type comments have as parent the corresponding `astroid` node |
| |
| Until now they had as parent the builtin `ast` node which meant |
| we were operating with primitive objects instead of our own. |
| |
| Close PyCQA/pylint#3174 |
| |
| |
| * Pass an inference context to `metaclass()` when inferring an object type |
| |
| This should prevent a bunch of recursion errors happening in pylint. |
| Also refactor the inference of `IfExp` nodes to use separate contexts |
| for each potential branch. |
| |
| Close PyCQA/pylint#3152 |
| Close PyCQA/pylint#3159 |
| |
| |
| What's New in astroid 2.3.1? |
| ============================ |
| Release date: 2019-09-30 |
| |
| * A transform for the builtin `dataclasses` module was added. |
| |
| This should address various `dataclasses` issues that were surfaced |
| even more after the release of pylint 2.4.0. |
| In the previous versions of `astroid`, annotated assign nodes were |
| allowed to be retrieved via `getattr()` but that no longer happens |
| with the latest `astroid` release, as those attribute are not actual |
| attributes, but rather virtual ones, thus an operation such as `getattr()` |
| does not make sense for them. |
| |
| * Update attr brain to partly understand annotated attributes |
| |
| Close #656 |
| |
| |
| What's New in astroid 2.3.0? |
| ============================ |
| Release date: 2019-09-24 |
| |
| * Add a brain tip for ``subprocess.check_output`` |
| |
| Close #689 |
| |
| * Remove NodeNG.nearest method because of lack of usage in astroid and pylint. |
| |
| Close #691 |
| |
| * Allow importing wheel files. Close #541 |
| |
| * Annotated AST follows PEP8 coding style when converted to string. |
| |
| * Fix a bug where defining a class using type() could cause a DuplicateBasesError. |
| |
| Close #644 |
| |
| * Dropped support for Python 3.4. |
| |
| * Numpy brain support is improved. |
| |
| Numpy's fundamental type ``numpy.ndarray`` has its own brain : ``brain_numpy_ndarray`` and |
| each numpy module that necessitates brain action has now its own numpy brain : |
| |
| - ``numpy.core.numeric`` |
| - ``numpy.core.function_base`` |
| - ``numpy.core.multiarray`` |
| - ``numpy.core.numeric`` |
| - ``numpy.core.numerictypes`` |
| - ``numpy.core.umath`` |
| - ``numpy.random.mtrand`` |
| |
| Close PyCQA/pylint#2865 |
| Close PyCQA/pylint#2747 |
| Close PyCQA/pylint#2721 |
| Close PyCQA/pylint#2326 |
| Close PyCQA/pylint#2021 |
| |
| * ``assert`` only functions are properly inferred as returning ``None`` |
| |
| Close #668 |
| |
| * Add support for Python 3.8's `NamedExpr` nodes, which is part of assignment expressions. |
| |
| Close #674 |
| |
| * Added support for inferring `IfExp` nodes. |
| |
| * Instances of exceptions are inferred as such when inferring in non-exception context |
| |
| This allows special inference support for exception attributes such as `.args`. |
| |
| Close PyCQA/pylint#2333 |
| |
| * Drop a superfluous and wrong callcontext when inferring the result of a context manager |
| |
| Close PyCQA/pylint#2859 |
| |
| * ``igetattr`` raises ``InferenceError`` on re-inference of the same object |
| |
| This prevents ``StopIteration`` from leaking when we encounter the same |
| object in the current context, which could result in various ``RuntimeErrors`` |
| leaking in other parts of the inference. |
| Until we get a global context per inference, the solution is sort of a hack, |
| as with the suggested global context improvement, we could theoretically |
| reuse the same inference object. |
| |
| Close #663 |
| |
| * Variable annotations can no longer be retrieved with `ClassDef.getattr` |
| |
| Unless they have an attached value, class variable annotations can no longer |
| be retrieved with `ClassDef.getattr.` |
| |
| * Improved builtin inference for ``tuple``, ``set``, ``frozenset``, ``list`` and ``dict`` |
| |
| We were properly inferring these callables *only* if they had consts as |
| values, but that is not the case most of the time. Instead we try to infer |
| the values that their arguments can be and use them instead of assuming |
| Const nodes all the time. |
| |
| Close PyCQA/pylint#2841 |
| |
| * The last except handler wins when inferring variables bound in an except handler. |
| |
| Close PyCQA/pylint#2777 |
| |
| |
| * ``threading.Lock.locked()`` is properly recognized as a member of ``threading.Lock`` |
| |
| Close PyCQA/pylint#2791 |
| |
| |
| * Fix recursion error involving ``len`` and self referential attributes |
| |
| Close PyCQA/pylint#2736 |
| Close PyCQA/pylint#2734 |
| Close PyCQA/pylint#2740 |
| |
| * Can access per argument type comments through new ``Arguments.type_comment_args`` attribute. |
| |
| Close #665 |
| |
| * Fix being unable to access class attributes on a NamedTuple. |
| |
| Close PyCQA/pylint#1628 |
| |
| * Fixed being unable to find distutils submodules by name when in a virtualenv. |
| |
| Close PyCQA/pylint#73 |
| |
| What's New in astroid 2.2.0? |
| ============================ |
| Release date: 2019-02-27 |
| |
| |
| * Fix a bug concerning inference of calls to numpy function that should not return Tuple or List instances. |
| |
| Close PyCQA/pylint#2436 |
| |
| * Fix a bug where a method, which is a lambda built from a function, is not inferred as ``BoundMethod`` |
| |
| Close PyCQA/pylint#2594 |
| |
| * ``typed_ast`` gets installed for Python 3.7, meaning type comments can now work on 3.7. |
| |
| * Fix a bug concerning inference of unary operators on numpy types. |
| |
| Close PyCQA/pylint#2436 (first part) |
| |
| * Fix a crash with ``typing.NamedTuple`` and empty fields. Close PyCQA/pylint#2745 |
| |
| * Add a proper ``strerror`` inference to the ``OSError`` exceptions. |
| |
| Close PyCQA/pylint#2553 |
| |
| * Support non-const nodes as values of Enum attributes. |
| |
| Close #612 |
| |
| * Fix a crash in the ``enum`` brain tip caused by non-assign members in class definitions. |
| |
| Close PyCQA/pylint#2719 |
| |
| * ``brain_numpy`` returns an undefined type for ``numpy`` methods to avoid ``assignment-from-no-return`` |
| |
| Close PyCQA/pylint#2694 |
| |
| * Fix a bug where a call to a function that has been previously called via |
| functools.partial was wrongly inferred |
| |
| Close PyCQA/pylint#2588 |
| |
| * Fix a recursion error caused by inferring the ``slice`` builtin. |
| |
| Close PyCQA/pylint#2667 |
| |
| * Remove the restriction that "old style classes" cannot have a MRO. |
| |
| This does not make sense any longer given that we run against Python 3 |
| code. |
| Close PyCQA/pylint#2701 |
| |
| * Added more builtin exceptions attributes. Close #580 |
| |
| * Add a registry for builtin exception models. Close PyCQA/pylint#1432 |
| |
| * Add brain tips for `http.client`. Close PyCQA/pylint#2687 |
| |
| * Prevent crashing when processing ``enums`` with mixed single and double quotes. |
| |
| Close PyCQA/pylint#2676 |
| |
| * ``typing`` types have the `__args__` property. Close PyCQA/pylint#2419 |
| |
| * Fix a bug where an Attribute used as a base class was triggering a crash |
| |
| Close #626 |
| |
| * Added special support for `enum.IntFlag` |
| |
| Close PyCQA/pylint#2534 |
| |
| * Extend detection of data classes defined with attr |
| |
| Close #628 |
| |
| * Fix typo in description for brain_attrs |
| |
| |
| What's New in astroid 2.1.0? |
| ============================ |
| Release date: 2018-11-25 |
| |
| * ``threading.Lock.acquire`` has the ``timeout`` parameter now. |
| |
| Close PyCQA/pylint#2457 |
| |
| * Pass parameters by keyword name when inferring sequences. |
| |
| Close PyCQA/pylint#2526 |
| |
| * Correct line numbering for f-strings for complex embedded expressions |
| |
| When a f-string contained a complex expression, such as an attribute access, |
| we weren't cloning all the subtree of the f-string expression for attaching the correct |
| line number. This problem is coming from the builtin AST parser which gives for the f-string |
| and for its underlying elements the line number 1, but this is causing all sorts of bugs and |
| problems in pylint, which expects correct line numbering. |
| |
| Close PyCQA/pylint#2449 |
| |
| * Add support for `argparse.Namespace` |
| |
| Close PyCQA/pylint#2413 |
| |
| * `async` functions are now inferred as `AsyncGenerator` when inferring their call result. |
| |
| * Filter out ``Uninferable`` when inferring the call result result of a class with an uninferable ``__call__`` method. |
| |
| Close PyCQA/pylint#2434 |
| |
| * Make compatible with AST changes in Python 3.8. |
| |
| * Subscript inference (e.g. "`a[i]`") now pays attention to multiple inferred values for value |
| (e.g. "`a`") and slice (e.g. "`i`") |
| |
| Close #614 |
| |
| What's New in astroid 2.0.4? |
| ============================ |
| Release date: 2018-08-10 |
| |
| * Make sure that assign nodes can find ``yield`` statements in their values |
| |
| Close PyCQA/pylint#2400 |
| |
| What's New in astroid 2.0.3? |
| ============================ |
| |
| Release date: 2018-08-08 |
| |
| * The environment markers for PyPy were invalid. |
| |
| What's New in astroid 2.0.2? |
| ============================ |
| |
| Release date: 2018-08-01 |
| |
| * Stop repeat inference attempt causing a RuntimeError in Python3.7 |
| |
| Close PyCQA/pylint#2317 |
| |
| * infer_call_result can raise InferenceError so make sure to handle that for the call sites |
| where it is used |
| |
| infer_call_result started recently to raise InferenceError for objects for which it |
| could not find any returns. Previously it was silently raising a StopIteration, |
| which was especially leaking when calling builtin methods. |
| Since it is after all an inference method, it is expected that it |
| could raise an InferenceError rather than returning nothing. |
| |
| Close PyCQA/pylint#2350 |
| |
| |
| What's New in astroid 2.0.1? |
| ============================ |
| |
| Release date: 2018-07-19 |
| |
| * Released to clear an old wheel package on PyPI |
| |
| |
| What's New in astroid 2.0? |
| ========================== |
| |
| Release date: 2018-07-15 |
| |
| * String representation of nodes takes in account precedence and associativity rules of operators. |
| |
| * Fix loading files with `modutils.load_from_module` when |
| the path that contains it in `sys.path` is a symlink and |
| the file is contained in a symlinked folder. |
| |
| Close #583 |
| |
| * Reworking of the numpy brain dealing with numerictypes |
| (use of inspect module to determine the class hierarchy of |
| numpy.core.numerictypes module) |
| |
| Close PyCQA/pylint#2140 |
| |
| * Added inference support for starred nodes in for loops |
| |
| Close #146 |
| |
| * Support unpacking for dicts in assignments |
| |
| Close #268 |
| |
| * Add support for inferring functools.partial |
| |
| Close #125 |
| |
| * Inference support for `dict.fromkeys` |
| |
| Close #110 |
| |
| * `int()` builtin is inferred as returning integers. |
| |
| Close #150 |
| |
| * `str()` builtin is inferred as returning strings. |
| |
| Close #148 |
| |
| * DescriptorBoundMethod has the correct number of arguments defined. |
| |
| * Improvement of the numpy numeric types definition. |
| |
| Close PyCQA/pylint#1971 |
| |
| * Subclasses of *property* are now interpreted as properties |
| |
| Close PyCQA/pylint#1601 |
| |
| * AsStringRegexpPredicate has been removed. |
| |
| Use transform predicates instead of it. |
| |
| * Switched to using typed_ast for getting access to type comments |
| |
| As a side effect of this change, some nodes gained a new `type_annotation` attribute, |
| which, if the type comments were correctly parsed, should contain a node object |
| with the corresponding objects from the type comment. |
| |
| * typing.X[...] and typing.NewType are inferred as classes instead of instances. |
| |
| * Module.__path__ is now a list |
| |
| It used to be a string containing the path, but it doesn't reflect the situation |
| on Python, where it is actually a list. |
| |
| * Fix a bug with namespace package's __path__ attribute. |
| |
| Close #528 |
| |
| * Added brain tips for random.sample |
| |
| Part of PyCQA/pylint#811 |
| |
| * Add brain tip for `issubclass` builtin |
| |
| Close #101. |
| |
| * Fix submodule imports from six |
| |
| Close PyCQA/pylint#1640 |
| |
| * Fix missing __module__ and __qualname__ from class definition locals |
| |
| Close PYCQA/pylint#1753 |
| |
| * Fix a crash when __annotations__ access a parent's __init__ that does not have arguments |
| |
| Close #473 |
| |
| * Fix multiple objects sharing the same InferenceContext.path causing uninferable results |
| |
| Close #483 |
| |
| * Fix improper modification of col_offset, lineno upon inference of builtin functions |
| |
| Close PyCQA/pylint#1839 |
| |
| * Subprocess.Popen brain now knows of the args member |
| |
| Close PyCQA/pylint#1860 |
| |
| * add move_to_end method to collections.OrderedDict brain |
| |
| Close PyCQA/pylint#1872 |
| |
| * Include new hashlib classes added in python 3.6 |
| |
| * Fix RecursionError for augmented assign |
| |
| Close #437, #447, #313, PyCQA/pylint#1642, PyCQA/pylint#1805, PyCQA/pylint#1854, PyCQA/pylint#1452 |
| |
| * Add missing attrs special attribute |
| |
| Close PyCQA/pylint#1884 |
| |
| * Inference now understands the 'isinstance' builtin |
| |
| Close #98 |
| |
| * Stop duplicate nodes with the same key values |
| from appearing in dictionaries from dictionary unpacking. |
| |
| Close PyCQA/pylint#1843 |
| |
| * Fix ``contextlib.contextmanager`` inference for nested context managers |
| |
| Close #1699 |
| |
| * Implement inference for len builtin |
| |
| Close #112 |
| |
| * Add qname method to Super object preventing potential errors in upstream |
| pylint |
| |
| Close #533 |
| |
| * Stop astroid from getting stuck in an infinite loop if a function shares |
| its name with its decorator |
| |
| Close #375 |
| |
| * Fix issue with inherited __call__ improperly inferencing self |
| |
| Close #PyCQA/pylint#2199 |
| |
| * Fix __call__ precedence for classes with custom metaclasses |
| |
| Close PyCQA/pylint#2159 |
| |
| * Limit the maximum amount of interable result in an NodeNG.infer() call to |
| 100 by default for performance issues with variables with large amounts of |
| possible values. |
| |
| The max inferable value can be tuned by setting the `max_inferable_values` flag on |
| astroid.MANAGER. |
| |
| |
| What's New in astroid 1.6.0? |
| ============================ |
| |
| Release date: 2017-12-15 |
| |
| |
| * When verifying duplicates classes in MRO, ignore on-the-fly generated classes |
| |
| Close PyCQA/pylint#1706 |
| |
| * Add brain tip for attrs library to prevent unsupported-assignment-operation false positives |
| |
| Close PYCQA/pylint#1698 |
| |
| * file_stream was removed, since it was deprecated for three releases |
| |
| Instead one should use the .stream() method. |
| |
| * Vast improvements to numpy support |
| |
| * Add brain tips for curses |
| |
| Close PyCQA/pylint#1703 |
| |
| * Add brain tips for UUID.int |
| |
| Close PyCQA/pylint#961 |
| |
| * The result of using object.__new__ as class decorator is correctly inferred as instance |
| |
| Close #172 |
| |
| * Enums created with functional syntax are now iterable |
| |
| * Enums created with functional syntax are now subscriptable |
| |
| * Don't crash when getting the string representation of BadUnaryOperationMessage |
| |
| In some cases, when the operand does not have a .name attribute, |
| getting the string representation of a BadUnaryOperationMessage leads |
| to a crash. |
| |
| Close PyCQA/pylint#1563 |
| |
| * Don't raise DuplicateBaseError when classes at different locations are used |
| |
| For instance, one can implement a namedtuple base class, which gets reused |
| on a class with the same name later on in the file. Until now, we considered |
| these two classes as being the same, because they shared the name, but in fact |
| they are different, being created at different locations and through different |
| means. |
| |
| Close PyCQA/pylint#1458 |
| |
| * The func form of namedtuples with keywords is now understood |
| |
| Close PyCQA/pylint#1530 |
| |
| * Fix inference for nested calls |
| |
| * Dunder class at method level is now inferred as the class of the method |
| |
| Close PyCQA/pylint#1328 |
| |
| * Stop most inference tip overwrites from happening by using |
| predicates on existing inference_tip transforms. |
| |
| Close #472 |
| |
| * Fix object.__new__(cls) calls in classmethods by using |
| a context which has the proper boundnode for the given |
| argument |
| |
| Close #404 |
| |
| * Fix Pathlib type inference |
| |
| Close PyCQA/pylint#224 |
| Close PyCQA/pylint#1660 |
| |
| |
| |
| What's New in astroid 1.5.3? |
| ============================ |
| |
| Release date: 2017-06-03 |
| |
| |
| * enum34 dependency is forced to be at least version 1.1.3. Fixes spurious |
| bug related to enum classes being falsy in boolean context, which caused |
| ``_Inconsistent Hierarchy_`` ``RuntimeError`` in ``singledispatch`` module. |
| |
| See links below for details: |
| - http://bugs.python.org/issue26748 |
| - https://bitbucket.org/ambv/singledispatch/issues/8/inconsistent-hierarchy-with-enum |
| - https://bitbucket.org/stoneleaf/enum34/commits/da50803651ab644e6fce66ebc85562f1117c344b |
| |
| * Do not raise an exception when uninferable value is unpacked in ``with`` statement. |
| |
| * Lock objects from ``threading`` module are now correctly recognised |
| as context managers. |
| |
| |
| What's New in astroid 1.5.2? |
| ============================ |
| |
| Release date: 2017-04-17 |
| |
| |
| * Basic support for the class form of typing.NamedTuple |
| |
| * mro() can be computed for classes with old style classes in the hierarchy |
| |
| |
| |
| What's New in astroid 1.5.0? |
| ============================ |
| |
| Release date: 2017-04-13 |
| |
| |
| * Arguments node gained a new attribute, ``kwonlyargs_annotations`` |
| |
| This new attribute holds the annotations for the keyword-only |
| arguments. |
| |
| * `namedtuple` inference now understands `rename` keyword argument |
| |
| * Classes can now know their definition-time arguments. |
| |
| Classes can support keyword arguments, which are passed when |
| a class is constructed using ``__new__``. |
| |
| * Add support for inferring typing.NamedTuple. |
| |
| * ClassDef now supports __getitem__ inference through the metaclass. |
| |
| * getitem() method accepts nodes now, instead of Python objects. |
| |
| * Add support for explicit namespace packages, created with pkg_resources. |
| |
| * Add brain tips for _io.TextIOWrapper's buffer and raw attributes. |
| |
| * Add `returns` into the proper order in FunctionDef._astroid_fields |
| |
| The order is important, since it determines the last child, |
| which in turn determines the last line number of a scoped node. |
| |
| * Add brain tips for functools.lru_cache. |
| |
| * New function, astroid.extract_node, exported out from astroid.test_utils. |
| |
| * Stop saving assignment locals in ExceptHandlers, when the context is a store. |
| |
| This fixes a tripping case, where the RHS of a ExceptHandler can be redefined |
| by the LHS, leading to a local save. For instance, ``except KeyError, exceptions.IndexError`` |
| could result in a local save for IndexError as KeyError, resulting in potential unexpected |
| inferences. Since we don't lose a lot, this syntax gets prohibited. |
| |
| * Fix a crash which occurred when the class of a namedtuple could not be inferred. |
| |
| * Add support for implicit namespace packages (PEP 420) |
| |
| This change involves a couple of modifications. First, we're relying on a |
| spec finder protocol, inspired by importlib's ModuleSpec, for finding where |
| a file or package is, using importlib's PathFinder as well, which enable |
| us to discover namespace packages as well. |
| This discovery is the center piece of the namespace package support, |
| the other part being the construction of a dummy Module node whenever |
| a namespace package root directory is requested during astroid's import |
| references. |
| |
| * Introduce a special attributes model |
| |
| Through this model, astroid starts knowing special attributes of certain Python objects, |
| such as functions, classes, super objects and so on. This was previously possible before, |
| but now the lookup and the attributes themselves are separated into a new module, |
| objectmodel.py, which describes, in a more comprehensive way, the data model of each |
| object. |
| |
| * Exceptions have their own object model |
| |
| Some of exceptions's attributes, such as .args and .message, |
| can't be inferred correctly since they are descriptors that get |
| transformed into the proper objects at runtime. This can cause issues |
| with the static analysis, since they are inferred as different than |
| what's expected. Now when we're creating instances of exceptions, |
| we're inferring a special object that knows how to transform those |
| runtime attributes into the proper objects via a custom object model. |
| Closes issue #81 |
| |
| * dict.values, dict.keys and dict.items are properly |
| inferred to their corresponding type, which also |
| includes the proper containers for Python 3. |
| |
| * Fix a crash which occurred when a method had a same name as a builtin object, |
| decorated at the same time by that builtin object ( a property for instance) |
| |
| * The inference can handle the case where the attribute is accessed through a subclass |
| of a base class and the attribute is defined at the base class's level, |
| by taking in consideration a redefinition in the subclass. |
| |
| This should fix https://github.com/PyCQA/pylint/issues/432 |
| |
| * Calling lambda methods (defined at class level) can be understood. |
| |
| * Don't take in consideration invalid assignments, especially when __slots__ |
| declaration forbids them. |
| |
| Close issue #332 |
| |
| * Functional form of enums support accessing values through __call__. |
| |
| * Brain tips for the ssl library. |
| |
| * decoratornames() does not leak InferenceError anymore. |
| |
| * wildcard_imported_names() got replaced by _public_names() |
| |
| Our understanding of wildcard imports through __all__ was |
| half baked to say at least, since we couldn't account for |
| modifications of the list, which results in tons of false positives. |
| Instead, we replaced it with _public_names(), a method which returns |
| all the names that are publicly available in a module, that is that |
| don't start with an underscore, even though this means that there |
| is a possibility for other names to be leaked out even though |
| they are not present in the __all__ variable. |
| |
| The method is private in 1.4.X. |
| |
| * unpack_infer raises InferenceError if it can't operate |
| with the given sequences of nodes. |
| |
| * Support accessing properties with super(). |
| |
| * Enforce strong updates per frames. |
| |
| When looking up a name in a scope, Scope.lookup will return |
| only the values which will be reachable after execution, as seen |
| in the following code: |
| |
| a = 1 |
| a = 2 |
| |
| In this case it doesn't make sense to return two values, but |
| only the last one. |
| |
| * Add support for inference on threading.Lock |
| |
| As a matter of fact, astroid can infer on threading.RLock, |
| threading.Semaphore, but can't do it on threading.Lock (because it comes |
| from an extension module). |
| |
| * pkg_resources brain tips are a bit more specific, |
| by specifying proper returns. |
| |
| * The slots() method conflates all the slots from the ancestors |
| into a list of current and parent slots. |
| |
| We're doing this because this is the right semantics of slots, |
| they get inherited, as long as each parent defines a __slots__ |
| entry. |
| |
| * Some nodes got a new attribute, 'ctx', which tells in which context |
| the said node was used. |
| |
| The possible values for the contexts are `Load` ('a'), `Del` |
| ('del a'), `Store` ('a = 4') and the nodes that got the new |
| attribute are Starred, Subscript, List and Tuple. Closes issue #267. |
| |
| * relative_to_absolute_name or methods calling it will now raise |
| TooManyLevelsError when a relative import was trying to |
| access something beyond the top-level package. |
| |
| * AstroidBuildingException is now AstroidBuildingError. The first |
| name will exist until astroid 2.0. |
| |
| * Add two new exceptions, AstroidImportError and AstroidSyntaxError. |
| They are subclasses of AstroidBuildingException and are raised when |
| a module can't be imported from various reasons. |
| Also do_import_module lets the errors to bubble up without converting |
| them to InferenceError. This particular conversion happens only |
| during the inference. |
| |
| * Revert to using printf-style formatting in as_string, in order |
| to avoid a potential problem with encodings when using .format. |
| Closes issue #273. Patch by notsqrt. |
| |
| * assigned_stmts methods have the same signature from now on. |
| |
| They used to have different signatures and each one made |
| assumptions about what could be passed to other implementations, |
| leading to various possible crashes when one or more arguments |
| weren't given. Closes issue #277. |
| |
| * Fix metaclass detection, when multiple keyword arguments |
| are used in class definition. |
| |
| * Add support for annotated variable assignments (PEP 526) |
| |
| * Starred expressions are now inferred correctly for tuple, |
| list, set, and dictionary literals. |
| |
| * Support for asynchronous comprehensions introduced in Python 3.6. |
| |
| Fixes #399. See PEP530 for details. |
| |
| |
| What's New in astroid 1.4.1? |
| ============================ |
| |
| Release date: 2015-11-29 |
| |
| |
| * Add support for handling Uninferable nodes when calling as_string |
| |
| Some object, for instance List or Tuple can have, after inference, |
| Uninferable as their elements, happening when their components |
| weren't couldn't be inferred properly. This means that as_string |
| needs to cope with expecting Uninferable nodes part of the other |
| nodes coming for a string transformation. The patch adds a visit |
| method in AsString and ``accept`` on Yes / Uninferable nodes. |
| Closes issue #270. |
| |
| |
| |
| What's New in astroid 1.4.0? |
| ============================ |
| |
| Release date: 2015-11-29 |
| |
| |
| * Class.getattr('__mro__') returns the actual MRO. Closes issue #128. |
| |
| * The logilab-common dependency is not needed anymore as the needed code |
| was integrated into astroid. |
| |
| * Generated enum member stubs now support IntEnum and multiple |
| base classes. |
| |
| * astroid.builder.AstroidBuilder.string_build and |
| astroid.builder.AstroidBuilder.file_build are now raising |
| AstroidBuildingException when the parsing of the string raises |
| a SyntaxError. |
| |
| * Add brain tips for multiprocessing.Manager and |
| multiprocessing.managers.SyncManager. |
| |
| * Add some fixes which enhances the Jython support. |
| The fix mostly includes updates to modutils, which is |
| modified in order to properly lookup paths from live objects, |
| which ends in $py.class, not pyc as for Python 2, |
| Closes issue #83. |
| |
| * The Generator objects inferred with `infer_call_result` |
| from functions have as parent the function from which they |
| are returned. |
| |
| * Add brain tips for multiprocessing post Python 3.4+, |
| where the module level functions are retrieved with getattr |
| from a context object, leading to many no-member errors |
| in Pylint. |
| |
| * Understand partially the 3-argument form of `type`. |
| The only change is that astroid understands members |
| passed in as dictionaries as the third argument. |
| |
| * .slots() will return an empty list for classes with empty slots. |
| 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. |
| |
| * Improve the inference of Getattr nodes when dealing with |
| abstract properties 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 a couple of other properties, |
| such as abc.abstractproperty. |
| |
| * UnboundMethod.getattr calls the getattr of its _proxied object |
| and doesn't call super(...) anymore. |
| |
| It previously crashed, since the first ancestor in its mro was |
| bases.Proxy and bases.Proxy doesn't implement the .getattr method. |
| Closes issue #91. |
| |
| * Don't hard fail when calling .mro() on a class which has |
| combined both 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. |
| |
| * Class.local_attr and Class.local_attr_ancestors uses internally |
| a mro 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. |
| |
| * Expose an implicit_metaclass() method in Class. This will return |
| a builtins.type instance for newstyle classes. |
| |
| * Add two new exceptions for handling MRO error cases. 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. |
| |
| * Classes aren't marked as interfaces anymore, in the `type` attribute. |
| |
| * Class.has_dynamic_getattr doesn't return True for special methods |
| which aren't implemented in pure Python, as it is the case for extension modules. |
| |
| 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. |
| |
| * Add basic support for understanding context managers. |
| |
| 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__. |
| |
| * Add a new type of node, called *inference objects*. Inference objects are similar with |
| AST nodes, but they can be obtained only after inference, so they can't be found |
| inside the original 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. |
| |
| * Add a new *inference object* called Super, which 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. |
| |
| * Add inference support for getattr builtin. Now getattr builtins are |
| properly understood. Closes issue #103. |
| |
| * Add inference support for hasattr builtin. Closes issue #102. |
| |
| * Add 'assert_equals' method in nose.tools's brain plugin. |
| |
| * Don't leak StopIteration when inferring invalid UnaryOps (+[], +None etc.). |
| |
| * Improve the inference of UnaryOperands. |
| |
| When inferring unary operands, astroid looks up the return value |
| of __pos__, __neg__ and __invert__ to determine the inferred value |
| of ``~node``, ``+node`` or ``-node``. |
| |
| * Improve the inference of six.moves, especially when using `from ... import ...` |
| syntax. Also, we added a new fail import hook for six.moves, which fixes the |
| import-error false positive from pylint. Closes issue #107. |
| |
| * Make the first steps towards detecting type errors for unary and binary |
| operations. |
| |
| In exceptions, one object was added for holding information about a possible |
| UnaryOp TypeError, object called `UnaryOperationError`. Even though the name |
| suggests it's an exception, it's actually not one. When inferring UnaryOps, |
| we use this special object to mark a possible TypeError, |
| object which can be interpreted by pylint in order to emit a new warning. |
| We are also exposing a new method for UnaryOps, called `type_errors`, |
| which returns a list of UnaryOperationsError. |
| |
| * A new method was added to the AST nodes, 'bool_value'. It is used to deduce |
| the value of a node when used in a boolean context, which is useful |
| for both inference, as well as for data flow analysis, where we are interested |
| in what branches will be followed when the program will be executed. |
| `bool_value` returns True, False or YES, if the node's boolean value can't |
| be deduced. The method is used when inferring the unary operand `not`. |
| Thus, `not something` will result in calling `something.bool_value` and |
| negating the result, if it is a boolean. |
| |
| * Add inference support for boolean operations (`and` and `not`). |
| |
| * Add inference support for the builtin `callable`. |
| |
| * astroid.inspector was moved to pylint.pyreverse, since |
| it is the only known client of this module. No other change |
| was made to the exported API. |
| |
| * astroid.utils.ASTWalker and astroid.utils.LocalsVisitor |
| were moved to pylint.pyreverse.utils. |
| |
| * Add inference support for the builtin `bool`. |
| |
| * Add `igetattr` method to scoped_nodes.Function. |
| |
| * Add support for Python 3.5's MatMul operation: see PEP 465 for more |
| details. |
| |
| * NotImplemented is detected properly now as being part of the |
| builtins module. Previously trying to infer the Name(NotImplemented) |
| returned an YES object. |
| |
| * Add astroid.helpers, a module of various useful utilities which don't |
| belong yet into other components. Added *object_type*, a function |
| which can be used to obtain the type of almost any astroid object, |
| similar to how the builtin *type* works. |
| |
| * Understand the one-argument form of the builtin *type*. |
| |
| This uses the recently added *astroid.helpers.object_type* in order to |
| retrieve the Python type of the first argument of the call. |
| |
| * Add helpers.is_supertype and helpers.is_subtype, two functions for |
| checking if an object is a super/sub type of another. |
| |
| * Improve the inference of binary arithmetic operations (normal |
| and augmented). |
| |
| * Add support for retrieving TypeErrors for binary arithmetic operations. |
| |
| The change is similar to what was added for UnaryOps: a new method |
| called *type_errors* for both AugAssign and BinOp, which can be used |
| to retrieve type errors occurred during inference. Also, a new |
| exception object was added, BinaryOperationError. |
| |
| * Lambdas found at class level, which have a `self` argument, are considered |
| BoundMethods when accessing them from instances of their class. |
| |
| * Add support for multiplication of tuples and lists with instances |
| which provides an __index__ returning-int method. |
| |
| * Add support for indexing containers with instances which provides |
| an __index__ returning-int method. |
| |
| * Star unpacking in assignments returns properly a list, |
| not the individual components. Closes issue #138. |
| |
| * Add annotation support for function.as_string(). Closes issue #37. |
| |
| * Add support for indexing bytes on Python 3. |
| |
| * Add support for inferring subscript on instances, which will |
| use __getitem__. Closes issue #124. |
| |
| * Add support for pkg_resources.declare_namespaces. |
| |
| * Move pyreverse specific modules and functionality back into pyreverse |
| (astroid.manager.Project, astroid.manager.Manager.project_from_files). |
| |
| * Understand metaclasses added with six.add_metaclass decorator. Closes issue #129. |
| |
| * Add a new convenience API, `astroid.parse`, which can be used to retrieve |
| an astroid AST from a source code string, similar to how ast.parse can be |
| used to obtain a Python AST from a source string. This is the test_utils.build_module |
| promoted to a public API. |
| |
| * do_import_module passes the proper relative_only flag if the level is higher |
| than 1. This has the side effect that using `from .something import something` |
| in a non-package will finally result in an import-error on Pylint's side. |
| Until now relative_only was ignored, leading to the import of `something`, |
| if it was globally available. |
| |
| * Add get_wrapping_class API to scoped_nodes, which can be used to |
| retrieve the class that wraps a node. |
| |
| * Class.getattr looks by default in the implicit and the explicit metaclasses, |
| which is `type` on Python 3. |
| |
| Closes issue #114. |
| |
| * There's a new separate step for transforms. |
| |
| Until now, the transforms were applied at the same time the tree was |
| being built. This was problematic if the transform functions were |
| using inference, since the inference was executed on a partially |
| constructed tree, which led to failures when post-building |
| information was needed (such as setting the _from_names |
| for the From imports). |
| Now there's a separate step for transforms, which are applied |
| using transform.TransformVisitor. |
| There's a couple of other related changes: |
| |
| * astroid.parse and AstroidBuilder gained a new parameter |
| `apply_transforms`, which is a boolean flag, which will |
| control if the transforms are applied. We do this because |
| there are uses when the vanilla tree is wanted, without |
| any implicit modification. |
| |
| * the transforms are also applied for builtin modules, |
| as a side effect of the fact that transform visiting |
| was moved in AstroidBuilder._post_build from |
| AstroidBuilder._data_build. |
| |
| Closes issue #116. |
| |
| * Class._explicit_metaclass is now a public API, in the form of |
| Class.declared_metaclass. |
| |
| Class.mro remains the de facto method for retrieving the metaclass |
| of a class, which will also do an evaluation of what declared_metaclass |
| returns. |
| |
| * Understand slices of tuples, lists, strings and instances with support |
| for slices. |
| |
| Closes issue #137. |
| |
| * Add proper grammatical names for `inferred` and `ass_type` methods, |
| namely `inferred` and `assign_type`. |
| |
| The old methods will raise PendingDeprecationWarning, being slated |
| for removal in astroid 2.0. |
| |
| * Add new AST names in order to be similar to the ones |
| from the builtin ast module. |
| |
| With this change, Getattr becomes Attributes, Backquote becomes |
| Repr, Class is ClassDef, Function is FunctionDef, Discard is Expr, |
| CallFunc is Call, From is ImportFrom, AssName is AssignName |
| and AssAttr is AssignAttr. The old names are maintained for backwards |
| compatibility and they are interchangeable, in the sense that using |
| Discard will use Expr under the hood and the implemented visit_discard |
| in checkers will be called with Expr nodes instead. The AST does not |
| contain the old nodes, only the interoperability between them hides this |
| fact. Recommendations to move to the new nodes are emitted accordingly, |
| the old names will be removed in astroid 2.0. |
| |
| * Add support for understanding class creation using `type.__new__(mcs, name, bases, attrs)`` |
| |
| Until now, inferring this kind of calls resulted in Instances, not in classes, |
| since astroid didn't understand that the presence of the metaclass in the call |
| leads to a class creating, not to an instance creation. |
| |
| * Understand the `slice` builtin. Closes issue #184. |
| |
| * Add brain tips for numpy.core, which should fix Pylint's #453. |
| |
| * Add a new node, DictUnpack, which is used to represent the unpacking |
| of a dictionary into another dictionary, using PEP 448 specific syntax |
| ``({1:2, **{2:3})`` |
| |
| This is a different approach than what the builtin ast module does, |
| since it just uses None to represent this kind of operation, |
| which seems conceptually wrong, due to the fact the AST contains |
| non-AST nodes. Closes issue #206. |
| |
| |
| |
| |
| What's New in astroid 1.3.6? |
| ============================ |
| |
| Release date: 2015-03-14 |
| |
| |
| * Class.slots raises NotImplementedError for old style classes. |
| Closes issue #67. |
| |
| * Add a new option to AstroidManager, `optimize_ast`, which |
| controls if peephole optimizer should be enabled or not. |
| This prevents a regression, where the visit_binop method |
| wasn't called anymore with astroid 1.3.5, due to the differences |
| in the resulting AST. Closes issue #82. |
| |
| |
| |
| What's New in astroid 1.3.5? |
| ============================ |
| |
| Release date: 2015-03-11 |
| |
| |
| * Add the ability to optimize small ast subtrees, |
| with the first use in the optimization of multiple |
| BinOp nodes. This removes recursivity in the rebuilder |
| when dealing with a lot of small strings joined by the |
| addition operator. Closes issue #59. |
| |
| * Obtain the methods for the nose brain tip through an |
| unittest.TestCase instance. Closes Pylint issue #457. |
| |
| * Fix a crash which occurred when a class was the ancestor |
| of itself. Closes issue #78. |
| |
| * Improve the scope_lookup method for Classes regarding qualified |
| objects, with an attribute name exactly as one provided in the |
| class itself. |
| |
| For example, a class containing an attribute 'first', |
| which was also an import and which had, as a base, a qualified name |
| or a Gettattr node, in the form 'module.first', then Pylint would |
| have inferred the `first` name as the function from the Class, |
| not the import. Closes Pylint issue #466. |
| |
| * Implement the assigned_stmts operation for Starred nodes, |
| which was omitted when support for Python 3 was added in astroid. |
| Closes issue #36. |
| |
| |
| |
| What's New in astroid 1.3.4? |
| ============================ |
| |
| Release date: 2015-01-17 |
| |
| |
| * Get the first element from the method list when obtaining |
| the functions from nose.tools.trivial. Closes Pylint issue #448. |
| |
| |
| What's New in astroid 1.3.3? |
| ============================ |
| |
| Release date: 2015-01-16 |
| |
| |
| * Restore file_stream to a property, but deprecate it in favour of |
| the newly added method Module.stream. By using a method instead of a |
| property, it will be easier to properly close the file right |
| after it is used, which will ensure that no file descriptors are |
| leaked. Until now, due to the fact that a module was cached, |
| it was not possible to close the file_stream anywhere. |
| file_stream will start emitting PendingDeprecationWarnings in |
| astroid 1.4, DeprecationWarnings in astroid 1.5 and it will |
| be finally removed in astroid 1.6. |
| |
| * Add inference tips for 'tuple', 'list', 'dict' and 'set' builtins. |
| |
| * Add brain definition for most string and unicode methods |
| |
| * Changed the API for Class.slots. It returns None when the class |
| doesn't define any slots. Previously, for both the cases where |
| the class didn't have slots defined and when it had an empty list |
| of slots, Class.slots returned an empty list. |
| |
| * Add a new method to Class nodes, 'mro', for obtaining the |
| the method resolution order of the class. |
| |
| * Add brain tips for six.moves. Closes issue #63. |
| |
| * Improve the detection for functions decorated with decorators |
| which returns static or class methods. |
| |
| * .slots() can contain unicode strings on Python 2. |
| |
| * Add inference tips for nose.tools. |
| |
| |
| |
| What's New in astroid 1.3.2? |
| ============================ |
| |
| Release date: 2014-11-22 |
| |
| |
| * Fixed a crash with invalid subscript index. |
| |
| * Implement proper base class semantics for Python 3, where |
| every class derives from object. |
| |
| * Allow more fine-grained control over C extension loading |
| in the manager. |
| |
| |
| What's New in astroid 1.3.1? |
| ============================ |
| |
| Release date: 2014-11-21 |
| |
| |
| * Fixed a crash issue with the pytest brain module. |
| |
| |
| What's New in astroid 1.3.0? |
| ============================ |
| |
| Release date: 2014-11-20 |
| |
| |
| * Fix a maximum recursion error occurred during the inference, |
| where statements with the same name weren't filtered properly. |
| Closes pylint issue #295. |
| |
| * Check that EmptyNode has an underlying object in |
| EmptyNode.has_underlying_object. |
| |
| * Simplify the understanding of enum members. |
| |
| * Fix an infinite loop with decorator call chain inference, |
| where the decorator returns itself. Closes issue #50. |
| |
| * Various speed improvements. Patch by Alex Munroe. |
| |
| * Add pytest brain plugin. Patch by Robbie Coomber. |
| |
| * Support for Python versions < 2.7 has been dropped, and the |
| source has been made compatible with Python 2 and 3. Running |
| 2to3 on installation for Python 3 is not needed anymore. |
| |
| * astroid now depends on six. |
| |
| * modutils._module_file opens __init__.py in binary mode. |
| Closes issues #51 and #13. |
| |
| * Only C extensions from trusted sources (the standard library) |
| are loaded into the examining Python process to build an AST |
| from the live module. |
| |
| * Path names on case-insensitive filesystems are now properly |
| handled. This fixes the stdlib detection code on Windows. |
| |
| * Metaclass-generating functions like six.with_metaclass |
| are now supported via some explicit detection code. |
| |
| * astroid.register_module_extender has been added to generalize |
| the support for module extenders as used by many brain plugins. |
| |
| * brain plugins can now register hooks to handle failed imports, |
| as done by the gobject-introspection plugin. |
| |
| * The modules have been moved to a separate package directory, |
| `setup.py develop` now works correctly. |
| |
| |
| |
| What's New in astroid 1.2.1? |
| ============================ |
| |
| Release date: 2014-08-24 |
| |
| |
| * Fix a crash occurred when inferring decorator call chain. |
| Closes issue #42. |
| |
| * Set the parent of vararg and kwarg nodes when inferring them. |
| Closes issue #43. |
| |
| * namedtuple inference knows about '_fields' attribute. |
| |
| * enum members knows about the methods from the enum class. |
| |
| * Name inference will lookup in the parent function |
| of the current scope, in case searching in the current scope |
| fails. |
| |
| * Inference of the functional form of the enums takes into |
| consideration the various inputs that enums accepts. |
| |
| * The inference engine handles binary operations (add, mul etc.) |
| between instances. |
| |
| * Fix an infinite loop in the inference, by returning a copy |
| of instance attributes, when calling 'instance_attr'. |
| Closes issue #34 (patch by Emile Anclin). |
| |
| * Don't crash when trying to infer unbound object.__new__ call. |
| Closes issue #11. |
| |
| |
| What's New in astroid 1.2.0? |
| ============================ |
| |
| Release date: 2014-07-25 |
| |
| |
| * Function nodes can detect decorator call chain and see if they are |
| decorated with builtin descriptors (`classmethod` and `staticmethod`). |
| |
| * infer_call_result called on a subtype of the builtin type will now |
| return a new `Class` rather than an `Instance`. |
| |
| * `Class.metaclass()` now handles module-level __metaclass__ declaration |
| on python 2, and no longer looks at the __metaclass__ class attribute on |
| python 3. |
| |
| * Function nodes can detect if they are decorated with subclasses |
| of builtin descriptors when determining their type |
| (`classmethod` and `staticmethod`). |
| |
| * Add `slots` method to `Class` nodes, for retrieving |
| the list of valid slots it defines. |
| |
| * Expose function annotation to astroid: `Arguments` node |
| exposes 'varargannotation', 'kwargannotation' and 'annotations' |
| attributes, while `Function` node has the 'returns' attribute. |
| |
| * Backported most of the logilab.common.modutils module there, as |
| most things there are for pylint/astroid only and we want to be |
| able to fix them without requiring a new logilab.common release |
| |
| * Fix names grabbed using wildcard import in "absolute import mode" |
| (ie with absolute_import activated from the __future__ or with |
| python 3). Fix pylint issue #58. |
| |
| * Add support in pylint-brain for understanding enum classes. |
| |
| |
| What's New in astroid 1.1.1? |
| ============================ |
| |
| Release date: 2014-04-30 |
| |
| * `Class.metaclass()` looks in ancestors when the current class |
| does not define explicitly a metaclass. |
| |
| * Do not cache modules if a module with the same qname is already |
| known, and only return cached modules if both name and filepath |
| match. Fixes pylint Bitbucket issue #136. |
| |
| |
| What's New in astroid 1.1.0? |
| ============================ |
| |
| Release date: 2014-04-18 |
| |
| * All class nodes are marked as new style classes for Py3k. |
| |
| * Add a `metaclass` function to `Class` nodes to |
| retrieve their metaclass. |
| |
| * Add a new YieldFrom node. |
| |
| * Add support for inferring arguments to namedtuple invocations. |
| |
| * Make sure that objects returned for namedtuple |
| inference have parents. |
| |
| * Don't crash when inferring nodes from `with` clauses |
| with multiple context managers. Closes #18. |
| |
| * Don't crash when a class has some __call__ method that is not |
| inferable. Closes #17. |
| |
| * Unwrap instances found in `.ancestors()`, by using their _proxied |
| class. |
| |
| |
| |
| |
| What's New in astroid 1.0.1? |
| ============================ |
| |
| Release date: 2013-10-18 |
| |
| * fix py3k/windows installation issue (issue #4) |
| |
| * fix bug with namedtuple inference (issue #3) |
| |
| * get back gobject introspection from pylint-brain |
| |
| * fix some test failures under pypy and py3.3, though there is one remaining |
| in each of these platform (2.7 tests are all green) |
| |
| |
| |
| |
| What's New in astroid 1.0.0? |
| ============================= |
| |
| Release date: 2013-07-29 |
| |
| * Fix some omissions in py2stdlib's version of hashlib and |
| add a small test for it. |
| |
| * Properly recognize methods annotated with abc.abstract{property,method} |
| as abstract. |
| |
| * Allow transformation functions on any node, providing a |
| ``register_transform`` function on the manager instead of the |
| ``register_transformer`` to make it more flexible wrt node selection |
| |
| * Use the new transformation API to provide support for namedtuple |
| (actually in pylint-brain, closes #8766) |
| |
| * Added the test_utils module for building ASTs and |
| extracting deeply nested nodes for easier testing. |
| |
| * Add support for py3k's keyword only arguments (PEP 3102) |
| |
| * RENAME THE PROJECT to astroid |
| |
| |
| |
| |
| What's New in astroid 0.24.3? |
| ============================= |
| |
| Release date: 2013-04-16 |
| |
| * #124360 [py3.3]: Don't crash on 'yield from' nodes |
| |
| * #123062 [pylint-brain]: Use correct names for keywords for urlparse |
| |
| * #123056 [pylint-brain]: Add missing methods for hashlib |
| |
| * #123068: Fix inference for generator methods to correctly handle yields |
| in lambdas. |
| |
| * #123068: Make sure .as_string() returns valid code for yields in |
| expressions. |
| |
| * #47957: Set literals are now correctly treated as inference leaves. |
| |
| * #123074: Add support for inference of subscript operations on dict |
| literals. |
| |
| |
| |
| |
| What's New in astroid 0.24.2? |
| ============================= |
| |
| Release date: 2013-02-27 |
| |
| * pylint-brain: more subprocess.Popen faking (see #46273) |
| |
| * #109562 [jython]: java modules have no __doc__, causing crash |
| |
| * #120646 [py3]: fix for python3.3 _ast changes which may cause crash |
| |
| * #109988 [py3]: test fixes |
| |
| |
| |
| |
| What's New in astroid 0.24.1? |
| ============================= |
| |
| Release date: 2012-10-05 |
| |
| * #106191: fix __future__ absolute import w/ From node |
| |
| * #50395: fix function fromlineno when some decorator is splited on |
| multiple lines (patch by Mark Gius) |
| |
| * #92362: fix pyreverse crash on relative import |
| |
| * #104041: fix crash 'module object has no file_encoding attribute' |
| |
| * #4294 (pylint-brain): bad inference on mechanize.Browser.open |
| |
| * #46273 (pylint-brain): bad inference subprocess.Popen.communicate |
| |
| |
| |
| |
| What's New in astroid 0.24.0? |
| ============================= |
| |
| Release date: 2012-07-18 |
| |
| * include pylint brain extension, describing some stuff not properly understood until then. |
| (#100013, #53049, #23986, #72355) |
| |
| * #99583: fix raw_building.object_build for pypy implementation |
| |
| * use `open` rather than `file` in scoped_nodes as 2to3 miss it |
| |
| |
| |
| |
| What's New in astroid 0.23.1? |
| ============================= |
| |
| Release date: 2011-12-08 |
| |
| * #62295: avoid "OSError: Too many open files" by moving |
| .file_stream as a Module property opening the file only when needed |
| |
| * Lambda nodes should have a `name` attribute |
| |
| * only call transformers if modname specified |
| |
| |
| |
| |
| What's New in astroid 0.23.0? |
| ============================= |
| |
| Release date: 2011-10-07 |
| |
| * #77187: ancestor() only returns the first class when inheriting |
| from two classes coming from the same module |
| |
| * #76159: putting module's parent directory on the path causes problems |
| linting when file names clash |
| |
| * #74746: should return empty module when __main__ is imported (patch by |
| google) |
| |
| * #74748: getitem protocol return constant value instead of a Const node |
| (patch by google) |
| |
| * #77188: support lgc.decorators.classproperty |
| |
| * #77253: provide a way for user code to register astng "transformers" |
| using manager.register_transformer(callable) where callable will be |
| called after an astng has been built and given the related module node |
| as argument |
| |
| |
| |
| |
| What's New in astroid 0.22.0? |
| ============================= |
| |
| Release date: 2011-07-18 |
| |
| * added column offset information on nodes (patch by fawce) |
| |
| * #70497: Crash on AttributeError: 'NoneType' object has no attribute '_infer_name' |
| |
| * #70381: IndentationError in import causes crash |
| |
| * #70565: absolute imports treated as relative (patch by Jacek Konieczny) |
| |
| * #70494: fix file encoding detection with python2.x |
| |
| * py3k: __builtin__ module renamed to builtins, we should consider this to properly |
| build ast for builtin objects |
| |
| |
| |
| |
| What's New in astroid 0.21.1? |
| ============================= |
| |
| Release date: 2011-01-11 |
| |
| * python3: handle file encoding; fix a lot of tests |
| |
| * fix #52006: "True" and "False" can be assigned as variable in Python2x |
| |
| * fix #8847: pylint doesn't understand function attributes at all |
| |
| * fix #8774: iterator / generator / next method |
| |
| * fix bad building of ast from living object w/ container classes |
| (eg dict, set, list, tuple): contained elements should be turned to |
| ast as well (not doing it will much probably cause crash later) |
| |
| * somewhat fix #57299 and other similar issue: Exception when |
| trying to validate file using PyQt's PyQt4.QtCore module: we can't |
| do much about it but at least catch such exception to avoid crash |
| |
| |
| |
| |
| What's New in astroid 0.21.0? |
| ============================= |
| |
| Release date: 2010-11-15 |
| |
| * python3.x: first python3.x release |
| |
| * fix #37105: Crash on AttributeError: 'NoneType' object has no attribute '_infer_name' |
| |
| * python2.4: drop python < 2.5 support |
| |
| |
| |
| |
| What's New in astroid 0.20.4? |
| ============================= |
| |
| Release date: 2010-10-27 |
| |
| * fix #37868 #37665 #33638 #37909: import problems with absolute_import_activated |
| |
| * fix #8969: false positive when importing from zip-safe eggs |
| |
| * fix #46131: minimal class decorator support |
| |
| * minimal python2.7 support (dict and set comprehension) |
| |
| * important progress on Py3k compatibility |
| |
| |
| |
| |
| What's New in astroid 0.20.3? |
| ============================= |
| |
| Release date: 2010-09-28 |
| |
| * restored python 2.3 compatibility |
| |
| * fix #45959: AttributeError: 'NoneType' object has no attribute 'frame', due |
| to handling of __class__ when importing from living object (because of missing |
| source code or C-compiled object) |
| |
| |
| |
| |
| What's New in astroid 0.20.2? |
| ============================= |
| |
| Release date: 2010-09-10 |
| |
| * fix astng building bug: we've to set module.package flag at the node |
| creation time otherwise we'll miss this information when inferring relative |
| import during the build process (this should fix for instance some problems |
| with numpy) |
| |
| * added __subclasses__ to special class attribute |
| |
| * fix Class.interfaces so that no InferenceError raised on empty __implements__ |
| |
| * yield YES on multiplication of tuple/list with non valid operand |
| |
| |
| What's New in astroid 0.20.1? |
| ============================= |
| |
| Release date: 2010-05-11 |
| |
| * fix licensing to LGPL |
| |
| * add ALL_NODES_CLASSES constant to nodes module |
| |
| * nodes redirection cleanup (possible since refactoring) |
| |
| * bug fix for python < 2.5: add Delete node on Subscript nodes if we are in a |
| del context |
| |
| |
| What's New in astroid 0.20.0? |
| ============================= |
| |
| Release date: 2010-03-22 |
| |
| * fix #20464: raises ?TypeError: '_Yes' object is not iterable? on list inference |
| |
| * fix #19882: pylint hangs |
| |
| * fix #20759: crash on pyreverse UNARY_OP_METHOD KeyError '~' |
| |
| * fix #20760: crash on pyreverse : AttributeError: 'Subscript' |
| object has no attribute 'infer_lhs' |
| |
| * fix #21980: [Python-modules-team] Bug#573229 : Pylint hangs; |
| improving the cache yields a speed improvement on big projects |
| |
| * major refactoring: rebuild the tree instead of modify / monkey patching |
| |
| * fix #19641: "maximum recursion depth exceeded" messages w/ python 2.6 |
| this was introduced by a refactoring |
| |
| * Ned Batchelder patch to properly import eggs with Windows line |
| endings. This fixes a problem with pylint not being able to |
| import setuptools. |
| |
| * Winfried Plapper patches fixing .op attribute value for AugAssign nodes, |
| visit_ifexp in nodes_as_string |
| |
| * Edward K. Ream / Tom Fleck patch closes #19641 (maximum recursion depth |
| exceeded" messages w/ python 2.6), see https://bugs.launchpad.net/pylint/+bug/456870 |
| |
| |
| |
| |
| What's New in astroid 0.19.3? |
| ============================= |
| |
| Release date: 2009-12-18 |
| |
| * fix name error making 0.19.2 almost useless |
| |
| |
| |
| |
| What's New in astroid 0.19.2? |
| ============================= |
| |
| Release date: 2009-12-18 |
| |
| * fix #18773: inference bug on class member (due to bad handling of instance |
| / class nodes "bounded" to method calls) |
| |
| * fix #9515: strange message for non-class "Class baz has no egg member" (due to |
| bad inference of function call) |
| |
| * fix #18953: inference fails with augmented assignment (special case for augmented |
| assignement in infer_ass method) |
| |
| * fix #13944: false positive for class/instance attributes (Instance.getattr |
| should return assign nodes on instance classes as well as instance. |
| |
| * include spelling fixes provided by Dotan Barak |
| |
| |
| |
| |
| What's New in astroid 0.19.1? |
| ============================= |
| |
| Release date: 2009-08-27 |
| |
| * fix #8771: crash on yield expression |
| |
| * fix #10024: line numbering bug with try/except/finally |
| |
| * fix #10020: when building from living object, __name__ may be None |
| |
| * fix #9891: help(logilab.astng) throws TypeError |
| |
| * fix #9588: false positive E1101 for augmented assignment |
| |
| |
| |
| |
| What's New in astroid 0.19.0? |
| ============================= |
| |
| Release date: 2009-03-25 |
| |
| * fixed python 2.6 issue (tests ok w/ 2.4, 2.5, 2.6. Anyone using 2.2 / 2.3 |
| to tell us if it works?) |
| |
| * some understanding of the __builtin__.property decorator |
| |
| * inference: introduce UnboundMethod / rename InstanceMethod to BoundMethod |
| |
| |
| |
| |
| What's New in astroid 0.18.0? |
| ============================= |
| |
| Release date: 2009-03-19 |
| |
| * major api / tree structure changes to make it works with compiler *and* |
| python >= 2.5 _ast module |
| |
| * cleanup and refactoring on the way |
| |
| |
| |
| |
| What's New in astroid 0.17.4? |
| ============================= |
| |
| Release date: 2008-11-19 |
| |
| * fix #6015: filter statements bug triggering W0631 false positive in pylint |
| |
| * fix #5571: Function.is_method() should return False on module level |
| functions decorated by staticmethod/classmethod (avoid some crash in pylint) |
| |
| * fix #5010: understand python 2.5 explicit relative imports |
| |
| |
| |
| |
| What's New in astroid 0.17.3? |
| ============================= |
| |
| Release date: 2008-09-10 |
| |
| * fix #5889: astng crash on certain pyreverse projects |
| |
| * fix bug w/ loop assignment in .lookup |
| |
| * apply Maarten patch fixing a crash on TryFinalaly.block_range and fixing |
| 'else'/'final' block line detection |
| |
| |
| |
| |
| What's New in astroid 0.17.2? |
| ============================= |
| |
| Release date: 2008-01-14 |
| |
| * "with" statement support, patch provided by Brian Hawthorne |
| |
| * fixed recursion arguments in nodes_of_class method as notified by |
| Dave Borowitz |
| |
| * new InstanceMethod node introduced to wrap bound method (e.g. Function |
| node), patch provided by Dave Borowitz |
| |
| |
| |
| |
| What's New in astroid 0.17.1? |
| ============================= |
| |
| Release date: 2007-06-07 |
| |
| * fix #3651: crash when callable as default arg |
| |
| * fix #3670: subscription inference crash in some cases |
| |
| * fix #3673: Lambda instance has no attribute 'pytype' |
| |
| * fix crash with chained "import as" |
| |
| * fix crash on numpy |
| |
| * fix potential InfiniteRecursion error with builtin objects |
| |
| * include patch from Marien Zwart fixing some test / py 2.5 |
| |
| * be more error resilient when accessing living objects from external |
| code in the manager |
| |
| |
| |
| |
| What's New in astroid 0.17.0? |
| ============================= |
| |
| Release date: 2007-02-22 |
| |
| * api change to be able to infer using a context (used to infer function call |
| result only for now) |
| |
| * slightly better inference on astng built from living object by trying to infer |
| dummy nodes (able to infer 'help' builtin for instance) |
| |
| * external attribute definition support |
| |
| * basic math operation inference |
| |
| * new pytype method on possibly inferred node (e.g. module, classes, const...) |
| |
| * fix a living object astng building bug, which was making "open" uninferable |
| |
| * fix lookup of name in method bug (#3289) |
| |
| * fix decorator lookup bug (#3261) |
| |
| |
| |
| |
| What's New in astroid 0.16.3? |
| ============================= |
| |
| Release date: 2006-11-23 |
| |
| * enhance inference for the subscription notation (motivated by a patch from Amaury) |
| and for unary sub/add |
| |
| |
| |
| |
| What's New in astroid 0.16.2? |
| ============================= |
| |
| Release date: 2006-11-15 |
| |
| * grrr, fixed python 2.3 incompatibility introduced by generator expression |
| scope handling |
| |
| * upgrade to avoid warnings with logilab-common 0.21.0 (on which now |
| depends so) |
| |
| * backported astutils module from logilab-common |
| |
| |
| |
| |
| What's New in astroid 0.16.1? |
| ============================= |
| |
| Release date: 2006-09-25 |
| |
| * python 2.5 support, patch provided by Marien Zwart |
| |
| * fix [Class|Module].block_range method (this fixes pylint's inline |
| disabling of messages on classes/modules) |
| |
| * handle class.__bases__ and class.__mro__ (proper metaclass handling |
| still needed though) |
| |
| * drop python2.2 support: remove code that was working around python2.2 |
| |
| * fixed generator expression scope bug |
| |
| * patch transformer to extract correct line information |
| |
| |
| |
| |
| What's New in astroid 0.16.0? |
| ============================= |
| |
| Release date: 2006-04-19 |
| |
| * fix living object building to consider classes such as property as |
| a class instead of a data descriptor |
| |
| * fix multiple assignment inference which was discarding some solutions |
| |
| * added some line manipulation methods to handle pylint's block messages |
| control feature (Node.last_source_line(), None.block_range(lineno) |
| |
| |
| |
| |
| What's New in astroid 0.15.1? |
| ============================= |
| |
| Release date: 2006-03-10 |
| |
| * fix avoiding to load everything from living objects... Thanks Amaury! |
| |
| * fix a possible NameError in Instance.infer_call_result |
| |
| |
| |
| |
| What's New in astroid 0.15.0? |
| ============================= |
| |
| Release date: 2006-03-06 |
| |
| * fix possible infinite recursion on global statements (close #10342) |
| and in various other cases... |
| |
| * fix locals/globals interactions when the global statement is used |
| (close #10434) |
| |
| * multiple inference related bug fixes |
| |
| * associate List, Tuple and Dict and Const nodes to their respective |
| classes |
| |
| * new .ass_type method on assignment related node, returning the |
| assignment type node (Assign, For, ListCompFor, GenExprFor, |
| TryExcept) |
| |
| * more API refactoring... .resolve method has disappeared, now you |
| have .ilookup on every nodes and .getattr/.igetattr on node |
| supporting the attribute protocol |
| |
| * introduced a YES object that may be returned when there is ambiguity |
| on an inference path (typically function call when we don't know |
| arguments value) |
| |
| * builder try to instantiate builtin exceptions subclasses to get their |
| instance attribute |
| |
| |
| |
| |
| What's New in astroid 0.14.0? |
| ============================= |
| |
| Release date: 2006-01-10 |
| |
| * some major inference improvements and refactoring ! The drawback is |
| the introduction of some non backward compatible change in the API |
| but it's imho much cleaner and powerful now :) |
| |
| * new boolean property .newstyle on Class nodes (implements #10073) |
| |
| * new .import_module method on Module node to help in .resolve |
| refactoring |
| |
| * .instance_attrs has list of assignments to instance attribute |
| dictionary as value instead of one |
| |
| * added missing GenExprIf and GenExprInner nodes, and implements |
| as_string for each generator expression related nodes |
| |
| * specifically catch KeyboardInterrupt to reraise it in some places |
| |
| * fix so that module names are always absolute |
| |
| * fix .resolve on package where a subpackage is imported in the |
| __init__ file |
| |
| * fix a bug regarding construction of Function node from living object |
| with earlier version of python 2.4 |
| |
| * fix a NameError on Import and From self_resolve method |
| |
| * fix a bug occurring when building an astng from a living object with |
| a property |
| |
| * lint fixes |
| |
| |
| |
| |
| What's New in astroid 0.13.1? |
| ============================= |
| |
| Release date: 2005-11-07 |
| |
| * fix bug on building from living module the same object in |
| encountered more than once time (e.g. builtins.object) (close #10069) |
| |
| * fix bug in Class.ancestors() regarding inner classes (close #10072) |
| |
| * fix .self_resolve() on From and Module nodes to handle package |
| precedence over module (close #10066) |
| |
| * locals dict for package contains __path__ definition (close #10065) |
| |
| * astng provide GenExpr and GenExprFor nodes with python >= 2.4 |
| (close #10063) |
| |
| * fix python2.2 compatibility (close #9922) |
| |
| * link .__contains__ to .has_key on scoped node to speed up execution |
| |
| * remove no more necessary .module_object() method on From and Module |
| nodes |
| |
| * normalize parser.ParserError to SyntaxError with python 2.2 |
| |
| |
| |
| |
| What's New in astroid 0.13.0? |
| ============================= |
| |
| Release date: 2005-10-21 |
| |
| * .locals and .globals on scoped node handle now a list of references |
| to each assignment statements instead of a single reference to the |
| first assignment statement. |
| |
| * fix bug with manager.astng_from_module_name when a context file is |
| given (notably fix ZODB 3.4 crash with pylint/pyreverse) |
| |
| * fix Compare.as_string method |
| |
| * fix bug with lambda object missing the "type" attribute |
| |
| * some minor refactoring |
| |
| * This package has been extracted from the logilab-common package, which |
| will be kept for some time for backward compatibility but will no |
| longer be maintained (this explains that this package is starting with |
| the 0.13 version number, since the fork occurs with the version |
| released in logilab-common 0.12). |