mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-07 22:44:27 +08:00
Add support for dataclass_transform decorator
This commit is contained in:
@@ -798,6 +798,12 @@ _implemented = {
|
|||||||
# runtime_checkable doesn't really change anything and is just
|
# runtime_checkable doesn't really change anything and is just
|
||||||
# adding logs for infering stuff, so we can safely ignore it.
|
# adding logs for infering stuff, so we can safely ignore it.
|
||||||
'runtime_checkable': lambda value, arguments, callback: NO_VALUES,
|
'runtime_checkable': lambda value, arguments, callback: NO_VALUES,
|
||||||
|
# Python 3.11+
|
||||||
|
'dataclass_transform': _dataclass,
|
||||||
|
},
|
||||||
|
'typing_extensions': {
|
||||||
|
# Python <3.11
|
||||||
|
'dataclass_transform': _dataclass,
|
||||||
},
|
},
|
||||||
'dataclasses': {
|
'dataclasses': {
|
||||||
# For now this works at least better than Jedi trying to understand it.
|
# For now this works at least better than Jedi trying to understand it.
|
||||||
|
|||||||
1
setup.py
1
setup.py
@@ -46,6 +46,7 @@ setup(name='jedi',
|
|||||||
'colorama',
|
'colorama',
|
||||||
'Django',
|
'Django',
|
||||||
'attrs',
|
'attrs',
|
||||||
|
'typing_extensions',
|
||||||
],
|
],
|
||||||
'qa': [
|
'qa': [
|
||||||
# latest version supporting Python 3.6
|
# latest version supporting Python 3.6
|
||||||
|
|||||||
@@ -354,6 +354,80 @@ def test_dataclass_signature(Script, skip_pre_python37, start, start_params):
|
|||||||
assert price.name == 'float'
|
assert price.name == 'float'
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
'start, start_params', [
|
||||||
|
['@dataclass_transform\nclass X:', []],
|
||||||
|
['@dataclass_transform(eq=True)\nclass X:', []],
|
||||||
|
[dedent('''
|
||||||
|
class Y():
|
||||||
|
y: int
|
||||||
|
@dataclass_transform
|
||||||
|
class X(Y):'''), []],
|
||||||
|
[dedent('''
|
||||||
|
@dataclass_transform
|
||||||
|
class Y():
|
||||||
|
y: int
|
||||||
|
z = 5
|
||||||
|
@dataclass_transform
|
||||||
|
class X(Y):'''), ['y']],
|
||||||
|
]
|
||||||
|
)
|
||||||
|
def test_extensions_dataclass_transform_signature(Script, skip_pre_python37, start, start_params):
|
||||||
|
code = dedent('''
|
||||||
|
name: str
|
||||||
|
foo = 3
|
||||||
|
price: float
|
||||||
|
quantity: int = 0.0
|
||||||
|
|
||||||
|
X(''')
|
||||||
|
|
||||||
|
code = 'from typing_extensions import dataclass_transform\n' + start + code
|
||||||
|
|
||||||
|
sig, = Script(code).get_signatures()
|
||||||
|
assert [p.name for p in sig.params] == start_params + ['name', 'price', 'quantity']
|
||||||
|
quantity, = sig.params[-1].infer()
|
||||||
|
assert quantity.name == 'int'
|
||||||
|
price, = sig.params[-2].infer()
|
||||||
|
assert price.name == 'float'
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.parametrize(
|
||||||
|
'start, start_params', [
|
||||||
|
['@dataclass_transform\nclass X:', []],
|
||||||
|
['@dataclass_transform(eq=True)\nclass X:', []],
|
||||||
|
[dedent('''
|
||||||
|
class Y():
|
||||||
|
y: int
|
||||||
|
@dataclass_transform
|
||||||
|
class X(Y):'''), []],
|
||||||
|
[dedent('''
|
||||||
|
@dataclass_transform
|
||||||
|
class Y():
|
||||||
|
y: int
|
||||||
|
z = 5
|
||||||
|
@dataclass_transform
|
||||||
|
class X(Y):'''), ['y']],
|
||||||
|
]
|
||||||
|
)
|
||||||
|
def test_dataclass_transform_signature(Script, skip_pre_python311, start, start_params):
|
||||||
|
code = dedent('''
|
||||||
|
name: str
|
||||||
|
foo = 3
|
||||||
|
price: float
|
||||||
|
quantity: int = 0.0
|
||||||
|
|
||||||
|
X(''')
|
||||||
|
|
||||||
|
code = 'from typing import dataclass_transform\n' + start + code
|
||||||
|
|
||||||
|
sig, = Script(code).get_signatures()
|
||||||
|
assert [p.name for p in sig.params] == start_params + ['name', 'price', 'quantity']
|
||||||
|
quantity, = sig.params[-1].infer()
|
||||||
|
assert quantity.name == 'int'
|
||||||
|
price, = sig.params[-2].infer()
|
||||||
|
assert price.name == 'float'
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
'start, start_params', [
|
'start, start_params', [
|
||||||
['@define\nclass X:', []],
|
['@define\nclass X:', []],
|
||||||
|
|||||||
Reference in New Issue
Block a user