1
0
forked from VimPlug/jedi

Document a special case in Django a bit better

This commit is contained in:
Dave Halter
2020-06-14 22:23:08 +02:00
parent 9de5ab2037
commit 1702a6340e

View File

@@ -13,7 +13,6 @@ from jedi.inference.value.klass import ClassMixin
from jedi.inference.gradual.base import GenericClass from jedi.inference.gradual.base import GenericClass
from jedi.inference.gradual.generics import TupleGenericManager from jedi.inference.gradual.generics import TupleGenericManager
from jedi.inference.signature import AbstractSignature from jedi.inference.signature import AbstractSignature
from jedi.inference.value.function import FunctionMixin
mapping = { mapping = {
@@ -37,6 +36,9 @@ mapping = {
'UUIDField': ('uuid', 'UUID'), 'UUIDField': ('uuid', 'UUID'),
} }
_FILTER_LIKE_METHODS = ('create', 'filter', 'exclude', 'update', 'get',
'get_or_create', 'update_or_create')
@inference_state_function_cache() @inference_state_function_cache()
def _get_deferred_attributes(inference_state): def _get_deferred_attributes(inference_state):
@@ -172,8 +174,10 @@ def get_metaclass_filters(func):
def tree_name_to_values(func): def tree_name_to_values(func):
def wrapper(inference_state, context, tree_name): def wrapper(inference_state, context, tree_name):
result = func(inference_state, context, tree_name) result = func(inference_state, context, tree_name)
if tree_name.value in ('create', 'filter', 'exclude', 'update', 'get', if tree_name.value in _FILTER_LIKE_METHODS:
'get_or_create', 'update_or_create'): # Here we try to overwrite stuff like User.objects.filter. We need
# this to make sure that keyword param completion works on these
# kind of methods.
for v in result: for v in result:
if v.get_qualified_names() == ('_BaseQuerySet', tree_name.value) \ if v.get_qualified_names() == ('_BaseQuerySet', tree_name.value) \
and v.parent_context.is_module() \ and v.parent_context.is_module() \
@@ -183,11 +187,12 @@ def tree_name_to_values(func):
if len(generics) >= 1: if len(generics) >= 1:
return ValueSet(QuerySetMethodWrapper(v, model) return ValueSet(QuerySetMethodWrapper(v, model)
for model in generics[0]) for model in generics[0])
if tree_name.value == 'BaseManager' and context.is_module() \
elif tree_name.value == 'BaseManager' and context.is_module() \
and context.py__name__() == 'django.db.models.manager': and context.py__name__() == 'django.db.models.manager':
return ValueSet(ManagerWrapper(r) for r in result) return ValueSet(ManagerWrapper(r) for r in result)
if tree_name.value == 'Field' and context.is_module() \ elif tree_name.value == 'Field' and context.is_module() \
and context.py__name__() == 'django.db.models.fields': and context.py__name__() == 'django.db.models.fields':
return ValueSet(FieldWrapper(r) for r in result) return ValueSet(FieldWrapper(r) for r in result)
return result return result