From a3fd90d734804ba9937fcf9b62af65618b7c5871 Mon Sep 17 00:00:00 2001 From: Eric Masseran Date: Tue, 18 Mar 2025 00:42:58 +0100 Subject: [PATCH] Fix dataclass decorator other parameters --- jedi/plugins/stdlib.py | 3 +++ test/test_inference/test_signature.py | 38 +++++++++++++++++++++++---- 2 files changed, 36 insertions(+), 5 deletions(-) diff --git a/jedi/plugins/stdlib.py b/jedi/plugins/stdlib.py index 618965ca..0636e705 100644 --- a/jedi/plugins/stdlib.py +++ b/jedi/plugins/stdlib.py @@ -613,6 +613,9 @@ def _dataclass(value, arguments, callback): # The decorator function from dataclass_transform acting as the # dataclass decorator. and not isinstance(value, Decoratee) + # The decorator function from dataclass_transform acting as the + # dataclass decorator with customized parameters + and not isinstance(value, DataclassDecorator) ) return ValueSet( diff --git a/test/test_inference/test_signature.py b/test/test_inference/test_signature.py index b31b277d..bf58fa22 100644 --- a/test/test_inference/test_signature.py +++ b/test/test_inference/test_signature.py @@ -471,8 +471,7 @@ dataclass_transform_cases = [ t: int p = 5 class X(ModelBase):'''), [], True], - # 3/ Init tweaks - # custom init + # 3/ Init custom init [dedent(''' @dataclass_transform() class Y(): @@ -482,21 +481,22 @@ dataclass_transform_cases = [ def __init__(self, toto: str): pass '''), ["toto"], False], - # Class based init=false + # 4/ init=false + # Class based [dedent(''' @dataclass_transform class Y(): y: int z = 5 class X(Y, init=False):'''), [], False], - # Decorator based init=false + # Decorator based [dedent(''' @dataclass_transform def create_model(): pass @create_model(init=False) class X:'''), [], False], - # Metaclass based init=false + # Metaclass based [dedent(''' @dataclass_transform class ModelMeta(): @@ -506,6 +506,31 @@ dataclass_transform_cases = [ t: int p = 5 class X(ModelBase, init=False):'''), [], False], + # 4/ Other parameters + # Class based + [dedent(''' + @dataclass_transform + class Y(): + y: int + z = 5 + class X(Y, eq=True):'''), [], True], + # Decorator based + [dedent(''' + @dataclass_transform + def create_model(): + pass + @create_model(eq=True) + class X:'''), [], True], + # Metaclass based + [dedent(''' + @dataclass_transform + class ModelMeta(): + y: int + z = 5 + class ModelBase(metaclass=ModelMeta): + t: int + p = 5 + class X(ModelBase, eq=True):'''), [], True], ] ids = [ @@ -520,6 +545,9 @@ ids = [ "base_transformed_init_false", "decorator_transformed_init_false", "metaclass_transformed_init_false", + "base_transformed_other_parameters", + "decorator_transformed_other_parameters", + "metaclass_transformed_other_parameters", ]