From d52de49f41554d758148b7f348fa2cd90a328953 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Mon, 31 Aug 2026 17:08:59 +0200 Subject: [PATCH 1/7] Add tests for `Final`/`Literal` interaction --- .../mypy/qualifiers_final_annotation.toml | 82 ++++++++++--------- .../qualifiers_final_annotation.toml | 66 ++++++++------- .../pyrefly/qualifiers_final_annotation.toml | 70 ++++++++-------- .../pyright/qualifiers_final_annotation.toml | 74 +++++++++-------- conformance/results/results.html | 24 +++--- .../ty/qualifiers_final_annotation.toml | 68 ++++++++------- .../zuban/qualifiers_final_annotation.toml | 64 ++++++++------- .../tests/qualifiers_final_annotation.py | 4 + 8 files changed, 245 insertions(+), 207 deletions(-) diff --git a/conformance/results/mypy/qualifiers_final_annotation.toml b/conformance/results/mypy/qualifiers_final_annotation.toml index 099d55b0c..8cfc051a9 100644 --- a/conformance/results/mypy/qualifiers_final_annotation.toml +++ b/conformance/results/mypy/qualifiers_final_annotation.toml @@ -6,45 +6,51 @@ Does not allow redefinition of private class variable that is marked `Final` in Does not report modification of local `Final` variable via `for` statement. """ output = """ -qualifiers_final_annotation.py:16: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:18: error: Final[...] takes at most one type argument [misc] -qualifiers_final_annotation.py:34: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:38: error: Final name must be initialized with a value [misc] -qualifiers_final_annotation.py:54: error: Cannot assign to final attribute "ID5" [misc] -qualifiers_final_annotation.py:59: error: Cannot assign to final attribute "ID6" [misc] -qualifiers_final_annotation.py:62: error: Can only declare a final attribute in class body or __init__ [misc] -qualifiers_final_annotation.py:63: error: Can only declare a final attribute in class body or __init__ [misc] -qualifiers_final_annotation.py:65: error: Cannot assign to final attribute "ID7" [misc] -qualifiers_final_annotation.py:67: error: Cannot assign to final attribute "ID7" [misc] -qualifiers_final_annotation.py:71: error: Cannot assign to final name "RATE" [misc] -qualifiers_final_annotation.py:81: error: Cannot assign to final attribute "DEFAULT_ID" [misc] -qualifiers_final_annotation.py:94: error: Cannot assign to final name "BORDER_WIDTH" [misc] -qualifiers_final_annotation.py:96: error: Cannot assign to final name "__private" [misc] -qualifiers_final_annotation.py:107: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] -qualifiers_final_annotation.py:108: error: Variable should not be annotated with both ClassVar and Final [misc] -qualifiers_final_annotation.py:118: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] -qualifiers_final_annotation.py:121: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] -qualifiers_final_annotation.py:131: error: Final[...] can't be used inside a TypedDict [valid-type] -qualifiers_final_annotation.py:136: error: Final[...] can't be used inside a NamedTuple [valid-type] -qualifiers_final_annotation.py:145: error: Invalid "NamedTuple()" field name [misc] -qualifiers_final_annotation.py:147: error: Unexpected keyword argument "x" for "N" [call-arg] -qualifiers_final_annotation.py:147: error: Unexpected keyword argument "y" for "N" [call-arg] -qualifiers_final_annotation.py:148: error: Unexpected keyword argument "a" for "N" [call-arg] -qualifiers_final_annotation.py:149: error: Unexpected keyword argument "x" for "N" [call-arg] -qualifiers_final_annotation.py:149: error: Unexpected keyword argument "y" for "N" [call-arg] -qualifiers_final_annotation.py:155: error: Cannot assign to final name "ID1" [misc] -qualifiers_final_annotation.py:159: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:161: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:166: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] -qualifiers_final_annotation.py:169: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:180: error: Cannot assign to final name "TEN" [misc] -qualifiers_final_annotation.py:184: error: Cannot assign to final name "PI" [misc] +qualifiers_final_annotation.py:10: error: Expression is of type "int", not "Any" [assert-type] +qualifiers_final_annotation.py:10: error: Parameter 1 of Literal[...] is invalid [valid-type] +qualifiers_final_annotation.py:16: error: Expression is of type "Literal[1.0]", not "Any" [assert-type] +qualifiers_final_annotation.py:16: error: Parameter 1 of Literal[...] is invalid [valid-type] +qualifiers_final_annotation.py:20: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:22: error: Final[...] takes at most one type argument [misc] +qualifiers_final_annotation.py:38: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:42: error: Final name must be initialized with a value [misc] +qualifiers_final_annotation.py:58: error: Cannot assign to final attribute "ID5" [misc] +qualifiers_final_annotation.py:63: error: Cannot assign to final attribute "ID6" [misc] +qualifiers_final_annotation.py:66: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:67: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:69: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:71: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:75: error: Cannot assign to final name "RATE" [misc] +qualifiers_final_annotation.py:85: error: Cannot assign to final attribute "DEFAULT_ID" [misc] +qualifiers_final_annotation.py:98: error: Cannot assign to final name "BORDER_WIDTH" [misc] +qualifiers_final_annotation.py:100: error: Cannot assign to final name "__private" [misc] +qualifiers_final_annotation.py:111: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] +qualifiers_final_annotation.py:112: error: Variable should not be annotated with both ClassVar and Final [misc] +qualifiers_final_annotation.py:122: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] +qualifiers_final_annotation.py:125: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] +qualifiers_final_annotation.py:135: error: Final[...] can't be used inside a TypedDict [valid-type] +qualifiers_final_annotation.py:140: error: Final[...] can't be used inside a NamedTuple [valid-type] +qualifiers_final_annotation.py:149: error: Invalid "NamedTuple()" field name [misc] +qualifiers_final_annotation.py:151: error: Unexpected keyword argument "x" for "N" [call-arg] +qualifiers_final_annotation.py:151: error: Unexpected keyword argument "y" for "N" [call-arg] +qualifiers_final_annotation.py:152: error: Unexpected keyword argument "a" for "N" [call-arg] +qualifiers_final_annotation.py:153: error: Unexpected keyword argument "x" for "N" [call-arg] +qualifiers_final_annotation.py:153: error: Unexpected keyword argument "y" for "N" [call-arg] +qualifiers_final_annotation.py:159: error: Cannot assign to final name "ID1" [misc] +qualifiers_final_annotation.py:163: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:165: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:170: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] +qualifiers_final_annotation.py:173: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:184: error: Cannot assign to final name "TEN" [misc] +qualifiers_final_annotation.py:188: error: Cannot assign to final name "PI" [misc] """ conformance_automated = "Fail" errors_diff = """ -Line 163: Expected 1 errors -Line 59: Unexpected errors ['qualifiers_final_annotation.py:59: error: Cannot assign to final attribute "ID6" [misc]'] -Line 96: Unexpected errors ['qualifiers_final_annotation.py:96: error: Cannot assign to final name "__private" [misc]'] -Line 145: Unexpected errors ['qualifiers_final_annotation.py:145: error: Invalid "NamedTuple()" field name [misc]'] -Line 147: Unexpected errors ['qualifiers_final_annotation.py:147: error: Unexpected keyword argument "x" for "N" [call-arg]', 'qualifiers_final_annotation.py:147: error: Unexpected keyword argument "y" for "N" [call-arg]'] +Line 167: Expected 1 errors +Line 10: Unexpected errors ['qualifiers_final_annotation.py:10: error: Expression is of type "int", not "Any" [assert-type]', 'qualifiers_final_annotation.py:10: error: Parameter 1 of Literal[...] is invalid [valid-type]'] +Line 16: Unexpected errors ['qualifiers_final_annotation.py:16: error: Expression is of type "Literal[1.0]", not "Any" [assert-type]', 'qualifiers_final_annotation.py:16: error: Parameter 1 of Literal[...] is invalid [valid-type]'] +Line 63: Unexpected errors ['qualifiers_final_annotation.py:63: error: Cannot assign to final attribute "ID6" [misc]'] +Line 100: Unexpected errors ['qualifiers_final_annotation.py:100: error: Cannot assign to final name "__private" [misc]'] +Line 149: Unexpected errors ['qualifiers_final_annotation.py:149: error: Invalid "NamedTuple()" field name [misc]'] +Line 151: Unexpected errors ['qualifiers_final_annotation.py:151: error: Unexpected keyword argument "x" for "N" [call-arg]', 'qualifiers_final_annotation.py:151: error: Unexpected keyword argument "y" for "N" [call-arg]'] """ diff --git a/conformance/results/pycroscope/qualifiers_final_annotation.toml b/conformance/results/pycroscope/qualifiers_final_annotation.toml index 0784a273e..278b009e9 100644 --- a/conformance/results/pycroscope/qualifiers_final_annotation.toml +++ b/conformance/results/pycroscope/qualifiers_final_annotation.toml @@ -1,35 +1,41 @@ -conformance_automated = "Pass" +conformance_automated = "Fail" errors_diff = """ +Line 10: Unexpected errors ["./qualifiers_final_annotation.py:10:12: int is not equivalent to type 'int'", "./qualifiers_final_annotation.py:10:0: Arguments to Literal[] must be None, bool, int, str, bytes, or enum members; got [invalid_literal]"] +Line 16: Unexpected errors ["./qualifiers_final_annotation.py:16:12: Literal[1.0] is not equivalent to type 'float'", "./qualifiers_final_annotation.py:16:0: Arguments to Literal[] must be None, bool, int, str, bytes, or enum members; got [invalid_literal]"] """ output = """ -./qualifiers_final_annotation.py:16:6: Final annotation without assignment requires an explicit type [invalid_qualifier] -./qualifiers_final_annotation.py:18:6: Invalid type annotation (, ) [invalid_annotation] -./qualifiers_final_annotation.py:34:9: Final annotation without assignment requires an explicit type [invalid_qualifier] -./qualifiers_final_annotation.py:34:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:10:12: int is not equivalent to type 'int' +./qualifiers_final_annotation.py:10:0: Arguments to Literal[] must be None, bool, int, str, bytes, or enum members; got [invalid_literal] +./qualifiers_final_annotation.py:16:12: Literal[1.0] is not equivalent to type 'float' +./qualifiers_final_annotation.py:16:0: Arguments to Literal[] must be None, bool, int, str, bytes, or enum members; got [invalid_literal] +./qualifiers_final_annotation.py:20:6: Final annotation without assignment requires an explicit type [invalid_qualifier] +./qualifiers_final_annotation.py:22:6: Invalid type annotation (, ) [invalid_annotation] +./qualifiers_final_annotation.py:38:9: Final annotation without assignment requires an explicit type [invalid_qualifier] ./qualifiers_final_annotation.py:38:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:54:8: Cannot assign to final name ID5 [incompatible_assignment] -./qualifiers_final_annotation.py:62:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:63:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:65:8: Cannot assign to final name ID7 [incompatible_assignment] -./qualifiers_final_annotation.py:67:8: Cannot assign to final name ID7 [incompatible_assignment] -./qualifiers_final_annotation.py:71:0: Cannot assign to final name RATE [incompatible_assignment] -./qualifiers_final_annotation.py:81:0: Cannot assign to final name DEFAULT_ID [incompatible_assignment] -./qualifiers_final_annotation.py:94:4: Cannot override final attribute BORDER_WIDTH [incompatible_override] -./qualifiers_final_annotation.py:107:12: Final cannot be combined with ClassVar [invalid_qualifier] -./qualifiers_final_annotation.py:108:12: Final cannot be combined with ClassVar [invalid_qualifier] -./qualifiers_final_annotation.py:118:3: Unrecognized annotation typing.Final[] [invalid_annotation] -./qualifiers_final_annotation.py:121:13: Unexpected Final annotation [invalid_qualifier] -./qualifiers_final_annotation.py:131:7: Unexpected Final annotation [invalid_qualifier] -./qualifiers_final_annotation.py:136:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:148:0: In call to pycroscope.signature.N: Missing required argument 'x' [incompatible_call] -./qualifiers_final_annotation.py:149:4: Incompatible argument type for x: expected int but got Literal[''] [incompatible_argument] -./qualifiers_final_annotation.py:149:10: Incompatible argument type for y: expected int but got Literal[''] [incompatible_argument] -./qualifiers_final_annotation.py:155:4: Cannot assign to final name ID1 [incompatible_assignment] -./qualifiers_final_annotation.py:159:4: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:161:9: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:163:8: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:166:29: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:169:8: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:180:0: Cannot assign to final name TEN [incompatible_assignment] -./qualifiers_final_annotation.py:184:0: Cannot assign to final name PI [incompatible_assignment] +./qualifiers_final_annotation.py:42:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:58:8: Cannot assign to final name ID5 [incompatible_assignment] +./qualifiers_final_annotation.py:66:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:67:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:69:8: Cannot assign to final name ID7 [incompatible_assignment] +./qualifiers_final_annotation.py:71:8: Cannot assign to final name ID7 [incompatible_assignment] +./qualifiers_final_annotation.py:75:0: Cannot assign to final name RATE [incompatible_assignment] +./qualifiers_final_annotation.py:85:0: Cannot assign to final name DEFAULT_ID [incompatible_assignment] +./qualifiers_final_annotation.py:98:4: Cannot override final attribute BORDER_WIDTH [incompatible_override] +./qualifiers_final_annotation.py:111:12: Final cannot be combined with ClassVar [invalid_qualifier] +./qualifiers_final_annotation.py:112:12: Final cannot be combined with ClassVar [invalid_qualifier] +./qualifiers_final_annotation.py:122:3: Unrecognized annotation typing.Final[] [invalid_annotation] +./qualifiers_final_annotation.py:125:13: Unexpected Final annotation [invalid_qualifier] +./qualifiers_final_annotation.py:135:7: Unexpected Final annotation [invalid_qualifier] +./qualifiers_final_annotation.py:140:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:152:0: In call to pycroscope.signature.N: Missing required argument 'x' [incompatible_call] +./qualifiers_final_annotation.py:153:4: Incompatible argument type for x: expected int but got Literal[''] [incompatible_argument] +./qualifiers_final_annotation.py:153:10: Incompatible argument type for y: expected int but got Literal[''] [incompatible_argument] +./qualifiers_final_annotation.py:159:4: Cannot assign to final name ID1 [incompatible_assignment] +./qualifiers_final_annotation.py:163:4: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:165:9: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:167:8: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:170:29: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:173:8: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:184:0: Cannot assign to final name TEN [incompatible_assignment] +./qualifiers_final_annotation.py:188:0: Cannot assign to final name PI [incompatible_assignment] """ diff --git a/conformance/results/pyrefly/qualifiers_final_annotation.toml b/conformance/results/pyrefly/qualifiers_final_annotation.toml index 4da0650c7..92550120e 100644 --- a/conformance/results/pyrefly/qualifiers_final_annotation.toml +++ b/conformance/results/pyrefly/qualifiers_final_annotation.toml @@ -1,37 +1,43 @@ -conformance_automated = "Pass" +conformance_automated = "Fail" errors_diff = """ +Line 10: Unexpected errors ['assert_type(int, Unknown) failed [assert-type]', 'Invalid type inside literal, `int` [invalid-literal]'] +Line 16: Unexpected errors ['assert_type(float, Unknown) failed [assert-type]', 'Invalid type inside literal, `float` [invalid-literal]'] """ output = """ -ERROR qualifiers_final_annotation.py:16:7-12: Expected a type argument for `Final` [invalid-annotation] -ERROR qualifiers_final_annotation.py:18:7-22: Expected 1 type argument for `Final`, got 2 [invalid-annotation] -ERROR qualifiers_final_annotation.py:34:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] +ERROR qualifiers_final_annotation.py:10:12-31: assert_type(int, Unknown) failed [assert-type] +ERROR qualifiers_final_annotation.py:10:26-29: Invalid type inside literal, `int` [invalid-literal] +ERROR qualifiers_final_annotation.py:16:12-33: assert_type(float, Unknown) failed [assert-type] +ERROR qualifiers_final_annotation.py:16:26-31: Invalid type inside literal, `float` [invalid-literal] +ERROR qualifiers_final_annotation.py:20:7-12: Expected a type argument for `Final` [invalid-annotation] +ERROR qualifiers_final_annotation.py:22:7-22: Expected 1 type argument for `Final`, got 2 [invalid-annotation] ERROR qualifiers_final_annotation.py:38:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] -ERROR qualifiers_final_annotation.py:54:9-17: Cannot set field `ID5` [read-only] -ERROR qualifiers_final_annotation.py:62:9-17: Cannot set field `id3` [read-only] -ERROR qualifiers_final_annotation.py:63:9-17: Cannot set field `id4` [read-only] -ERROR qualifiers_final_annotation.py:65:9-17: Cannot set field `ID7` [read-only] -ERROR qualifiers_final_annotation.py:67:9-17: Cannot set field `ID7` [read-only] -ERROR qualifiers_final_annotation.py:71:8-11: Cannot assign to variable `RATE` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:81:1-18: Cannot set field `DEFAULT_ID` [read-only] -ERROR qualifiers_final_annotation.py:94:5-17: `BORDER_WIDTH` is declared as final in parent class `ClassC` [bad-override] -ERROR qualifiers_final_annotation.py:107:5-11: `Final` may not be nested inside `ClassVar` [invalid-annotation] -ERROR qualifiers_final_annotation.py:108:19-27: `ClassVar` may not be nested inside `Final` [invalid-annotation] -ERROR qualifiers_final_annotation.py:118:9-19: `Final` is not allowed in this context [invalid-annotation] -ERROR qualifiers_final_annotation.py:121:14-19: `Final` is only allowed on a class or local variable annotation [invalid-annotation] -ERROR qualifiers_final_annotation.py:121:14-30: `Final` is not allowed in this context [invalid-annotation] -ERROR qualifiers_final_annotation.py:131:5-6: `Final` may not be used for TypedDict members [invalid-annotation] -ERROR qualifiers_final_annotation.py:136:5-6: `Final` may not be used for NamedTuple members [invalid-annotation] -ERROR qualifiers_final_annotation.py:148:2-7: Missing argument `x` in function `N.__new__` [missing-argument] -ERROR qualifiers_final_annotation.py:148:2-7: Missing argument `y` in function `N.__new__` [missing-argument] -ERROR qualifiers_final_annotation.py:148:3-4: Unexpected keyword argument `a` in function `N.__new__` [unexpected-keyword] -ERROR qualifiers_final_annotation.py:149:5-7: Argument `Literal['']` is not assignable to parameter `x` with type `int` in function `N.__new__` [bad-argument-type] -ERROR qualifiers_final_annotation.py:149:11-13: Argument `Literal['']` is not assignable to parameter `y` with type `int` in function `N.__new__` [bad-argument-type] -ERROR qualifiers_final_annotation.py:155:11-12: Cannot assign to variable `ID1` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:159:5-11: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:161:15-16: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:163:14-23: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:166:10-26: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:169:5-11: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:180:1-4: Cannot assign to `TEN` because it is imported as final [bad-assignment] -ERROR qualifiers_final_annotation.py:184:1-3: Cannot assign to `PI` because it is imported as final [bad-assignment] +ERROR qualifiers_final_annotation.py:42:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] +ERROR qualifiers_final_annotation.py:58:9-17: Cannot set field `ID5` [read-only] +ERROR qualifiers_final_annotation.py:66:9-17: Cannot set field `id3` [read-only] +ERROR qualifiers_final_annotation.py:67:9-17: Cannot set field `id4` [read-only] +ERROR qualifiers_final_annotation.py:69:9-17: Cannot set field `ID7` [read-only] +ERROR qualifiers_final_annotation.py:71:9-17: Cannot set field `ID7` [read-only] +ERROR qualifiers_final_annotation.py:75:8-11: Cannot assign to variable `RATE` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:85:1-18: Cannot set field `DEFAULT_ID` [read-only] +ERROR qualifiers_final_annotation.py:98:5-17: `BORDER_WIDTH` is declared as final in parent class `ClassC` [bad-override] +ERROR qualifiers_final_annotation.py:111:5-11: `Final` may not be nested inside `ClassVar` [invalid-annotation] +ERROR qualifiers_final_annotation.py:112:19-27: `ClassVar` may not be nested inside `Final` [invalid-annotation] +ERROR qualifiers_final_annotation.py:122:9-19: `Final` is not allowed in this context [invalid-annotation] +ERROR qualifiers_final_annotation.py:125:14-19: `Final` is only allowed on a class or local variable annotation [invalid-annotation] +ERROR qualifiers_final_annotation.py:125:14-30: `Final` is not allowed in this context [invalid-annotation] +ERROR qualifiers_final_annotation.py:135:5-6: `Final` may not be used for TypedDict members [invalid-annotation] +ERROR qualifiers_final_annotation.py:140:5-6: `Final` may not be used for NamedTuple members [invalid-annotation] +ERROR qualifiers_final_annotation.py:152:2-7: Missing argument `x` in function `N.__new__` [missing-argument] +ERROR qualifiers_final_annotation.py:152:2-7: Missing argument `y` in function `N.__new__` [missing-argument] +ERROR qualifiers_final_annotation.py:152:3-4: Unexpected keyword argument `a` in function `N.__new__` [unexpected-keyword] +ERROR qualifiers_final_annotation.py:153:5-7: Argument `Literal['']` is not assignable to parameter `x` with type `int` in function `N.__new__` [bad-argument-type] +ERROR qualifiers_final_annotation.py:153:11-13: Argument `Literal['']` is not assignable to parameter `y` with type `int` in function `N.__new__` [bad-argument-type] +ERROR qualifiers_final_annotation.py:159:11-12: Cannot assign to variable `ID1` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:163:5-11: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:165:15-16: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:167:14-23: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:170:10-26: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:173:5-11: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:184:1-4: Cannot assign to `TEN` because it is imported as final [bad-assignment] +ERROR qualifiers_final_annotation.py:188:1-3: Cannot assign to `PI` because it is imported as final [bad-assignment] """ diff --git a/conformance/results/pyright/qualifiers_final_annotation.toml b/conformance/results/pyright/qualifiers_final_annotation.toml index 0fb73bda6..59b3287ba 100644 --- a/conformance/results/pyright/qualifiers_final_annotation.toml +++ b/conformance/results/pyright/qualifiers_final_annotation.toml @@ -1,49 +1,55 @@ conformant = "Pass" output = """ -qualifiers_final_annotation.py:16:1 - error: "BAD1" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:18:7 - error: Expected a single type argument after "Final" (reportInvalidTypeForm) -qualifiers_final_annotation.py:34:5 - error: "ID2" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:38:5 - error: "ID3" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:54:14 - error: Cannot assign to attribute "ID5" for class "ClassA*" +qualifiers_final_annotation.py:10:13 - error: "assert_type" mismatch: expected "Unknown" but received "Literal[1]" (reportAssertTypeFailure) +qualifiers_final_annotation.py:10:26 - error: Type arguments for "Literal" must be None, a literal value (int, bool, str, or bytes), or an enum value (reportInvalidTypeForm) +qualifiers_final_annotation.py:16:13 - error: "assert_type" mismatch: expected "Unknown" but received "float" (reportAssertTypeFailure) +qualifiers_final_annotation.py:16:26 - error: Type arguments for "Literal" must be None, a literal value (int, bool, str, or bytes), or an enum value (reportInvalidTypeForm) +qualifiers_final_annotation.py:20:1 - error: "BAD1" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:22:7 - error: Expected a single type argument after "Final" (reportInvalidTypeForm) +qualifiers_final_annotation.py:38:5 - error: "ID2" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:42:5 - error: "ID3" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:58:14 - error: Cannot assign to attribute "ID5" for class "ClassA*"   Attribute "ID5" cannot be assigned through a class instance because it is a ClassVar   "ID5" is declared as Final and cannot be reassigned (reportAttributeAccessIssue) -qualifiers_final_annotation.py:62:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:63:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:63:32 - error: Cannot assign to attribute "id4" for class "ClassA*" +qualifiers_final_annotation.py:66:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:67:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:67:32 - error: Cannot assign to attribute "id4" for class "ClassA*"   "Literal[1]" is not assignable to "Final" (reportAttributeAccessIssue) -qualifiers_final_annotation.py:65:14 - error: Cannot assign to attribute "ID7" for class "ClassA*" +qualifiers_final_annotation.py:69:14 - error: Cannot assign to attribute "ID7" for class "ClassA*"   Attribute "ID7" cannot be assigned through a class instance because it is a ClassVar   "ID7" is declared as Final and cannot be reassigned (reportAttributeAccessIssue) -qualifiers_final_annotation.py:67:14 - error: Cannot assign to attribute "ID7" for class "ClassA*" +qualifiers_final_annotation.py:71:14 - error: Cannot assign to attribute "ID7" for class "ClassA*"   Attribute "ID7" cannot be assigned through a class instance because it is a ClassVar   "ID7" is declared as Final and cannot be reassigned (reportAttributeAccessIssue) -qualifiers_final_annotation.py:71:1 - error: "RATE" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:81:8 - error: Cannot assign to attribute "DEFAULT_ID" for class "type[ClassB]" +qualifiers_final_annotation.py:75:1 - error: "RATE" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:85:8 - error: Cannot assign to attribute "DEFAULT_ID" for class "type[ClassB]"   "DEFAULT_ID" is declared as Final and cannot be reassigned (reportAttributeAccessIssue) -qualifiers_final_annotation.py:94:5 - error: "BORDER_WIDTH" cannot be redeclared because parent class "ClassC" declares it as Final (reportGeneralTypeIssues) -qualifiers_final_annotation.py:107:22 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:108:19 - error: "ClassVar" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:118:9 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:121:14 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:131:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:131:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:136:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:136:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:148:1 - error: Arguments missing for parameters "x", "y" (reportCallIssue) -qualifiers_final_annotation.py:148:3 - error: No parameter named "a" (reportCallIssue) -qualifiers_final_annotation.py:149:5 - error: Argument of type "Literal['']" cannot be assigned to parameter "x" of type "int" in function "__new__" +qualifiers_final_annotation.py:98:5 - error: "BORDER_WIDTH" cannot be redeclared because parent class "ClassC" declares it as Final (reportGeneralTypeIssues) +qualifiers_final_annotation.py:111:22 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:112:19 - error: "ClassVar" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:122:9 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:125:14 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:135:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:135:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:140:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:140:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:152:1 - error: Arguments missing for parameters "x", "y" (reportCallIssue) +qualifiers_final_annotation.py:152:3 - error: No parameter named "a" (reportCallIssue) +qualifiers_final_annotation.py:153:5 - error: Argument of type "Literal['']" cannot be assigned to parameter "x" of type "int" in function "__new__"   "Literal['']" is not assignable to "int" (reportArgumentType) -qualifiers_final_annotation.py:149:11 - error: Argument of type "Literal['']" cannot be assigned to parameter "y" of type "int" in function "__new__" +qualifiers_final_annotation.py:153:11 - error: Argument of type "Literal['']" cannot be assigned to parameter "y" of type "int" in function "__new__"   "Literal['']" is not assignable to "int" (reportArgumentType) -qualifiers_final_annotation.py:155:5 - error: "ID1" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:159:5 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:161:10 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:163:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:166:30 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:169:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:180:1 - error: "TEN" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:184:1 - error: "PI" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:159:5 - error: "ID1" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:163:5 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:165:10 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:167:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:170:30 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:173:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:184:1 - error: "TEN" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:188:1 - error: "PI" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) """ -conformance_automated = "Pass" +conformance_automated = "Fail" errors_diff = """ +Line 10: Unexpected errors ['qualifiers_final_annotation.py:10:13 - error: "assert_type" mismatch: expected "Unknown" but received "Literal[1]" (reportAssertTypeFailure)', 'qualifiers_final_annotation.py:10:26 - error: Type arguments for "Literal" must be None, a literal value (int, bool, str, or bytes), or an enum value (reportInvalidTypeForm)'] +Line 16: Unexpected errors ['qualifiers_final_annotation.py:16:13 - error: "assert_type" mismatch: expected "Unknown" but received "float" (reportAssertTypeFailure)', 'qualifiers_final_annotation.py:16:26 - error: Type arguments for "Literal" must be None, a literal value (int, bool, str, or bytes), or an enum value (reportInvalidTypeForm)'] """ diff --git a/conformance/results/results.html b/conformance/results/results.html index 7915147fd..88fae9384 100644 --- a/conformance/results/results.html +++ b/conformance/results/results.html @@ -1000,11 +1000,11 @@

Python Type System Conformance Test Results

  • Does not report modification of local Final variable via for statement.
  • + Unknown + Unknown Pass - Pass - Pass - Pass - Pass + Unknown + Unknown qualifiers_final_decorator @@ -1018,11 +1018,11 @@

    Python Type System Conformance Test Results

    2 / 3 • 66.7% - 2.5 / 3 • 83.3% - 3 / 3 • 100.0% - 3 / 3 • 100.0% - 3 / 3 • 100.0% + 1.5 / 3 • 50.0% + 2 / 3 • 66.7% 3 / 3 • 100.0% + 2 / 3 • 66.7% + 2 / 3 • 66.7% @@ -2608,11 +2608,11 @@

    Python Type System Conformance Test Results

    108.5 / 145 • 74.8% - 138 / 145 • 95.2% - 140.5 / 145 • 96.9% + 137 / 145 • 94.5% + 139.5 / 145 • 96.2% 135.5 / 145 • 93.4% - 132 / 145 • 91.0% - 144.5 / 145 • 99.7% + 131 / 145 • 90.3% + 143.5 / 145 • 99.0% diff --git a/conformance/results/ty/qualifiers_final_annotation.toml b/conformance/results/ty/qualifiers_final_annotation.toml index ba871f898..29970b7ef 100644 --- a/conformance/results/ty/qualifiers_final_annotation.toml +++ b/conformance/results/ty/qualifiers_final_annotation.toml @@ -1,35 +1,41 @@ -conformance_automated = "Pass" +conformance_automated = "Fail" errors_diff = """ +Line 10: Unexpected errors ['qualifiers_final_annotation.py:10:1: error[type-assertion-failure] Type `Literal[1]` does not match asserted type `Unknown`', 'qualifiers_final_annotation.py:10:26: error[invalid-type-form] Type arguments for `Literal` must be `None`, a literal value (int, bool, str, or bytes), or an enum member'] +Line 16: Unexpected errors ['qualifiers_final_annotation.py:16:1: error[type-assertion-failure] Type `float*` does not match asserted type `Unknown`', 'qualifiers_final_annotation.py:16:26: error[invalid-type-form] Type arguments for `Literal` must be `None`, a literal value (int, bool, str, or bytes), or an enum member'] """ output = """ -qualifiers_final_annotation.py:16:1: error[final-without-value] `Final` symbol `BAD1` is not assigned a value -qualifiers_final_annotation.py:18:7: error[invalid-type-form] Type qualifier `typing.Final` expected exactly 1 argument, got 2 -qualifiers_final_annotation.py:34:5: error[final-without-value] `Final` symbol `ID2` is not assigned a value -qualifiers_final_annotation.py:38:5: error[final-without-value] `Final` symbol `ID3` is not assigned a value -qualifiers_final_annotation.py:54:9: error[invalid-assignment] Invalid assignment to final attribute: `ID5` already has a value in the class body -qualifiers_final_annotation.py:62:9: error[invalid-assignment] Cannot assign to final attribute `id3` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` -qualifiers_final_annotation.py:63:9: error[invalid-assignment] Cannot assign to final attribute `id4` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` -qualifiers_final_annotation.py:65:9: error[invalid-assignment] Cannot assign to final attribute `ID7` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` -qualifiers_final_annotation.py:67:9: error[invalid-assignment] Cannot assign to final attribute `ID7` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` -qualifiers_final_annotation.py:71:1: error[invalid-assignment] Reassignment of `Final` symbol `RATE` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:81:1: error[invalid-assignment] Cannot assign to final attribute `DEFAULT_ID` on type ``: `Final` attributes can only be assigned in the class body or `__init__` -qualifiers_final_annotation.py:94:5: error[override-of-final-variable] Cannot override final variable `BORDER_WIDTH` from superclass `ClassC` -qualifiers_final_annotation.py:107:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant -qualifiers_final_annotation.py:108:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant -qualifiers_final_annotation.py:118:9: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in type expressions (only in annotation expressions) -qualifiers_final_annotation.py:121:14: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in parameter annotations -qualifiers_final_annotation.py:131:8: error[invalid-type-form] `Final` is not allowed in TypedDict fields -qualifiers_final_annotation.py:136:5: error[invalid-named-tuple] Type qualifier `Final` is not allowed on NamedTuple field `b` -qualifiers_final_annotation.py:148:1: error[missing-argument] No arguments provided for required parameters `x`, `y` -qualifiers_final_annotation.py:148:3: error[unknown-argument] Argument `a` does not match any known parameter -qualifiers_final_annotation.py:149:3: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` -qualifiers_final_annotation.py:149:9: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` -qualifiers_final_annotation.py:155:5: error[invalid-assignment] Reassignment of `Final` symbol `ID1` is not allowed: Reassignment of `Final` symbol -qualifiers_final_annotation.py:159:5: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:161:10: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:163:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:166:30: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:169:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:180:1: error[invalid-assignment] Reassignment of `Final` symbol `TEN` is not allowed: Reassignment of `Final` symbol -qualifiers_final_annotation.py:184:1: error[invalid-assignment] Reassignment of `Final` symbol `PI` is not allowed: Reassignment of `Final` symbol +qualifiers_final_annotation.py:10:1: error[type-assertion-failure] Type `Literal[1]` does not match asserted type `Unknown` +qualifiers_final_annotation.py:10:26: error[invalid-type-form] Type arguments for `Literal` must be `None`, a literal value (int, bool, str, or bytes), or an enum member +qualifiers_final_annotation.py:16:1: error[type-assertion-failure] Type `float*` does not match asserted type `Unknown` +qualifiers_final_annotation.py:16:26: error[invalid-type-form] Type arguments for `Literal` must be `None`, a literal value (int, bool, str, or bytes), or an enum member +qualifiers_final_annotation.py:20:1: error[final-without-value] `Final` symbol `BAD1` is not assigned a value +qualifiers_final_annotation.py:22:7: error[invalid-type-form] Type qualifier `typing.Final` expected exactly 1 argument, got 2 +qualifiers_final_annotation.py:38:5: error[final-without-value] `Final` symbol `ID2` is not assigned a value +qualifiers_final_annotation.py:42:5: error[final-without-value] `Final` symbol `ID3` is not assigned a value +qualifiers_final_annotation.py:58:9: error[invalid-assignment] Invalid assignment to final attribute: `ID5` already has a value in the class body +qualifiers_final_annotation.py:66:9: error[invalid-assignment] Cannot assign to final attribute `id3` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` +qualifiers_final_annotation.py:67:9: error[invalid-assignment] Cannot assign to final attribute `id4` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` +qualifiers_final_annotation.py:69:9: error[invalid-assignment] Cannot assign to final attribute `ID7` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` +qualifiers_final_annotation.py:71:9: error[invalid-assignment] Cannot assign to final attribute `ID7` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` +qualifiers_final_annotation.py:75:1: error[invalid-assignment] Reassignment of `Final` symbol `RATE` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:85:1: error[invalid-assignment] Cannot assign to final attribute `DEFAULT_ID` on type ``: `Final` attributes can only be assigned in the class body or `__init__` +qualifiers_final_annotation.py:98:5: error[override-of-final-variable] Cannot override final variable `BORDER_WIDTH` from superclass `ClassC` +qualifiers_final_annotation.py:111:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant +qualifiers_final_annotation.py:112:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant +qualifiers_final_annotation.py:122:9: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in type expressions (only in annotation expressions) +qualifiers_final_annotation.py:125:14: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in parameter annotations +qualifiers_final_annotation.py:135:8: error[invalid-type-form] `Final` is not allowed in TypedDict fields +qualifiers_final_annotation.py:140:5: error[invalid-named-tuple] Type qualifier `Final` is not allowed on NamedTuple field `b` +qualifiers_final_annotation.py:152:1: error[missing-argument] No arguments provided for required parameters `x`, `y` +qualifiers_final_annotation.py:152:3: error[unknown-argument] Argument `a` does not match any known parameter +qualifiers_final_annotation.py:153:3: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` +qualifiers_final_annotation.py:153:9: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` +qualifiers_final_annotation.py:159:5: error[invalid-assignment] Reassignment of `Final` symbol `ID1` is not allowed: Reassignment of `Final` symbol +qualifiers_final_annotation.py:163:5: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:165:10: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:167:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:170:30: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:173:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:184:1: error[invalid-assignment] Reassignment of `Final` symbol `TEN` is not allowed: Reassignment of `Final` symbol +qualifiers_final_annotation.py:188:1: error[invalid-assignment] Reassignment of `Final` symbol `PI` is not allowed: Reassignment of `Final` symbol """ diff --git a/conformance/results/zuban/qualifiers_final_annotation.toml b/conformance/results/zuban/qualifiers_final_annotation.toml index 1101ba386..ec6603b04 100644 --- a/conformance/results/zuban/qualifiers_final_annotation.toml +++ b/conformance/results/zuban/qualifiers_final_annotation.toml @@ -1,35 +1,39 @@ -conformance_automated = "Pass" +conformance_automated = "Fail" errors_diff = """ +Line 10: Unexpected errors ['qualifiers_final_annotation.py:10: error: Parameter 1 of Literal[...] is invalid [valid-type]'] +Line 16: Unexpected errors ['qualifiers_final_annotation.py:16: error: Parameter 1 of Literal[...] is invalid [valid-type]'] """ output = """ -qualifiers_final_annotation.py:16: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:18: error: Final[...] takes at most one type argument [misc] -qualifiers_final_annotation.py:34: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:38: error: Final name must be initialized with a value [misc] -qualifiers_final_annotation.py:54: error: Cannot assign to final attribute "ID5" [misc] -qualifiers_final_annotation.py:62: error: Can only declare a final attribute in class body or __init__ [misc] -qualifiers_final_annotation.py:63: error: Can only declare a final attribute in class body or __init__ [misc] -qualifiers_final_annotation.py:65: error: Cannot assign to final attribute "ID7" [misc] -qualifiers_final_annotation.py:67: error: Cannot assign to final attribute "ID7" [misc] -qualifiers_final_annotation.py:71: error: Cannot assign to final name "RATE" [misc] -qualifiers_final_annotation.py:81: error: Cannot assign to final attribute "DEFAULT_ID" [misc] -qualifiers_final_annotation.py:94: error: Cannot assign to final name "BORDER_WIDTH" [misc] -qualifiers_final_annotation.py:107: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:108: error: Invalid Type: ClassVar nested inside other type [misc] -qualifiers_final_annotation.py:118: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:121: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:131: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:136: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:148: error: Unexpected keyword argument "a" for "N" [call-arg] -qualifiers_final_annotation.py:149: error: Argument "x" to "N" has incompatible type "str"; expected "int" [arg-type] -qualifiers_final_annotation.py:149: error: Argument "y" to "N" has incompatible type "str"; expected "int" [arg-type] -qualifiers_final_annotation.py:155: error: Cannot assign to final name "ID1" [misc] -qualifiers_final_annotation.py:159: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:161: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:10: error: Parameter 1 of Literal[...] is invalid [valid-type] +qualifiers_final_annotation.py:16: error: Parameter 1 of Literal[...] is invalid [valid-type] +qualifiers_final_annotation.py:20: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:22: error: Final[...] takes at most one type argument [misc] +qualifiers_final_annotation.py:38: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:42: error: Final name must be initialized with a value [misc] +qualifiers_final_annotation.py:58: error: Cannot assign to final attribute "ID5" [misc] +qualifiers_final_annotation.py:66: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:67: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:69: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:71: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:75: error: Cannot assign to final name "RATE" [misc] +qualifiers_final_annotation.py:85: error: Cannot assign to final attribute "DEFAULT_ID" [misc] +qualifiers_final_annotation.py:98: error: Cannot assign to final name "BORDER_WIDTH" [misc] +qualifiers_final_annotation.py:111: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:112: error: Invalid Type: ClassVar nested inside other type [misc] +qualifiers_final_annotation.py:122: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:125: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:135: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:140: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:152: error: Unexpected keyword argument "a" for "N" [call-arg] +qualifiers_final_annotation.py:153: error: Argument "x" to "N" has incompatible type "str"; expected "int" [arg-type] +qualifiers_final_annotation.py:153: error: Argument "y" to "N" has incompatible type "str"; expected "int" [arg-type] +qualifiers_final_annotation.py:159: error: Cannot assign to final name "ID1" [misc] qualifiers_final_annotation.py:163: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:166: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:166: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] -qualifiers_final_annotation.py:169: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:180: error: Cannot assign to final name "TEN" [misc] -qualifiers_final_annotation.py:184: error: Cannot assign to final name "PI" [misc] +qualifiers_final_annotation.py:165: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:167: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:170: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:170: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] +qualifiers_final_annotation.py:173: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:184: error: Cannot assign to final name "TEN" [misc] +qualifiers_final_annotation.py:188: error: Cannot assign to final name "PI" [misc] """ diff --git a/conformance/tests/qualifiers_final_annotation.py b/conformance/tests/qualifiers_final_annotation.py index 0dc611211..2f849166e 100644 --- a/conformance/tests/qualifiers_final_annotation.py +++ b/conformance/tests/qualifiers_final_annotation.py @@ -7,10 +7,14 @@ # Specification: https://typing.readthedocs.io/en/latest/spec/qualifiers.html#id1 ID1: Final[int] = 1 +assert_type(ID1, Literal[int]) ID2: Final = 1 assert_type(ID2, Literal[1]) +ID3: Final = 1.0 +assert_type(ID3, Literal[float]) + # > If the right hand side is omitted, there must be an explicit type argument to Final. BAD1: Final # E: missing assignment From 42763140ea6e88392e27c360933d745f3e040109 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Mon, 31 Aug 2026 17:55:46 +0200 Subject: [PATCH 2/7] Fix type assertions --- .../results/mypy/qualifiers_final_annotation.toml | 8 ++------ .../pycroscope/qualifiers_final_annotation.toml | 8 ++------ .../results/pyrefly/qualifiers_final_annotation.toml | 8 +------- .../results/pyright/qualifiers_final_annotation.toml | 8 ++------ conformance/results/results.html | 12 ++++++------ .../results/ty/qualifiers_final_annotation.toml | 10 ++++------ .../results/zuban/qualifiers_final_annotation.toml | 6 +----- conformance/tests/qualifiers_final_annotation.py | 4 ++-- 8 files changed, 20 insertions(+), 44 deletions(-) diff --git a/conformance/results/mypy/qualifiers_final_annotation.toml b/conformance/results/mypy/qualifiers_final_annotation.toml index 8cfc051a9..7469c5bed 100644 --- a/conformance/results/mypy/qualifiers_final_annotation.toml +++ b/conformance/results/mypy/qualifiers_final_annotation.toml @@ -6,10 +6,7 @@ Does not allow redefinition of private class variable that is marked `Final` in Does not report modification of local `Final` variable via `for` statement. """ output = """ -qualifiers_final_annotation.py:10: error: Expression is of type "int", not "Any" [assert-type] -qualifiers_final_annotation.py:10: error: Parameter 1 of Literal[...] is invalid [valid-type] -qualifiers_final_annotation.py:16: error: Expression is of type "Literal[1.0]", not "Any" [assert-type] -qualifiers_final_annotation.py:16: error: Parameter 1 of Literal[...] is invalid [valid-type] +qualifiers_final_annotation.py:16: error: Expression is of type "Literal[1.0]", not "float" [assert-type] qualifiers_final_annotation.py:20: error: Type in Final[...] can only be omitted if there is an initializer [misc] qualifiers_final_annotation.py:22: error: Final[...] takes at most one type argument [misc] qualifiers_final_annotation.py:38: error: Type in Final[...] can only be omitted if there is an initializer [misc] @@ -47,8 +44,7 @@ qualifiers_final_annotation.py:188: error: Cannot assign to final name "PI" [mi conformance_automated = "Fail" errors_diff = """ Line 167: Expected 1 errors -Line 10: Unexpected errors ['qualifiers_final_annotation.py:10: error: Expression is of type "int", not "Any" [assert-type]', 'qualifiers_final_annotation.py:10: error: Parameter 1 of Literal[...] is invalid [valid-type]'] -Line 16: Unexpected errors ['qualifiers_final_annotation.py:16: error: Expression is of type "Literal[1.0]", not "Any" [assert-type]', 'qualifiers_final_annotation.py:16: error: Parameter 1 of Literal[...] is invalid [valid-type]'] +Line 16: Unexpected errors ['qualifiers_final_annotation.py:16: error: Expression is of type "Literal[1.0]", not "float" [assert-type]'] Line 63: Unexpected errors ['qualifiers_final_annotation.py:63: error: Cannot assign to final attribute "ID6" [misc]'] Line 100: Unexpected errors ['qualifiers_final_annotation.py:100: error: Cannot assign to final name "__private" [misc]'] Line 149: Unexpected errors ['qualifiers_final_annotation.py:149: error: Invalid "NamedTuple()" field name [misc]'] diff --git a/conformance/results/pycroscope/qualifiers_final_annotation.toml b/conformance/results/pycroscope/qualifiers_final_annotation.toml index 278b009e9..bd1eb9704 100644 --- a/conformance/results/pycroscope/qualifiers_final_annotation.toml +++ b/conformance/results/pycroscope/qualifiers_final_annotation.toml @@ -1,13 +1,9 @@ conformance_automated = "Fail" errors_diff = """ -Line 10: Unexpected errors ["./qualifiers_final_annotation.py:10:12: int is not equivalent to type 'int'", "./qualifiers_final_annotation.py:10:0: Arguments to Literal[] must be None, bool, int, str, bytes, or enum members; got [invalid_literal]"] -Line 16: Unexpected errors ["./qualifiers_final_annotation.py:16:12: Literal[1.0] is not equivalent to type 'float'", "./qualifiers_final_annotation.py:16:0: Arguments to Literal[] must be None, bool, int, str, bytes, or enum members; got [invalid_literal]"] +Line 16: Unexpected errors ['./qualifiers_final_annotation.py:16:12: Literal[1.0] is not equivalent to float | int'] """ output = """ -./qualifiers_final_annotation.py:10:12: int is not equivalent to type 'int' -./qualifiers_final_annotation.py:10:0: Arguments to Literal[] must be None, bool, int, str, bytes, or enum members; got [invalid_literal] -./qualifiers_final_annotation.py:16:12: Literal[1.0] is not equivalent to type 'float' -./qualifiers_final_annotation.py:16:0: Arguments to Literal[] must be None, bool, int, str, bytes, or enum members; got [invalid_literal] +./qualifiers_final_annotation.py:16:12: Literal[1.0] is not equivalent to float | int ./qualifiers_final_annotation.py:20:6: Final annotation without assignment requires an explicit type [invalid_qualifier] ./qualifiers_final_annotation.py:22:6: Invalid type annotation (, ) [invalid_annotation] ./qualifiers_final_annotation.py:38:9: Final annotation without assignment requires an explicit type [invalid_qualifier] diff --git a/conformance/results/pyrefly/qualifiers_final_annotation.toml b/conformance/results/pyrefly/qualifiers_final_annotation.toml index 92550120e..2856ffc41 100644 --- a/conformance/results/pyrefly/qualifiers_final_annotation.toml +++ b/conformance/results/pyrefly/qualifiers_final_annotation.toml @@ -1,13 +1,7 @@ -conformance_automated = "Fail" +conformance_automated = "Pass" errors_diff = """ -Line 10: Unexpected errors ['assert_type(int, Unknown) failed [assert-type]', 'Invalid type inside literal, `int` [invalid-literal]'] -Line 16: Unexpected errors ['assert_type(float, Unknown) failed [assert-type]', 'Invalid type inside literal, `float` [invalid-literal]'] """ output = """ -ERROR qualifiers_final_annotation.py:10:12-31: assert_type(int, Unknown) failed [assert-type] -ERROR qualifiers_final_annotation.py:10:26-29: Invalid type inside literal, `int` [invalid-literal] -ERROR qualifiers_final_annotation.py:16:12-33: assert_type(float, Unknown) failed [assert-type] -ERROR qualifiers_final_annotation.py:16:26-31: Invalid type inside literal, `float` [invalid-literal] ERROR qualifiers_final_annotation.py:20:7-12: Expected a type argument for `Final` [invalid-annotation] ERROR qualifiers_final_annotation.py:22:7-22: Expected 1 type argument for `Final`, got 2 [invalid-annotation] ERROR qualifiers_final_annotation.py:38:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] diff --git a/conformance/results/pyright/qualifiers_final_annotation.toml b/conformance/results/pyright/qualifiers_final_annotation.toml index 59b3287ba..7e0fd6872 100644 --- a/conformance/results/pyright/qualifiers_final_annotation.toml +++ b/conformance/results/pyright/qualifiers_final_annotation.toml @@ -1,9 +1,6 @@ conformant = "Pass" output = """ -qualifiers_final_annotation.py:10:13 - error: "assert_type" mismatch: expected "Unknown" but received "Literal[1]" (reportAssertTypeFailure) -qualifiers_final_annotation.py:10:26 - error: Type arguments for "Literal" must be None, a literal value (int, bool, str, or bytes), or an enum value (reportInvalidTypeForm) -qualifiers_final_annotation.py:16:13 - error: "assert_type" mismatch: expected "Unknown" but received "float" (reportAssertTypeFailure) -qualifiers_final_annotation.py:16:26 - error: Type arguments for "Literal" must be None, a literal value (int, bool, str, or bytes), or an enum value (reportInvalidTypeForm) +qualifiers_final_annotation.py:10:13 - error: "assert_type" mismatch: expected "int" but received "Literal[1]" (reportAssertTypeFailure) qualifiers_final_annotation.py:20:1 - error: "BAD1" is declared Final, but value is not assigned (reportGeneralTypeIssues) qualifiers_final_annotation.py:22:7 - error: Expected a single type argument after "Final" (reportInvalidTypeForm) qualifiers_final_annotation.py:38:5 - error: "ID2" is declared Final, but value is not assigned (reportGeneralTypeIssues) @@ -50,6 +47,5 @@ qualifiers_final_annotation.py:188:1 - error: "PI" is declared as Final and cann """ conformance_automated = "Fail" errors_diff = """ -Line 10: Unexpected errors ['qualifiers_final_annotation.py:10:13 - error: "assert_type" mismatch: expected "Unknown" but received "Literal[1]" (reportAssertTypeFailure)', 'qualifiers_final_annotation.py:10:26 - error: Type arguments for "Literal" must be None, a literal value (int, bool, str, or bytes), or an enum value (reportInvalidTypeForm)'] -Line 16: Unexpected errors ['qualifiers_final_annotation.py:16:13 - error: "assert_type" mismatch: expected "Unknown" but received "float" (reportAssertTypeFailure)', 'qualifiers_final_annotation.py:16:26 - error: Type arguments for "Literal" must be None, a literal value (int, bool, str, or bytes), or an enum value (reportInvalidTypeForm)'] +Line 10: Unexpected errors ['qualifiers_final_annotation.py:10:13 - error: "assert_type" mismatch: expected "int" but received "Literal[1]" (reportAssertTypeFailure)'] """ diff --git a/conformance/results/results.html b/conformance/results/results.html index 88fae9384..c6ab72f0b 100644 --- a/conformance/results/results.html +++ b/conformance/results/results.html @@ -1001,10 +1001,10 @@

    Python Type System Conformance Test Results

    Unknown - Unknown + Pass Pass Unknown - Unknown + Pass qualifiers_final_decorator @@ -1019,10 +1019,10 @@

    Python Type System Conformance Test Results

    2 / 3 • 66.7% 1.5 / 3 • 50.0% - 2 / 3 • 66.7% + 3 / 3 • 100.0% 3 / 3 • 100.0% 2 / 3 • 66.7% - 2 / 3 • 66.7% + 3 / 3 • 100.0% @@ -2609,10 +2609,10 @@

    Python Type System Conformance Test Results

    108.5 / 145 • 74.8% 137 / 145 • 94.5% - 139.5 / 145 • 96.2% + 140.5 / 145 • 96.9% 135.5 / 145 • 93.4% 131 / 145 • 90.3% - 143.5 / 145 • 99.0% + 144.5 / 145 • 99.7% diff --git a/conformance/results/ty/qualifiers_final_annotation.toml b/conformance/results/ty/qualifiers_final_annotation.toml index 29970b7ef..f67114c7f 100644 --- a/conformance/results/ty/qualifiers_final_annotation.toml +++ b/conformance/results/ty/qualifiers_final_annotation.toml @@ -1,13 +1,11 @@ conformance_automated = "Fail" errors_diff = """ -Line 10: Unexpected errors ['qualifiers_final_annotation.py:10:1: error[type-assertion-failure] Type `Literal[1]` does not match asserted type `Unknown`', 'qualifiers_final_annotation.py:10:26: error[invalid-type-form] Type arguments for `Literal` must be `None`, a literal value (int, bool, str, or bytes), or an enum member'] -Line 16: Unexpected errors ['qualifiers_final_annotation.py:16:1: error[type-assertion-failure] Type `float*` does not match asserted type `Unknown`', 'qualifiers_final_annotation.py:16:26: error[invalid-type-form] Type arguments for `Literal` must be `None`, a literal value (int, bool, str, or bytes), or an enum member'] +Line 10: Unexpected errors ['qualifiers_final_annotation.py:10:1: error[type-assertion-failure] Type `Literal[1]` does not match asserted type `int`'] +Line 16: Unexpected errors ['qualifiers_final_annotation.py:16:1: error[type-assertion-failure] Type `float*` does not match asserted type `float`'] """ output = """ -qualifiers_final_annotation.py:10:1: error[type-assertion-failure] Type `Literal[1]` does not match asserted type `Unknown` -qualifiers_final_annotation.py:10:26: error[invalid-type-form] Type arguments for `Literal` must be `None`, a literal value (int, bool, str, or bytes), or an enum member -qualifiers_final_annotation.py:16:1: error[type-assertion-failure] Type `float*` does not match asserted type `Unknown` -qualifiers_final_annotation.py:16:26: error[invalid-type-form] Type arguments for `Literal` must be `None`, a literal value (int, bool, str, or bytes), or an enum member +qualifiers_final_annotation.py:10:1: error[type-assertion-failure] Type `Literal[1]` does not match asserted type `int` +qualifiers_final_annotation.py:16:1: error[type-assertion-failure] Type `float*` does not match asserted type `float` qualifiers_final_annotation.py:20:1: error[final-without-value] `Final` symbol `BAD1` is not assigned a value qualifiers_final_annotation.py:22:7: error[invalid-type-form] Type qualifier `typing.Final` expected exactly 1 argument, got 2 qualifiers_final_annotation.py:38:5: error[final-without-value] `Final` symbol `ID2` is not assigned a value diff --git a/conformance/results/zuban/qualifiers_final_annotation.toml b/conformance/results/zuban/qualifiers_final_annotation.toml index ec6603b04..5d83af027 100644 --- a/conformance/results/zuban/qualifiers_final_annotation.toml +++ b/conformance/results/zuban/qualifiers_final_annotation.toml @@ -1,11 +1,7 @@ -conformance_automated = "Fail" +conformance_automated = "Pass" errors_diff = """ -Line 10: Unexpected errors ['qualifiers_final_annotation.py:10: error: Parameter 1 of Literal[...] is invalid [valid-type]'] -Line 16: Unexpected errors ['qualifiers_final_annotation.py:16: error: Parameter 1 of Literal[...] is invalid [valid-type]'] """ output = """ -qualifiers_final_annotation.py:10: error: Parameter 1 of Literal[...] is invalid [valid-type] -qualifiers_final_annotation.py:16: error: Parameter 1 of Literal[...] is invalid [valid-type] qualifiers_final_annotation.py:20: error: Type in Final[...] can only be omitted if there is an initializer [misc] qualifiers_final_annotation.py:22: error: Final[...] takes at most one type argument [misc] qualifiers_final_annotation.py:38: error: Type in Final[...] can only be omitted if there is an initializer [misc] diff --git a/conformance/tests/qualifiers_final_annotation.py b/conformance/tests/qualifiers_final_annotation.py index 2f849166e..512d18a44 100644 --- a/conformance/tests/qualifiers_final_annotation.py +++ b/conformance/tests/qualifiers_final_annotation.py @@ -7,13 +7,13 @@ # Specification: https://typing.readthedocs.io/en/latest/spec/qualifiers.html#id1 ID1: Final[int] = 1 -assert_type(ID1, Literal[int]) +assert_type(ID1, int) ID2: Final = 1 assert_type(ID2, Literal[1]) ID3: Final = 1.0 -assert_type(ID3, Literal[float]) +assert_type(ID3, float) # > If the right hand side is omitted, there must be an explicit type argument to Final. From b214de460fb756e45012200ba7ed39f9f2cc5e3e Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Mon, 31 Aug 2026 18:07:38 +0200 Subject: [PATCH 3/7] Reshuffle, fix, comment --- .../mypy/qualifiers_final_annotation.toml | 81 ++++++++++--------- .../qualifiers_final_annotation.toml | 65 +++++++-------- .../pyrefly/qualifiers_final_annotation.toml | 65 +++++++-------- .../pyright/qualifiers_final_annotation.toml | 70 ++++++++-------- .../ty/qualifiers_final_annotation.toml | 66 ++++++++------- .../zuban/qualifiers_final_annotation.toml | 61 +++++++------- .../tests/qualifiers_final_annotation.py | 19 +++-- 7 files changed, 218 insertions(+), 209 deletions(-) diff --git a/conformance/results/mypy/qualifiers_final_annotation.toml b/conformance/results/mypy/qualifiers_final_annotation.toml index 7469c5bed..e004169e4 100644 --- a/conformance/results/mypy/qualifiers_final_annotation.toml +++ b/conformance/results/mypy/qualifiers_final_annotation.toml @@ -6,47 +6,48 @@ Does not allow redefinition of private class variable that is marked `Final` in Does not report modification of local `Final` variable via `for` statement. """ output = """ -qualifiers_final_annotation.py:16: error: Expression is of type "Literal[1.0]", not "float" [assert-type] -qualifiers_final_annotation.py:20: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:22: error: Final[...] takes at most one type argument [misc] -qualifiers_final_annotation.py:38: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:42: error: Final name must be initialized with a value [misc] -qualifiers_final_annotation.py:58: error: Cannot assign to final attribute "ID5" [misc] -qualifiers_final_annotation.py:63: error: Cannot assign to final attribute "ID6" [misc] -qualifiers_final_annotation.py:66: error: Can only declare a final attribute in class body or __init__ [misc] -qualifiers_final_annotation.py:67: error: Can only declare a final attribute in class body or __init__ [misc] -qualifiers_final_annotation.py:69: error: Cannot assign to final attribute "ID7" [misc] -qualifiers_final_annotation.py:71: error: Cannot assign to final attribute "ID7" [misc] -qualifiers_final_annotation.py:75: error: Cannot assign to final name "RATE" [misc] -qualifiers_final_annotation.py:85: error: Cannot assign to final attribute "DEFAULT_ID" [misc] -qualifiers_final_annotation.py:98: error: Cannot assign to final name "BORDER_WIDTH" [misc] -qualifiers_final_annotation.py:100: error: Cannot assign to final name "__private" [misc] -qualifiers_final_annotation.py:111: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] -qualifiers_final_annotation.py:112: error: Variable should not be annotated with both ClassVar and Final [misc] -qualifiers_final_annotation.py:122: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] -qualifiers_final_annotation.py:125: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] -qualifiers_final_annotation.py:135: error: Final[...] can't be used inside a TypedDict [valid-type] -qualifiers_final_annotation.py:140: error: Final[...] can't be used inside a NamedTuple [valid-type] -qualifiers_final_annotation.py:149: error: Invalid "NamedTuple()" field name [misc] -qualifiers_final_annotation.py:151: error: Unexpected keyword argument "x" for "N" [call-arg] -qualifiers_final_annotation.py:151: error: Unexpected keyword argument "y" for "N" [call-arg] -qualifiers_final_annotation.py:152: error: Unexpected keyword argument "a" for "N" [call-arg] -qualifiers_final_annotation.py:153: error: Unexpected keyword argument "x" for "N" [call-arg] -qualifiers_final_annotation.py:153: error: Unexpected keyword argument "y" for "N" [call-arg] -qualifiers_final_annotation.py:159: error: Cannot assign to final name "ID1" [misc] -qualifiers_final_annotation.py:163: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:165: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:170: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] -qualifiers_final_annotation.py:173: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:184: error: Cannot assign to final name "TEN" [misc] -qualifiers_final_annotation.py:188: error: Cannot assign to final name "PI" [misc] +qualifiers_final_annotation.py:20: error: Argument 1 to "expects_one" has incompatible type "int"; expected "Literal[1]" [arg-type] +qualifiers_final_annotation.py:23: error: Expression is of type "Literal[1.0]", not "float" [assert-type] +qualifiers_final_annotation.py:29: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:31: error: Final[...] takes at most one type argument [misc] +qualifiers_final_annotation.py:47: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:51: error: Final name must be initialized with a value [misc] +qualifiers_final_annotation.py:67: error: Cannot assign to final attribute "ID5" [misc] +qualifiers_final_annotation.py:72: error: Cannot assign to final attribute "ID6" [misc] +qualifiers_final_annotation.py:75: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:76: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:78: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:80: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:84: error: Cannot assign to final name "RATE" [misc] +qualifiers_final_annotation.py:94: error: Cannot assign to final attribute "DEFAULT_ID" [misc] +qualifiers_final_annotation.py:107: error: Cannot assign to final name "BORDER_WIDTH" [misc] +qualifiers_final_annotation.py:109: error: Cannot assign to final name "__private" [misc] +qualifiers_final_annotation.py:120: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] +qualifiers_final_annotation.py:121: error: Variable should not be annotated with both ClassVar and Final [misc] +qualifiers_final_annotation.py:131: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] +qualifiers_final_annotation.py:134: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] +qualifiers_final_annotation.py:144: error: Final[...] can't be used inside a TypedDict [valid-type] +qualifiers_final_annotation.py:149: error: Final[...] can't be used inside a NamedTuple [valid-type] +qualifiers_final_annotation.py:158: error: Invalid "NamedTuple()" field name [misc] +qualifiers_final_annotation.py:160: error: Unexpected keyword argument "x" for "N" [call-arg] +qualifiers_final_annotation.py:160: error: Unexpected keyword argument "y" for "N" [call-arg] +qualifiers_final_annotation.py:161: error: Unexpected keyword argument "a" for "N" [call-arg] +qualifiers_final_annotation.py:162: error: Unexpected keyword argument "x" for "N" [call-arg] +qualifiers_final_annotation.py:162: error: Unexpected keyword argument "y" for "N" [call-arg] +qualifiers_final_annotation.py:168: error: Cannot assign to final name "ID1" [misc] +qualifiers_final_annotation.py:172: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:174: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:179: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] +qualifiers_final_annotation.py:182: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:193: error: Cannot assign to final name "TEN" [misc] +qualifiers_final_annotation.py:197: error: Cannot assign to final name "PI" [misc] """ conformance_automated = "Fail" errors_diff = """ -Line 167: Expected 1 errors -Line 16: Unexpected errors ['qualifiers_final_annotation.py:16: error: Expression is of type "Literal[1.0]", not "float" [assert-type]'] -Line 63: Unexpected errors ['qualifiers_final_annotation.py:63: error: Cannot assign to final attribute "ID6" [misc]'] -Line 100: Unexpected errors ['qualifiers_final_annotation.py:100: error: Cannot assign to final name "__private" [misc]'] -Line 149: Unexpected errors ['qualifiers_final_annotation.py:149: error: Invalid "NamedTuple()" field name [misc]'] -Line 151: Unexpected errors ['qualifiers_final_annotation.py:151: error: Unexpected keyword argument "x" for "N" [call-arg]', 'qualifiers_final_annotation.py:151: error: Unexpected keyword argument "y" for "N" [call-arg]'] +Line 176: Expected 1 errors +Line 23: Unexpected errors ['qualifiers_final_annotation.py:23: error: Expression is of type "Literal[1.0]", not "float" [assert-type]'] +Line 72: Unexpected errors ['qualifiers_final_annotation.py:72: error: Cannot assign to final attribute "ID6" [misc]'] +Line 109: Unexpected errors ['qualifiers_final_annotation.py:109: error: Cannot assign to final name "__private" [misc]'] +Line 158: Unexpected errors ['qualifiers_final_annotation.py:158: error: Invalid "NamedTuple()" field name [misc]'] +Line 160: Unexpected errors ['qualifiers_final_annotation.py:160: error: Unexpected keyword argument "x" for "N" [call-arg]', 'qualifiers_final_annotation.py:160: error: Unexpected keyword argument "y" for "N" [call-arg]'] """ diff --git a/conformance/results/pycroscope/qualifiers_final_annotation.toml b/conformance/results/pycroscope/qualifiers_final_annotation.toml index bd1eb9704..d7148de63 100644 --- a/conformance/results/pycroscope/qualifiers_final_annotation.toml +++ b/conformance/results/pycroscope/qualifiers_final_annotation.toml @@ -1,37 +1,38 @@ conformance_automated = "Fail" errors_diff = """ -Line 16: Unexpected errors ['./qualifiers_final_annotation.py:16:12: Literal[1.0] is not equivalent to float | int'] +Line 23: Unexpected errors ['./qualifiers_final_annotation.py:23:12: Literal[1.0] is not equivalent to float | int'] """ output = """ -./qualifiers_final_annotation.py:16:12: Literal[1.0] is not equivalent to float | int -./qualifiers_final_annotation.py:20:6: Final annotation without assignment requires an explicit type [invalid_qualifier] -./qualifiers_final_annotation.py:22:6: Invalid type annotation (, ) [invalid_annotation] -./qualifiers_final_annotation.py:38:9: Final annotation without assignment requires an explicit type [invalid_qualifier] -./qualifiers_final_annotation.py:38:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:42:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:58:8: Cannot assign to final name ID5 [incompatible_assignment] -./qualifiers_final_annotation.py:66:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:67:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:69:8: Cannot assign to final name ID7 [incompatible_assignment] -./qualifiers_final_annotation.py:71:8: Cannot assign to final name ID7 [incompatible_assignment] -./qualifiers_final_annotation.py:75:0: Cannot assign to final name RATE [incompatible_assignment] -./qualifiers_final_annotation.py:85:0: Cannot assign to final name DEFAULT_ID [incompatible_assignment] -./qualifiers_final_annotation.py:98:4: Cannot override final attribute BORDER_WIDTH [incompatible_override] -./qualifiers_final_annotation.py:111:12: Final cannot be combined with ClassVar [invalid_qualifier] -./qualifiers_final_annotation.py:112:12: Final cannot be combined with ClassVar [invalid_qualifier] -./qualifiers_final_annotation.py:122:3: Unrecognized annotation typing.Final[] [invalid_annotation] -./qualifiers_final_annotation.py:125:13: Unexpected Final annotation [invalid_qualifier] -./qualifiers_final_annotation.py:135:7: Unexpected Final annotation [invalid_qualifier] -./qualifiers_final_annotation.py:140:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:152:0: In call to pycroscope.signature.N: Missing required argument 'x' [incompatible_call] -./qualifiers_final_annotation.py:153:4: Incompatible argument type for x: expected int but got Literal[''] [incompatible_argument] -./qualifiers_final_annotation.py:153:10: Incompatible argument type for y: expected int but got Literal[''] [incompatible_argument] -./qualifiers_final_annotation.py:159:4: Cannot assign to final name ID1 [incompatible_assignment] -./qualifiers_final_annotation.py:163:4: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:165:9: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:167:8: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:170:29: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:173:8: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:184:0: Cannot assign to final name TEN [incompatible_assignment] -./qualifiers_final_annotation.py:188:0: Cannot assign to final name PI [incompatible_assignment] +./qualifiers_final_annotation.py:20:12: Incompatible argument type for x: expected Literal[1] but got int [incompatible_argument] +./qualifiers_final_annotation.py:23:12: Literal[1.0] is not equivalent to float | int +./qualifiers_final_annotation.py:29:6: Final annotation without assignment requires an explicit type [invalid_qualifier] +./qualifiers_final_annotation.py:31:6: Invalid type annotation (, ) [invalid_annotation] +./qualifiers_final_annotation.py:47:9: Final annotation without assignment requires an explicit type [invalid_qualifier] +./qualifiers_final_annotation.py:47:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:51:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:67:8: Cannot assign to final name ID5 [incompatible_assignment] +./qualifiers_final_annotation.py:75:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:76:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:78:8: Cannot assign to final name ID7 [incompatible_assignment] +./qualifiers_final_annotation.py:80:8: Cannot assign to final name ID7 [incompatible_assignment] +./qualifiers_final_annotation.py:84:0: Cannot assign to final name RATE [incompatible_assignment] +./qualifiers_final_annotation.py:94:0: Cannot assign to final name DEFAULT_ID [incompatible_assignment] +./qualifiers_final_annotation.py:107:4: Cannot override final attribute BORDER_WIDTH [incompatible_override] +./qualifiers_final_annotation.py:120:12: Final cannot be combined with ClassVar [invalid_qualifier] +./qualifiers_final_annotation.py:121:12: Final cannot be combined with ClassVar [invalid_qualifier] +./qualifiers_final_annotation.py:131:3: Unrecognized annotation typing.Final[] [invalid_annotation] +./qualifiers_final_annotation.py:134:13: Unexpected Final annotation [invalid_qualifier] +./qualifiers_final_annotation.py:144:7: Unexpected Final annotation [invalid_qualifier] +./qualifiers_final_annotation.py:149:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:161:0: In call to pycroscope.signature.N: Missing required argument 'x' [incompatible_call] +./qualifiers_final_annotation.py:162:4: Incompatible argument type for x: expected int but got Literal[''] [incompatible_argument] +./qualifiers_final_annotation.py:162:10: Incompatible argument type for y: expected int but got Literal[''] [incompatible_argument] +./qualifiers_final_annotation.py:168:4: Cannot assign to final name ID1 [incompatible_assignment] +./qualifiers_final_annotation.py:172:4: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:174:9: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:176:8: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:179:29: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:182:8: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:193:0: Cannot assign to final name TEN [incompatible_assignment] +./qualifiers_final_annotation.py:197:0: Cannot assign to final name PI [incompatible_assignment] """ diff --git a/conformance/results/pyrefly/qualifiers_final_annotation.toml b/conformance/results/pyrefly/qualifiers_final_annotation.toml index 2856ffc41..35b5fa609 100644 --- a/conformance/results/pyrefly/qualifiers_final_annotation.toml +++ b/conformance/results/pyrefly/qualifiers_final_annotation.toml @@ -2,36 +2,37 @@ conformance_automated = "Pass" errors_diff = """ """ output = """ -ERROR qualifiers_final_annotation.py:20:7-12: Expected a type argument for `Final` [invalid-annotation] -ERROR qualifiers_final_annotation.py:22:7-22: Expected 1 type argument for `Final`, got 2 [invalid-annotation] -ERROR qualifiers_final_annotation.py:38:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] -ERROR qualifiers_final_annotation.py:42:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] -ERROR qualifiers_final_annotation.py:58:9-17: Cannot set field `ID5` [read-only] -ERROR qualifiers_final_annotation.py:66:9-17: Cannot set field `id3` [read-only] -ERROR qualifiers_final_annotation.py:67:9-17: Cannot set field `id4` [read-only] -ERROR qualifiers_final_annotation.py:69:9-17: Cannot set field `ID7` [read-only] -ERROR qualifiers_final_annotation.py:71:9-17: Cannot set field `ID7` [read-only] -ERROR qualifiers_final_annotation.py:75:8-11: Cannot assign to variable `RATE` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:85:1-18: Cannot set field `DEFAULT_ID` [read-only] -ERROR qualifiers_final_annotation.py:98:5-17: `BORDER_WIDTH` is declared as final in parent class `ClassC` [bad-override] -ERROR qualifiers_final_annotation.py:111:5-11: `Final` may not be nested inside `ClassVar` [invalid-annotation] -ERROR qualifiers_final_annotation.py:112:19-27: `ClassVar` may not be nested inside `Final` [invalid-annotation] -ERROR qualifiers_final_annotation.py:122:9-19: `Final` is not allowed in this context [invalid-annotation] -ERROR qualifiers_final_annotation.py:125:14-19: `Final` is only allowed on a class or local variable annotation [invalid-annotation] -ERROR qualifiers_final_annotation.py:125:14-30: `Final` is not allowed in this context [invalid-annotation] -ERROR qualifiers_final_annotation.py:135:5-6: `Final` may not be used for TypedDict members [invalid-annotation] -ERROR qualifiers_final_annotation.py:140:5-6: `Final` may not be used for NamedTuple members [invalid-annotation] -ERROR qualifiers_final_annotation.py:152:2-7: Missing argument `x` in function `N.__new__` [missing-argument] -ERROR qualifiers_final_annotation.py:152:2-7: Missing argument `y` in function `N.__new__` [missing-argument] -ERROR qualifiers_final_annotation.py:152:3-4: Unexpected keyword argument `a` in function `N.__new__` [unexpected-keyword] -ERROR qualifiers_final_annotation.py:153:5-7: Argument `Literal['']` is not assignable to parameter `x` with type `int` in function `N.__new__` [bad-argument-type] -ERROR qualifiers_final_annotation.py:153:11-13: Argument `Literal['']` is not assignable to parameter `y` with type `int` in function `N.__new__` [bad-argument-type] -ERROR qualifiers_final_annotation.py:159:11-12: Cannot assign to variable `ID1` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:163:5-11: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:165:15-16: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:167:14-23: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:170:10-26: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:173:5-11: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:184:1-4: Cannot assign to `TEN` because it is imported as final [bad-assignment] -ERROR qualifiers_final_annotation.py:188:1-3: Cannot assign to `PI` because it is imported as final [bad-assignment] +ERROR qualifiers_final_annotation.py:20:13-16: Argument `int` is not assignable to parameter `x` with type `Literal[1]` in function `expects_one` [bad-argument-type] +ERROR qualifiers_final_annotation.py:29:7-12: Expected a type argument for `Final` [invalid-annotation] +ERROR qualifiers_final_annotation.py:31:7-22: Expected 1 type argument for `Final`, got 2 [invalid-annotation] +ERROR qualifiers_final_annotation.py:47:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] +ERROR qualifiers_final_annotation.py:51:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] +ERROR qualifiers_final_annotation.py:67:9-17: Cannot set field `ID5` [read-only] +ERROR qualifiers_final_annotation.py:75:9-17: Cannot set field `id3` [read-only] +ERROR qualifiers_final_annotation.py:76:9-17: Cannot set field `id4` [read-only] +ERROR qualifiers_final_annotation.py:78:9-17: Cannot set field `ID7` [read-only] +ERROR qualifiers_final_annotation.py:80:9-17: Cannot set field `ID7` [read-only] +ERROR qualifiers_final_annotation.py:84:8-11: Cannot assign to variable `RATE` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:94:1-18: Cannot set field `DEFAULT_ID` [read-only] +ERROR qualifiers_final_annotation.py:107:5-17: `BORDER_WIDTH` is declared as final in parent class `ClassC` [bad-override] +ERROR qualifiers_final_annotation.py:120:5-11: `Final` may not be nested inside `ClassVar` [invalid-annotation] +ERROR qualifiers_final_annotation.py:121:19-27: `ClassVar` may not be nested inside `Final` [invalid-annotation] +ERROR qualifiers_final_annotation.py:131:9-19: `Final` is not allowed in this context [invalid-annotation] +ERROR qualifiers_final_annotation.py:134:14-19: `Final` is only allowed on a class or local variable annotation [invalid-annotation] +ERROR qualifiers_final_annotation.py:134:14-30: `Final` is not allowed in this context [invalid-annotation] +ERROR qualifiers_final_annotation.py:144:5-6: `Final` may not be used for TypedDict members [invalid-annotation] +ERROR qualifiers_final_annotation.py:149:5-6: `Final` may not be used for NamedTuple members [invalid-annotation] +ERROR qualifiers_final_annotation.py:161:2-7: Missing argument `x` in function `N.__new__` [missing-argument] +ERROR qualifiers_final_annotation.py:161:2-7: Missing argument `y` in function `N.__new__` [missing-argument] +ERROR qualifiers_final_annotation.py:161:3-4: Unexpected keyword argument `a` in function `N.__new__` [unexpected-keyword] +ERROR qualifiers_final_annotation.py:162:5-7: Argument `Literal['']` is not assignable to parameter `x` with type `int` in function `N.__new__` [bad-argument-type] +ERROR qualifiers_final_annotation.py:162:11-13: Argument `Literal['']` is not assignable to parameter `y` with type `int` in function `N.__new__` [bad-argument-type] +ERROR qualifiers_final_annotation.py:168:11-12: Cannot assign to variable `ID1` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:172:5-11: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:174:15-16: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:176:14-23: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:179:10-26: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:182:5-11: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:193:1-4: Cannot assign to `TEN` because it is imported as final [bad-assignment] +ERROR qualifiers_final_annotation.py:197:1-3: Cannot assign to `PI` because it is imported as final [bad-assignment] """ diff --git a/conformance/results/pyright/qualifiers_final_annotation.toml b/conformance/results/pyright/qualifiers_final_annotation.toml index 7e0fd6872..05f538d28 100644 --- a/conformance/results/pyright/qualifiers_final_annotation.toml +++ b/conformance/results/pyright/qualifiers_final_annotation.toml @@ -1,51 +1,49 @@ conformant = "Pass" output = """ -qualifiers_final_annotation.py:10:13 - error: "assert_type" mismatch: expected "int" but received "Literal[1]" (reportAssertTypeFailure) -qualifiers_final_annotation.py:20:1 - error: "BAD1" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:22:7 - error: Expected a single type argument after "Final" (reportInvalidTypeForm) -qualifiers_final_annotation.py:38:5 - error: "ID2" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:42:5 - error: "ID3" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:58:14 - error: Cannot assign to attribute "ID5" for class "ClassA*" +qualifiers_final_annotation.py:29:1 - error: "BAD1" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:31:7 - error: Expected a single type argument after "Final" (reportInvalidTypeForm) +qualifiers_final_annotation.py:47:5 - error: "ID2" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:51:5 - error: "ID3" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:67:14 - error: Cannot assign to attribute "ID5" for class "ClassA*"   Attribute "ID5" cannot be assigned through a class instance because it is a ClassVar   "ID5" is declared as Final and cannot be reassigned (reportAttributeAccessIssue) -qualifiers_final_annotation.py:66:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:67:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:67:32 - error: Cannot assign to attribute "id4" for class "ClassA*" +qualifiers_final_annotation.py:75:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:76:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:76:32 - error: Cannot assign to attribute "id4" for class "ClassA*"   "Literal[1]" is not assignable to "Final" (reportAttributeAccessIssue) -qualifiers_final_annotation.py:69:14 - error: Cannot assign to attribute "ID7" for class "ClassA*" +qualifiers_final_annotation.py:78:14 - error: Cannot assign to attribute "ID7" for class "ClassA*"   Attribute "ID7" cannot be assigned through a class instance because it is a ClassVar   "ID7" is declared as Final and cannot be reassigned (reportAttributeAccessIssue) -qualifiers_final_annotation.py:71:14 - error: Cannot assign to attribute "ID7" for class "ClassA*" +qualifiers_final_annotation.py:80:14 - error: Cannot assign to attribute "ID7" for class "ClassA*"   Attribute "ID7" cannot be assigned through a class instance because it is a ClassVar   "ID7" is declared as Final and cannot be reassigned (reportAttributeAccessIssue) -qualifiers_final_annotation.py:75:1 - error: "RATE" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:85:8 - error: Cannot assign to attribute "DEFAULT_ID" for class "type[ClassB]" +qualifiers_final_annotation.py:84:1 - error: "RATE" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:94:8 - error: Cannot assign to attribute "DEFAULT_ID" for class "type[ClassB]"   "DEFAULT_ID" is declared as Final and cannot be reassigned (reportAttributeAccessIssue) -qualifiers_final_annotation.py:98:5 - error: "BORDER_WIDTH" cannot be redeclared because parent class "ClassC" declares it as Final (reportGeneralTypeIssues) -qualifiers_final_annotation.py:111:22 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:112:19 - error: "ClassVar" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:122:9 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:125:14 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:135:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:135:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:140:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:140:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:152:1 - error: Arguments missing for parameters "x", "y" (reportCallIssue) -qualifiers_final_annotation.py:152:3 - error: No parameter named "a" (reportCallIssue) -qualifiers_final_annotation.py:153:5 - error: Argument of type "Literal['']" cannot be assigned to parameter "x" of type "int" in function "__new__" +qualifiers_final_annotation.py:107:5 - error: "BORDER_WIDTH" cannot be redeclared because parent class "ClassC" declares it as Final (reportGeneralTypeIssues) +qualifiers_final_annotation.py:120:22 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:121:19 - error: "ClassVar" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:131:9 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:134:14 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:144:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:144:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:149:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:149:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:161:1 - error: Arguments missing for parameters "x", "y" (reportCallIssue) +qualifiers_final_annotation.py:161:3 - error: No parameter named "a" (reportCallIssue) +qualifiers_final_annotation.py:162:5 - error: Argument of type "Literal['']" cannot be assigned to parameter "x" of type "int" in function "__new__"   "Literal['']" is not assignable to "int" (reportArgumentType) -qualifiers_final_annotation.py:153:11 - error: Argument of type "Literal['']" cannot be assigned to parameter "y" of type "int" in function "__new__" +qualifiers_final_annotation.py:162:11 - error: Argument of type "Literal['']" cannot be assigned to parameter "y" of type "int" in function "__new__"   "Literal['']" is not assignable to "int" (reportArgumentType) -qualifiers_final_annotation.py:159:5 - error: "ID1" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:163:5 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:165:10 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:167:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:170:30 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:173:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:184:1 - error: "TEN" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:188:1 - error: "PI" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:168:5 - error: "ID1" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:172:5 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:174:10 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:176:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:179:30 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:182:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:193:1 - error: "TEN" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:197:1 - error: "PI" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) """ -conformance_automated = "Fail" +conformance_automated = "Pass" errors_diff = """ -Line 10: Unexpected errors ['qualifiers_final_annotation.py:10:13 - error: "assert_type" mismatch: expected "int" but received "Literal[1]" (reportAssertTypeFailure)'] """ diff --git a/conformance/results/ty/qualifiers_final_annotation.toml b/conformance/results/ty/qualifiers_final_annotation.toml index f67114c7f..731086e57 100644 --- a/conformance/results/ty/qualifiers_final_annotation.toml +++ b/conformance/results/ty/qualifiers_final_annotation.toml @@ -1,39 +1,37 @@ conformance_automated = "Fail" errors_diff = """ -Line 10: Unexpected errors ['qualifiers_final_annotation.py:10:1: error[type-assertion-failure] Type `Literal[1]` does not match asserted type `int`'] -Line 16: Unexpected errors ['qualifiers_final_annotation.py:16:1: error[type-assertion-failure] Type `float*` does not match asserted type `float`'] +Line 23: Unexpected errors ['qualifiers_final_annotation.py:23:1: error[type-assertion-failure] Type `float*` does not match asserted type `float`'] """ output = """ -qualifiers_final_annotation.py:10:1: error[type-assertion-failure] Type `Literal[1]` does not match asserted type `int` -qualifiers_final_annotation.py:16:1: error[type-assertion-failure] Type `float*` does not match asserted type `float` -qualifiers_final_annotation.py:20:1: error[final-without-value] `Final` symbol `BAD1` is not assigned a value -qualifiers_final_annotation.py:22:7: error[invalid-type-form] Type qualifier `typing.Final` expected exactly 1 argument, got 2 -qualifiers_final_annotation.py:38:5: error[final-without-value] `Final` symbol `ID2` is not assigned a value -qualifiers_final_annotation.py:42:5: error[final-without-value] `Final` symbol `ID3` is not assigned a value -qualifiers_final_annotation.py:58:9: error[invalid-assignment] Invalid assignment to final attribute: `ID5` already has a value in the class body -qualifiers_final_annotation.py:66:9: error[invalid-assignment] Cannot assign to final attribute `id3` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` -qualifiers_final_annotation.py:67:9: error[invalid-assignment] Cannot assign to final attribute `id4` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` -qualifiers_final_annotation.py:69:9: error[invalid-assignment] Cannot assign to final attribute `ID7` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` -qualifiers_final_annotation.py:71:9: error[invalid-assignment] Cannot assign to final attribute `ID7` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` -qualifiers_final_annotation.py:75:1: error[invalid-assignment] Reassignment of `Final` symbol `RATE` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:85:1: error[invalid-assignment] Cannot assign to final attribute `DEFAULT_ID` on type ``: `Final` attributes can only be assigned in the class body or `__init__` -qualifiers_final_annotation.py:98:5: error[override-of-final-variable] Cannot override final variable `BORDER_WIDTH` from superclass `ClassC` -qualifiers_final_annotation.py:111:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant -qualifiers_final_annotation.py:112:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant -qualifiers_final_annotation.py:122:9: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in type expressions (only in annotation expressions) -qualifiers_final_annotation.py:125:14: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in parameter annotations -qualifiers_final_annotation.py:135:8: error[invalid-type-form] `Final` is not allowed in TypedDict fields -qualifiers_final_annotation.py:140:5: error[invalid-named-tuple] Type qualifier `Final` is not allowed on NamedTuple field `b` -qualifiers_final_annotation.py:152:1: error[missing-argument] No arguments provided for required parameters `x`, `y` -qualifiers_final_annotation.py:152:3: error[unknown-argument] Argument `a` does not match any known parameter -qualifiers_final_annotation.py:153:3: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` -qualifiers_final_annotation.py:153:9: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` -qualifiers_final_annotation.py:159:5: error[invalid-assignment] Reassignment of `Final` symbol `ID1` is not allowed: Reassignment of `Final` symbol -qualifiers_final_annotation.py:163:5: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:165:10: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:167:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:170:30: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:173:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:184:1: error[invalid-assignment] Reassignment of `Final` symbol `TEN` is not allowed: Reassignment of `Final` symbol -qualifiers_final_annotation.py:188:1: error[invalid-assignment] Reassignment of `Final` symbol `PI` is not allowed: Reassignment of `Final` symbol +qualifiers_final_annotation.py:23:1: error[type-assertion-failure] Type `float*` does not match asserted type `float` +qualifiers_final_annotation.py:29:1: error[final-without-value] `Final` symbol `BAD1` is not assigned a value +qualifiers_final_annotation.py:31:7: error[invalid-type-form] Type qualifier `typing.Final` expected exactly 1 argument, got 2 +qualifiers_final_annotation.py:47:5: error[final-without-value] `Final` symbol `ID2` is not assigned a value +qualifiers_final_annotation.py:51:5: error[final-without-value] `Final` symbol `ID3` is not assigned a value +qualifiers_final_annotation.py:67:9: error[invalid-assignment] Invalid assignment to final attribute: `ID5` already has a value in the class body +qualifiers_final_annotation.py:75:9: error[invalid-assignment] Cannot assign to final attribute `id3` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` +qualifiers_final_annotation.py:76:9: error[invalid-assignment] Cannot assign to final attribute `id4` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` +qualifiers_final_annotation.py:78:9: error[invalid-assignment] Cannot assign to final attribute `ID7` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` +qualifiers_final_annotation.py:80:9: error[invalid-assignment] Cannot assign to final attribute `ID7` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` +qualifiers_final_annotation.py:84:1: error[invalid-assignment] Reassignment of `Final` symbol `RATE` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:94:1: error[invalid-assignment] Cannot assign to final attribute `DEFAULT_ID` on type ``: `Final` attributes can only be assigned in the class body or `__init__` +qualifiers_final_annotation.py:107:5: error[override-of-final-variable] Cannot override final variable `BORDER_WIDTH` from superclass `ClassC` +qualifiers_final_annotation.py:120:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant +qualifiers_final_annotation.py:121:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant +qualifiers_final_annotation.py:131:9: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in type expressions (only in annotation expressions) +qualifiers_final_annotation.py:134:14: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in parameter annotations +qualifiers_final_annotation.py:144:8: error[invalid-type-form] `Final` is not allowed in TypedDict fields +qualifiers_final_annotation.py:149:5: error[invalid-named-tuple] Type qualifier `Final` is not allowed on NamedTuple field `b` +qualifiers_final_annotation.py:161:1: error[missing-argument] No arguments provided for required parameters `x`, `y` +qualifiers_final_annotation.py:161:3: error[unknown-argument] Argument `a` does not match any known parameter +qualifiers_final_annotation.py:162:3: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` +qualifiers_final_annotation.py:162:9: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` +qualifiers_final_annotation.py:168:5: error[invalid-assignment] Reassignment of `Final` symbol `ID1` is not allowed: Reassignment of `Final` symbol +qualifiers_final_annotation.py:172:5: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:174:10: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:176:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:179:30: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:182:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:193:1: error[invalid-assignment] Reassignment of `Final` symbol `TEN` is not allowed: Reassignment of `Final` symbol +qualifiers_final_annotation.py:197:1: error[invalid-assignment] Reassignment of `Final` symbol `PI` is not allowed: Reassignment of `Final` symbol """ diff --git a/conformance/results/zuban/qualifiers_final_annotation.toml b/conformance/results/zuban/qualifiers_final_annotation.toml index 5d83af027..c9498b967 100644 --- a/conformance/results/zuban/qualifiers_final_annotation.toml +++ b/conformance/results/zuban/qualifiers_final_annotation.toml @@ -2,34 +2,35 @@ conformance_automated = "Pass" errors_diff = """ """ output = """ -qualifiers_final_annotation.py:20: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:22: error: Final[...] takes at most one type argument [misc] -qualifiers_final_annotation.py:38: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:42: error: Final name must be initialized with a value [misc] -qualifiers_final_annotation.py:58: error: Cannot assign to final attribute "ID5" [misc] -qualifiers_final_annotation.py:66: error: Can only declare a final attribute in class body or __init__ [misc] -qualifiers_final_annotation.py:67: error: Can only declare a final attribute in class body or __init__ [misc] -qualifiers_final_annotation.py:69: error: Cannot assign to final attribute "ID7" [misc] -qualifiers_final_annotation.py:71: error: Cannot assign to final attribute "ID7" [misc] -qualifiers_final_annotation.py:75: error: Cannot assign to final name "RATE" [misc] -qualifiers_final_annotation.py:85: error: Cannot assign to final attribute "DEFAULT_ID" [misc] -qualifiers_final_annotation.py:98: error: Cannot assign to final name "BORDER_WIDTH" [misc] -qualifiers_final_annotation.py:111: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:112: error: Invalid Type: ClassVar nested inside other type [misc] -qualifiers_final_annotation.py:122: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:125: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:135: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:140: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:152: error: Unexpected keyword argument "a" for "N" [call-arg] -qualifiers_final_annotation.py:153: error: Argument "x" to "N" has incompatible type "str"; expected "int" [arg-type] -qualifiers_final_annotation.py:153: error: Argument "y" to "N" has incompatible type "str"; expected "int" [arg-type] -qualifiers_final_annotation.py:159: error: Cannot assign to final name "ID1" [misc] -qualifiers_final_annotation.py:163: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:165: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:167: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:170: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:170: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] -qualifiers_final_annotation.py:173: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:184: error: Cannot assign to final name "TEN" [misc] -qualifiers_final_annotation.py:188: error: Cannot assign to final name "PI" [misc] +qualifiers_final_annotation.py:20: error: Argument 1 to "expects_one" has incompatible type "int"; expected "Literal[1]" [arg-type] +qualifiers_final_annotation.py:29: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:31: error: Final[...] takes at most one type argument [misc] +qualifiers_final_annotation.py:47: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:51: error: Final name must be initialized with a value [misc] +qualifiers_final_annotation.py:67: error: Cannot assign to final attribute "ID5" [misc] +qualifiers_final_annotation.py:75: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:76: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:78: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:80: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:84: error: Cannot assign to final name "RATE" [misc] +qualifiers_final_annotation.py:94: error: Cannot assign to final attribute "DEFAULT_ID" [misc] +qualifiers_final_annotation.py:107: error: Cannot assign to final name "BORDER_WIDTH" [misc] +qualifiers_final_annotation.py:120: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:121: error: Invalid Type: ClassVar nested inside other type [misc] +qualifiers_final_annotation.py:131: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:134: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:144: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:149: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:161: error: Unexpected keyword argument "a" for "N" [call-arg] +qualifiers_final_annotation.py:162: error: Argument "x" to "N" has incompatible type "str"; expected "int" [arg-type] +qualifiers_final_annotation.py:162: error: Argument "y" to "N" has incompatible type "str"; expected "int" [arg-type] +qualifiers_final_annotation.py:168: error: Cannot assign to final name "ID1" [misc] +qualifiers_final_annotation.py:172: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:174: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:176: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:179: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:179: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] +qualifiers_final_annotation.py:182: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:193: error: Cannot assign to final name "TEN" [misc] +qualifiers_final_annotation.py:197: error: Cannot assign to final name "PI" [misc] """ diff --git a/conformance/tests/qualifiers_final_annotation.py b/conformance/tests/qualifiers_final_annotation.py index 512d18a44..d4c3d3f6e 100644 --- a/conformance/tests/qualifiers_final_annotation.py +++ b/conformance/tests/qualifiers_final_annotation.py @@ -4,17 +4,26 @@ from typing import ClassVar, Final, Literal, NamedTuple, TypedDict, assert_type -# Specification: https://typing.readthedocs.io/en/latest/spec/qualifiers.html#id1 +# Specification: https://typing.python.org/en/latest/spec/literal.html#interactions-with-final + +def expects_one(x: Literal[1]) -> None: ... + +# > The Final qualifier serves as a shorthand for declaring that a variable is effectively Literal. -ID1: Final[int] = 1 -assert_type(ID1, int) +ID1: Final = 1 +assert_type(ID1, Literal[1]) +expects_one(ID1) -ID2: Final = 1 -assert_type(ID2, Literal[1]) +# > Type checkers are not obligated to understand any other uses of Final. + +ID2: Final[int] = 1 +expects_one(ID2) # E?: May or may not be accepted by type checkers ID3: Final = 1.0 assert_type(ID3, float) +# Specification: https://typing.readthedocs.io/en/latest/spec/qualifiers.html#id1 + # > If the right hand side is omitted, there must be an explicit type argument to Final. BAD1: Final # E: missing assignment From c61cb1cb660fa2155397fd07eb385f2b019d33f3 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Mon, 31 Aug 2026 18:24:02 +0200 Subject: [PATCH 4/7] Finagle tests more --- .../mypy/qualifiers_final_annotation.toml | 70 +++++++++---------- .../qualifiers_final_annotation.toml | 62 ++++++++-------- .../pyrefly/qualifiers_final_annotation.toml | 62 ++++++++-------- .../pyright/qualifiers_final_annotation.toml | 66 ++++++++--------- conformance/results/results.html | 6 +- .../ty/qualifiers_final_annotation.toml | 62 ++++++++-------- .../zuban/qualifiers_final_annotation.toml | 54 +++++++------- .../tests/qualifiers_final_annotation.py | 6 +- 8 files changed, 193 insertions(+), 195 deletions(-) diff --git a/conformance/results/mypy/qualifiers_final_annotation.toml b/conformance/results/mypy/qualifiers_final_annotation.toml index e004169e4..bdbb42149 100644 --- a/conformance/results/mypy/qualifiers_final_annotation.toml +++ b/conformance/results/mypy/qualifiers_final_annotation.toml @@ -7,47 +7,45 @@ Does not report modification of local `Final` variable via `for` statement. """ output = """ qualifiers_final_annotation.py:20: error: Argument 1 to "expects_one" has incompatible type "int"; expected "Literal[1]" [arg-type] -qualifiers_final_annotation.py:23: error: Expression is of type "Literal[1.0]", not "float" [assert-type] -qualifiers_final_annotation.py:29: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:31: error: Final[...] takes at most one type argument [misc] -qualifiers_final_annotation.py:47: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:51: error: Final name must be initialized with a value [misc] -qualifiers_final_annotation.py:67: error: Cannot assign to final attribute "ID5" [misc] -qualifiers_final_annotation.py:72: error: Cannot assign to final attribute "ID6" [misc] -qualifiers_final_annotation.py:75: error: Can only declare a final attribute in class body or __init__ [misc] -qualifiers_final_annotation.py:76: error: Can only declare a final attribute in class body or __init__ [misc] -qualifiers_final_annotation.py:78: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:31: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:33: error: Final[...] takes at most one type argument [misc] +qualifiers_final_annotation.py:49: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:53: error: Final name must be initialized with a value [misc] +qualifiers_final_annotation.py:69: error: Cannot assign to final attribute "ID5" [misc] +qualifiers_final_annotation.py:74: error: Cannot assign to final attribute "ID6" [misc] +qualifiers_final_annotation.py:77: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:78: error: Can only declare a final attribute in class body or __init__ [misc] qualifiers_final_annotation.py:80: error: Cannot assign to final attribute "ID7" [misc] -qualifiers_final_annotation.py:84: error: Cannot assign to final name "RATE" [misc] -qualifiers_final_annotation.py:94: error: Cannot assign to final attribute "DEFAULT_ID" [misc] -qualifiers_final_annotation.py:107: error: Cannot assign to final name "BORDER_WIDTH" [misc] -qualifiers_final_annotation.py:109: error: Cannot assign to final name "__private" [misc] -qualifiers_final_annotation.py:120: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] -qualifiers_final_annotation.py:121: error: Variable should not be annotated with both ClassVar and Final [misc] -qualifiers_final_annotation.py:131: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] -qualifiers_final_annotation.py:134: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] -qualifiers_final_annotation.py:144: error: Final[...] can't be used inside a TypedDict [valid-type] -qualifiers_final_annotation.py:149: error: Final[...] can't be used inside a NamedTuple [valid-type] -qualifiers_final_annotation.py:158: error: Invalid "NamedTuple()" field name [misc] -qualifiers_final_annotation.py:160: error: Unexpected keyword argument "x" for "N" [call-arg] -qualifiers_final_annotation.py:160: error: Unexpected keyword argument "y" for "N" [call-arg] -qualifiers_final_annotation.py:161: error: Unexpected keyword argument "a" for "N" [call-arg] +qualifiers_final_annotation.py:82: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:86: error: Cannot assign to final name "RATE" [misc] +qualifiers_final_annotation.py:96: error: Cannot assign to final attribute "DEFAULT_ID" [misc] +qualifiers_final_annotation.py:109: error: Cannot assign to final name "BORDER_WIDTH" [misc] +qualifiers_final_annotation.py:111: error: Cannot assign to final name "__private" [misc] +qualifiers_final_annotation.py:122: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] +qualifiers_final_annotation.py:123: error: Variable should not be annotated with both ClassVar and Final [misc] +qualifiers_final_annotation.py:133: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] +qualifiers_final_annotation.py:136: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] +qualifiers_final_annotation.py:146: error: Final[...] can't be used inside a TypedDict [valid-type] +qualifiers_final_annotation.py:151: error: Final[...] can't be used inside a NamedTuple [valid-type] +qualifiers_final_annotation.py:160: error: Invalid "NamedTuple()" field name [misc] qualifiers_final_annotation.py:162: error: Unexpected keyword argument "x" for "N" [call-arg] qualifiers_final_annotation.py:162: error: Unexpected keyword argument "y" for "N" [call-arg] -qualifiers_final_annotation.py:168: error: Cannot assign to final name "ID1" [misc] -qualifiers_final_annotation.py:172: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:163: error: Unexpected keyword argument "a" for "N" [call-arg] +qualifiers_final_annotation.py:164: error: Unexpected keyword argument "x" for "N" [call-arg] +qualifiers_final_annotation.py:164: error: Unexpected keyword argument "y" for "N" [call-arg] +qualifiers_final_annotation.py:170: error: Cannot assign to final name "ID1" [misc] qualifiers_final_annotation.py:174: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:179: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] -qualifiers_final_annotation.py:182: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:193: error: Cannot assign to final name "TEN" [misc] -qualifiers_final_annotation.py:197: error: Cannot assign to final name "PI" [misc] +qualifiers_final_annotation.py:176: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:181: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] +qualifiers_final_annotation.py:184: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:195: error: Cannot assign to final name "TEN" [misc] +qualifiers_final_annotation.py:199: error: Cannot assign to final name "PI" [misc] """ conformance_automated = "Fail" errors_diff = """ -Line 176: Expected 1 errors -Line 23: Unexpected errors ['qualifiers_final_annotation.py:23: error: Expression is of type "Literal[1.0]", not "float" [assert-type]'] -Line 72: Unexpected errors ['qualifiers_final_annotation.py:72: error: Cannot assign to final attribute "ID6" [misc]'] -Line 109: Unexpected errors ['qualifiers_final_annotation.py:109: error: Cannot assign to final name "__private" [misc]'] -Line 158: Unexpected errors ['qualifiers_final_annotation.py:158: error: Invalid "NamedTuple()" field name [misc]'] -Line 160: Unexpected errors ['qualifiers_final_annotation.py:160: error: Unexpected keyword argument "x" for "N" [call-arg]', 'qualifiers_final_annotation.py:160: error: Unexpected keyword argument "y" for "N" [call-arg]'] +Line 178: Expected 1 errors +Line 74: Unexpected errors ['qualifiers_final_annotation.py:74: error: Cannot assign to final attribute "ID6" [misc]'] +Line 111: Unexpected errors ['qualifiers_final_annotation.py:111: error: Cannot assign to final name "__private" [misc]'] +Line 160: Unexpected errors ['qualifiers_final_annotation.py:160: error: Invalid "NamedTuple()" field name [misc]'] +Line 162: Unexpected errors ['qualifiers_final_annotation.py:162: error: Unexpected keyword argument "x" for "N" [call-arg]', 'qualifiers_final_annotation.py:162: error: Unexpected keyword argument "y" for "N" [call-arg]'] """ diff --git a/conformance/results/pycroscope/qualifiers_final_annotation.toml b/conformance/results/pycroscope/qualifiers_final_annotation.toml index d7148de63..536aba6cf 100644 --- a/conformance/results/pycroscope/qualifiers_final_annotation.toml +++ b/conformance/results/pycroscope/qualifiers_final_annotation.toml @@ -1,38 +1,38 @@ conformance_automated = "Fail" errors_diff = """ -Line 23: Unexpected errors ['./qualifiers_final_annotation.py:23:12: Literal[1.0] is not equivalent to float | int'] +Line 25: Unexpected errors ['./qualifiers_final_annotation.py:25:12: Literal[range(0, 1)] is not equivalent to range'] """ output = """ ./qualifiers_final_annotation.py:20:12: Incompatible argument type for x: expected Literal[1] but got int [incompatible_argument] -./qualifiers_final_annotation.py:23:12: Literal[1.0] is not equivalent to float | int -./qualifiers_final_annotation.py:29:6: Final annotation without assignment requires an explicit type [invalid_qualifier] -./qualifiers_final_annotation.py:31:6: Invalid type annotation (, ) [invalid_annotation] -./qualifiers_final_annotation.py:47:9: Final annotation without assignment requires an explicit type [invalid_qualifier] -./qualifiers_final_annotation.py:47:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:51:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:67:8: Cannot assign to final name ID5 [incompatible_assignment] -./qualifiers_final_annotation.py:75:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:76:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:78:8: Cannot assign to final name ID7 [incompatible_assignment] +./qualifiers_final_annotation.py:25:12: Literal[range(0, 1)] is not equivalent to range +./qualifiers_final_annotation.py:31:6: Final annotation without assignment requires an explicit type [invalid_qualifier] +./qualifiers_final_annotation.py:33:6: Invalid type annotation (, ) [invalid_annotation] +./qualifiers_final_annotation.py:49:9: Final annotation without assignment requires an explicit type [invalid_qualifier] +./qualifiers_final_annotation.py:49:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:53:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:69:8: Cannot assign to final name ID5 [incompatible_assignment] +./qualifiers_final_annotation.py:77:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:78:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] ./qualifiers_final_annotation.py:80:8: Cannot assign to final name ID7 [incompatible_assignment] -./qualifiers_final_annotation.py:84:0: Cannot assign to final name RATE [incompatible_assignment] -./qualifiers_final_annotation.py:94:0: Cannot assign to final name DEFAULT_ID [incompatible_assignment] -./qualifiers_final_annotation.py:107:4: Cannot override final attribute BORDER_WIDTH [incompatible_override] -./qualifiers_final_annotation.py:120:12: Final cannot be combined with ClassVar [invalid_qualifier] -./qualifiers_final_annotation.py:121:12: Final cannot be combined with ClassVar [invalid_qualifier] -./qualifiers_final_annotation.py:131:3: Unrecognized annotation typing.Final[] [invalid_annotation] -./qualifiers_final_annotation.py:134:13: Unexpected Final annotation [invalid_qualifier] -./qualifiers_final_annotation.py:144:7: Unexpected Final annotation [invalid_qualifier] -./qualifiers_final_annotation.py:149:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:161:0: In call to pycroscope.signature.N: Missing required argument 'x' [incompatible_call] -./qualifiers_final_annotation.py:162:4: Incompatible argument type for x: expected int but got Literal[''] [incompatible_argument] -./qualifiers_final_annotation.py:162:10: Incompatible argument type for y: expected int but got Literal[''] [incompatible_argument] -./qualifiers_final_annotation.py:168:4: Cannot assign to final name ID1 [incompatible_assignment] -./qualifiers_final_annotation.py:172:4: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:174:9: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:176:8: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:179:29: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:182:8: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:193:0: Cannot assign to final name TEN [incompatible_assignment] -./qualifiers_final_annotation.py:197:0: Cannot assign to final name PI [incompatible_assignment] +./qualifiers_final_annotation.py:82:8: Cannot assign to final name ID7 [incompatible_assignment] +./qualifiers_final_annotation.py:86:0: Cannot assign to final name RATE [incompatible_assignment] +./qualifiers_final_annotation.py:96:0: Cannot assign to final name DEFAULT_ID [incompatible_assignment] +./qualifiers_final_annotation.py:109:4: Cannot override final attribute BORDER_WIDTH [incompatible_override] +./qualifiers_final_annotation.py:122:12: Final cannot be combined with ClassVar [invalid_qualifier] +./qualifiers_final_annotation.py:123:12: Final cannot be combined with ClassVar [invalid_qualifier] +./qualifiers_final_annotation.py:133:3: Unrecognized annotation typing.Final[] [invalid_annotation] +./qualifiers_final_annotation.py:136:13: Unexpected Final annotation [invalid_qualifier] +./qualifiers_final_annotation.py:146:7: Unexpected Final annotation [invalid_qualifier] +./qualifiers_final_annotation.py:151:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:163:0: In call to pycroscope.signature.N: Missing required argument 'x' [incompatible_call] +./qualifiers_final_annotation.py:164:4: Incompatible argument type for x: expected int but got Literal[''] [incompatible_argument] +./qualifiers_final_annotation.py:164:10: Incompatible argument type for y: expected int but got Literal[''] [incompatible_argument] +./qualifiers_final_annotation.py:170:4: Cannot assign to final name ID1 [incompatible_assignment] +./qualifiers_final_annotation.py:174:4: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:176:9: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:178:8: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:181:29: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:184:8: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:195:0: Cannot assign to final name TEN [incompatible_assignment] +./qualifiers_final_annotation.py:199:0: Cannot assign to final name PI [incompatible_assignment] """ diff --git a/conformance/results/pyrefly/qualifiers_final_annotation.toml b/conformance/results/pyrefly/qualifiers_final_annotation.toml index 35b5fa609..a59315caa 100644 --- a/conformance/results/pyrefly/qualifiers_final_annotation.toml +++ b/conformance/results/pyrefly/qualifiers_final_annotation.toml @@ -3,36 +3,36 @@ errors_diff = """ """ output = """ ERROR qualifiers_final_annotation.py:20:13-16: Argument `int` is not assignable to parameter `x` with type `Literal[1]` in function `expects_one` [bad-argument-type] -ERROR qualifiers_final_annotation.py:29:7-12: Expected a type argument for `Final` [invalid-annotation] -ERROR qualifiers_final_annotation.py:31:7-22: Expected 1 type argument for `Final`, got 2 [invalid-annotation] -ERROR qualifiers_final_annotation.py:47:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] -ERROR qualifiers_final_annotation.py:51:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] -ERROR qualifiers_final_annotation.py:67:9-17: Cannot set field `ID5` [read-only] -ERROR qualifiers_final_annotation.py:75:9-17: Cannot set field `id3` [read-only] -ERROR qualifiers_final_annotation.py:76:9-17: Cannot set field `id4` [read-only] -ERROR qualifiers_final_annotation.py:78:9-17: Cannot set field `ID7` [read-only] +ERROR qualifiers_final_annotation.py:31:7-12: Expected a type argument for `Final` [invalid-annotation] +ERROR qualifiers_final_annotation.py:33:7-22: Expected 1 type argument for `Final`, got 2 [invalid-annotation] +ERROR qualifiers_final_annotation.py:49:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] +ERROR qualifiers_final_annotation.py:53:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] +ERROR qualifiers_final_annotation.py:69:9-17: Cannot set field `ID5` [read-only] +ERROR qualifiers_final_annotation.py:77:9-17: Cannot set field `id3` [read-only] +ERROR qualifiers_final_annotation.py:78:9-17: Cannot set field `id4` [read-only] ERROR qualifiers_final_annotation.py:80:9-17: Cannot set field `ID7` [read-only] -ERROR qualifiers_final_annotation.py:84:8-11: Cannot assign to variable `RATE` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:94:1-18: Cannot set field `DEFAULT_ID` [read-only] -ERROR qualifiers_final_annotation.py:107:5-17: `BORDER_WIDTH` is declared as final in parent class `ClassC` [bad-override] -ERROR qualifiers_final_annotation.py:120:5-11: `Final` may not be nested inside `ClassVar` [invalid-annotation] -ERROR qualifiers_final_annotation.py:121:19-27: `ClassVar` may not be nested inside `Final` [invalid-annotation] -ERROR qualifiers_final_annotation.py:131:9-19: `Final` is not allowed in this context [invalid-annotation] -ERROR qualifiers_final_annotation.py:134:14-19: `Final` is only allowed on a class or local variable annotation [invalid-annotation] -ERROR qualifiers_final_annotation.py:134:14-30: `Final` is not allowed in this context [invalid-annotation] -ERROR qualifiers_final_annotation.py:144:5-6: `Final` may not be used for TypedDict members [invalid-annotation] -ERROR qualifiers_final_annotation.py:149:5-6: `Final` may not be used for NamedTuple members [invalid-annotation] -ERROR qualifiers_final_annotation.py:161:2-7: Missing argument `x` in function `N.__new__` [missing-argument] -ERROR qualifiers_final_annotation.py:161:2-7: Missing argument `y` in function `N.__new__` [missing-argument] -ERROR qualifiers_final_annotation.py:161:3-4: Unexpected keyword argument `a` in function `N.__new__` [unexpected-keyword] -ERROR qualifiers_final_annotation.py:162:5-7: Argument `Literal['']` is not assignable to parameter `x` with type `int` in function `N.__new__` [bad-argument-type] -ERROR qualifiers_final_annotation.py:162:11-13: Argument `Literal['']` is not assignable to parameter `y` with type `int` in function `N.__new__` [bad-argument-type] -ERROR qualifiers_final_annotation.py:168:11-12: Cannot assign to variable `ID1` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:172:5-11: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:174:15-16: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:176:14-23: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:179:10-26: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:182:5-11: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:193:1-4: Cannot assign to `TEN` because it is imported as final [bad-assignment] -ERROR qualifiers_final_annotation.py:197:1-3: Cannot assign to `PI` because it is imported as final [bad-assignment] +ERROR qualifiers_final_annotation.py:82:9-17: Cannot set field `ID7` [read-only] +ERROR qualifiers_final_annotation.py:86:8-11: Cannot assign to variable `RATE` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:96:1-18: Cannot set field `DEFAULT_ID` [read-only] +ERROR qualifiers_final_annotation.py:109:5-17: `BORDER_WIDTH` is declared as final in parent class `ClassC` [bad-override] +ERROR qualifiers_final_annotation.py:122:5-11: `Final` may not be nested inside `ClassVar` [invalid-annotation] +ERROR qualifiers_final_annotation.py:123:19-27: `ClassVar` may not be nested inside `Final` [invalid-annotation] +ERROR qualifiers_final_annotation.py:133:9-19: `Final` is not allowed in this context [invalid-annotation] +ERROR qualifiers_final_annotation.py:136:14-19: `Final` is only allowed on a class or local variable annotation [invalid-annotation] +ERROR qualifiers_final_annotation.py:136:14-30: `Final` is not allowed in this context [invalid-annotation] +ERROR qualifiers_final_annotation.py:146:5-6: `Final` may not be used for TypedDict members [invalid-annotation] +ERROR qualifiers_final_annotation.py:151:5-6: `Final` may not be used for NamedTuple members [invalid-annotation] +ERROR qualifiers_final_annotation.py:163:2-7: Missing argument `x` in function `N.__new__` [missing-argument] +ERROR qualifiers_final_annotation.py:163:2-7: Missing argument `y` in function `N.__new__` [missing-argument] +ERROR qualifiers_final_annotation.py:163:3-4: Unexpected keyword argument `a` in function `N.__new__` [unexpected-keyword] +ERROR qualifiers_final_annotation.py:164:5-7: Argument `Literal['']` is not assignable to parameter `x` with type `int` in function `N.__new__` [bad-argument-type] +ERROR qualifiers_final_annotation.py:164:11-13: Argument `Literal['']` is not assignable to parameter `y` with type `int` in function `N.__new__` [bad-argument-type] +ERROR qualifiers_final_annotation.py:170:11-12: Cannot assign to variable `ID1` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:174:5-11: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:176:15-16: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:178:14-23: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:181:10-26: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:184:5-11: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:195:1-4: Cannot assign to `TEN` because it is imported as final [bad-assignment] +ERROR qualifiers_final_annotation.py:199:1-3: Cannot assign to `PI` because it is imported as final [bad-assignment] """ diff --git a/conformance/results/pyright/qualifiers_final_annotation.toml b/conformance/results/pyright/qualifiers_final_annotation.toml index 05f538d28..0055ff26f 100644 --- a/conformance/results/pyright/qualifiers_final_annotation.toml +++ b/conformance/results/pyright/qualifiers_final_annotation.toml @@ -1,48 +1,48 @@ conformant = "Pass" output = """ -qualifiers_final_annotation.py:29:1 - error: "BAD1" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:31:7 - error: Expected a single type argument after "Final" (reportInvalidTypeForm) -qualifiers_final_annotation.py:47:5 - error: "ID2" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:51:5 - error: "ID3" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:67:14 - error: Cannot assign to attribute "ID5" for class "ClassA*" +qualifiers_final_annotation.py:31:1 - error: "BAD1" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:33:7 - error: Expected a single type argument after "Final" (reportInvalidTypeForm) +qualifiers_final_annotation.py:49:5 - error: "ID2" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:53:5 - error: "ID3" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:69:14 - error: Cannot assign to attribute "ID5" for class "ClassA*"   Attribute "ID5" cannot be assigned through a class instance because it is a ClassVar   "ID5" is declared as Final and cannot be reassigned (reportAttributeAccessIssue) -qualifiers_final_annotation.py:75:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:76:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:76:32 - error: Cannot assign to attribute "id4" for class "ClassA*" +qualifiers_final_annotation.py:77:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:78:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:78:32 - error: Cannot assign to attribute "id4" for class "ClassA*"   "Literal[1]" is not assignable to "Final" (reportAttributeAccessIssue) -qualifiers_final_annotation.py:78:14 - error: Cannot assign to attribute "ID7" for class "ClassA*" +qualifiers_final_annotation.py:80:14 - error: Cannot assign to attribute "ID7" for class "ClassA*"   Attribute "ID7" cannot be assigned through a class instance because it is a ClassVar   "ID7" is declared as Final and cannot be reassigned (reportAttributeAccessIssue) -qualifiers_final_annotation.py:80:14 - error: Cannot assign to attribute "ID7" for class "ClassA*" +qualifiers_final_annotation.py:82:14 - error: Cannot assign to attribute "ID7" for class "ClassA*"   Attribute "ID7" cannot be assigned through a class instance because it is a ClassVar   "ID7" is declared as Final and cannot be reassigned (reportAttributeAccessIssue) -qualifiers_final_annotation.py:84:1 - error: "RATE" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:94:8 - error: Cannot assign to attribute "DEFAULT_ID" for class "type[ClassB]" +qualifiers_final_annotation.py:86:1 - error: "RATE" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:96:8 - error: Cannot assign to attribute "DEFAULT_ID" for class "type[ClassB]"   "DEFAULT_ID" is declared as Final and cannot be reassigned (reportAttributeAccessIssue) -qualifiers_final_annotation.py:107:5 - error: "BORDER_WIDTH" cannot be redeclared because parent class "ClassC" declares it as Final (reportGeneralTypeIssues) -qualifiers_final_annotation.py:120:22 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:121:19 - error: "ClassVar" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:131:9 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:134:14 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:144:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:144:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:149:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:149:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:161:1 - error: Arguments missing for parameters "x", "y" (reportCallIssue) -qualifiers_final_annotation.py:161:3 - error: No parameter named "a" (reportCallIssue) -qualifiers_final_annotation.py:162:5 - error: Argument of type "Literal['']" cannot be assigned to parameter "x" of type "int" in function "__new__" +qualifiers_final_annotation.py:109:5 - error: "BORDER_WIDTH" cannot be redeclared because parent class "ClassC" declares it as Final (reportGeneralTypeIssues) +qualifiers_final_annotation.py:122:22 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:123:19 - error: "ClassVar" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:133:9 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:136:14 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:146:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:146:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:151:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:151:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:163:1 - error: Arguments missing for parameters "x", "y" (reportCallIssue) +qualifiers_final_annotation.py:163:3 - error: No parameter named "a" (reportCallIssue) +qualifiers_final_annotation.py:164:5 - error: Argument of type "Literal['']" cannot be assigned to parameter "x" of type "int" in function "__new__"   "Literal['']" is not assignable to "int" (reportArgumentType) -qualifiers_final_annotation.py:162:11 - error: Argument of type "Literal['']" cannot be assigned to parameter "y" of type "int" in function "__new__" +qualifiers_final_annotation.py:164:11 - error: Argument of type "Literal['']" cannot be assigned to parameter "y" of type "int" in function "__new__"   "Literal['']" is not assignable to "int" (reportArgumentType) -qualifiers_final_annotation.py:168:5 - error: "ID1" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:172:5 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:174:10 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:176:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:179:30 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:182:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:193:1 - error: "TEN" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:197:1 - error: "PI" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:170:5 - error: "ID1" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:174:5 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:176:10 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:178:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:181:30 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:184:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:195:1 - error: "TEN" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:199:1 - error: "PI" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) """ conformance_automated = "Pass" errors_diff = """ diff --git a/conformance/results/results.html b/conformance/results/results.html index c6ab72f0b..9d997fb0c 100644 --- a/conformance/results/results.html +++ b/conformance/results/results.html @@ -1003,7 +1003,7 @@

    Python Type System Conformance Test Results

    Unknown Pass Pass - Unknown + Pass Pass @@ -1021,7 +1021,7 @@

    Python Type System Conformance Test Results

    1.5 / 3 • 50.0% 3 / 3 • 100.0% 3 / 3 • 100.0% - 2 / 3 • 66.7% + 3 / 3 • 100.0% 3 / 3 • 100.0% @@ -2611,7 +2611,7 @@

    Python Type System Conformance Test Results

    137 / 145 • 94.5% 140.5 / 145 • 96.9% 135.5 / 145 • 93.4% - 131 / 145 • 90.3% + 132 / 145 • 91.0% 144.5 / 145 • 99.7% diff --git a/conformance/results/ty/qualifiers_final_annotation.toml b/conformance/results/ty/qualifiers_final_annotation.toml index 731086e57..098a1a11f 100644 --- a/conformance/results/ty/qualifiers_final_annotation.toml +++ b/conformance/results/ty/qualifiers_final_annotation.toml @@ -1,37 +1,35 @@ -conformance_automated = "Fail" +conformance_automated = "Pass" errors_diff = """ -Line 23: Unexpected errors ['qualifiers_final_annotation.py:23:1: error[type-assertion-failure] Type `float*` does not match asserted type `float`'] """ output = """ -qualifiers_final_annotation.py:23:1: error[type-assertion-failure] Type `float*` does not match asserted type `float` -qualifiers_final_annotation.py:29:1: error[final-without-value] `Final` symbol `BAD1` is not assigned a value -qualifiers_final_annotation.py:31:7: error[invalid-type-form] Type qualifier `typing.Final` expected exactly 1 argument, got 2 -qualifiers_final_annotation.py:47:5: error[final-without-value] `Final` symbol `ID2` is not assigned a value -qualifiers_final_annotation.py:51:5: error[final-without-value] `Final` symbol `ID3` is not assigned a value -qualifiers_final_annotation.py:67:9: error[invalid-assignment] Invalid assignment to final attribute: `ID5` already has a value in the class body -qualifiers_final_annotation.py:75:9: error[invalid-assignment] Cannot assign to final attribute `id3` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` -qualifiers_final_annotation.py:76:9: error[invalid-assignment] Cannot assign to final attribute `id4` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` -qualifiers_final_annotation.py:78:9: error[invalid-assignment] Cannot assign to final attribute `ID7` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` +qualifiers_final_annotation.py:31:1: error[final-without-value] `Final` symbol `BAD1` is not assigned a value +qualifiers_final_annotation.py:33:7: error[invalid-type-form] Type qualifier `typing.Final` expected exactly 1 argument, got 2 +qualifiers_final_annotation.py:49:5: error[final-without-value] `Final` symbol `ID2` is not assigned a value +qualifiers_final_annotation.py:53:5: error[final-without-value] `Final` symbol `ID3` is not assigned a value +qualifiers_final_annotation.py:69:9: error[invalid-assignment] Invalid assignment to final attribute: `ID5` already has a value in the class body +qualifiers_final_annotation.py:77:9: error[invalid-assignment] Cannot assign to final attribute `id3` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` +qualifiers_final_annotation.py:78:9: error[invalid-assignment] Cannot assign to final attribute `id4` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` qualifiers_final_annotation.py:80:9: error[invalid-assignment] Cannot assign to final attribute `ID7` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` -qualifiers_final_annotation.py:84:1: error[invalid-assignment] Reassignment of `Final` symbol `RATE` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:94:1: error[invalid-assignment] Cannot assign to final attribute `DEFAULT_ID` on type ``: `Final` attributes can only be assigned in the class body or `__init__` -qualifiers_final_annotation.py:107:5: error[override-of-final-variable] Cannot override final variable `BORDER_WIDTH` from superclass `ClassC` -qualifiers_final_annotation.py:120:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant -qualifiers_final_annotation.py:121:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant -qualifiers_final_annotation.py:131:9: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in type expressions (only in annotation expressions) -qualifiers_final_annotation.py:134:14: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in parameter annotations -qualifiers_final_annotation.py:144:8: error[invalid-type-form] `Final` is not allowed in TypedDict fields -qualifiers_final_annotation.py:149:5: error[invalid-named-tuple] Type qualifier `Final` is not allowed on NamedTuple field `b` -qualifiers_final_annotation.py:161:1: error[missing-argument] No arguments provided for required parameters `x`, `y` -qualifiers_final_annotation.py:161:3: error[unknown-argument] Argument `a` does not match any known parameter -qualifiers_final_annotation.py:162:3: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` -qualifiers_final_annotation.py:162:9: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` -qualifiers_final_annotation.py:168:5: error[invalid-assignment] Reassignment of `Final` symbol `ID1` is not allowed: Reassignment of `Final` symbol -qualifiers_final_annotation.py:172:5: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:174:10: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:176:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:179:30: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:182:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:193:1: error[invalid-assignment] Reassignment of `Final` symbol `TEN` is not allowed: Reassignment of `Final` symbol -qualifiers_final_annotation.py:197:1: error[invalid-assignment] Reassignment of `Final` symbol `PI` is not allowed: Reassignment of `Final` symbol +qualifiers_final_annotation.py:82:9: error[invalid-assignment] Cannot assign to final attribute `ID7` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` +qualifiers_final_annotation.py:86:1: error[invalid-assignment] Reassignment of `Final` symbol `RATE` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:96:1: error[invalid-assignment] Cannot assign to final attribute `DEFAULT_ID` on type ``: `Final` attributes can only be assigned in the class body or `__init__` +qualifiers_final_annotation.py:109:5: error[override-of-final-variable] Cannot override final variable `BORDER_WIDTH` from superclass `ClassC` +qualifiers_final_annotation.py:122:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant +qualifiers_final_annotation.py:123:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant +qualifiers_final_annotation.py:133:9: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in type expressions (only in annotation expressions) +qualifiers_final_annotation.py:136:14: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in parameter annotations +qualifiers_final_annotation.py:146:8: error[invalid-type-form] `Final` is not allowed in TypedDict fields +qualifiers_final_annotation.py:151:5: error[invalid-named-tuple] Type qualifier `Final` is not allowed on NamedTuple field `b` +qualifiers_final_annotation.py:163:1: error[missing-argument] No arguments provided for required parameters `x`, `y` +qualifiers_final_annotation.py:163:3: error[unknown-argument] Argument `a` does not match any known parameter +qualifiers_final_annotation.py:164:3: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` +qualifiers_final_annotation.py:164:9: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` +qualifiers_final_annotation.py:170:5: error[invalid-assignment] Reassignment of `Final` symbol `ID1` is not allowed: Reassignment of `Final` symbol +qualifiers_final_annotation.py:174:5: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:176:10: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:178:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:181:30: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:184:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:195:1: error[invalid-assignment] Reassignment of `Final` symbol `TEN` is not allowed: Reassignment of `Final` symbol +qualifiers_final_annotation.py:199:1: error[invalid-assignment] Reassignment of `Final` symbol `PI` is not allowed: Reassignment of `Final` symbol """ diff --git a/conformance/results/zuban/qualifiers_final_annotation.toml b/conformance/results/zuban/qualifiers_final_annotation.toml index c9498b967..52f6d726c 100644 --- a/conformance/results/zuban/qualifiers_final_annotation.toml +++ b/conformance/results/zuban/qualifiers_final_annotation.toml @@ -3,34 +3,34 @@ errors_diff = """ """ output = """ qualifiers_final_annotation.py:20: error: Argument 1 to "expects_one" has incompatible type "int"; expected "Literal[1]" [arg-type] -qualifiers_final_annotation.py:29: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:31: error: Final[...] takes at most one type argument [misc] -qualifiers_final_annotation.py:47: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:51: error: Final name must be initialized with a value [misc] -qualifiers_final_annotation.py:67: error: Cannot assign to final attribute "ID5" [misc] -qualifiers_final_annotation.py:75: error: Can only declare a final attribute in class body or __init__ [misc] -qualifiers_final_annotation.py:76: error: Can only declare a final attribute in class body or __init__ [misc] -qualifiers_final_annotation.py:78: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:31: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:33: error: Final[...] takes at most one type argument [misc] +qualifiers_final_annotation.py:49: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:53: error: Final name must be initialized with a value [misc] +qualifiers_final_annotation.py:69: error: Cannot assign to final attribute "ID5" [misc] +qualifiers_final_annotation.py:77: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:78: error: Can only declare a final attribute in class body or __init__ [misc] qualifiers_final_annotation.py:80: error: Cannot assign to final attribute "ID7" [misc] -qualifiers_final_annotation.py:84: error: Cannot assign to final name "RATE" [misc] -qualifiers_final_annotation.py:94: error: Cannot assign to final attribute "DEFAULT_ID" [misc] -qualifiers_final_annotation.py:107: error: Cannot assign to final name "BORDER_WIDTH" [misc] -qualifiers_final_annotation.py:120: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:121: error: Invalid Type: ClassVar nested inside other type [misc] -qualifiers_final_annotation.py:131: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:134: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:144: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:149: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:161: error: Unexpected keyword argument "a" for "N" [call-arg] -qualifiers_final_annotation.py:162: error: Argument "x" to "N" has incompatible type "str"; expected "int" [arg-type] -qualifiers_final_annotation.py:162: error: Argument "y" to "N" has incompatible type "str"; expected "int" [arg-type] -qualifiers_final_annotation.py:168: error: Cannot assign to final name "ID1" [misc] -qualifiers_final_annotation.py:172: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:82: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:86: error: Cannot assign to final name "RATE" [misc] +qualifiers_final_annotation.py:96: error: Cannot assign to final attribute "DEFAULT_ID" [misc] +qualifiers_final_annotation.py:109: error: Cannot assign to final name "BORDER_WIDTH" [misc] +qualifiers_final_annotation.py:122: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:123: error: Invalid Type: ClassVar nested inside other type [misc] +qualifiers_final_annotation.py:133: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:136: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:146: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:151: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:163: error: Unexpected keyword argument "a" for "N" [call-arg] +qualifiers_final_annotation.py:164: error: Argument "x" to "N" has incompatible type "str"; expected "int" [arg-type] +qualifiers_final_annotation.py:164: error: Argument "y" to "N" has incompatible type "str"; expected "int" [arg-type] +qualifiers_final_annotation.py:170: error: Cannot assign to final name "ID1" [misc] qualifiers_final_annotation.py:174: error: Cannot assign to final name "x" [misc] qualifiers_final_annotation.py:176: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:179: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:179: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] -qualifiers_final_annotation.py:182: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:193: error: Cannot assign to final name "TEN" [misc] -qualifiers_final_annotation.py:197: error: Cannot assign to final name "PI" [misc] +qualifiers_final_annotation.py:178: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:181: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:181: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] +qualifiers_final_annotation.py:184: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:195: error: Cannot assign to final name "TEN" [misc] +qualifiers_final_annotation.py:199: error: Cannot assign to final name "PI" [misc] """ diff --git a/conformance/tests/qualifiers_final_annotation.py b/conformance/tests/qualifiers_final_annotation.py index d4c3d3f6e..0c4e43697 100644 --- a/conformance/tests/qualifiers_final_annotation.py +++ b/conformance/tests/qualifiers_final_annotation.py @@ -19,8 +19,10 @@ def expects_one(x: Literal[1]) -> None: ... ID2: Final[int] = 1 expects_one(ID2) # E?: May or may not be accepted by type checkers -ID3: Final = 1.0 -assert_type(ID3, float) +# Type checkers can only infer literals if the parameter is valid for Literal. + +ID3: Final = range(1) +assert_type(ID3, range) # Specification: https://typing.readthedocs.io/en/latest/spec/qualifiers.html#id1 From d42d2fd8c21048a1ef8daedea29ae5047a8a6918 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Mon, 31 Aug 2026 18:31:39 +0200 Subject: [PATCH 5/7] Update results --- .../pycroscope/qualifiers_final_annotation.toml | 4 ++++ conformance/results/results.html | 11 ++++++++--- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/conformance/results/pycroscope/qualifiers_final_annotation.toml b/conformance/results/pycroscope/qualifiers_final_annotation.toml index 536aba6cf..da9baae35 100644 --- a/conformance/results/pycroscope/qualifiers_final_annotation.toml +++ b/conformance/results/pycroscope/qualifiers_final_annotation.toml @@ -1,3 +1,7 @@ +conformant = "Partial" +notes = """ +Infers invalid `Literal[range(0, 1)]` from `Final` +""" conformance_automated = "Fail" errors_diff = """ Line 25: Unexpected errors ['./qualifiers_final_annotation.py:25:12: Literal[range(0, 1)] is not equivalent to range'] diff --git a/conformance/results/results.html b/conformance/results/results.html index 9d997fb0c..11ef235da 100644 --- a/conformance/results/results.html +++ b/conformance/results/results.html @@ -1000,7 +1000,12 @@

    Python Type System Conformance Test Results

  • Does not report modification of local Final variable via for statement.
  • - Unknown + + Partial +
      +
    • Infers invalid Literal[range(0, 1)] from Final
    • +
    + Pass Pass Pass @@ -1018,7 +1023,7 @@

    Python Type System Conformance Test Results

    2 / 3 • 66.7% - 1.5 / 3 • 50.0% + 2 / 3 • 66.7% 3 / 3 • 100.0% 3 / 3 • 100.0% 3 / 3 • 100.0% @@ -2608,7 +2613,7 @@

    Python Type System Conformance Test Results

    108.5 / 145 • 74.8% - 137 / 145 • 94.5% + 137.5 / 145 • 94.8% 140.5 / 145 • 96.9% 135.5 / 145 • 93.4% 132 / 145 • 91.0% From 5b3a1bb34cdb95fc85709e20a4390d2cfac2ca63 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Mon, 31 Aug 2026 19:10:25 +0200 Subject: [PATCH 6/7] One case is optional per the spec, add another case --- .../mypy/qualifiers_final_annotation.toml | 75 ++++++++++--------- .../qualifiers_final_annotation.toml | 66 ++++++++-------- .../pyrefly/qualifiers_final_annotation.toml | 65 ++++++++-------- .../pyright/qualifiers_final_annotation.toml | 64 ++++++++-------- .../ty/qualifiers_final_annotation.toml | 58 +++++++------- .../zuban/qualifiers_final_annotation.toml | 59 ++++++++------- .../tests/qualifiers_final_annotation.py | 7 +- 7 files changed, 197 insertions(+), 197 deletions(-) diff --git a/conformance/results/mypy/qualifiers_final_annotation.toml b/conformance/results/mypy/qualifiers_final_annotation.toml index bdbb42149..e131cf3d4 100644 --- a/conformance/results/mypy/qualifiers_final_annotation.toml +++ b/conformance/results/mypy/qualifiers_final_annotation.toml @@ -7,45 +7,46 @@ Does not report modification of local `Final` variable via `for` statement. """ output = """ qualifiers_final_annotation.py:20: error: Argument 1 to "expects_one" has incompatible type "int"; expected "Literal[1]" [arg-type] -qualifiers_final_annotation.py:31: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:33: error: Final[...] takes at most one type argument [misc] -qualifiers_final_annotation.py:49: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:53: error: Final name must be initialized with a value [misc] -qualifiers_final_annotation.py:69: error: Cannot assign to final attribute "ID5" [misc] -qualifiers_final_annotation.py:74: error: Cannot assign to final attribute "ID6" [misc] -qualifiers_final_annotation.py:77: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:23: error: Argument 1 to "expects_one" has incompatible type "int"; expected "Literal[1]" [arg-type] +qualifiers_final_annotation.py:32: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:34: error: Final[...] takes at most one type argument [misc] +qualifiers_final_annotation.py:50: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:54: error: Final name must be initialized with a value [misc] +qualifiers_final_annotation.py:70: error: Cannot assign to final attribute "ID5" [misc] +qualifiers_final_annotation.py:75: error: Cannot assign to final attribute "ID6" [misc] qualifiers_final_annotation.py:78: error: Can only declare a final attribute in class body or __init__ [misc] -qualifiers_final_annotation.py:80: error: Cannot assign to final attribute "ID7" [misc] -qualifiers_final_annotation.py:82: error: Cannot assign to final attribute "ID7" [misc] -qualifiers_final_annotation.py:86: error: Cannot assign to final name "RATE" [misc] -qualifiers_final_annotation.py:96: error: Cannot assign to final attribute "DEFAULT_ID" [misc] -qualifiers_final_annotation.py:109: error: Cannot assign to final name "BORDER_WIDTH" [misc] -qualifiers_final_annotation.py:111: error: Cannot assign to final name "__private" [misc] -qualifiers_final_annotation.py:122: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] -qualifiers_final_annotation.py:123: error: Variable should not be annotated with both ClassVar and Final [misc] -qualifiers_final_annotation.py:133: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] -qualifiers_final_annotation.py:136: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] -qualifiers_final_annotation.py:146: error: Final[...] can't be used inside a TypedDict [valid-type] -qualifiers_final_annotation.py:151: error: Final[...] can't be used inside a NamedTuple [valid-type] -qualifiers_final_annotation.py:160: error: Invalid "NamedTuple()" field name [misc] -qualifiers_final_annotation.py:162: error: Unexpected keyword argument "x" for "N" [call-arg] -qualifiers_final_annotation.py:162: error: Unexpected keyword argument "y" for "N" [call-arg] -qualifiers_final_annotation.py:163: error: Unexpected keyword argument "a" for "N" [call-arg] -qualifiers_final_annotation.py:164: error: Unexpected keyword argument "x" for "N" [call-arg] -qualifiers_final_annotation.py:164: error: Unexpected keyword argument "y" for "N" [call-arg] -qualifiers_final_annotation.py:170: error: Cannot assign to final name "ID1" [misc] -qualifiers_final_annotation.py:174: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:176: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:181: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] -qualifiers_final_annotation.py:184: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:195: error: Cannot assign to final name "TEN" [misc] -qualifiers_final_annotation.py:199: error: Cannot assign to final name "PI" [misc] +qualifiers_final_annotation.py:79: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:81: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:83: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:87: error: Cannot assign to final name "RATE" [misc] +qualifiers_final_annotation.py:97: error: Cannot assign to final attribute "DEFAULT_ID" [misc] +qualifiers_final_annotation.py:110: error: Cannot assign to final name "BORDER_WIDTH" [misc] +qualifiers_final_annotation.py:112: error: Cannot assign to final name "__private" [misc] +qualifiers_final_annotation.py:123: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] +qualifiers_final_annotation.py:124: error: Variable should not be annotated with both ClassVar and Final [misc] +qualifiers_final_annotation.py:134: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] +qualifiers_final_annotation.py:137: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] +qualifiers_final_annotation.py:147: error: Final[...] can't be used inside a TypedDict [valid-type] +qualifiers_final_annotation.py:152: error: Final[...] can't be used inside a NamedTuple [valid-type] +qualifiers_final_annotation.py:161: error: Invalid "NamedTuple()" field name [misc] +qualifiers_final_annotation.py:163: error: Unexpected keyword argument "x" for "N" [call-arg] +qualifiers_final_annotation.py:163: error: Unexpected keyword argument "y" for "N" [call-arg] +qualifiers_final_annotation.py:164: error: Unexpected keyword argument "a" for "N" [call-arg] +qualifiers_final_annotation.py:165: error: Unexpected keyword argument "x" for "N" [call-arg] +qualifiers_final_annotation.py:165: error: Unexpected keyword argument "y" for "N" [call-arg] +qualifiers_final_annotation.py:171: error: Cannot assign to final name "ID1" [misc] +qualifiers_final_annotation.py:175: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:177: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:182: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] +qualifiers_final_annotation.py:185: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:196: error: Cannot assign to final name "TEN" [misc] +qualifiers_final_annotation.py:200: error: Cannot assign to final name "PI" [misc] """ conformance_automated = "Fail" errors_diff = """ -Line 178: Expected 1 errors -Line 74: Unexpected errors ['qualifiers_final_annotation.py:74: error: Cannot assign to final attribute "ID6" [misc]'] -Line 111: Unexpected errors ['qualifiers_final_annotation.py:111: error: Cannot assign to final name "__private" [misc]'] -Line 160: Unexpected errors ['qualifiers_final_annotation.py:160: error: Invalid "NamedTuple()" field name [misc]'] -Line 162: Unexpected errors ['qualifiers_final_annotation.py:162: error: Unexpected keyword argument "x" for "N" [call-arg]', 'qualifiers_final_annotation.py:162: error: Unexpected keyword argument "y" for "N" [call-arg]'] +Line 179: Expected 1 errors +Line 75: Unexpected errors ['qualifiers_final_annotation.py:75: error: Cannot assign to final attribute "ID6" [misc]'] +Line 112: Unexpected errors ['qualifiers_final_annotation.py:112: error: Cannot assign to final name "__private" [misc]'] +Line 161: Unexpected errors ['qualifiers_final_annotation.py:161: error: Invalid "NamedTuple()" field name [misc]'] +Line 163: Unexpected errors ['qualifiers_final_annotation.py:163: error: Unexpected keyword argument "x" for "N" [call-arg]', 'qualifiers_final_annotation.py:163: error: Unexpected keyword argument "y" for "N" [call-arg]'] """ diff --git a/conformance/results/pycroscope/qualifiers_final_annotation.toml b/conformance/results/pycroscope/qualifiers_final_annotation.toml index da9baae35..005ab93e1 100644 --- a/conformance/results/pycroscope/qualifiers_final_annotation.toml +++ b/conformance/results/pycroscope/qualifiers_final_annotation.toml @@ -1,42 +1,38 @@ -conformant = "Partial" -notes = """ -Infers invalid `Literal[range(0, 1)]` from `Final` -""" -conformance_automated = "Fail" +conformance_automated = "Pass" errors_diff = """ -Line 25: Unexpected errors ['./qualifiers_final_annotation.py:25:12: Literal[range(0, 1)] is not equivalent to range'] """ output = """ ./qualifiers_final_annotation.py:20:12: Incompatible argument type for x: expected Literal[1] but got int [incompatible_argument] -./qualifiers_final_annotation.py:25:12: Literal[range(0, 1)] is not equivalent to range -./qualifiers_final_annotation.py:31:6: Final annotation without assignment requires an explicit type [invalid_qualifier] -./qualifiers_final_annotation.py:33:6: Invalid type annotation (, ) [invalid_annotation] -./qualifiers_final_annotation.py:49:9: Final annotation without assignment requires an explicit type [invalid_qualifier] -./qualifiers_final_annotation.py:49:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:53:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:69:8: Cannot assign to final name ID5 [incompatible_assignment] -./qualifiers_final_annotation.py:77:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:23:12: Incompatible argument type for x: expected Literal[1] but got int [incompatible_argument] +./qualifiers_final_annotation.py:26:12: Literal[range(0, 1)] is not equivalent to range +./qualifiers_final_annotation.py:32:6: Final annotation without assignment requires an explicit type [invalid_qualifier] +./qualifiers_final_annotation.py:34:6: Invalid type annotation (, ) [invalid_annotation] +./qualifiers_final_annotation.py:50:9: Final annotation without assignment requires an explicit type [invalid_qualifier] +./qualifiers_final_annotation.py:50:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:54:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:70:8: Cannot assign to final name ID5 [incompatible_assignment] ./qualifiers_final_annotation.py:78:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:80:8: Cannot assign to final name ID7 [incompatible_assignment] -./qualifiers_final_annotation.py:82:8: Cannot assign to final name ID7 [incompatible_assignment] -./qualifiers_final_annotation.py:86:0: Cannot assign to final name RATE [incompatible_assignment] -./qualifiers_final_annotation.py:96:0: Cannot assign to final name DEFAULT_ID [incompatible_assignment] -./qualifiers_final_annotation.py:109:4: Cannot override final attribute BORDER_WIDTH [incompatible_override] -./qualifiers_final_annotation.py:122:12: Final cannot be combined with ClassVar [invalid_qualifier] +./qualifiers_final_annotation.py:79:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:81:8: Cannot assign to final name ID7 [incompatible_assignment] +./qualifiers_final_annotation.py:83:8: Cannot assign to final name ID7 [incompatible_assignment] +./qualifiers_final_annotation.py:87:0: Cannot assign to final name RATE [incompatible_assignment] +./qualifiers_final_annotation.py:97:0: Cannot assign to final name DEFAULT_ID [incompatible_assignment] +./qualifiers_final_annotation.py:110:4: Cannot override final attribute BORDER_WIDTH [incompatible_override] ./qualifiers_final_annotation.py:123:12: Final cannot be combined with ClassVar [invalid_qualifier] -./qualifiers_final_annotation.py:133:3: Unrecognized annotation typing.Final[] [invalid_annotation] -./qualifiers_final_annotation.py:136:13: Unexpected Final annotation [invalid_qualifier] -./qualifiers_final_annotation.py:146:7: Unexpected Final annotation [invalid_qualifier] -./qualifiers_final_annotation.py:151:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:163:0: In call to pycroscope.signature.N: Missing required argument 'x' [incompatible_call] -./qualifiers_final_annotation.py:164:4: Incompatible argument type for x: expected int but got Literal[''] [incompatible_argument] -./qualifiers_final_annotation.py:164:10: Incompatible argument type for y: expected int but got Literal[''] [incompatible_argument] -./qualifiers_final_annotation.py:170:4: Cannot assign to final name ID1 [incompatible_assignment] -./qualifiers_final_annotation.py:174:4: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:176:9: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:178:8: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:181:29: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:184:8: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:195:0: Cannot assign to final name TEN [incompatible_assignment] -./qualifiers_final_annotation.py:199:0: Cannot assign to final name PI [incompatible_assignment] +./qualifiers_final_annotation.py:124:12: Final cannot be combined with ClassVar [invalid_qualifier] +./qualifiers_final_annotation.py:134:3: Unrecognized annotation typing.Final[] [invalid_annotation] +./qualifiers_final_annotation.py:137:13: Unexpected Final annotation [invalid_qualifier] +./qualifiers_final_annotation.py:147:7: Unexpected Final annotation [invalid_qualifier] +./qualifiers_final_annotation.py:152:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:164:0: In call to pycroscope.signature.N: Missing required argument 'x' [incompatible_call] +./qualifiers_final_annotation.py:165:4: Incompatible argument type for x: expected int but got Literal[''] [incompatible_argument] +./qualifiers_final_annotation.py:165:10: Incompatible argument type for y: expected int but got Literal[''] [incompatible_argument] +./qualifiers_final_annotation.py:171:4: Cannot assign to final name ID1 [incompatible_assignment] +./qualifiers_final_annotation.py:175:4: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:177:9: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:179:8: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:182:29: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:185:8: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:196:0: Cannot assign to final name TEN [incompatible_assignment] +./qualifiers_final_annotation.py:200:0: Cannot assign to final name PI [incompatible_assignment] """ diff --git a/conformance/results/pyrefly/qualifiers_final_annotation.toml b/conformance/results/pyrefly/qualifiers_final_annotation.toml index a59315caa..f56a22bd3 100644 --- a/conformance/results/pyrefly/qualifiers_final_annotation.toml +++ b/conformance/results/pyrefly/qualifiers_final_annotation.toml @@ -3,36 +3,37 @@ errors_diff = """ """ output = """ ERROR qualifiers_final_annotation.py:20:13-16: Argument `int` is not assignable to parameter `x` with type `Literal[1]` in function `expects_one` [bad-argument-type] -ERROR qualifiers_final_annotation.py:31:7-12: Expected a type argument for `Final` [invalid-annotation] -ERROR qualifiers_final_annotation.py:33:7-22: Expected 1 type argument for `Final`, got 2 [invalid-annotation] -ERROR qualifiers_final_annotation.py:49:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] -ERROR qualifiers_final_annotation.py:53:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] -ERROR qualifiers_final_annotation.py:69:9-17: Cannot set field `ID5` [read-only] -ERROR qualifiers_final_annotation.py:77:9-17: Cannot set field `id3` [read-only] -ERROR qualifiers_final_annotation.py:78:9-17: Cannot set field `id4` [read-only] -ERROR qualifiers_final_annotation.py:80:9-17: Cannot set field `ID7` [read-only] -ERROR qualifiers_final_annotation.py:82:9-17: Cannot set field `ID7` [read-only] -ERROR qualifiers_final_annotation.py:86:8-11: Cannot assign to variable `RATE` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:96:1-18: Cannot set field `DEFAULT_ID` [read-only] -ERROR qualifiers_final_annotation.py:109:5-17: `BORDER_WIDTH` is declared as final in parent class `ClassC` [bad-override] -ERROR qualifiers_final_annotation.py:122:5-11: `Final` may not be nested inside `ClassVar` [invalid-annotation] -ERROR qualifiers_final_annotation.py:123:19-27: `ClassVar` may not be nested inside `Final` [invalid-annotation] -ERROR qualifiers_final_annotation.py:133:9-19: `Final` is not allowed in this context [invalid-annotation] -ERROR qualifiers_final_annotation.py:136:14-19: `Final` is only allowed on a class or local variable annotation [invalid-annotation] -ERROR qualifiers_final_annotation.py:136:14-30: `Final` is not allowed in this context [invalid-annotation] -ERROR qualifiers_final_annotation.py:146:5-6: `Final` may not be used for TypedDict members [invalid-annotation] -ERROR qualifiers_final_annotation.py:151:5-6: `Final` may not be used for NamedTuple members [invalid-annotation] -ERROR qualifiers_final_annotation.py:163:2-7: Missing argument `x` in function `N.__new__` [missing-argument] -ERROR qualifiers_final_annotation.py:163:2-7: Missing argument `y` in function `N.__new__` [missing-argument] -ERROR qualifiers_final_annotation.py:163:3-4: Unexpected keyword argument `a` in function `N.__new__` [unexpected-keyword] -ERROR qualifiers_final_annotation.py:164:5-7: Argument `Literal['']` is not assignable to parameter `x` with type `int` in function `N.__new__` [bad-argument-type] -ERROR qualifiers_final_annotation.py:164:11-13: Argument `Literal['']` is not assignable to parameter `y` with type `int` in function `N.__new__` [bad-argument-type] -ERROR qualifiers_final_annotation.py:170:11-12: Cannot assign to variable `ID1` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:174:5-11: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:176:15-16: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:178:14-23: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:181:10-26: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:184:5-11: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:195:1-4: Cannot assign to `TEN` because it is imported as final [bad-assignment] -ERROR qualifiers_final_annotation.py:199:1-3: Cannot assign to `PI` because it is imported as final [bad-assignment] +ERROR qualifiers_final_annotation.py:23:13-16: Argument `int` is not assignable to parameter `x` with type `Literal[1]` in function `expects_one` [bad-argument-type] +ERROR qualifiers_final_annotation.py:32:7-12: Expected a type argument for `Final` [invalid-annotation] +ERROR qualifiers_final_annotation.py:34:7-22: Expected 1 type argument for `Final`, got 2 [invalid-annotation] +ERROR qualifiers_final_annotation.py:50:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] +ERROR qualifiers_final_annotation.py:54:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] +ERROR qualifiers_final_annotation.py:70:9-17: Cannot set field `ID5` [read-only] +ERROR qualifiers_final_annotation.py:78:9-17: Cannot set field `id3` [read-only] +ERROR qualifiers_final_annotation.py:79:9-17: Cannot set field `id4` [read-only] +ERROR qualifiers_final_annotation.py:81:9-17: Cannot set field `ID7` [read-only] +ERROR qualifiers_final_annotation.py:83:9-17: Cannot set field `ID7` [read-only] +ERROR qualifiers_final_annotation.py:87:8-11: Cannot assign to variable `RATE` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:97:1-18: Cannot set field `DEFAULT_ID` [read-only] +ERROR qualifiers_final_annotation.py:110:5-17: `BORDER_WIDTH` is declared as final in parent class `ClassC` [bad-override] +ERROR qualifiers_final_annotation.py:123:5-11: `Final` may not be nested inside `ClassVar` [invalid-annotation] +ERROR qualifiers_final_annotation.py:124:19-27: `ClassVar` may not be nested inside `Final` [invalid-annotation] +ERROR qualifiers_final_annotation.py:134:9-19: `Final` is not allowed in this context [invalid-annotation] +ERROR qualifiers_final_annotation.py:137:14-19: `Final` is only allowed on a class or local variable annotation [invalid-annotation] +ERROR qualifiers_final_annotation.py:137:14-30: `Final` is not allowed in this context [invalid-annotation] +ERROR qualifiers_final_annotation.py:147:5-6: `Final` may not be used for TypedDict members [invalid-annotation] +ERROR qualifiers_final_annotation.py:152:5-6: `Final` may not be used for NamedTuple members [invalid-annotation] +ERROR qualifiers_final_annotation.py:164:2-7: Missing argument `x` in function `N.__new__` [missing-argument] +ERROR qualifiers_final_annotation.py:164:2-7: Missing argument `y` in function `N.__new__` [missing-argument] +ERROR qualifiers_final_annotation.py:164:3-4: Unexpected keyword argument `a` in function `N.__new__` [unexpected-keyword] +ERROR qualifiers_final_annotation.py:165:5-7: Argument `Literal['']` is not assignable to parameter `x` with type `int` in function `N.__new__` [bad-argument-type] +ERROR qualifiers_final_annotation.py:165:11-13: Argument `Literal['']` is not assignable to parameter `y` with type `int` in function `N.__new__` [bad-argument-type] +ERROR qualifiers_final_annotation.py:171:11-12: Cannot assign to variable `ID1` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:175:5-11: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:177:15-16: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:179:14-23: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:182:10-26: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:185:5-11: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:196:1-4: Cannot assign to `TEN` because it is imported as final [bad-assignment] +ERROR qualifiers_final_annotation.py:200:1-3: Cannot assign to `PI` because it is imported as final [bad-assignment] """ diff --git a/conformance/results/pyright/qualifiers_final_annotation.toml b/conformance/results/pyright/qualifiers_final_annotation.toml index 0055ff26f..fd4e49964 100644 --- a/conformance/results/pyright/qualifiers_final_annotation.toml +++ b/conformance/results/pyright/qualifiers_final_annotation.toml @@ -1,48 +1,48 @@ conformant = "Pass" output = """ -qualifiers_final_annotation.py:31:1 - error: "BAD1" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:33:7 - error: Expected a single type argument after "Final" (reportInvalidTypeForm) -qualifiers_final_annotation.py:49:5 - error: "ID2" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:53:5 - error: "ID3" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:69:14 - error: Cannot assign to attribute "ID5" for class "ClassA*" +qualifiers_final_annotation.py:32:1 - error: "BAD1" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:34:7 - error: Expected a single type argument after "Final" (reportInvalidTypeForm) +qualifiers_final_annotation.py:50:5 - error: "ID2" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:54:5 - error: "ID3" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:70:14 - error: Cannot assign to attribute "ID5" for class "ClassA*"   Attribute "ID5" cannot be assigned through a class instance because it is a ClassVar   "ID5" is declared as Final and cannot be reassigned (reportAttributeAccessIssue) -qualifiers_final_annotation.py:77:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) qualifiers_final_annotation.py:78:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:78:32 - error: Cannot assign to attribute "id4" for class "ClassA*" +qualifiers_final_annotation.py:79:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:79:32 - error: Cannot assign to attribute "id4" for class "ClassA*"   "Literal[1]" is not assignable to "Final" (reportAttributeAccessIssue) -qualifiers_final_annotation.py:80:14 - error: Cannot assign to attribute "ID7" for class "ClassA*" +qualifiers_final_annotation.py:81:14 - error: Cannot assign to attribute "ID7" for class "ClassA*"   Attribute "ID7" cannot be assigned through a class instance because it is a ClassVar   "ID7" is declared as Final and cannot be reassigned (reportAttributeAccessIssue) -qualifiers_final_annotation.py:82:14 - error: Cannot assign to attribute "ID7" for class "ClassA*" +qualifiers_final_annotation.py:83:14 - error: Cannot assign to attribute "ID7" for class "ClassA*"   Attribute "ID7" cannot be assigned through a class instance because it is a ClassVar   "ID7" is declared as Final and cannot be reassigned (reportAttributeAccessIssue) -qualifiers_final_annotation.py:86:1 - error: "RATE" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:96:8 - error: Cannot assign to attribute "DEFAULT_ID" for class "type[ClassB]" +qualifiers_final_annotation.py:87:1 - error: "RATE" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:97:8 - error: Cannot assign to attribute "DEFAULT_ID" for class "type[ClassB]"   "DEFAULT_ID" is declared as Final and cannot be reassigned (reportAttributeAccessIssue) -qualifiers_final_annotation.py:109:5 - error: "BORDER_WIDTH" cannot be redeclared because parent class "ClassC" declares it as Final (reportGeneralTypeIssues) -qualifiers_final_annotation.py:122:22 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:123:19 - error: "ClassVar" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:133:9 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:136:14 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:146:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:146:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:151:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:151:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:163:1 - error: Arguments missing for parameters "x", "y" (reportCallIssue) -qualifiers_final_annotation.py:163:3 - error: No parameter named "a" (reportCallIssue) -qualifiers_final_annotation.py:164:5 - error: Argument of type "Literal['']" cannot be assigned to parameter "x" of type "int" in function "__new__" +qualifiers_final_annotation.py:110:5 - error: "BORDER_WIDTH" cannot be redeclared because parent class "ClassC" declares it as Final (reportGeneralTypeIssues) +qualifiers_final_annotation.py:123:22 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:124:19 - error: "ClassVar" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:134:9 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:137:14 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:147:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:147:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:152:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:152:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:164:1 - error: Arguments missing for parameters "x", "y" (reportCallIssue) +qualifiers_final_annotation.py:164:3 - error: No parameter named "a" (reportCallIssue) +qualifiers_final_annotation.py:165:5 - error: Argument of type "Literal['']" cannot be assigned to parameter "x" of type "int" in function "__new__"   "Literal['']" is not assignable to "int" (reportArgumentType) -qualifiers_final_annotation.py:164:11 - error: Argument of type "Literal['']" cannot be assigned to parameter "y" of type "int" in function "__new__" +qualifiers_final_annotation.py:165:11 - error: Argument of type "Literal['']" cannot be assigned to parameter "y" of type "int" in function "__new__"   "Literal['']" is not assignable to "int" (reportArgumentType) -qualifiers_final_annotation.py:170:5 - error: "ID1" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:174:5 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:176:10 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:178:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:181:30 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:184:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:195:1 - error: "TEN" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:199:1 - error: "PI" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:171:5 - error: "ID1" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:175:5 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:177:10 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:179:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:182:30 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:185:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:196:1 - error: "TEN" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:200:1 - error: "PI" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) """ conformance_automated = "Pass" errors_diff = """ diff --git a/conformance/results/ty/qualifiers_final_annotation.toml b/conformance/results/ty/qualifiers_final_annotation.toml index 098a1a11f..923e01aeb 100644 --- a/conformance/results/ty/qualifiers_final_annotation.toml +++ b/conformance/results/ty/qualifiers_final_annotation.toml @@ -2,34 +2,34 @@ conformance_automated = "Pass" errors_diff = """ """ output = """ -qualifiers_final_annotation.py:31:1: error[final-without-value] `Final` symbol `BAD1` is not assigned a value -qualifiers_final_annotation.py:33:7: error[invalid-type-form] Type qualifier `typing.Final` expected exactly 1 argument, got 2 -qualifiers_final_annotation.py:49:5: error[final-without-value] `Final` symbol `ID2` is not assigned a value -qualifiers_final_annotation.py:53:5: error[final-without-value] `Final` symbol `ID3` is not assigned a value -qualifiers_final_annotation.py:69:9: error[invalid-assignment] Invalid assignment to final attribute: `ID5` already has a value in the class body -qualifiers_final_annotation.py:77:9: error[invalid-assignment] Cannot assign to final attribute `id3` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` -qualifiers_final_annotation.py:78:9: error[invalid-assignment] Cannot assign to final attribute `id4` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` -qualifiers_final_annotation.py:80:9: error[invalid-assignment] Cannot assign to final attribute `ID7` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` -qualifiers_final_annotation.py:82:9: error[invalid-assignment] Cannot assign to final attribute `ID7` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` -qualifiers_final_annotation.py:86:1: error[invalid-assignment] Reassignment of `Final` symbol `RATE` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:96:1: error[invalid-assignment] Cannot assign to final attribute `DEFAULT_ID` on type ``: `Final` attributes can only be assigned in the class body or `__init__` -qualifiers_final_annotation.py:109:5: error[override-of-final-variable] Cannot override final variable `BORDER_WIDTH` from superclass `ClassC` -qualifiers_final_annotation.py:122:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant +qualifiers_final_annotation.py:32:1: error[final-without-value] `Final` symbol `BAD1` is not assigned a value +qualifiers_final_annotation.py:34:7: error[invalid-type-form] Type qualifier `typing.Final` expected exactly 1 argument, got 2 +qualifiers_final_annotation.py:50:5: error[final-without-value] `Final` symbol `ID2` is not assigned a value +qualifiers_final_annotation.py:54:5: error[final-without-value] `Final` symbol `ID3` is not assigned a value +qualifiers_final_annotation.py:70:9: error[invalid-assignment] Invalid assignment to final attribute: `ID5` already has a value in the class body +qualifiers_final_annotation.py:78:9: error[invalid-assignment] Cannot assign to final attribute `id3` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` +qualifiers_final_annotation.py:79:9: error[invalid-assignment] Cannot assign to final attribute `id4` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` +qualifiers_final_annotation.py:81:9: error[invalid-assignment] Cannot assign to final attribute `ID7` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` +qualifiers_final_annotation.py:83:9: error[invalid-assignment] Cannot assign to final attribute `ID7` on type `Self@method1`: `Final` attributes can only be assigned in the class body or `__init__` +qualifiers_final_annotation.py:87:1: error[invalid-assignment] Reassignment of `Final` symbol `RATE` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:97:1: error[invalid-assignment] Cannot assign to final attribute `DEFAULT_ID` on type ``: `Final` attributes can only be assigned in the class body or `__init__` +qualifiers_final_annotation.py:110:5: error[override-of-final-variable] Cannot override final variable `BORDER_WIDTH` from superclass `ClassC` qualifiers_final_annotation.py:123:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant -qualifiers_final_annotation.py:133:9: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in type expressions (only in annotation expressions) -qualifiers_final_annotation.py:136:14: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in parameter annotations -qualifiers_final_annotation.py:146:8: error[invalid-type-form] `Final` is not allowed in TypedDict fields -qualifiers_final_annotation.py:151:5: error[invalid-named-tuple] Type qualifier `Final` is not allowed on NamedTuple field `b` -qualifiers_final_annotation.py:163:1: error[missing-argument] No arguments provided for required parameters `x`, `y` -qualifiers_final_annotation.py:163:3: error[unknown-argument] Argument `a` does not match any known parameter -qualifiers_final_annotation.py:164:3: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` -qualifiers_final_annotation.py:164:9: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` -qualifiers_final_annotation.py:170:5: error[invalid-assignment] Reassignment of `Final` symbol `ID1` is not allowed: Reassignment of `Final` symbol -qualifiers_final_annotation.py:174:5: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:176:10: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:178:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:181:30: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:184:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:195:1: error[invalid-assignment] Reassignment of `Final` symbol `TEN` is not allowed: Reassignment of `Final` symbol -qualifiers_final_annotation.py:199:1: error[invalid-assignment] Reassignment of `Final` symbol `PI` is not allowed: Reassignment of `Final` symbol +qualifiers_final_annotation.py:124:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant +qualifiers_final_annotation.py:134:9: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in type expressions (only in annotation expressions) +qualifiers_final_annotation.py:137:14: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in parameter annotations +qualifiers_final_annotation.py:147:8: error[invalid-type-form] `Final` is not allowed in TypedDict fields +qualifiers_final_annotation.py:152:5: error[invalid-named-tuple] Type qualifier `Final` is not allowed on NamedTuple field `b` +qualifiers_final_annotation.py:164:1: error[missing-argument] No arguments provided for required parameters `x`, `y` +qualifiers_final_annotation.py:164:3: error[unknown-argument] Argument `a` does not match any known parameter +qualifiers_final_annotation.py:165:3: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` +qualifiers_final_annotation.py:165:9: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` +qualifiers_final_annotation.py:171:5: error[invalid-assignment] Reassignment of `Final` symbol `ID1` is not allowed: Reassignment of `Final` symbol +qualifiers_final_annotation.py:175:5: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:177:10: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:179:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:182:30: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:185:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:196:1: error[invalid-assignment] Reassignment of `Final` symbol `TEN` is not allowed: Reassignment of `Final` symbol +qualifiers_final_annotation.py:200:1: error[invalid-assignment] Reassignment of `Final` symbol `PI` is not allowed: Reassignment of `Final` symbol """ diff --git a/conformance/results/zuban/qualifiers_final_annotation.toml b/conformance/results/zuban/qualifiers_final_annotation.toml index 52f6d726c..fa8d7b6e3 100644 --- a/conformance/results/zuban/qualifiers_final_annotation.toml +++ b/conformance/results/zuban/qualifiers_final_annotation.toml @@ -3,34 +3,35 @@ errors_diff = """ """ output = """ qualifiers_final_annotation.py:20: error: Argument 1 to "expects_one" has incompatible type "int"; expected "Literal[1]" [arg-type] -qualifiers_final_annotation.py:31: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:33: error: Final[...] takes at most one type argument [misc] -qualifiers_final_annotation.py:49: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:53: error: Final name must be initialized with a value [misc] -qualifiers_final_annotation.py:69: error: Cannot assign to final attribute "ID5" [misc] -qualifiers_final_annotation.py:77: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:23: error: Argument 1 to "expects_one" has incompatible type "int"; expected "Literal[1]" [arg-type] +qualifiers_final_annotation.py:32: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:34: error: Final[...] takes at most one type argument [misc] +qualifiers_final_annotation.py:50: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:54: error: Final name must be initialized with a value [misc] +qualifiers_final_annotation.py:70: error: Cannot assign to final attribute "ID5" [misc] qualifiers_final_annotation.py:78: error: Can only declare a final attribute in class body or __init__ [misc] -qualifiers_final_annotation.py:80: error: Cannot assign to final attribute "ID7" [misc] -qualifiers_final_annotation.py:82: error: Cannot assign to final attribute "ID7" [misc] -qualifiers_final_annotation.py:86: error: Cannot assign to final name "RATE" [misc] -qualifiers_final_annotation.py:96: error: Cannot assign to final attribute "DEFAULT_ID" [misc] -qualifiers_final_annotation.py:109: error: Cannot assign to final name "BORDER_WIDTH" [misc] -qualifiers_final_annotation.py:122: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:123: error: Invalid Type: ClassVar nested inside other type [misc] -qualifiers_final_annotation.py:133: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:136: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:146: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:151: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:163: error: Unexpected keyword argument "a" for "N" [call-arg] -qualifiers_final_annotation.py:164: error: Argument "x" to "N" has incompatible type "str"; expected "int" [arg-type] -qualifiers_final_annotation.py:164: error: Argument "y" to "N" has incompatible type "str"; expected "int" [arg-type] -qualifiers_final_annotation.py:170: error: Cannot assign to final name "ID1" [misc] -qualifiers_final_annotation.py:174: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:176: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:178: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:181: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:181: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] -qualifiers_final_annotation.py:184: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:195: error: Cannot assign to final name "TEN" [misc] -qualifiers_final_annotation.py:199: error: Cannot assign to final name "PI" [misc] +qualifiers_final_annotation.py:79: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:81: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:83: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:87: error: Cannot assign to final name "RATE" [misc] +qualifiers_final_annotation.py:97: error: Cannot assign to final attribute "DEFAULT_ID" [misc] +qualifiers_final_annotation.py:110: error: Cannot assign to final name "BORDER_WIDTH" [misc] +qualifiers_final_annotation.py:123: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:124: error: Invalid Type: ClassVar nested inside other type [misc] +qualifiers_final_annotation.py:134: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:137: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:147: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:152: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:164: error: Unexpected keyword argument "a" for "N" [call-arg] +qualifiers_final_annotation.py:165: error: Argument "x" to "N" has incompatible type "str"; expected "int" [arg-type] +qualifiers_final_annotation.py:165: error: Argument "y" to "N" has incompatible type "str"; expected "int" [arg-type] +qualifiers_final_annotation.py:171: error: Cannot assign to final name "ID1" [misc] +qualifiers_final_annotation.py:175: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:177: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:179: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:182: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:182: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] +qualifiers_final_annotation.py:185: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:196: error: Cannot assign to final name "TEN" [misc] +qualifiers_final_annotation.py:200: error: Cannot assign to final name "PI" [misc] """ diff --git a/conformance/tests/qualifiers_final_annotation.py b/conformance/tests/qualifiers_final_annotation.py index 0c4e43697..07790d3a0 100644 --- a/conformance/tests/qualifiers_final_annotation.py +++ b/conformance/tests/qualifiers_final_annotation.py @@ -19,10 +19,11 @@ def expects_one(x: Literal[1]) -> None: ... ID2: Final[int] = 1 expects_one(ID2) # E?: May or may not be accepted by type checkers -# Type checkers can only infer literals if the parameter is valid for Literal. +ID3: Final = 2 - 1 +expects_one(ID2) # E?: May or may not be accepted by type checkers -ID3: Final = range(1) -assert_type(ID3, range) +ID4: Final = range(1) +assert_type(ID4, range) # E?: May or may not be inferred by type checkers # Specification: https://typing.readthedocs.io/en/latest/spec/qualifiers.html#id1 From ae58134c7e852b6b786f32b05e9685d81f1dda17 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Mon, 31 Aug 2026 19:16:31 +0200 Subject: [PATCH 7/7] Update results --- conformance/results/results.html | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/conformance/results/results.html b/conformance/results/results.html index 11ef235da..7915147fd 100644 --- a/conformance/results/results.html +++ b/conformance/results/results.html @@ -1000,12 +1000,7 @@

    Python Type System Conformance Test Results

  • Does not report modification of local Final variable via for statement.
  • - - Partial -
      -
    • Infers invalid Literal[range(0, 1)] from Final
    • -
    - + Pass Pass Pass Pass @@ -1023,7 +1018,7 @@

    Python Type System Conformance Test Results

    2 / 3 • 66.7% - 2 / 3 • 66.7% + 2.5 / 3 • 83.3% 3 / 3 • 100.0% 3 / 3 • 100.0% 3 / 3 • 100.0% @@ -2613,7 +2608,7 @@

    Python Type System Conformance Test Results

    108.5 / 145 • 74.8% - 137.5 / 145 • 94.8% + 138 / 145 • 95.2% 140.5 / 145 • 96.9% 135.5 / 145 • 93.4% 132 / 145 • 91.0%