forked from VimPlug/jedi
Fix decorator transformed case
This commit is contained in:
@@ -24,6 +24,7 @@ from jedi.inference.value.instance import \
|
|||||||
from jedi.inference.base_value import ContextualizedNode, \
|
from jedi.inference.base_value import ContextualizedNode, \
|
||||||
NO_VALUES, ValueSet, ValueWrapper, LazyValueWrapper
|
NO_VALUES, ValueSet, ValueWrapper, LazyValueWrapper
|
||||||
from jedi.inference.value import ClassValue, ModuleValue
|
from jedi.inference.value import ClassValue, ModuleValue
|
||||||
|
from jedi.inference.value.decorator import Decoratee
|
||||||
from jedi.inference.value.klass import DataclassWrapper, DataclassDecorator
|
from jedi.inference.value.klass import DataclassWrapper, DataclassDecorator
|
||||||
from jedi.inference.value.function import FunctionMixin
|
from jedi.inference.value.function import FunctionMixin
|
||||||
from jedi.inference.value import iterable
|
from jedi.inference.value import iterable
|
||||||
@@ -597,7 +598,7 @@ def _dataclass(value, arguments, callback):
|
|||||||
"""
|
"""
|
||||||
for c in _follow_param(value.inference_state, arguments, 0):
|
for c in _follow_param(value.inference_state, arguments, 0):
|
||||||
if c.is_class():
|
if c.is_class():
|
||||||
# Decorate a class
|
# Decorate a dataclass / base dataclass
|
||||||
dataclass_init = (
|
dataclass_init = (
|
||||||
# Customized decorator, init may be disabled
|
# Customized decorator, init may be disabled
|
||||||
not value.has_dataclass_init_false
|
not value.has_dataclass_init_false
|
||||||
@@ -606,17 +607,22 @@ def _dataclass(value, arguments, callback):
|
|||||||
else True
|
else True
|
||||||
)
|
)
|
||||||
|
|
||||||
|
is_dataclass_transform = (
|
||||||
|
value.name.string_name == "dataclass_transform"
|
||||||
|
# The decorator function from dataclass_transform acting as the
|
||||||
|
# dataclass decorator.
|
||||||
|
and not isinstance(value, Decoratee)
|
||||||
|
)
|
||||||
|
|
||||||
return ValueSet(
|
return ValueSet(
|
||||||
[
|
[
|
||||||
DataclassWrapper(
|
DataclassWrapper(
|
||||||
c,
|
c,
|
||||||
dataclass_init,
|
dataclass_init,
|
||||||
is_dataclass_transform=value.name.string_name
|
is_dataclass_transform,
|
||||||
== "dataclass_transform",
|
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
|
||||||
else:
|
else:
|
||||||
# Decorator customization
|
# Decorator customization
|
||||||
return ValueSet(
|
return ValueSet(
|
||||||
|
|||||||
@@ -450,8 +450,8 @@ dataclass_transform_cases = [
|
|||||||
# Decorator based
|
# Decorator based
|
||||||
[dedent('''
|
[dedent('''
|
||||||
@dataclass_transform
|
@dataclass_transform
|
||||||
def create_model(cls):
|
def create_model():
|
||||||
return cls
|
pass
|
||||||
@create_model
|
@create_model
|
||||||
class X:'''), [], True],
|
class X:'''), [], True],
|
||||||
# Metaclass based
|
# Metaclass based
|
||||||
|
|||||||
Reference in New Issue
Block a user