Fix attrs + remove dataclass_transform init=false tests

This commit is contained in:
Eric Masseran
2025-03-17 23:51:53 +01:00
parent bd1edfce78
commit e140523211
2 changed files with 17 additions and 29 deletions

View File

@@ -624,8 +624,11 @@ def _dataclass(value, arguments, callback):
)
]
)
else:
# Decorator customization
elif c.is_function():
# dataclass_transform on a decorator equivalent of @dataclass
return ValueSet([value])
elif value.name.string_name != "dataclass_transform":
# dataclass (or like) decorator customization
return ValueSet(
[
DataclassDecorator(
@@ -634,6 +637,9 @@ def _dataclass(value, arguments, callback):
)
]
)
else:
# dataclass_transform decorator customization; nothing impactful
return ValueSet([value])
return NO_VALUES
@@ -796,17 +802,6 @@ _implemented = {
# For now this works at least better than Jedi trying to understand it.
'dataclass': _dataclass
},
# attrs exposes declaration interface roughly compatible with dataclasses
# via attrs.define, attrs.frozen and attrs.mutable
# https://www.attrs.org/en/stable/names.html
'attr': {
'define': _dataclass,
'frozen': _dataclass,
},
'attrs': {
'define': _dataclass,
'frozen': _dataclass,
},
'os.path': {
'dirname': _create_string_input_function(os.path.dirname),
'abspath': _create_string_input_function(os.path.abspath),

View File

@@ -432,7 +432,7 @@ dataclass_transform_cases = [
# Base Class
['@dataclass_transform\nclass X:', [], False],
# Base Class with params
['@dataclass_transform(eq=True)\nclass X:', [], False],
['@dataclass_transform(eq_default=True)\nclass X:', [], False],
# Subclass
[dedent('''
class Y():
@@ -447,6 +447,13 @@ dataclass_transform_cases = [
y: int
z = 5
class X(Y):'''), [], True],
# Class based with params
[dedent('''
@dataclass_transform(eq_default=True)
class Y():
y: int
z = 5
class X(Y):'''), [], True],
# Decorator based
[dedent('''
@dataclass_transform
@@ -465,19 +472,6 @@ dataclass_transform_cases = [
p = 5
class X(ModelBase):'''), [], True],
# 3/ Init tweaks
# init=False
[dedent('''
@dataclass_transform(init=False)
class Y():
y: int
z = 5
class X(Y):'''), [], False],
[dedent('''
@dataclass_transform(eq=True, init=False)
class Y():
y: int
z = 5
class X(Y):'''), [], False],
# custom init
[dedent('''
@dataclass_transform()
@@ -495,10 +489,9 @@ ids = [
"transformer_with_params",
"subclass_transformer",
"base_transformed",
"base_transformed_with_params",
"decorator_transformed",
"metaclass_transformed",
"init_false",
"init_false_multiple",
"custom_init",
]