From e1405232110473214577c8f8374678fb8a1e1ab7 Mon Sep 17 00:00:00 2001 From: Eric Masseran Date: Mon, 17 Mar 2025 23:51:53 +0100 Subject: [PATCH] Fix attrs + remove dataclass_transform init=false tests --- jedi/plugins/stdlib.py | 21 ++++++++------------- test/test_inference/test_signature.py | 25 +++++++++---------------- 2 files changed, 17 insertions(+), 29 deletions(-) diff --git a/jedi/plugins/stdlib.py b/jedi/plugins/stdlib.py index 604cd595..491a3b61 100644 --- a/jedi/plugins/stdlib.py +++ b/jedi/plugins/stdlib.py @@ -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), diff --git a/test/test_inference/test_signature.py b/test/test_inference/test_signature.py index 21744ad8..47c9f032 100644 --- a/test/test_inference/test_signature.py +++ b/test/test_inference/test_signature.py @@ -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", ]