mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-07 14:34:31 +08:00
Differentiate between functions and methods
This makes some analysis a lot easier when it comes to default arguments for example
This commit is contained in:
@@ -79,14 +79,27 @@ class FunctionContext(use_metaclass(CachedMetaClass, AbstractFunction)):
|
|||||||
@classmethod
|
@classmethod
|
||||||
def from_context(cls, context, tree_node):
|
def from_context(cls, context, tree_node):
|
||||||
def create(tree_node):
|
def create(tree_node):
|
||||||
return cls(context.evaluator, parent_context=context, tree_node=tree_node)
|
if context.is_class():
|
||||||
|
return MethodContext(
|
||||||
|
context.evaluator,
|
||||||
|
context,
|
||||||
|
parent_context=parent_context,
|
||||||
|
tree_node=tree_node
|
||||||
|
)
|
||||||
|
else:
|
||||||
|
return cls(
|
||||||
|
context.evaluator,
|
||||||
|
parent_context=parent_context,
|
||||||
|
tree_node=tree_node
|
||||||
|
)
|
||||||
|
|
||||||
from jedi.evaluate.context import AbstractInstanceContext
|
from jedi.evaluate.context import AbstractInstanceContext
|
||||||
|
|
||||||
overloaded_funcs = list(_find_overload_functions(context, tree_node))
|
overloaded_funcs = list(_find_overload_functions(context, tree_node))
|
||||||
|
|
||||||
while context.is_class() or isinstance(context, AbstractInstanceContext):
|
parent_context = context
|
||||||
context = context.parent_context
|
while parent_context.is_class() or isinstance(parent_context, AbstractInstanceContext):
|
||||||
|
parent_context = parent_context.parent_context
|
||||||
|
|
||||||
function = create(tree_node)
|
function = create(tree_node)
|
||||||
|
|
||||||
@@ -111,6 +124,12 @@ class FunctionContext(use_metaclass(CachedMetaClass, AbstractFunction)):
|
|||||||
return compiled.get_special_object(self.evaluator, u'FUNCTION_CLASS')
|
return compiled.get_special_object(self.evaluator, u'FUNCTION_CLASS')
|
||||||
|
|
||||||
|
|
||||||
|
class MethodContext(FunctionContext):
|
||||||
|
def __init__(self, evaluator, class_context, *args, **kwargs):
|
||||||
|
super(MethodContext, self).__init__(evaluator, *args, **kwargs)
|
||||||
|
self.class_context = class_context
|
||||||
|
|
||||||
|
|
||||||
class FunctionExecutionContext(TreeContext):
|
class FunctionExecutionContext(TreeContext):
|
||||||
"""
|
"""
|
||||||
This class is used to evaluate functions and their returns.
|
This class is used to evaluate functions and their returns.
|
||||||
|
|||||||
Reference in New Issue
Block a user