1
0
forked from VimPlug/jedi

Fix decorator transformed case

This commit is contained in:
Eric Masseran
2025-03-15 16:42:16 +01:00
parent 50778c390f
commit 7dcb944b05
2 changed files with 12 additions and 6 deletions

View File

@@ -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(

View File

@@ -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