summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPierre Sassoulas <pierre.sassoulas@gmail.com>2021-04-24 14:47:22 +0200
committerPierre Sassoulas <pierre.sassoulas@gmail.com>2021-04-24 15:15:41 +0200
commitf16b535a25ca9f1253fe608d0e59db42c7d89a62 (patch)
treef041d5bc51a0e126aac83faca69e3690b5f509c2
parent04d2c3ddd9d991d60211d22e8bb7e56caf5befa7 (diff)
downloadastroid-git-fix-self-inflicted-circular-import.tar.gz
Fix a strange construct that seem unnecessaryfix-self-inflicted-circular-import
And probably contribute to the circular import problem.
-rw-r--r--astroid/bases.py21
-rw-r--r--astroid/builder.py6
-rw-r--r--astroid/inference.py22
3 files changed, 20 insertions, 29 deletions
diff --git a/astroid/bases.py b/astroid/bases.py
index 05c0ae1c..0888f063 100644
--- a/astroid/bases.py
+++ b/astroid/bases.py
@@ -283,6 +283,23 @@ class Instance(BaseInstance):
except exceptions.AttributeInferenceError:
return False
+ def getitem(self, index, context=None):
+ # TODO: Rewrap index to Const for this case
+ new_context = contextmod.bind_context_to_node(context, self)
+ if not context:
+ context = new_context
+
+ # Create a new callcontext for providing index as an argument.
+ new_context.callcontext = contextmod.CallContext(args=[index])
+
+ method = next(self.igetattr("__getitem__", context=context), None)
+ if not isinstance(method, BoundMethod):
+ raise exceptions.InferenceError(
+ "Could not find __getitem__ for {node!r}.", node=self, context=context
+ )
+
+ return next(method.infer_call_result(self, new_context))
+
def pytype(self):
return self._proxied.qname()
@@ -316,10 +333,6 @@ class Instance(BaseInstance):
return True
return result
- # This is set in inference.py.
- def getitem(self, index, context=None):
- pass
-
class UnboundMethod(Proxy):
"""a special node representing a method not bound to an instance"""
diff --git a/astroid/builder.py b/astroid/builder.py
index de5acac1..5a87c0fe 100644
--- a/astroid/builder.py
+++ b/astroid/builder.py
@@ -18,10 +18,10 @@
The builder is not thread safe and can't be used to parse different sources
at the same time.
"""
-
import os
import textwrap
from tokenize import detect_encoding
+from typing import List, Union
from astroid import (
bases,
@@ -34,6 +34,7 @@ from astroid import (
util,
)
from astroid._ast import get_parser_module
+from astroid.node_classes import NodeNG
objects = util.lazy_import("objects")
@@ -357,7 +358,7 @@ def _find_statement_by_line(node, line):
return None
-def extract_node(code, module_name=""):
+def extract_node(code: str, module_name: str = "") -> Union[NodeNG, List[NodeNG]]:
"""Parses some Python code as a module and extracts a designated AST node.
Statements:
@@ -409,7 +410,6 @@ def extract_node(code, module_name=""):
a module. Will be passed through textwrap.dedent first.
:param str module_name: The name of the module.
:returns: The designated node from the parse tree, or a list of nodes.
- :rtype: astroid.bases.NodeNG, or a list of nodes.
"""
def _extract(node):
diff --git a/astroid/inference.py b/astroid/inference.py
index 9c800fa8..23a4092c 100644
--- a/astroid/inference.py
+++ b/astroid/inference.py
@@ -872,28 +872,6 @@ def infer_index(self, context=None):
nodes.Index._infer = infer_index
-# TODO: move directly into bases.Instance when the dependency hell
-# will be solved.
-def instance_getitem(self, index, context=None):
- # Rewrap index to Const for this case
- new_context = contextmod.bind_context_to_node(context, self)
- if not context:
- context = new_context
-
- # Create a new callcontext for providing index as an argument.
- new_context.callcontext = contextmod.CallContext(args=[index])
-
- method = next(self.igetattr("__getitem__", context=context), None)
- if not isinstance(method, bases.BoundMethod):
- raise exceptions.InferenceError(
- "Could not find __getitem__ for {node!r}.", node=self, context=context
- )
-
- return next(method.infer_call_result(self, new_context))
-
-
-bases.Instance.getitem = instance_getitem
-
def _populate_context_lookup(call, context):
# Allows context to be saved for later