From 298f43f34eacae9dbdf319199372a76660775b59 Mon Sep 17 00:00:00 2001 From: Andrew Gallant Date: Wed, 16 Apr 2025 09:27:25 -0400 Subject: [PATCH] red_knot_python_semantic: add invalid assignment diagnostic snapshot This tests the diagnostic rendering of a case that wasn't previously covered by snapshots: when unpacking fails because there are too few values, but where the left hand side can tolerate "N or more." In the code, this is a distinct diagnostic, so we capture it here. (Sorry about the diff here, but it made sense to rename the other sections and that changes the name of the snapshot file.) --- .../resources/mdtest/diagnostics/unpacking.md | 10 +++++-- ...ng_-_Exactly_too_few_values_to_unpack.snap | 28 +++++++++++++++++++ ..._-_Exactly_too_many_values_to_unpack.snap} | 2 +- ..._Unpacking_-_Too_few_values_to_unpack.snap | 6 ++-- 4 files changed, 40 insertions(+), 6 deletions(-) create mode 100644 crates/red_knot_python_semantic/resources/mdtest/snapshots/unpacking.md_-_Unpacking_-_Exactly_too_few_values_to_unpack.snap rename crates/red_knot_python_semantic/resources/mdtest/snapshots/{unpacking.md_-_Unpacking_-_Too_many_values_to_unpack.snap => unpacking.md_-_Unpacking_-_Exactly_too_many_values_to_unpack.snap} (86%) diff --git a/crates/red_knot_python_semantic/resources/mdtest/diagnostics/unpacking.md b/crates/red_knot_python_semantic/resources/mdtest/diagnostics/unpacking.md index 481d55a151..3c731106f3 100644 --- a/crates/red_knot_python_semantic/resources/mdtest/diagnostics/unpacking.md +++ b/crates/red_knot_python_semantic/resources/mdtest/diagnostics/unpacking.md @@ -8,14 +8,20 @@ a, b = 1 # error: [not-iterable] ``` -## Too many values to unpack +## Exactly too many values to unpack ```py a, b = (1, 2, 3) # error: [invalid-assignment] ``` -## Too few values to unpack +## Exactly too few values to unpack ```py a, b = (1,) # error: [invalid-assignment] ``` + +## Too few values to unpack + +```py +[a, *b, c, d] = (1, 2) # error: [invalid-assignment] +``` diff --git a/crates/red_knot_python_semantic/resources/mdtest/snapshots/unpacking.md_-_Unpacking_-_Exactly_too_few_values_to_unpack.snap b/crates/red_knot_python_semantic/resources/mdtest/snapshots/unpacking.md_-_Unpacking_-_Exactly_too_few_values_to_unpack.snap new file mode 100644 index 0000000000..dafd1820cb --- /dev/null +++ b/crates/red_knot_python_semantic/resources/mdtest/snapshots/unpacking.md_-_Unpacking_-_Exactly_too_few_values_to_unpack.snap @@ -0,0 +1,28 @@ +--- +source: crates/red_knot_test/src/lib.rs +expression: snapshot +--- +--- +mdtest name: unpacking.md - Unpacking - Exactly too few values to unpack +mdtest path: crates/red_knot_python_semantic/resources/mdtest/diagnostics/unpacking.md +--- + +# Python source files + +## mdtest_snippet.py + +``` +1 | a, b = (1,) # error: [invalid-assignment] +``` + +# Diagnostics + +``` +error: lint:invalid-assignment + --> /src/mdtest_snippet.py:1:1 + | +1 | a, b = (1,) # error: [invalid-assignment] + | ^^^^ Not enough values to unpack (expected 2, got 1) + | + +``` diff --git a/crates/red_knot_python_semantic/resources/mdtest/snapshots/unpacking.md_-_Unpacking_-_Too_many_values_to_unpack.snap b/crates/red_knot_python_semantic/resources/mdtest/snapshots/unpacking.md_-_Unpacking_-_Exactly_too_many_values_to_unpack.snap similarity index 86% rename from crates/red_knot_python_semantic/resources/mdtest/snapshots/unpacking.md_-_Unpacking_-_Too_many_values_to_unpack.snap rename to crates/red_knot_python_semantic/resources/mdtest/snapshots/unpacking.md_-_Unpacking_-_Exactly_too_many_values_to_unpack.snap index f1f5bb30d1..23658be399 100644 --- a/crates/red_knot_python_semantic/resources/mdtest/snapshots/unpacking.md_-_Unpacking_-_Too_many_values_to_unpack.snap +++ b/crates/red_knot_python_semantic/resources/mdtest/snapshots/unpacking.md_-_Unpacking_-_Exactly_too_many_values_to_unpack.snap @@ -3,7 +3,7 @@ source: crates/red_knot_test/src/lib.rs expression: snapshot --- --- -mdtest name: unpacking.md - Unpacking - Too many values to unpack +mdtest name: unpacking.md - Unpacking - Exactly too many values to unpack mdtest path: crates/red_knot_python_semantic/resources/mdtest/diagnostics/unpacking.md --- diff --git a/crates/red_knot_python_semantic/resources/mdtest/snapshots/unpacking.md_-_Unpacking_-_Too_few_values_to_unpack.snap b/crates/red_knot_python_semantic/resources/mdtest/snapshots/unpacking.md_-_Unpacking_-_Too_few_values_to_unpack.snap index 52ded77098..6bd0e57602 100644 --- a/crates/red_knot_python_semantic/resources/mdtest/snapshots/unpacking.md_-_Unpacking_-_Too_few_values_to_unpack.snap +++ b/crates/red_knot_python_semantic/resources/mdtest/snapshots/unpacking.md_-_Unpacking_-_Too_few_values_to_unpack.snap @@ -12,7 +12,7 @@ mdtest path: crates/red_knot_python_semantic/resources/mdtest/diagnostics/unpack ## mdtest_snippet.py ``` -1 | a, b = (1,) # error: [invalid-assignment] +1 | [a, *b, c, d] = (1, 2) ``` # Diagnostics @@ -21,8 +21,8 @@ mdtest path: crates/red_knot_python_semantic/resources/mdtest/diagnostics/unpack error: lint:invalid-assignment --> /src/mdtest_snippet.py:1:1 | -1 | a, b = (1,) # error: [invalid-assignment] - | ^^^^ Not enough values to unpack (expected 2, got 1) +1 | [a, *b, c, d] = (1, 2) + | ^^^^^^^^^^^^^ Not enough values to unpack (expected 3 or more, got 2) | ```