Skip to content

v3.0.0

Compare
Choose a tag to compare
@Pierre-Sassoulas Pierre-Sassoulas released this 26 Sep 13:38
· 85 commits to main since this release
  • Add support for Python 3.12, including PEP 695 type parameter syntax.

    Closes #2201

  • Remove support for Python 3.7.

    Refs #2137

  • Use the global inference cache when inferring, even without an explicit
    InferenceContext. This is a significant performance improvement given how
    often methods default to None for the context argument. (Linting astroid
    itself now takes ~5% less time on Python 3.12; other projects requiring more
    complex inference calculations will see greater speedups.)

    Refs #529

  • Following a deprecation period starting in astroid 2.7.0, the astroid.node_classes
    and astroid.scoped_nodes modules have been removed in favor of astroid.nodes.node_classes
    and astroid.nodes.scoped_nodes.

    Closes #1072

  • Following a deprecation period starting in astroid 2.12.0, the astroid.mixins module
    has been removed in favor of astroid.nodes._base_nodes (private).

    Refs #1633

  • Return all existing arguments when calling Arguments.arguments(). This also means find_argname will now
    use the whole list of arguments for its search.

    Closes #2213

  • Exclude class attributes from the __members__ container of an Enum class when they are
    nodes.AnnAssign nodes with no assigned value.

    Refs pylint-dev/pylint#7402

  • Remove @cached and @cachedproperty decorator (just use @cached_property from the stdlib).

    Closes #1780
    Refs #2140

  • Remove the inference module. Node inference methods are now in the module
    defining the node, rather than being associated to the node afterward.

    Closes #679

  • Move LookupMixIn to astroid.nodes._base_nodes and make it private.

  • Remove the shims for OperationError, BinaryOperationError, and UnaryOperationError
    in exceptions. They were moved to util in astroid 1.5.0.

  • Move safe_infer() from helpers to util. This avoids some circular imports.

  • Reduce file system access in ast_from_file().

  • Reduce time to import astroid by delaying astroid_bootstrapping() until
    the first instantiation of AstroidBuilder.

    Closes #2161

  • Make igetattr() idempotent. This addresses some reports of varying results
    when running pylint with --jobs.

    Closes pylint-dev/pylint#4356
    Refs #7

  • Fix incorrect cache keys for inference results, thereby correctly inferring types
    for calls instantiating types dynamically.

    Closes #1828
    Closes pylint-dev/pylint#7464
    Closes pylint-dev/pylint#8074

  • Fix interrupted InferenceContext call chains, thereby addressing performance
    problems when linting sqlalchemy.

    Closes pylint-dev/pylint#8150

  • nodes.FunctionDef no longer inherits from nodes.Lambda.
    This is a breaking change but considered a bug fix as the nodes did not share the same
    API and were not interchangeable.

    We have tried to minimize the amount of breaking changes caused by this change
    but some are unavoidable.

  • infer_call_result now shares the same interface across all implementations. Namely:

    def infer_call_result(
                  self,
                  caller: SuccessfulInferenceResult | None,
                  context: InferenceContext | None = None,
              ) -> Iterator[InferenceResult]:

    This is a breaking change for nodes.FunctionDef where previously caller had a default of
    None. Passing None again will not create a behaviour change.
    The breaking change allows us to better type and re-use the method within astroid.

  • Improved signature of the __init__ and __postinit__ methods of most nodes.
    This includes making lineno, col_offset, end_lineno, end_col_offset and parent
    required arguments for nodes.NodeNG and its subclasses.
    For most other nodes, arguments of their __postinit__ methods have been made required to better
    represent how they would normally be constructed by the standard library ast module.
    The following nodes were changed or updated:

    • nodes.AnnAssign
    • nodes.Arguments
    • nodes.Assign
    • nodes.AssignAttr
    • nodes.AssignName
    • nodes.Attribute
    • nodes.AugAssign
    • nodes.Await
    • nodes.BaseContainer
    • nodes.BinOp
    • nodes.Call
    • nodes.ClassDef
    • nodes.Compare
    • nodes.Comprehension
    • nodes.Decorators
    • nodes.Delete
    • nodes.DelAttr
    • nodes.DelName
    • nodes.Dict
    • nodes.DictComp
    • nodes.ExceptHandler
    • nodes.Expr
    • nodes.For
    • nodes.FunctionDef
    • nodes.GeneratorExp
    • nodes.If
    • nodes.IfExp
    • nodes.Keyword
    • nodes.Lambda
    • nodes.ListComp
    • nodes.Module
    • nodes.Name
    • nodes.NodeNG
    • nodes.Raise
    • nodes.Return
    • nodes.SetComp
    • nodes.Slice
    • nodes.Starred
    • objects.Super, we also added the call parameter to its __init__ method.
    • nodes.Subscript
    • nodes.UnaryOp
    • nodes.While
    • nodes.Yield

    These changes involve breaking changes to their API but should be considered bug fixes. We
    now make arguments required when they are instead of always providing defaults.

  • nodes.If.self.is_orelse has been removed as it was never set correctly and therefore
    provided a false value.

  • Remove dependency on wrapt.

  • Remove dependency on lazy_object_proxy. This includes the removal
    of the associated lazy_import, lazy_descriptor and proxy_alias utility functions.

  • CallSite._unpack_args and CallSite._unpack_keywords now use safe_infer() for
    better inference and fewer false positives.

    Closes pylint-dev/pylint#8544

  • Add attr.Factory to the recognized class attributes for classes decorated with attrs.

    Closes pylint-dev/pylint#4341

  • infer_property() now observes the same property-specific workaround as infer_functiondef.

    Refs #1490

  • Remove unused and / or deprecated constants:

    • astroid.bases.BOOL_SPECIAL_METHOD
    • astroid.bases.BUILTINS
    • astroid.const.BUILTINS
    • astroid.const.PY38_PLUS
    • astroid.const.Load
    • astroid.const.Store
    • astroid.const.Del

    Refs #2141

  • frame() raises ParentMissingError and statement() raises StatementMissing for
    missing parents regardless of the value of the future argument (which gave this behavior
    already).

    The future argument to each method is deprecated and will be removed in astroid 4.0.

    Refs #1217

  • Remove deprecated Ellipsis, ExtSlice, Index nodes.

    Refs #2152

  • Remove deprecated is_sys_guard and is_typing_guard methods.

    Refs #2153

  • Remove deprecated doc attribute for Module, ClassDef, and FunctionDef.
    Use the doc_node attribute instead.

    Refs #2154

  • Add new nodes.Try to better match Python AST. Replaces the TryExcept
    and TryFinally nodes which have been removed.

  • Publicize NodeNG.repr_name() to facilitate finding a node's nice name.

    Refs pylint-dev/pylint#8598

  • Fix false positives for no-member and invalid-name when using the _name_, _value_ and _ignore_ sunders in Enums.

    Closes pylint-dev/pylint#9015