diff options
author | Pierre Sassoulas <pierre.sassoulas@gmail.com> | 2021-04-24 14:47:22 +0200 |
---|---|---|
committer | Pierre Sassoulas <pierre.sassoulas@gmail.com> | 2021-04-24 15:15:41 +0200 |
commit | f16b535a25ca9f1253fe608d0e59db42c7d89a62 (patch) | |
tree | f041d5bc51a0e126aac83faca69e3690b5f509c2 | |
parent | 04d2c3ddd9d991d60211d22e8bb7e56caf5befa7 (diff) | |
download | astroid-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.py | 21 | ||||
-rw-r--r-- | astroid/builder.py | 6 | ||||
-rw-r--r-- | astroid/inference.py | 22 |
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 |