summaryrefslogtreecommitdiff
path: root/dev-python/astroid
diff options
context:
space:
mode:
Diffstat (limited to 'dev-python/astroid')
-rw-r--r--dev-python/astroid/Manifest7
-rw-r--r--dev-python/astroid/astroid-3.2.4.ebuild94
-rw-r--r--dev-python/astroid/astroid-3.3.2.ebuild (renamed from dev-python/astroid/astroid-3.2.2.ebuild)19
-rw-r--r--dev-python/astroid/files/astroid-3.2.2-py313.patch177
4 files changed, 293 insertions, 4 deletions
diff --git a/dev-python/astroid/Manifest b/dev-python/astroid/Manifest
index c2eb4e1efcae..161b0686684a 100644
--- a/dev-python/astroid/Manifest
+++ b/dev-python/astroid/Manifest
@@ -1,3 +1,6 @@
-DIST astroid-3.2.2.gh.tar.gz 465306 BLAKE2B f5bda1377eb825f4166804473eab592d07c6353295dca01517c3facf783ec71f281a27f6344699097784dde7315f794a62cbfae86879b2bbe446fb1191d40995 SHA512 1330f557664b5066309879b8bf05e29102000a6e08c63d94a7e7033f1e2295a3a9c3114f3587b9867f71b49e11428036438e4f22352498494f914f7c9f60d4ea
-EBUILD astroid-3.2.2.ebuild 1963 BLAKE2B ed12519eb12af0c2720e2b3a1613fcf1b1f35c6c67ef552ff3fe1395636387f91464f2581819cbb08efdbac9ca36cc03cfae402e644207feed2e7f8e18873426 SHA512 388b0ac1c1f74f1d63b97b74243560d2c7f837270af7bd3a74ee0063165de9963d1cb49baf1a56df47b80defa929e7b2c14f0e9d8741a8b47e1170c9b8599bae
+AUX astroid-3.2.2-py313.patch 6670 BLAKE2B cb969f85e7810a2d1ef8088a9d35bc086df001589bd0de58be204db762e59aa145f930d275a02f49868277514a5ec492020d1537b323582b79733a5aebb6ba28 SHA512 d2800eab3ba1c54048a24758c9fbfb911a5af0add7a24d0c00f3b245a1a7fb5efbed9614ed5e0032fbf619a473192ba8039047bffdf33fdcdc027a22db2a5643
+DIST astroid-3.2.4.gh.tar.gz 465788 BLAKE2B 745a860b7bacb45cb86e9b232fe3a37cdac40cb471b00832a7dd7da4c3374760749cebe8c8688748e750cc3639554515a7a9e24f5f4d2ebac10af2c906fa04a9 SHA512 e48289794f67cf53bb8a2dcf357c1e892140a0a625c2e19601cf5ad579aaa33a94f0e052915fa6e854bc0a2e626f41b2d13773aa2b2af2412efeb33d030ed2b6
+DIST astroid-3.3.2.gh.tar.gz 464183 BLAKE2B a891a57ce697e539b865ead8f1a1a42aa57962d1ac3cb39624f3c8cac1a233ce5ed207a87f6b8ef0b2fcacc296610819d5612262a6fbfe08eed20a2955b168c4 SHA512 dc9777e701f0bf3dc5367da8e7c79eeba18f485ad1425f8e3e50814efef9f8fd0e11f30363d1c602cfd05c51b2b2e9749989da1413db59c9f648fbc47cfbc8ae
+EBUILD astroid-3.2.4.ebuild 3145 BLAKE2B 2ce16528e2f66f092bdd5acce0798195a926e2875aa0cf0c3fe0f33283b515a8389c743c83cfea98807763c87067abf104177124c864a1bb1516532889a18ee4 SHA512 d61457b9365b8b1fd34bbddd51c1ae7bc080381c2fbc5881e426e12aebe2188d5399e05ca2bdea6a2c1217e0d39ea25bfe2ade2c3c38385fbacc0bd5f3219348
+EBUILD astroid-3.3.2.ebuild 3032 BLAKE2B 22afafb3cf6f25836fd9031e3719e84c9230068bbd4b5d49f14da9dd055b5391894d3addf1cefc6b86c78241a1cabff95aaed0994ce57c4225406c9db023a13d SHA512 7f6b07fb1fca8bcc301c22b5a21a588f25ecab228585b41f09a7c23004d2924991e02a1b0e8af2ae49cc14879be948f5e743fb9a3c766ce970592909027786f4
MISC metadata.xml 1148 BLAKE2B 29a6cfc0c292117920be154d37ed4770f1fb1679186576fe6151cc02d1d6be766045e0231e2fceb87cbd250dbed3888c99b7ca7dc0182cc700a11961d9cd6d9e SHA512 6821d13f5e82bd73ee4fd165c0b4c94f40cd6af536dee1658cccb4175e67da2611c4d1478cdef1607535f23224116ad482197e0b0eef8f0a94d596bf250b3074
diff --git a/dev-python/astroid/astroid-3.2.4.ebuild b/dev-python/astroid/astroid-3.2.4.ebuild
new file mode 100644
index 000000000000..0430cda4065d
--- /dev/null
+++ b/dev-python/astroid/astroid-3.2.4.ebuild
@@ -0,0 +1,94 @@
+# Copyright 1999-2024 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=8
+
+DISTUTILS_USE_PEP517=setuptools
+PYTHON_COMPAT=( pypy3 python3_{10..13} )
+
+inherit distutils-r1
+
+DESCRIPTION="Abstract Syntax Tree for logilab packages"
+HOMEPAGE="
+ https://github.com/pylint-dev/astroid/
+ https://pypi.org/project/astroid/
+"
+SRC_URI="
+ https://github.com/pylint-dev/astroid/archive/v${PV}.tar.gz
+ -> ${P}.gh.tar.gz
+"
+
+LICENSE="LGPL-2.1+"
+SLOT="0"
+KEYWORDS="~alpha amd64 arm arm64 hppa ~ia64 ~loong ~m68k ~mips ppc ppc64 ~riscv ~s390 sparc x86"
+
+# Version specified in pyproject.toml
+RDEPEND="
+ $(python_gen_cond_dep '
+ >=dev-python/typing-extensions-4.0.0[${PYTHON_USEDEP}]
+ ' 3.10)
+"
+# dev-python/regex isn't available for pypy
+BDEPEND="
+ dev-python/setuptools-scm[${PYTHON_USEDEP}]
+ test? (
+ dev-python/attrs[${PYTHON_USEDEP}]
+ >=dev-python/numpy-1.17.0[${PYTHON_USEDEP}]
+ dev-python/python-dateutil[${PYTHON_USEDEP}]
+ $(python_gen_cond_dep '
+ dev-python/regex[${PYTHON_USEDEP}]
+ ' 'python*')
+ )
+"
+
+distutils_enable_tests pytest
+
+export SETUPTOOLS_SCM_PRETEND_VERSION=${PV}
+
+PATCHES=(
+ # https://github.com/pylint-dev/astroid/pull/2424 (rebased)
+ "${FILESDIR}/${PN}-3.2.2-py313.patch"
+)
+
+python_test() {
+ local EPYTEST_DESELECT=(
+ # no clue why they're broken
+ tests/test_modutils.py::GetModulePartTest::test_known_values_get_builtin_module_part
+ tests/test_regrtest.py::NonRegressionTests::test_numpy_distutils
+ # pydantic-2?
+ tests/brain/test_dataclasses.py::test_pydantic_field
+ # requires urllib3 with bundled six (skipped with urllib3>=2)
+ tests/test_modutils.py::test_file_info_from_modpath__SixMetaPathImporter
+ # hangs
+ tests/test_nodes.py::AsStringTest::test_recursion_error_trapped
+ # TODO
+ tests/test_builder.py::BuilderTest::test_data_build_error_filename
+ # numpy-2 (https://github.com/pylint-dev/astroid/issues/2442)
+ tests/brain/numpy/test_core_einsumfunc.py::test_numpy_function_calls_inferred_as_ndarray
+ tests/brain/numpy/test_core_fromnumeric.py::BrainNumpyCoreFromNumericTest::test_numpy_function_calls_inferred_as_ndarray
+ tests/brain/numpy/test_core_multiarray.py::BrainNumpyCoreMultiarrayTest::test_numpy_function_calls_inferred_as_ndarray
+ tests/brain/numpy/test_core_numerictypes.py::NumpyBrainCoreNumericTypesTest::test_datetime_astype_return
+ tests/brain/numpy/test_core_numerictypes.py::NumpyBrainCoreNumericTypesTest::test_generic_types_are_subscriptables
+ tests/brain/numpy/test_core_umath.py::NumpyBrainCoreUmathTest::test_numpy_core_umath_functions_return_type
+ tests/brain/numpy/test_core_umath.py::NumpyBrainCoreUmathTest::test_numpy_core_umath_functions_return_type_tuple
+ )
+
+ case ${EPYTHON} in
+ pypy3)
+ EPYTEST_DESELECT+=(
+ tests/test_transforms.py::TestTransforms::test_transform_aborted_if_recursion_limited
+ )
+ ;;
+ python3.13)
+ EPYTEST_DESELECT+=(
+ # changes in py3.13.0b4
+ # https://github.com/pylint-dev/astroid/issues/2478
+ tests/test_nodes.py::AsStringTest::test_f_strings
+ tests/test_nodes_lineno.py::TestLinenoColOffset::test_end_lineno_string
+ )
+ ;;
+ esac
+
+ local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
+ epytest
+}
diff --git a/dev-python/astroid/astroid-3.2.2.ebuild b/dev-python/astroid/astroid-3.3.2.ebuild
index 84488dfc368a..b93d44fd7e2a 100644
--- a/dev-python/astroid/astroid-3.2.2.ebuild
+++ b/dev-python/astroid/astroid-3.3.2.ebuild
@@ -4,7 +4,7 @@
EAPI=8
DISTUTILS_USE_PEP517=setuptools
-PYTHON_COMPAT=( pypy3 python3_{10..12} )
+PYTHON_COMPAT=( pypy3 python3_{10..13} )
inherit distutils-r1
@@ -33,7 +33,6 @@ BDEPEND="
dev-python/setuptools-scm[${PYTHON_USEDEP}]
test? (
dev-python/attrs[${PYTHON_USEDEP}]
- <dev-python/numpy-2[${PYTHON_USEDEP}]
>=dev-python/numpy-1.17.0[${PYTHON_USEDEP}]
dev-python/python-dateutil[${PYTHON_USEDEP}]
$(python_gen_cond_dep '
@@ -59,6 +58,14 @@ python_test() {
tests/test_nodes.py::AsStringTest::test_recursion_error_trapped
# TODO
tests/test_builder.py::BuilderTest::test_data_build_error_filename
+ # numpy-2 (https://github.com/pylint-dev/astroid/issues/2442)
+ tests/brain/numpy/test_core_einsumfunc.py::test_numpy_function_calls_inferred_as_ndarray
+ tests/brain/numpy/test_core_fromnumeric.py::BrainNumpyCoreFromNumericTest::test_numpy_function_calls_inferred_as_ndarray
+ tests/brain/numpy/test_core_multiarray.py::BrainNumpyCoreMultiarrayTest::test_numpy_function_calls_inferred_as_ndarray
+ tests/brain/numpy/test_core_numerictypes.py::NumpyBrainCoreNumericTypesTest::test_datetime_astype_return
+ tests/brain/numpy/test_core_numerictypes.py::NumpyBrainCoreNumericTypesTest::test_generic_types_are_subscriptables
+ tests/brain/numpy/test_core_umath.py::NumpyBrainCoreUmathTest::test_numpy_core_umath_functions_return_type
+ tests/brain/numpy/test_core_umath.py::NumpyBrainCoreUmathTest::test_numpy_core_umath_functions_return_type_tuple
)
case ${EPYTHON} in
@@ -67,6 +74,14 @@ python_test() {
tests/test_transforms.py::TestTransforms::test_transform_aborted_if_recursion_limited
)
;;
+ python3.13)
+ EPYTEST_DESELECT+=(
+ # changes in py3.13.0b4
+ # https://github.com/pylint-dev/astroid/issues/2478
+ tests/test_nodes.py::AsStringTest::test_f_strings
+ tests/test_nodes_lineno.py::TestLinenoColOffset::test_end_lineno_string
+ )
+ ;;
esac
local -x PYTEST_DISABLE_PLUGIN_AUTOLOAD=1
diff --git a/dev-python/astroid/files/astroid-3.2.2-py313.patch b/dev-python/astroid/files/astroid-3.2.2-py313.patch
new file mode 100644
index 000000000000..f8addfe9ef7c
--- /dev/null
+++ b/dev-python/astroid/files/astroid-3.2.2-py313.patch
@@ -0,0 +1,177 @@
+diff --git a/astroid/brain/brain_dataclasses.py b/astroid/brain/brain_dataclasses.py
+index 88a4385f..743dfe96 100644
+--- a/astroid/brain/brain_dataclasses.py
++++ b/astroid/brain/brain_dataclasses.py
+@@ -19,7 +19,7 @@ from typing import Literal, Tuple, Union
+
+ from astroid import bases, context, nodes
+ from astroid.builder import parse
+-from astroid.const import PY39_PLUS, PY310_PLUS
++from astroid.const import PY39_PLUS, PY310_PLUS, PY313_PLUS
+ from astroid.exceptions import AstroidSyntaxError, InferenceError, UseInferenceDefault
+ from astroid.inference_tip import inference_tip
+ from astroid.manager import AstroidManager
+@@ -503,6 +503,15 @@ def _looks_like_dataclass_field_call(
+ return inferred.name == FIELD_NAME and inferred.root().name in DATACLASS_MODULES
+
+
++def _looks_like_dataclasses(node: nodes.Module) -> bool:
++ return node.qname() == "dataclasses"
++
++
++def _resolve_private_replace_to_public(node: nodes.Module) -> None:
++ if "_replace" in node.locals:
++ node.locals["replace"] = node.locals["_replace"]
++
++
+ def _get_field_default(field_call: nodes.Call) -> _FieldDefaultReturn:
+ """Return a the default value of a field call, and the corresponding keyword
+ argument name.
+@@ -618,6 +627,13 @@ def _infer_instance_from_annotation(
+
+
+ def register(manager: AstroidManager) -> None:
++ if PY313_PLUS:
++ manager.register_transform(
++ nodes.Module,
++ _resolve_private_replace_to_public,
++ _looks_like_dataclasses,
++ )
++
+ manager.register_transform(
+ nodes.ClassDef, dataclass_transform, is_decorated_with_dataclass
+ )
+diff --git a/astroid/brain/brain_pathlib.py b/astroid/brain/brain_pathlib.py
+index 116cd2ee..d0f53132 100644
+--- a/astroid/brain/brain_pathlib.py
++++ b/astroid/brain/brain_pathlib.py
+@@ -8,6 +8,7 @@ from collections.abc import Iterator
+
+ from astroid import bases, context, inference_tip, nodes
+ from astroid.builder import _extract_single_node
++from astroid.const import PY313_PLUS
+ from astroid.exceptions import InferenceError, UseInferenceDefault
+ from astroid.manager import AstroidManager
+
+@@ -27,10 +28,11 @@ def _looks_like_parents_subscript(node: nodes.Subscript) -> bool:
+ value = next(node.value.infer())
+ except (InferenceError, StopIteration):
+ return False
++ parents = "builtins.tuple" if PY313_PLUS else "pathlib._PathParents"
+ return (
+ isinstance(value, bases.Instance)
+ and isinstance(value._proxied, nodes.ClassDef)
+- and value.qname() == "pathlib._PathParents"
++ and value.qname() == parents
+ )
+
+
+diff --git a/astroid/brain/brain_typing.py b/astroid/brain/brain_typing.py
+index 9965abc2..7a7c7183 100644
+--- a/astroid/brain/brain_typing.py
++++ b/astroid/brain/brain_typing.py
+@@ -15,7 +15,7 @@ from typing import Final
+ from astroid import context, extract_node, inference_tip
+ from astroid.brain.helpers import register_module_extender
+ from astroid.builder import AstroidBuilder, _extract_single_node
+-from astroid.const import PY39_PLUS, PY312_PLUS
++from astroid.const import PY39_PLUS, PY312_PLUS, PY313_PLUS
+ from astroid.exceptions import (
+ AstroidSyntaxError,
+ AttributeInferenceError,
+@@ -168,6 +168,15 @@ def infer_typing_attr(
+ # If typing subscript belongs to an alias handle it separately.
+ raise UseInferenceDefault
+
++ if (
++ PY313_PLUS
++ and isinstance(value, FunctionDef)
++ and value.qname() == "typing.Annotated"
++ ):
++ # typing.Annotated is a FunctionDef on 3.13+
++ node._explicit_inference = lambda node, context: iter([value])
++ return iter([value])
++
+ if isinstance(value, ClassDef) and value.qname() in {
+ "typing.Generic",
+ "typing.Annotated",
+diff --git a/tests/brain/test_brain.py b/tests/brain/test_brain.py
+index b8bc84e3..78b6f8b3 100644
+--- a/tests/brain/test_brain.py
++++ b/tests/brain/test_brain.py
+@@ -647,7 +647,7 @@ class TypingBrain(unittest.TestCase):
+
+ @test_utils.require_version(minver="3.9")
+ def test_typing_annotated_subscriptable(self):
+- """Test typing.Annotated is subscriptable with __class_getitem__"""
++ """typing.Annotated is subscriptable with __class_getitem__ below 3.13."""
+ node = builder.extract_node(
+ """
+ import typing
+@@ -655,8 +655,13 @@ class TypingBrain(unittest.TestCase):
+ """
+ )
+ inferred = next(node.infer())
+- assert isinstance(inferred, nodes.ClassDef)
+- assert isinstance(inferred.getattr("__class_getitem__")[0], nodes.FunctionDef)
++ if PY313_PLUS:
++ assert isinstance(inferred, nodes.FunctionDef)
++ else:
++ assert isinstance(inferred, nodes.ClassDef)
++ assert isinstance(
++ inferred.getattr("__class_getitem__")[0], nodes.FunctionDef
++ )
+
+ def test_typing_generic_slots(self):
+ """Test slots for Generic subclass."""
+diff --git a/tests/brain/test_pathlib.py b/tests/brain/test_pathlib.py
+index d935d964..5aea8d37 100644
+--- a/tests/brain/test_pathlib.py
++++ b/tests/brain/test_pathlib.py
+@@ -5,7 +5,7 @@
+
+ import astroid
+ from astroid import bases
+-from astroid.const import PY310_PLUS
++from astroid.const import PY310_PLUS, PY313_PLUS
+ from astroid.util import Uninferable
+
+
+@@ -23,7 +23,10 @@ def test_inference_parents() -> None:
+ inferred = name_node.inferred()
+ assert len(inferred) == 1
+ assert isinstance(inferred[0], bases.Instance)
+- assert inferred[0].qname() == "pathlib._PathParents"
++ if PY313_PLUS:
++ assert inferred[0].qname() == "builtins.tuple"
++ else:
++ assert inferred[0].qname() == "pathlib._PathParents"
+
+
+ def test_inference_parents_subscript_index() -> None:
+@@ -40,7 +43,10 @@ def test_inference_parents_subscript_index() -> None:
+ inferred = path.inferred()
+ assert len(inferred) == 1
+ assert isinstance(inferred[0], bases.Instance)
+- assert inferred[0].qname() == "pathlib.Path"
++ if PY313_PLUS:
++ assert inferred[0].qname() == "pathlib._local.Path"
++ else:
++ assert inferred[0].qname() == "pathlib.Path"
+
+
+ def test_inference_parents_subscript_slice() -> None:
+diff --git a/tests/test_inference.py b/tests/test_inference.py
+index ec8fc71b..95f00821 100644
+--- a/tests/test_inference.py
++++ b/tests/test_inference.py
+@@ -4458,8 +4458,7 @@ class InferenceTest(resources.SysPathSetup, unittest.TestCase):
+ # and reraise it as a TypeError in Class.getitem
+ node = extract_node(
+ """
+- def test():
+- yield
++ def test(): ...
+ test()
+ """
+ )