PY-59198 PY-54560 Support "alias" parameter of attr and dataclass_transform fields

GitOrigin-RevId: 6a81d2a45d808391413b5c0b52c79f7f6c51dcbb
This commit is contained in:
Mikhail Golubev
2024-09-06 16:48:47 +03:00
committed by intellij-monorepo-bot
parent 53d8170407
commit aef3b8de3c
10 changed files with 109 additions and 8 deletions

View File

@@ -221,14 +221,13 @@ class PyDataclassTypeProvider : PyTypeProviderBase() {
if (fieldParams != null && !fieldParams.initValue) return Triple(fieldName, false, null)
if (fieldParams == null && field.annotationValue == null) return null // skip fields that are not annotated
// TODO add support for name aliases
val parameterName =
fieldName.let {
if (dataclassParameters.type.asPredefinedType == PyDataclassParameters.PredefinedType.ATTRS && PyUtil.getInitialUnderscores(it) == 1) {
it.substring(1)
}
else it
}
val parameterName = when (dataclassParameters.type.asPredefinedType) {
// Fields starting with more than one underscore will be mangled into ClassName__field_name, but we don't support that
PyDataclassParameters.PredefinedType.ATTRS -> fieldParams?.alias ?: fieldName.removePrefix("_")
PyDataclassParameters.PredefinedType.DATACLASS_TRANSFORM -> fieldParams?.alias ?: fieldName
PyDataclassParameters.PredefinedType.STD -> fieldName
else -> fieldName
}
val parameter = PyCallableParameterImpl.nonPsi(
parameterName,