[ty] Use invalid-assignment error code for invalid assignments to ClassVars (#20156)

## Summary

This error is about assigning to attributes rather than reading
attributes, so I think `invalid-assignment` makes more sense than
`invalid-attribute-access`

## Test Plan

existing mdtests updated
This commit is contained in:
Alex Waygood 2025-08-29 18:43:30 +01:00 committed by GitHub
parent fa7798ddd9
commit 9b1b58a451
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 15 additions and 15 deletions

View file

@ -699,7 +699,7 @@ reveal_type(c_instance.pure_class_variable1) # revealed: str
reveal_type(c_instance.pure_class_variable2) # revealed: Unknown | Literal[1]
# error: [invalid-attribute-access] "Cannot assign to ClassVar `pure_class_variable1` from an instance of type `C`"
# error: [invalid-assignment] "Cannot assign to ClassVar `pure_class_variable1` from an instance of type `C`"
c_instance.pure_class_variable1 = "value set on instance"
C.pure_class_variable1 = "overwritten on class"

View file

@ -53,7 +53,7 @@ C.attr = 1 # fine
C.attr = "wrong" # error: [invalid-assignment]
instance = C()
instance.attr = 1 # error: [invalid-attribute-access]
instance.attr = 1 # error: [invalid-assignment]
```
## Unknown attributes

View file

@ -1387,7 +1387,7 @@ class ClassVarXProto(Protocol):
def f(obj: ClassVarXProto):
reveal_type(obj.x) # revealed: int
reveal_type(type(obj).x) # revealed: int
obj.x = 42 # error: [invalid-attribute-access] "Cannot assign to ClassVar `x` from an instance of type `ClassVarXProto`"
obj.x = 42 # error: [invalid-assignment] "Cannot assign to ClassVar `x` from an instance of type `ClassVarXProto`"
class InstanceAttrX:
x: int

View file

@ -21,7 +21,7 @@ mdtest path: crates/ty_python_semantic/resources/mdtest/diagnostics/attribute_as
7 | C.attr = "wrong" # error: [invalid-assignment]
8 |
9 | instance = C()
10 | instance.attr = 1 # error: [invalid-attribute-access]
10 | instance.attr = 1 # error: [invalid-assignment]
```
# Diagnostics
@ -41,13 +41,13 @@ info: rule `invalid-assignment` is enabled by default
```
```
error[invalid-attribute-access]: Cannot assign to ClassVar `attr` from an instance of type `C`
error[invalid-assignment]: Cannot assign to ClassVar `attr` from an instance of type `C`
--> src/mdtest_snippet.py:10:1
|
9 | instance = C()
10 | instance.attr = 1 # error: [invalid-attribute-access]
10 | instance.attr = 1 # error: [invalid-assignment]
| ^^^^^^^^^^^^^
|
info: rule `invalid-attribute-access` is enabled by default
info: rule `invalid-assignment` is enabled by default
```

View file

@ -26,15 +26,15 @@ reveal_type(C.e) # revealed: int
c = C()
# error: [invalid-attribute-access]
# error: [invalid-assignment]
c.a = 2
# error: [invalid-attribute-access]
# error: [invalid-assignment]
c.b = 2
# error: [invalid-attribute-access]
# error: [invalid-assignment]
c.c = 2
# error: [invalid-attribute-access]
# error: [invalid-assignment]
c.d = 2
# error: [invalid-attribute-access]
# error: [invalid-assignment]
c.e = 2
```
@ -58,7 +58,7 @@ class C:
from module import C
c = C()
c.a = 2 # error: [invalid-attribute-access]
c.a = 2 # error: [invalid-assignment]
```
## Conflicting type qualifiers
@ -82,7 +82,7 @@ reveal_type(C.a) # revealed: int | str
c = C()
# error: [invalid-attribute-access]
# error: [invalid-assignment]
c.a = 2
```

View file

@ -4195,7 +4195,7 @@ impl<'db, 'ast> TypeInferenceBuilder<'db, 'ast> {
meta_attr @ PlaceAndQualifiers { .. } if meta_attr.is_class_var() => {
if emit_diagnostics {
if let Some(builder) =
self.context.report_lint(&INVALID_ATTRIBUTE_ACCESS, target)
self.context.report_lint(&INVALID_ASSIGNMENT, target)
{
builder.into_diagnostic(format_args!(
"Cannot assign to ClassVar `{attribute}` \