From d52de49f41554d758148b7f348fa2cd90a328953 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Mon, 31 Aug 2026 17:08:59 +0200 Subject: [PATCH 01/15] 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 02/15] 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 03/15] 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 04/15] 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 05/15] 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 ff6cf964b65560fc0c453b13fda3147d9f8e6b3a Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Mon, 31 Aug 2026 19:00:10 +0200 Subject: [PATCH 06/15] Unify and fix`Literal`/`Final` interaction - Add an "Inference Rules" subsection to the `Final` section. - Move the inference rules for class vars there. - Remove contradictory paragraph about literal handling from `Final` section. - Merge the "Interactions with Final" section from literals into the new "Inference Rules" section, add a link, and trim slightly. --- docs/spec/literal.rst | 34 +-------------------- docs/spec/qualifiers.rst | 65 +++++++++++++++++++++++++++------------- 2 files changed, 46 insertions(+), 53 deletions(-) diff --git a/docs/spec/literal.rst b/docs/spec/literal.rst index 0eb93c27a..fd2905f70 100644 --- a/docs/spec/literal.rst +++ b/docs/spec/literal.rst @@ -504,39 +504,7 @@ involving Literal bools. For example, we can combine ``Literal[True]``, Interactions with Final """"""""""""""""""""""" -The ``Final`` qualifier can be used to declare that some variable or -attribute cannot be reassigned:: - - foo: Final = 3 - foo = 4 # Error: 'foo' is declared to be Final - -Note that in the example above, we know that ``foo`` will always be equal to -exactly ``3``. A type checker can use this information to deduce that ``foo`` -is valid to use in any context that expects a ``Literal[3]``:: - - def expects_three(x: Literal[3]) -> None: ... - - expects_three(foo) # Type checks, since 'foo' is Final and equal to 3 - -The ``Final`` qualifier serves as a shorthand for declaring that a variable -is *effectively Literal*. - -Type checkers are expected to -support this shortcut. Specifically, given a variable or attribute assignment -of the form ``var: Final = value`` where ``value`` is a valid parameter for -``Literal[...]``, type checkers should understand that ``var`` may be used in -any context that expects a ``Literal[value]``. - -Type checkers are not obligated to understand any other uses of Final. For -example, whether or not the following program type checks is left unspecified:: - - # Note: The assignment does not exactly match the form 'var: Final = value'. - bar1: Final[int] = 3 - expects_three(bar1) # May or may not be accepted by type checkers - - # Note: "Literal[1 + 2]" is not a legal type. - bar2: Final = 1 + 2 - expects_three(bar2) # May or may not be accepted by type checkers +See the :ref:`final-inference` section in the :ref:`type-qualifiers` chapter. .. _`literalstring`: diff --git a/docs/spec/qualifiers.rst b/docs/spec/qualifiers.rst index 6814692e0..1316353df 100644 --- a/docs/spec/qualifiers.rst +++ b/docs/spec/qualifiers.rst @@ -91,8 +91,9 @@ Syntax ID: Final = 1 - The typechecker should apply its usual type inference mechanisms to - determine the type of ``ID`` (here, likely, ``int``). Note that unlike for + The typechecker should apply the inference mechanisms + :ref:`described below ` to determine the type of ``ID``. + Note that unlike for generic classes this is *not* the same as ``Final[Any]``. * In class bodies and stub files you can omit the right hand side and just write @@ -159,14 +160,6 @@ The generated ``__init__`` method of :doc:`dataclasses` qualifies for this requirement: a bare ``x: Final[int]`` is permitted in a dataclass body, because the generated ``__init__`` will initialize ``x``. -Type checkers should infer a final attribute that is initialized in a class -body as being a class variable, except in the case of :doc:`dataclasses`, where -``x: Final[int] = 3`` creates a dataclass field and instance-level final -attribute ``x`` with default value ``3``; ``x: ClassVar[Final[int]] = 3`` is -necessary to create a final class variable with value ``3``. In -non-dataclasses, combining ``ClassVar`` and ``Final`` is redundant, and type -checkers may choose to warn or error on the redundancy. - ``Final`` may only be used in assignments or variable annotations. Using it in any other position is an error. In particular, ``Final`` can't be used in annotations for function arguments:: @@ -193,20 +186,52 @@ with ``Final`` to prevent mutating such values:: z: Final = ('a', 'b') # Also works -Type checkers should treat uses of a final name that was initialized -with a literal as if it was replaced by the literal. For example, the -following should be allowed:: - - from typing import NamedTuple, Final - - X: Final = "x" - Y: Final = "y" - N = NamedTuple("N", [(X, int), (Y, int)]) - ``Final`` cannot be used as a qualifier for a :ref:`TypedDict ` item or a :ref:`NamedTuple ` field. Such usage also generates an error at runtime. +.. _`final-inference`: + +Inference Rules +^^^^^^^^^^^^^^^ + +In the example below, we know that ``foo`` will always be equal to +exactly ``3``. A type checker can use this information to deduce that ``foo`` +is valid to use in any context that expects a ``Literal[3]``:: + + def expects_three(x: Literal[3]) -> None: ... + + foo: Final = 3 + expects_three(foo) # Type checks, since 'foo' is Final and equal to 3 + +The ``Final`` qualifier serves as a shorthand for declaring that a variable +is *effectively Literal*. + +Type checkers are expected to +support this shortcut. Specifically, given a variable or attribute assignment +of the form ``var: Final = value`` where ``value`` is a valid parameter for +``Literal[...]``, type checkers should understand that ``var`` may be used in +any context that expects a ``Literal[value]``. + +Type checkers are not obligated to understand any other uses of Final. For +example, whether or not the following program type checks is left unspecified:: + + # Note: The assignment does not exactly match the form 'var: Final = value'. + bar1: Final[int] = 3 + expects_three(bar1) # May or may not be accepted by type checkers + + # Note: "Literal[1 + 2]" is not a legal type. + bar2: Final = 1 + 2 + expects_three(bar2) # May or may not be accepted by type checkers + +Type checkers should infer a final attribute that is initialized in a class +body as being a class variable, except in the case of :doc:`dataclasses`, where +``x: Final[int] = 3`` creates a dataclass field and instance-level final +attribute ``x`` with default value ``3``; ``x: ClassVar[Final[int]] = 3`` is +necessary to create a final class variable with value ``3``. In +non-dataclasses, combining ``ClassVar`` and ``Final`` is redundant, and type +checkers may choose to warn or error on the redundancy. + Importing ``Final`` Variables ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ From e8ec2bf744fe6578c8e7df1d326abad81ace796f Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Mon, 31 Aug 2026 19:05:54 +0200 Subject: [PATCH 07/15] Update a link --- docs/spec/distributing.rst | 2 +- docs/spec/literal.rst | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/docs/spec/distributing.rst b/docs/spec/distributing.rst index 13cfff81a..85736219f 100644 --- a/docs/spec/distributing.rst +++ b/docs/spec/distributing.rst @@ -105,7 +105,7 @@ assignments:: x = 0 # type: int x = ... # type: int -The :ref:`Literal shortcut using Final ` should be +The :ref:`Literal shortcut using Final ` should be supported:: x: Final = 0 # type is Literal[0] diff --git a/docs/spec/literal.rst b/docs/spec/literal.rst index fd2905f70..8912dd2b5 100644 --- a/docs/spec/literal.rst +++ b/docs/spec/literal.rst @@ -499,8 +499,6 @@ involving Literal bools. For example, we can combine ``Literal[True]``, else: scalar += "foo" # Type checks: type of 'scalar' is narrowed to 'str' -.. _literal-final-interactions: - Interactions with Final """"""""""""""""""""""" From 5b3a1bb34cdb95fc85709e20a4390d2cfac2ca63 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Mon, 31 Aug 2026 19:10:25 +0200 Subject: [PATCH 08/15] 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 09/15] 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% From 0872a87ce70bf05aea68b51376cf3f68a8bcc7b8 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Mon, 31 Aug 2026 20:38:50 +0200 Subject: [PATCH 10/15] Update spec link --- conformance/tests/qualifiers_final_annotation.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/conformance/tests/qualifiers_final_annotation.py b/conformance/tests/qualifiers_final_annotation.py index 07790d3a0..3e26a2be3 100644 --- a/conformance/tests/qualifiers_final_annotation.py +++ b/conformance/tests/qualifiers_final_annotation.py @@ -4,7 +4,7 @@ from typing import ClassVar, Final, Literal, NamedTuple, TypedDict, assert_type -# Specification: https://typing.python.org/en/latest/spec/literal.html#interactions-with-final +# Specification: https://typing.readthedocs.io/en/latest/spec/qualifiers.html#id1 def expects_one(x: Literal[1]) -> None: ... @@ -25,8 +25,6 @@ def expects_one(x: Literal[1]) -> None: ... 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 - # > If the right hand side is omitted, there must be an explicit type argument to Final. BAD1: Final # E: missing assignment From 9ae5733729bfe2548f7fb0f055f3f0beb391140d Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Mon, 31 Aug 2026 20:40:32 +0200 Subject: [PATCH 11/15] Move tests from literals_interactions to qualifiers --- conformance/tests/literals_interactions.py | 7 ------- conformance/tests/qualifiers_final_annotation.py | 15 +++++++++------ 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/conformance/tests/literals_interactions.py b/conformance/tests/literals_interactions.py index 474126768..2b84b2a32 100644 --- a/conformance/tests/literals_interactions.py +++ b/conformance/tests/literals_interactions.py @@ -134,10 +134,3 @@ def parse_status3(status: str) -> None: if status == "PENDING": expects_pending_status(status) # E? narrowing the type here is unsound, but allowed per the spec - - -final_val1: Final = 3 -assert_type(final_val1, Literal[3]) - -final_val2: Final = True -assert_type(final_val2, Literal[True]) diff --git a/conformance/tests/qualifiers_final_annotation.py b/conformance/tests/qualifiers_final_annotation.py index 3e26a2be3..ef18a999e 100644 --- a/conformance/tests/qualifiers_final_annotation.py +++ b/conformance/tests/qualifiers_final_annotation.py @@ -14,16 +14,19 @@ def expects_one(x: Literal[1]) -> None: ... assert_type(ID1, Literal[1]) expects_one(ID1) +ID2: Final = True +assert_type(ID2, Literal[True]) + # > 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[int] = 1 +expects_one(ID3) # E?: May or may not be accepted by type checkers -ID3: Final = 2 - 1 -expects_one(ID2) # E?: May or may not be accepted by type checkers +ID4: Final = 2 - 1 +expects_one(ID4) # E?: May or may not be accepted by type checkers -ID4: Final = range(1) -assert_type(ID4, range) # E?: May or may not be inferred by type checkers +ID5: Final = range(1) +assert_type(ID5, range) # E?: May or may not be inferred by type checkers # > If the right hand side is omitted, there must be an explicit type argument to Final. From d764ec33b29e8e8623ecb3c33517859e447b7bc4 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Mon, 31 Aug 2026 20:50:53 +0200 Subject: [PATCH 12/15] Re-run conformance tests --- .../mypy/qualifiers_final_annotation.toml | 75 +++++++++---------- .../qualifiers_final_annotation.toml | 59 +++++++-------- .../pyrefly/qualifiers_final_annotation.toml | 66 ++++++++-------- .../pyright/qualifiers_final_annotation.toml | 64 ++++++++-------- .../ty/qualifiers_final_annotation.toml | 58 +++++++------- .../zuban/qualifiers_final_annotation.toml | 59 +++++++-------- 6 files changed, 189 insertions(+), 192 deletions(-) diff --git a/conformance/results/mypy/qualifiers_final_annotation.toml b/conformance/results/mypy/qualifiers_final_annotation.toml index e131cf3d4..1535120f7 100644 --- a/conformance/results/mypy/qualifiers_final_annotation.toml +++ b/conformance/results/mypy/qualifiers_final_annotation.toml @@ -6,47 +6,46 @@ 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:20: error: Argument 1 to "expects_one" has incompatible type "int"; expected "Literal[1]" [arg-type] 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:33: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:35: error: Final[...] takes at most one type argument [misc] +qualifiers_final_annotation.py:51: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:55: error: Final name must be initialized with a value [misc] +qualifiers_final_annotation.py:71: error: Cannot assign to final attribute "ID5" [misc] +qualifiers_final_annotation.py:76: error: Cannot assign to final attribute "ID6" [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] +qualifiers_final_annotation.py:80: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:82: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:84: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:88: error: Cannot assign to final name "RATE" [misc] +qualifiers_final_annotation.py:98: error: Cannot assign to final attribute "DEFAULT_ID" [misc] +qualifiers_final_annotation.py:111: error: Cannot assign to final name "BORDER_WIDTH" [misc] +qualifiers_final_annotation.py:113: error: Cannot assign to final name "__private" [misc] +qualifiers_final_annotation.py:124: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] +qualifiers_final_annotation.py:125: error: Variable should not be annotated with both ClassVar and Final [misc] +qualifiers_final_annotation.py:135: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] +qualifiers_final_annotation.py:138: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] +qualifiers_final_annotation.py:148: error: Final[...] can't be used inside a TypedDict [valid-type] +qualifiers_final_annotation.py:153: error: Final[...] can't be used inside a NamedTuple [valid-type] +qualifiers_final_annotation.py:162: error: Invalid "NamedTuple()" field name [misc] +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:165: error: Unexpected keyword argument "a" for "N" [call-arg] +qualifiers_final_annotation.py:166: error: Unexpected keyword argument "x" for "N" [call-arg] +qualifiers_final_annotation.py:166: error: Unexpected keyword argument "y" for "N" [call-arg] +qualifiers_final_annotation.py:172: error: Cannot assign to final name "ID1" [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:183: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] +qualifiers_final_annotation.py:186: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:197: error: Cannot assign to final name "TEN" [misc] +qualifiers_final_annotation.py:201: error: Cannot assign to final name "PI" [misc] """ conformance_automated = "Fail" errors_diff = """ -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]'] +Line 180: Expected 1 errors +Line 76: Unexpected errors ['qualifiers_final_annotation.py:76: error: Cannot assign to final attribute "ID6" [misc]'] +Line 113: Unexpected errors ['qualifiers_final_annotation.py:113: error: Cannot assign to final name "__private" [misc]'] +Line 162: Unexpected errors ['qualifiers_final_annotation.py:162: error: Invalid "NamedTuple()" field name [misc]'] +Line 164: Unexpected errors ['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]'] """ diff --git a/conformance/results/pycroscope/qualifiers_final_annotation.toml b/conformance/results/pycroscope/qualifiers_final_annotation.toml index 005ab93e1..25f7657a6 100644 --- a/conformance/results/pycroscope/qualifiers_final_annotation.toml +++ b/conformance/results/pycroscope/qualifiers_final_annotation.toml @@ -2,37 +2,36 @@ conformance_automated = "Pass" errors_diff = """ """ 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: 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:29:12: Literal[range(0, 1)] is not equivalent to range +./qualifiers_final_annotation.py:33:6: Final annotation without assignment requires an explicit type [invalid_qualifier] +./qualifiers_final_annotation.py:35:6: Invalid type annotation (, ) [invalid_annotation] +./qualifiers_final_annotation.py:51:9: Final annotation without assignment requires an explicit type [invalid_qualifier] +./qualifiers_final_annotation.py:51:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:55:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:71:8: Cannot assign to final name ID5 [incompatible_assignment] ./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:80:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:82:8: Cannot assign to final name ID7 [incompatible_assignment] +./qualifiers_final_annotation.py:84:8: Cannot assign to final name ID7 [incompatible_assignment] +./qualifiers_final_annotation.py:88:0: Cannot assign to final name RATE [incompatible_assignment] +./qualifiers_final_annotation.py:98:0: Cannot assign to final name DEFAULT_ID [incompatible_assignment] +./qualifiers_final_annotation.py:111:4: Cannot override final attribute BORDER_WIDTH [incompatible_override] ./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] +./qualifiers_final_annotation.py:125:12: Final cannot be combined with ClassVar [invalid_qualifier] +./qualifiers_final_annotation.py:135:3: Unrecognized annotation typing.Final[] [invalid_annotation] +./qualifiers_final_annotation.py:138:13: Unexpected Final annotation [invalid_qualifier] +./qualifiers_final_annotation.py:148:7: Unexpected Final annotation [invalid_qualifier] +./qualifiers_final_annotation.py:153:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:165:0: In call to pycroscope.signature.N: Missing required argument 'x' [incompatible_call] +./qualifiers_final_annotation.py:166:4: Incompatible argument type for x: expected int but got Literal[''] [incompatible_argument] +./qualifiers_final_annotation.py:166:10: Incompatible argument type for y: expected int but got Literal[''] [incompatible_argument] +./qualifiers_final_annotation.py:172:4: Cannot assign to final name ID1 [incompatible_assignment] +./qualifiers_final_annotation.py:176:4: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:178:9: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:180:8: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:183:29: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:186:8: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:197:0: Cannot assign to final name TEN [incompatible_assignment] +./qualifiers_final_annotation.py:201: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 f56a22bd3..161e108b5 100644 --- a/conformance/results/pyrefly/qualifiers_final_annotation.toml +++ b/conformance/results/pyrefly/qualifiers_final_annotation.toml @@ -2,38 +2,38 @@ conformance_automated = "Pass" 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: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] +ERROR qualifiers_final_annotation.py:26: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:33:7-12: Expected a type argument for `Final` [invalid-annotation] +ERROR qualifiers_final_annotation.py:35:7-22: Expected 1 type argument for `Final`, got 2 [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:55:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] +ERROR qualifiers_final_annotation.py:71:9-17: Cannot set field `ID5` [read-only] +ERROR qualifiers_final_annotation.py:79:9-17: Cannot set field `id3` [read-only] +ERROR qualifiers_final_annotation.py:80:9-17: Cannot set field `id4` [read-only] +ERROR qualifiers_final_annotation.py:82:9-17: Cannot set field `ID7` [read-only] +ERROR qualifiers_final_annotation.py:84:9-17: Cannot set field `ID7` [read-only] +ERROR qualifiers_final_annotation.py:88:8-11: Cannot assign to variable `RATE` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:98:1-18: Cannot set field `DEFAULT_ID` [read-only] +ERROR qualifiers_final_annotation.py:111:5-17: `BORDER_WIDTH` is declared as final in parent class `ClassC` [bad-override] +ERROR qualifiers_final_annotation.py:124:5-11: `Final` may not be nested inside `ClassVar` [invalid-annotation] +ERROR qualifiers_final_annotation.py:125:19-27: `ClassVar` may not be nested inside `Final` [invalid-annotation] +ERROR qualifiers_final_annotation.py:135:9-19: `Final` is not allowed in this context [invalid-annotation] +ERROR qualifiers_final_annotation.py:138:14-19: `Final` is only allowed on a class or local variable annotation [invalid-annotation] +ERROR qualifiers_final_annotation.py:138:14-30: `Final` is not allowed in this context [invalid-annotation] +ERROR qualifiers_final_annotation.py:148:5-6: `Final` may not be used for TypedDict members [invalid-annotation] +ERROR qualifiers_final_annotation.py:153:5-6: `Final` may not be used for NamedTuple members [invalid-annotation] +ERROR qualifiers_final_annotation.py:165:2-7: Missing argument `x` in function `N.__new__` [missing-argument] +ERROR qualifiers_final_annotation.py:165:2-7: Missing argument `y` in function `N.__new__` [missing-argument] +ERROR qualifiers_final_annotation.py:165:3-4: Unexpected keyword argument `a` in function `N.__new__` [unexpected-keyword] +ERROR qualifiers_final_annotation.py:166: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:166: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:172:11-12: Cannot assign to variable `ID1` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:176:5-11: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:178:15-16: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:180:14-23: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:183:10-26: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:186:5-11: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:197:1-4: Cannot assign to `TEN` because it is imported as final [bad-assignment] +ERROR qualifiers_final_annotation.py:201: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 fd4e49964..2c29b4cb1 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: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*" +qualifiers_final_annotation.py:33:1 - error: "BAD1" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:35:7 - error: Expected a single type argument after "Final" (reportInvalidTypeForm) +qualifiers_final_annotation.py:51:5 - error: "ID2" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:55:5 - error: "ID3" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:71: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:78:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) 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*" +qualifiers_final_annotation.py:80:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:80:32 - error: Cannot assign to attribute "id4" for class "ClassA*"   "Literal[1]" is not assignable to "Final" (reportAttributeAccessIssue) -qualifiers_final_annotation.py:81: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:83:14 - error: Cannot assign to attribute "ID7" for class "ClassA*" +qualifiers_final_annotation.py:84: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: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]" +qualifiers_final_annotation.py:88:1 - error: "RATE" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:98: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: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__" +qualifiers_final_annotation.py:111:5 - error: "BORDER_WIDTH" cannot be redeclared because parent class "ClassC" declares it as Final (reportGeneralTypeIssues) +qualifiers_final_annotation.py:124:22 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:125:19 - error: "ClassVar" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:135:9 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:138:14 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:148:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:148:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:153:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:153:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:165:1 - error: Arguments missing for parameters "x", "y" (reportCallIssue) +qualifiers_final_annotation.py:165:3 - error: No parameter named "a" (reportCallIssue) +qualifiers_final_annotation.py:166: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:165:11 - error: Argument of type "Literal['']" cannot be assigned to parameter "y" of type "int" in function "__new__" +qualifiers_final_annotation.py:166: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: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) +qualifiers_final_annotation.py:172:5 - error: "ID1" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:176:5 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:178:10 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:180:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:183:30 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:186:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:197:1 - error: "TEN" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:201: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 923e01aeb..d68dcd14a 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: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:33:1: error[final-without-value] `Final` symbol `BAD1` is not assigned a value +qualifiers_final_annotation.py:35:7: error[invalid-type-form] Type qualifier `typing.Final` expected exactly 1 argument, got 2 +qualifiers_final_annotation.py:51:5: error[final-without-value] `Final` symbol `ID2` is not assigned a value +qualifiers_final_annotation.py:55:5: error[final-without-value] `Final` symbol `ID3` is not assigned a value +qualifiers_final_annotation.py:71:9: error[invalid-assignment] Invalid assignment to final attribute: `ID5` already has a value in the class body +qualifiers_final_annotation.py:79: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:80: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: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:84: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:88:1: error[invalid-assignment] Reassignment of `Final` symbol `RATE` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:98: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:111:5: error[override-of-final-variable] Cannot override final variable `BORDER_WIDTH` from superclass `ClassC` 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 +qualifiers_final_annotation.py:125:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant +qualifiers_final_annotation.py:135:9: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in type expressions (only in annotation expressions) +qualifiers_final_annotation.py:138:14: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in parameter annotations +qualifiers_final_annotation.py:148:8: error[invalid-type-form] `Final` is not allowed in TypedDict fields +qualifiers_final_annotation.py:153:5: error[invalid-named-tuple] Type qualifier `Final` is not allowed on NamedTuple field `b` +qualifiers_final_annotation.py:165:1: error[missing-argument] No arguments provided for required parameters `x`, `y` +qualifiers_final_annotation.py:165:3: error[unknown-argument] Argument `a` does not match any known parameter +qualifiers_final_annotation.py:166:3: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` +qualifiers_final_annotation.py:166:9: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` +qualifiers_final_annotation.py:172:5: error[invalid-assignment] Reassignment of `Final` symbol `ID1` is not allowed: Reassignment of `Final` symbol +qualifiers_final_annotation.py:176:5: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:178:10: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:180:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:183:30: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:186:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:197:1: error[invalid-assignment] Reassignment of `Final` symbol `TEN` is not allowed: Reassignment of `Final` symbol +qualifiers_final_annotation.py:201: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 fa8d7b6e3..6447b0709 100644 --- a/conformance/results/zuban/qualifiers_final_annotation.toml +++ b/conformance/results/zuban/qualifiers_final_annotation.toml @@ -2,36 +2,35 @@ conformance_automated = "Pass" 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: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:33: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:35: error: Final[...] takes at most one type argument [misc] +qualifiers_final_annotation.py:51: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:55: error: Final name must be initialized with a value [misc] +qualifiers_final_annotation.py:71: error: Cannot assign to final attribute "ID5" [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] +qualifiers_final_annotation.py:80: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:82: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:84: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:88: error: Cannot assign to final name "RATE" [misc] +qualifiers_final_annotation.py:98: error: Cannot assign to final attribute "DEFAULT_ID" [misc] +qualifiers_final_annotation.py:111: error: Cannot assign to final name "BORDER_WIDTH" [misc] +qualifiers_final_annotation.py:124: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:125: error: Invalid Type: ClassVar nested inside other type [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:138: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:148: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:153: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:165: error: Unexpected keyword argument "a" for "N" [call-arg] +qualifiers_final_annotation.py:166: error: Argument "x" to "N" has incompatible type "str"; expected "int" [arg-type] +qualifiers_final_annotation.py:166: error: Argument "y" to "N" has incompatible type "str"; expected "int" [arg-type] +qualifiers_final_annotation.py:172: error: Cannot assign to final name "ID1" [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:180: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:183: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:183: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] +qualifiers_final_annotation.py:186: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:197: error: Cannot assign to final name "TEN" [misc] +qualifiers_final_annotation.py:201: error: Cannot assign to final name "PI" [misc] """ From eba639eeec24aff4e5fcbfa92f403b3878efc3c1 Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Tue, 1 Sep 2026 12:50:17 +0200 Subject: [PATCH 13/15] Rework Inference Rules section Update conformance tests accordingly Restore the `NamedTuple` section --- conformance/README.md | 1 + .../mypy/qualifiers_final_annotation.toml | 82 ++++++++++--------- .../qualifiers_final_annotation.toml | 76 +++++++++-------- .../pyrefly/qualifiers_final_annotation.toml | 67 ++++++++------- .../pyright/qualifiers_final_annotation.toml | 68 +++++++-------- conformance/results/results.html | 23 ++++-- .../ty/qualifiers_final_annotation.toml | 72 +++++++++------- .../zuban/qualifiers_final_annotation.toml | 61 +++++++------- conformance/src/main.py | 24 ++++-- .../tests/qualifiers_final_annotation.py | 36 ++++---- docs/spec/qualifiers.rst | 61 ++++++++------ 11 files changed, 322 insertions(+), 249 deletions(-) diff --git a/conformance/README.md b/conformance/README.md index 0b60a9490..59f94ea10 100644 --- a/conformance/README.md +++ b/conformance/README.md @@ -63,6 +63,7 @@ Test cases support the following special comments for declaring where errors sho * `# E[tag]`, where `tag` is an arbitrary string: must appear multiple times in a file with the same tag. Exactly one line with this tag must raise an error. * `# E[tag+]`: like `# E[tag]`, but errors may be raised on multiple lines. +* `# E[tag!]`: like `# E[tag]`, but at least one line must not raise an error. Each comment may be followed by a colon plus an explanation of the error; the explanation is ignored by the scoring system. diff --git a/conformance/results/mypy/qualifiers_final_annotation.toml b/conformance/results/mypy/qualifiers_final_annotation.toml index 1535120f7..54c7c263f 100644 --- a/conformance/results/mypy/qualifiers_final_annotation.toml +++ b/conformance/results/mypy/qualifiers_final_annotation.toml @@ -1,51 +1,57 @@ conformant = "Partial" notes = """ +Infers invalid `Literal` values from `float`. Does not treat use of `Final` name as if it was replaced by the literal in `NamedTuple` definition. Does not allow conditional assignment of `Final` instance variable in `__init__` method. Does not allow redefinition of private class variable that is marked `Final` in parent class. Does not report modification of local `Final` variable via `for` statement. """ output = """ -qualifiers_final_annotation.py:23: error: Argument 1 to "expects_one" has incompatible type "int"; expected "Literal[1]" [arg-type] -qualifiers_final_annotation.py:33: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:35: error: Final[...] takes at most one type argument [misc] -qualifiers_final_annotation.py:51: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:55: error: Final name must be initialized with a value [misc] -qualifiers_final_annotation.py:71: error: Cannot assign to final attribute "ID5" [misc] -qualifiers_final_annotation.py:76: error: Cannot assign to final attribute "ID6" [misc] -qualifiers_final_annotation.py:79: error: Can only declare a final attribute in class body or __init__ [misc] -qualifiers_final_annotation.py:80: error: Can only declare a final attribute in class body or __init__ [misc] -qualifiers_final_annotation.py:82: error: Cannot assign to final attribute "ID7" [misc] -qualifiers_final_annotation.py:84: error: Cannot assign to final attribute "ID7" [misc] -qualifiers_final_annotation.py:88: error: Cannot assign to final name "RATE" [misc] -qualifiers_final_annotation.py:98: error: Cannot assign to final attribute "DEFAULT_ID" [misc] -qualifiers_final_annotation.py:111: error: Cannot assign to final name "BORDER_WIDTH" [misc] -qualifiers_final_annotation.py:113: error: Cannot assign to final name "__private" [misc] -qualifiers_final_annotation.py:124: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] -qualifiers_final_annotation.py:125: error: Variable should not be annotated with both ClassVar and Final [misc] -qualifiers_final_annotation.py:135: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] -qualifiers_final_annotation.py:138: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] -qualifiers_final_annotation.py:148: error: Final[...] can't be used inside a TypedDict [valid-type] -qualifiers_final_annotation.py:153: error: Final[...] can't be used inside a NamedTuple [valid-type] -qualifiers_final_annotation.py:162: error: Invalid "NamedTuple()" field name [misc] -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:165: error: Unexpected keyword argument "a" for "N" [call-arg] -qualifiers_final_annotation.py:166: error: Unexpected keyword argument "x" for "N" [call-arg] -qualifiers_final_annotation.py:166: error: Unexpected keyword argument "y" for "N" [call-arg] -qualifiers_final_annotation.py:172: error: Cannot assign to final name "ID1" [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:183: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] +qualifiers_final_annotation.py:26: error: Expression is of type "Literal[3]", not "int" [assert-type] +qualifiers_final_annotation.py:31: error: Expression is of type "Literal[3.14]", not "float" [assert-type] +qualifiers_final_annotation.py:32: error: Expression is of type "Literal[3.14]", not "float | int" [assert-type] +qualifiers_final_annotation.py:39: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:41: error: Final[...] takes at most one type argument [misc] +qualifiers_final_annotation.py:57: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:61: error: Final name must be initialized with a value [misc] +qualifiers_final_annotation.py:77: error: Cannot assign to final attribute "ID5" [misc] +qualifiers_final_annotation.py:82: error: Cannot assign to final attribute "ID6" [misc] +qualifiers_final_annotation.py:85: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:86: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:88: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:90: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:94: error: Cannot assign to final name "RATE" [misc] +qualifiers_final_annotation.py:104: error: Cannot assign to final attribute "DEFAULT_ID" [misc] +qualifiers_final_annotation.py:117: error: Cannot assign to final name "BORDER_WIDTH" [misc] +qualifiers_final_annotation.py:119: error: Cannot assign to final name "__private" [misc] +qualifiers_final_annotation.py:130: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] +qualifiers_final_annotation.py:131: error: Variable should not be annotated with both ClassVar and Final [misc] +qualifiers_final_annotation.py:141: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] +qualifiers_final_annotation.py:144: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] +qualifiers_final_annotation.py:154: error: Final[...] can't be used inside a TypedDict [valid-type] +qualifiers_final_annotation.py:159: error: Final[...] can't be used inside a NamedTuple [valid-type] +qualifiers_final_annotation.py:168: error: Invalid "NamedTuple()" field name [misc] +qualifiers_final_annotation.py:170: error: Unexpected keyword argument "x" for "N" [call-arg] +qualifiers_final_annotation.py:170: error: Unexpected keyword argument "y" for "N" [call-arg] +qualifiers_final_annotation.py:171: error: Unexpected keyword argument "a" for "N" [call-arg] +qualifiers_final_annotation.py:172: error: Unexpected keyword argument "x" for "N" [call-arg] +qualifiers_final_annotation.py:172: error: Unexpected keyword argument "y" for "N" [call-arg] +qualifiers_final_annotation.py:180: error: Cannot assign to final name "ID1" [misc] +qualifiers_final_annotation.py:184: error: Cannot assign to final name "x" [misc] qualifiers_final_annotation.py:186: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:197: error: Cannot assign to final name "TEN" [misc] -qualifiers_final_annotation.py:201: error: Cannot assign to final name "PI" [misc] +qualifiers_final_annotation.py:191: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] +qualifiers_final_annotation.py:194: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:205: error: Cannot assign to final name "TEN" [misc] +qualifiers_final_annotation.py:209: error: Cannot assign to final name "PI" [misc] """ conformance_automated = "Fail" errors_diff = """ -Line 180: Expected 1 errors -Line 76: Unexpected errors ['qualifiers_final_annotation.py:76: error: Cannot assign to final attribute "ID6" [misc]'] -Line 113: Unexpected errors ['qualifiers_final_annotation.py:113: error: Cannot assign to final name "__private" [misc]'] -Line 162: Unexpected errors ['qualifiers_final_annotation.py:162: error: Invalid "NamedTuple()" field name [misc]'] -Line 164: Unexpected errors ['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]'] +Line 188: Expected 1 errors +Lines 31, 32: Expected at least one success (tag 'bare3') +Line 31: Unexpected errors ['qualifiers_final_annotation.py:31: error: Expression is of type "Literal[3.14]", not "float" [assert-type]'] +Line 32: Unexpected errors ['qualifiers_final_annotation.py:32: error: Expression is of type "Literal[3.14]", not "float | int" [assert-type]'] +Line 82: Unexpected errors ['qualifiers_final_annotation.py:82: error: Cannot assign to final attribute "ID6" [misc]'] +Line 119: Unexpected errors ['qualifiers_final_annotation.py:119: error: Cannot assign to final name "__private" [misc]'] +Line 168: Unexpected errors ['qualifiers_final_annotation.py:168: error: Invalid "NamedTuple()" field name [misc]'] +Line 170: Unexpected errors ['qualifiers_final_annotation.py:170: error: Unexpected keyword argument "x" for "N" [call-arg]', 'qualifiers_final_annotation.py:170: 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 25f7657a6..bb0c97247 100644 --- a/conformance/results/pycroscope/qualifiers_final_annotation.toml +++ b/conformance/results/pycroscope/qualifiers_final_annotation.toml @@ -1,37 +1,47 @@ -conformance_automated = "Pass" +conformance = "Partial" +notes = """ +Infers invalid `Literal` values from `float` and `range`. +""" +conformance_automated = "Fail" errors_diff = """ +Lines 31, 32: Expected at least one success (tag 'bare3') +Line 31: Unexpected errors ['./qualifiers_final_annotation.py:31:12: Literal[3.14] is not equivalent to float | int'] +Line 32: Unexpected errors ['./qualifiers_final_annotation.py:32:12: Literal[3.14] is not equivalent to float | int'] +Line 35: Unexpected errors ['./qualifiers_final_annotation.py:35:12: Literal[range(0, 3)] is not equivalent to range'] """ output = """ -./qualifiers_final_annotation.py:23:12: Incompatible argument type for x: expected Literal[1] but got int [incompatible_argument] -./qualifiers_final_annotation.py:29:12: Literal[range(0, 1)] is not equivalent to range -./qualifiers_final_annotation.py:33:6: Final annotation without assignment requires an explicit type [invalid_qualifier] -./qualifiers_final_annotation.py:35:6: Invalid type annotation (, ) [invalid_annotation] -./qualifiers_final_annotation.py:51:9: Final annotation without assignment requires an explicit type [invalid_qualifier] -./qualifiers_final_annotation.py:51:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:55:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:71:8: Cannot assign to final name ID5 [incompatible_assignment] -./qualifiers_final_annotation.py:79:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:80:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:82:8: Cannot assign to final name ID7 [incompatible_assignment] -./qualifiers_final_annotation.py:84:8: Cannot assign to final name ID7 [incompatible_assignment] -./qualifiers_final_annotation.py:88:0: Cannot assign to final name RATE [incompatible_assignment] -./qualifiers_final_annotation.py:98:0: Cannot assign to final name DEFAULT_ID [incompatible_assignment] -./qualifiers_final_annotation.py:111:4: Cannot override final attribute BORDER_WIDTH [incompatible_override] -./qualifiers_final_annotation.py:124:12: Final cannot be combined with ClassVar [invalid_qualifier] -./qualifiers_final_annotation.py:125:12: Final cannot be combined with ClassVar [invalid_qualifier] -./qualifiers_final_annotation.py:135:3: Unrecognized annotation typing.Final[] [invalid_annotation] -./qualifiers_final_annotation.py:138:13: Unexpected Final annotation [invalid_qualifier] -./qualifiers_final_annotation.py:148:7: Unexpected Final annotation [invalid_qualifier] -./qualifiers_final_annotation.py:153:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:165:0: In call to pycroscope.signature.N: Missing required argument 'x' [incompatible_call] -./qualifiers_final_annotation.py:166:4: Incompatible argument type for x: expected int but got Literal[''] [incompatible_argument] -./qualifiers_final_annotation.py:166:10: Incompatible argument type for y: expected int but got Literal[''] [incompatible_argument] -./qualifiers_final_annotation.py:172:4: Cannot assign to final name ID1 [incompatible_assignment] -./qualifiers_final_annotation.py:176:4: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:178:9: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:180:8: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:183:29: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:186:8: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:197:0: Cannot assign to final name TEN [incompatible_assignment] -./qualifiers_final_annotation.py:201:0: Cannot assign to final name PI [incompatible_assignment] +./qualifiers_final_annotation.py:26:12: Literal[3] is not equivalent to int +./qualifiers_final_annotation.py:31:12: Literal[3.14] is not equivalent to float | int +./qualifiers_final_annotation.py:32:12: Literal[3.14] is not equivalent to float | int +./qualifiers_final_annotation.py:35:12: Literal[range(0, 3)] is not equivalent to range +./qualifiers_final_annotation.py:39:6: Final annotation without assignment requires an explicit type [invalid_qualifier] +./qualifiers_final_annotation.py:41:6: Invalid type annotation (, ) [invalid_annotation] +./qualifiers_final_annotation.py:57:9: Final annotation without assignment requires an explicit type [invalid_qualifier] +./qualifiers_final_annotation.py:57:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:61:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:77:8: Cannot assign to final name ID5 [incompatible_assignment] +./qualifiers_final_annotation.py:85:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:86:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:88:8: Cannot assign to final name ID7 [incompatible_assignment] +./qualifiers_final_annotation.py:90:8: Cannot assign to final name ID7 [incompatible_assignment] +./qualifiers_final_annotation.py:94:0: Cannot assign to final name RATE [incompatible_assignment] +./qualifiers_final_annotation.py:104:0: Cannot assign to final name DEFAULT_ID [incompatible_assignment] +./qualifiers_final_annotation.py:117:4: Cannot override final attribute BORDER_WIDTH [incompatible_override] +./qualifiers_final_annotation.py:130:12: Final cannot be combined with ClassVar [invalid_qualifier] +./qualifiers_final_annotation.py:131:12: Final cannot be combined with ClassVar [invalid_qualifier] +./qualifiers_final_annotation.py:141:3: Unrecognized annotation typing.Final[] [invalid_annotation] +./qualifiers_final_annotation.py:144:13: Unexpected Final annotation [invalid_qualifier] +./qualifiers_final_annotation.py:154:7: Unexpected Final annotation [invalid_qualifier] +./qualifiers_final_annotation.py:159:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:171:0: In call to pycroscope.signature.N: Missing required argument 'x' [incompatible_call] +./qualifiers_final_annotation.py:172:4: Incompatible argument type for x: expected int but got Literal[''] [incompatible_argument] +./qualifiers_final_annotation.py:172:10: Incompatible argument type for y: expected int but got Literal[''] [incompatible_argument] +./qualifiers_final_annotation.py:180:4: Cannot assign to final name ID1 [incompatible_assignment] +./qualifiers_final_annotation.py:184:4: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:186:9: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:188:8: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:191:29: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:194:8: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:205:0: Cannot assign to final name TEN [incompatible_assignment] +./qualifiers_final_annotation.py:209: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 161e108b5..4a33a6e43 100644 --- a/conformance/results/pyrefly/qualifiers_final_annotation.toml +++ b/conformance/results/pyrefly/qualifiers_final_annotation.toml @@ -2,38 +2,37 @@ conformance_automated = "Pass" errors_diff = """ """ output = """ -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:26: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:33:7-12: Expected a type argument for `Final` [invalid-annotation] -ERROR qualifiers_final_annotation.py:35:7-22: Expected 1 type argument for `Final`, got 2 [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:55:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] -ERROR qualifiers_final_annotation.py:71:9-17: Cannot set field `ID5` [read-only] -ERROR qualifiers_final_annotation.py:79:9-17: Cannot set field `id3` [read-only] -ERROR qualifiers_final_annotation.py:80:9-17: Cannot set field `id4` [read-only] -ERROR qualifiers_final_annotation.py:82:9-17: Cannot set field `ID7` [read-only] -ERROR qualifiers_final_annotation.py:84:9-17: Cannot set field `ID7` [read-only] -ERROR qualifiers_final_annotation.py:88:8-11: Cannot assign to variable `RATE` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:98:1-18: Cannot set field `DEFAULT_ID` [read-only] -ERROR qualifiers_final_annotation.py:111:5-17: `BORDER_WIDTH` is declared as final in parent class `ClassC` [bad-override] -ERROR qualifiers_final_annotation.py:124:5-11: `Final` may not be nested inside `ClassVar` [invalid-annotation] -ERROR qualifiers_final_annotation.py:125:19-27: `ClassVar` may not be nested inside `Final` [invalid-annotation] -ERROR qualifiers_final_annotation.py:135:9-19: `Final` is not allowed in this context [invalid-annotation] -ERROR qualifiers_final_annotation.py:138:14-19: `Final` is only allowed on a class or local variable annotation [invalid-annotation] -ERROR qualifiers_final_annotation.py:138:14-30: `Final` is not allowed in this context [invalid-annotation] -ERROR qualifiers_final_annotation.py:148:5-6: `Final` may not be used for TypedDict members [invalid-annotation] -ERROR qualifiers_final_annotation.py:153:5-6: `Final` may not be used for NamedTuple members [invalid-annotation] -ERROR qualifiers_final_annotation.py:165:2-7: Missing argument `x` in function `N.__new__` [missing-argument] -ERROR qualifiers_final_annotation.py:165:2-7: Missing argument `y` in function `N.__new__` [missing-argument] -ERROR qualifiers_final_annotation.py:165:3-4: Unexpected keyword argument `a` in function `N.__new__` [unexpected-keyword] -ERROR qualifiers_final_annotation.py:166: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:166: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:172:11-12: Cannot assign to variable `ID1` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:176:5-11: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:178:15-16: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:180:14-23: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:183:10-26: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:186:5-11: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:197:1-4: Cannot assign to `TEN` because it is imported as final [bad-assignment] -ERROR qualifiers_final_annotation.py:201:1-3: Cannot assign to `PI` because it is imported as final [bad-assignment] +ERROR qualifiers_final_annotation.py:25:12-31: assert_type(int, Literal[3]) failed [assert-type] +ERROR qualifiers_final_annotation.py:39:7-12: Expected a type argument for `Final` [invalid-annotation] +ERROR qualifiers_final_annotation.py:41:7-22: Expected 1 type argument for `Final`, got 2 [invalid-annotation] +ERROR qualifiers_final_annotation.py:57:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] +ERROR qualifiers_final_annotation.py:61:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] +ERROR qualifiers_final_annotation.py:77:9-17: Cannot set field `ID5` [read-only] +ERROR qualifiers_final_annotation.py:85:9-17: Cannot set field `id3` [read-only] +ERROR qualifiers_final_annotation.py:86:9-17: Cannot set field `id4` [read-only] +ERROR qualifiers_final_annotation.py:88:9-17: Cannot set field `ID7` [read-only] +ERROR qualifiers_final_annotation.py:90:9-17: Cannot set field `ID7` [read-only] +ERROR qualifiers_final_annotation.py:94:8-11: Cannot assign to variable `RATE` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:104:1-18: Cannot set field `DEFAULT_ID` [read-only] +ERROR qualifiers_final_annotation.py:117:5-17: `BORDER_WIDTH` is declared as final in parent class `ClassC` [bad-override] +ERROR qualifiers_final_annotation.py:130:5-11: `Final` may not be nested inside `ClassVar` [invalid-annotation] +ERROR qualifiers_final_annotation.py:131:19-27: `ClassVar` may not be nested inside `Final` [invalid-annotation] +ERROR qualifiers_final_annotation.py:141:9-19: `Final` is not allowed in this context [invalid-annotation] +ERROR qualifiers_final_annotation.py:144:14-19: `Final` is only allowed on a class or local variable annotation [invalid-annotation] +ERROR qualifiers_final_annotation.py:144:14-30: `Final` is not allowed in this context [invalid-annotation] +ERROR qualifiers_final_annotation.py:154:5-6: `Final` may not be used for TypedDict members [invalid-annotation] +ERROR qualifiers_final_annotation.py:159:5-6: `Final` may not be used for NamedTuple members [invalid-annotation] +ERROR qualifiers_final_annotation.py:171:2-7: Missing argument `x` in function `N.__new__` [missing-argument] +ERROR qualifiers_final_annotation.py:171:2-7: Missing argument `y` in function `N.__new__` [missing-argument] +ERROR qualifiers_final_annotation.py:171:3-4: Unexpected keyword argument `a` in function `N.__new__` [unexpected-keyword] +ERROR qualifiers_final_annotation.py:172: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:172: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:180:11-12: Cannot assign to variable `ID1` 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:186:15-16: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:188:14-23: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:191:10-26: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:194:5-11: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:205:1-4: Cannot assign to `TEN` because it is imported as final [bad-assignment] +ERROR qualifiers_final_annotation.py:209: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 2c29b4cb1..176d1a80d 100644 --- a/conformance/results/pyright/qualifiers_final_annotation.toml +++ b/conformance/results/pyright/qualifiers_final_annotation.toml @@ -1,48 +1,50 @@ conformant = "Pass" output = """ -qualifiers_final_annotation.py:33:1 - error: "BAD1" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:35:7 - error: Expected a single type argument after "Final" (reportInvalidTypeForm) -qualifiers_final_annotation.py:51:5 - error: "ID2" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:55:5 - error: "ID3" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:71:14 - error: Cannot assign to attribute "ID5" for class "ClassA*" +qualifiers_final_annotation.py:26:13 - error: "assert_type" mismatch: expected "int" but received "Literal[3]" (reportAssertTypeFailure) +qualifiers_final_annotation.py:32:13 - error: "assert_type" mismatch: expected "float | int" but received "float" (reportAssertTypeFailure) +qualifiers_final_annotation.py:39:1 - error: "BAD1" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:41:7 - error: Expected a single type argument after "Final" (reportInvalidTypeForm) +qualifiers_final_annotation.py:57:5 - error: "ID2" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:61:5 - error: "ID3" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:77: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:79:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:80:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:80:32 - error: Cannot assign to attribute "id4" for class "ClassA*" +qualifiers_final_annotation.py:85:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:86:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:86:32 - error: Cannot assign to attribute "id4" for class "ClassA*"   "Literal[1]" is not assignable to "Final" (reportAttributeAccessIssue) -qualifiers_final_annotation.py:82:14 - error: Cannot assign to attribute "ID7" for class "ClassA*" +qualifiers_final_annotation.py:88: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:14 - error: Cannot assign to attribute "ID7" for class "ClassA*" +qualifiers_final_annotation.py:90: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:88:1 - error: "RATE" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:98:8 - error: Cannot assign to attribute "DEFAULT_ID" for class "type[ClassB]" +qualifiers_final_annotation.py:94:1 - error: "RATE" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:104: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:111:5 - error: "BORDER_WIDTH" cannot be redeclared because parent class "ClassC" declares it as Final (reportGeneralTypeIssues) -qualifiers_final_annotation.py:124:22 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:125:19 - error: "ClassVar" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:135:9 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:138:14 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:148:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:148:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:153:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:153:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:165:1 - error: Arguments missing for parameters "x", "y" (reportCallIssue) -qualifiers_final_annotation.py:165:3 - error: No parameter named "a" (reportCallIssue) -qualifiers_final_annotation.py:166:5 - error: Argument of type "Literal['']" cannot be assigned to parameter "x" of type "int" in function "__new__" +qualifiers_final_annotation.py:117:5 - error: "BORDER_WIDTH" cannot be redeclared because parent class "ClassC" declares it as Final (reportGeneralTypeIssues) +qualifiers_final_annotation.py:130:22 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:131:19 - error: "ClassVar" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:141:9 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:144:14 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:154:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:154:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:159:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:159:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:171:1 - error: Arguments missing for parameters "x", "y" (reportCallIssue) +qualifiers_final_annotation.py:171:3 - error: No parameter named "a" (reportCallIssue) +qualifiers_final_annotation.py:172: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:166:11 - error: Argument of type "Literal['']" cannot be assigned to parameter "y" of type "int" in function "__new__" +qualifiers_final_annotation.py:172: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:172:5 - error: "ID1" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:176:5 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:178:10 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:180:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:183:30 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:186:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:197:1 - error: "TEN" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:201:1 - error: "PI" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:180:5 - error: "ID1" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:184:5 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:186:10 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:188:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:191:30 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:194:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:205:1 - error: "TEN" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:209: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 7915147fd..3aaae821c 100644 --- a/conformance/results/results.html +++ b/conformance/results/results.html @@ -994,16 +994,27 @@

    Python Type System Conformance Test Results

    Partial
      +
    • Infers invalid Literal values from float.
    • Does not treat use of Final name as if it was replaced by the literal in NamedTuple definition.
    • Does not allow conditional assignment of Final instance variable in __init__ method.
    • Does not allow redefinition of private class variable that is marked Final in parent class.
    • Does not report modification of local Final variable via for statement.
    + + Unknown +
      +
    • Infers invalid Literal values from float and range.
    • +
    + Pass Pass - Pass - Pass + + Unknown +
      +
    • Infers float* instead of float.
    • +
    + Pass @@ -1018,10 +1029,10 @@

    Python Type System Conformance Test Results

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

    Python Type System Conformance Test Results

    108.5 / 145 • 74.8% - 138 / 145 • 95.2% + 137 / 145 • 94.5% 140.5 / 145 • 96.9% 135.5 / 145 • 93.4% - 132 / 145 • 91.0% + 131 / 145 • 90.3% 144.5 / 145 • 99.7% diff --git a/conformance/results/ty/qualifiers_final_annotation.toml b/conformance/results/ty/qualifiers_final_annotation.toml index d68dcd14a..5f4ed7c39 100644 --- a/conformance/results/ty/qualifiers_final_annotation.toml +++ b/conformance/results/ty/qualifiers_final_annotation.toml @@ -1,35 +1,45 @@ -conformance_automated = "Pass" +conformance = "Partial" +notes = """ +Infers `float*` instead of `float`. +""" +conformance_automated = "Fail" errors_diff = """ +Lines 31, 32: Expected at least one success (tag 'bare3') +Line 31: Unexpected errors ['qualifiers_final_annotation.py:31:1: error[type-assertion-failure] Type `float*` does not match asserted type `float`'] +Line 32: Unexpected errors ['qualifiers_final_annotation.py:32:1: error[type-assertion-failure] Type `float*` does not match asserted type `float`'] """ output = """ -qualifiers_final_annotation.py:33:1: error[final-without-value] `Final` symbol `BAD1` is not assigned a value -qualifiers_final_annotation.py:35:7: error[invalid-type-form] Type qualifier `typing.Final` expected exactly 1 argument, got 2 -qualifiers_final_annotation.py:51:5: error[final-without-value] `Final` symbol `ID2` is not assigned a value -qualifiers_final_annotation.py:55:5: error[final-without-value] `Final` symbol `ID3` is not assigned a value -qualifiers_final_annotation.py:71:9: error[invalid-assignment] Invalid assignment to final attribute: `ID5` already has a value in the class body -qualifiers_final_annotation.py:79: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:80: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: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:84: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:88:1: error[invalid-assignment] Reassignment of `Final` symbol `RATE` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:98: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:111:5: error[override-of-final-variable] Cannot override final variable `BORDER_WIDTH` from superclass `ClassC` -qualifiers_final_annotation.py:124:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant -qualifiers_final_annotation.py:125:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant -qualifiers_final_annotation.py:135:9: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in type expressions (only in annotation expressions) -qualifiers_final_annotation.py:138:14: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in parameter annotations -qualifiers_final_annotation.py:148:8: error[invalid-type-form] `Final` is not allowed in TypedDict fields -qualifiers_final_annotation.py:153:5: error[invalid-named-tuple] Type qualifier `Final` is not allowed on NamedTuple field `b` -qualifiers_final_annotation.py:165:1: error[missing-argument] No arguments provided for required parameters `x`, `y` -qualifiers_final_annotation.py:165:3: error[unknown-argument] Argument `a` does not match any known parameter -qualifiers_final_annotation.py:166:3: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` -qualifiers_final_annotation.py:166:9: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` -qualifiers_final_annotation.py:172:5: error[invalid-assignment] Reassignment of `Final` symbol `ID1` is not allowed: Reassignment of `Final` symbol -qualifiers_final_annotation.py:176:5: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:178:10: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:180:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:183:30: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:186:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:197:1: error[invalid-assignment] Reassignment of `Final` symbol `TEN` is not allowed: Reassignment of `Final` symbol -qualifiers_final_annotation.py:201:1: error[invalid-assignment] Reassignment of `Final` symbol `PI` is not allowed: Reassignment of `Final` symbol +qualifiers_final_annotation.py:26:1: error[type-assertion-failure] Type `Literal[3]` does not match asserted type `int` +qualifiers_final_annotation.py:31:1: error[type-assertion-failure] Type `float*` does not match asserted type `float` +qualifiers_final_annotation.py:32:1: error[type-assertion-failure] Type `float*` does not match asserted type `float` +qualifiers_final_annotation.py:39:1: error[final-without-value] `Final` symbol `BAD1` is not assigned a value +qualifiers_final_annotation.py:41:7: error[invalid-type-form] Type qualifier `typing.Final` expected exactly 1 argument, got 2 +qualifiers_final_annotation.py:57:5: error[final-without-value] `Final` symbol `ID2` is not assigned a value +qualifiers_final_annotation.py:61:5: error[final-without-value] `Final` symbol `ID3` is not assigned a value +qualifiers_final_annotation.py:77:9: error[invalid-assignment] Invalid assignment to final attribute: `ID5` already has a value in the class body +qualifiers_final_annotation.py:85: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:86: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:88: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:90: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:94:1: error[invalid-assignment] Reassignment of `Final` symbol `RATE` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:104: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:117:5: error[override-of-final-variable] Cannot override final variable `BORDER_WIDTH` from superclass `ClassC` +qualifiers_final_annotation.py:130:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant +qualifiers_final_annotation.py:131:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant +qualifiers_final_annotation.py:141:9: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in type expressions (only in annotation expressions) +qualifiers_final_annotation.py:144:14: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in parameter annotations +qualifiers_final_annotation.py:154:8: error[invalid-type-form] `Final` is not allowed in TypedDict fields +qualifiers_final_annotation.py:159:5: error[invalid-named-tuple] Type qualifier `Final` is not allowed on NamedTuple field `b` +qualifiers_final_annotation.py:171:1: error[missing-argument] No arguments provided for required parameters `x`, `y` +qualifiers_final_annotation.py:171:3: error[unknown-argument] Argument `a` does not match any known parameter +qualifiers_final_annotation.py:172:3: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` +qualifiers_final_annotation.py:172:9: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` +qualifiers_final_annotation.py:180:5: error[invalid-assignment] Reassignment of `Final` symbol `ID1` is not allowed: Reassignment of `Final` symbol +qualifiers_final_annotation.py:184:5: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:186:10: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:188:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:191:30: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:194:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:205:1: error[invalid-assignment] Reassignment of `Final` symbol `TEN` is not allowed: Reassignment of `Final` symbol +qualifiers_final_annotation.py:209: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 6447b0709..0d38cbb02 100644 --- a/conformance/results/zuban/qualifiers_final_annotation.toml +++ b/conformance/results/zuban/qualifiers_final_annotation.toml @@ -2,35 +2,36 @@ conformance_automated = "Pass" errors_diff = """ """ output = """ -qualifiers_final_annotation.py:23: error: Argument 1 to "expects_one" has incompatible type "int"; expected "Literal[1]" [arg-type] -qualifiers_final_annotation.py:33: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:35: error: Final[...] takes at most one type argument [misc] -qualifiers_final_annotation.py:51: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:55: error: Final name must be initialized with a value [misc] -qualifiers_final_annotation.py:71: error: Cannot assign to final attribute "ID5" [misc] -qualifiers_final_annotation.py:79: error: Can only declare a final attribute in class body or __init__ [misc] -qualifiers_final_annotation.py:80: error: Can only declare a final attribute in class body or __init__ [misc] -qualifiers_final_annotation.py:82: error: Cannot assign to final attribute "ID7" [misc] -qualifiers_final_annotation.py:84: error: Cannot assign to final attribute "ID7" [misc] -qualifiers_final_annotation.py:88: error: Cannot assign to final name "RATE" [misc] -qualifiers_final_annotation.py:98: error: Cannot assign to final attribute "DEFAULT_ID" [misc] -qualifiers_final_annotation.py:111: error: Cannot assign to final name "BORDER_WIDTH" [misc] -qualifiers_final_annotation.py:124: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:125: error: Invalid Type: ClassVar nested inside other type [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:138: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:148: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:153: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:165: error: Unexpected keyword argument "a" for "N" [call-arg] -qualifiers_final_annotation.py:166: error: Argument "x" to "N" has incompatible type "str"; expected "int" [arg-type] -qualifiers_final_annotation.py:166: error: Argument "y" to "N" has incompatible type "str"; expected "int" [arg-type] -qualifiers_final_annotation.py:172: error: Cannot assign to final name "ID1" [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:180: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:183: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:183: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] +qualifiers_final_annotation.py:26: error: Expression is of type "Literal[3]", not "int" [misc] +qualifiers_final_annotation.py:32: error: Expression is of type "float", not "float | int" [misc] +qualifiers_final_annotation.py:39: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:41: error: Final[...] takes at most one type argument [misc] +qualifiers_final_annotation.py:57: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:61: error: Final name must be initialized with a value [misc] +qualifiers_final_annotation.py:77: error: Cannot assign to final attribute "ID5" [misc] +qualifiers_final_annotation.py:85: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:86: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:88: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:90: error: Cannot assign to final attribute "ID7" [misc] +qualifiers_final_annotation.py:94: error: Cannot assign to final name "RATE" [misc] +qualifiers_final_annotation.py:104: error: Cannot assign to final attribute "DEFAULT_ID" [misc] +qualifiers_final_annotation.py:117: error: Cannot assign to final name "BORDER_WIDTH" [misc] +qualifiers_final_annotation.py:130: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:131: error: Invalid Type: ClassVar nested inside other type [misc] +qualifiers_final_annotation.py:141: 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:154: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:159: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:171: error: Unexpected keyword argument "a" for "N" [call-arg] +qualifiers_final_annotation.py:172: error: Argument "x" to "N" has incompatible type "str"; expected "int" [arg-type] +qualifiers_final_annotation.py:172: error: Argument "y" to "N" has incompatible type "str"; expected "int" [arg-type] +qualifiers_final_annotation.py:180: error: Cannot assign to final name "ID1" [misc] +qualifiers_final_annotation.py:184: error: Cannot assign to final name "x" [misc] qualifiers_final_annotation.py:186: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:197: error: Cannot assign to final name "TEN" [misc] -qualifiers_final_annotation.py:201: error: Cannot assign to final name "PI" [misc] +qualifiers_final_annotation.py:188: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:191: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:191: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] +qualifiers_final_annotation.py:194: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:205: error: Cannot assign to final name "TEN" [misc] +qualifiers_final_annotation.py:209: error: Cannot assign to final name "PI" [misc] """ diff --git a/conformance/src/main.py b/conformance/src/main.py index 63f82ea72..be589f1a1 100644 --- a/conformance/src/main.py +++ b/conformance/src/main.py @@ -6,9 +6,9 @@ import re import sys import tomllib +from collections.abc import Sequence from pathlib import Path from time import time -from typing import Sequence import tomlkit @@ -65,7 +65,7 @@ def run_tests( def get_expected_errors(test_case: Path) -> tuple[ dict[int, tuple[int, int]], - dict[str, tuple[list[int], bool]], + dict[str, tuple[list[int], bool, bool]], ]: """Return the line numbers where type checkers are expected to produce an error. @@ -92,7 +92,7 @@ def f(): pass # E[final] with open(test_case, "r", encoding="utf-8") as f: lines = f.readlines() output: dict[int, tuple[int, int]] = {} - groups: dict[str, tuple[list[int], bool]] = {} + groups: dict[str, tuple[list[int], bool, bool]] = {} for i, line in enumerate(lines, start=1): line_without_comment, *_ = line.split("#") # Ignore lines with no non-comment content. This allows commenting out test cases. @@ -111,14 +111,22 @@ def f(): pass # E[final] tag = match.group(1) if tag.endswith("+"): allow_multiple = True + require_success = False + tag = tag[:-1] + elif tag.endswith("!"): + allow_multiple = True + require_success = True tag = tag[:-1] else: allow_multiple = False + require_success = False if tag not in groups: - groups[tag] = ([i], allow_multiple) + groups[tag] = ([i], allow_multiple, require_success) else: if groups[tag][1] != allow_multiple: raise ValueError(f"Error group {tag} has inconsistent allow_multiple value in {test_case}") + if groups[tag][2] != require_success: + raise ValueError(f"Error group {tag} has inconsistent require_success value in {test_case}") groups[tag][0].append(i) for group, linenos in groups.items(): if len(linenos) == 1: @@ -152,11 +160,13 @@ def diff_expected_errors( # We don't report an issue if the count differs, because type checkers may produce # multiple error messages for a single line. linenos_used_by_groups: set[int] = set() - for group, (linenos, allow_multiple) in error_groups.items(): + for group, (linenos, allow_multiple, require_success) in error_groups.items(): num_errors = sum(1 for lineno in linenos if lineno in errors) - if num_errors == 0: + if require_success and num_errors == len(linenos): + differences.append(f"Lines {', '.join(map(str, linenos))}: Expected at least one success (tag {group!r})") + elif num_errors == 0 and not require_success: differences.append(f"Lines {', '.join(map(str, linenos))}: Expected error (tag {group!r})") - elif num_errors == 1 or allow_multiple: + elif num_errors == 1 or allow_multiple or require_success: linenos_used_by_groups.update(linenos) else: differences.append(f"Lines {', '.join(map(str, linenos))}: Expected exactly one error (tag {group!r})") diff --git a/conformance/tests/qualifiers_final_annotation.py b/conformance/tests/qualifiers_final_annotation.py index ef18a999e..3fdc3c392 100644 --- a/conformance/tests/qualifiers_final_annotation.py +++ b/conformance/tests/qualifiers_final_annotation.py @@ -8,25 +8,31 @@ def expects_one(x: Literal[1]) -> None: ... -# > The Final qualifier serves as a shorthand for declaring that a variable is effectively Literal. +# > If the value is a literal value which is a valid parameter for +# > Literal[...], type checkers should infer that Literal. -ID1: Final = 1 -assert_type(ID1, Literal[1]) -expects_one(ID1) +bare1_1: Final = 3 +assert_type(bare1_1, Literal[3]) + +bare1_2: Final = True +assert_type(bare1_2, Literal[True]) -ID2: Final = True -assert_type(ID2, Literal[True]) +# > If the value is an expression whose result is a valid parameter for +# > Literal[...], type checkers may infer that Literal or use standard +# > inference rules. -# > Type checkers are not obligated to understand any other uses of Final. +bare2: Final = 1 + 2 +assert_type(bare2, Literal[3]) # E[bare2]: either Literal[3] or int +assert_type(bare2, int) # E[bare2]: either Literal[3] or int -ID3: Final[int] = 1 -expects_one(ID3) # E?: May or may not be accepted by type checkers +# > In all other cases, type checkers should use standard inference rules. -ID4: Final = 2 - 1 -expects_one(ID4) # E?: May or may not be accepted by type checkers +bare3: Final = 3.14 # infer bare3 as Final[float] or Final[float | int] +assert_type(bare3, float) # E[bare3!]: either float or float | int +assert_type(bare3, float | int) # E[bare3!]: either float or float | int -ID5: Final = range(1) -assert_type(ID5, range) # E?: May or may not be inferred by type checkers +bare4: Final = range(3) +assert_type(bare4, range) # > If the right hand side is omitted, there must be an explicit type argument to Final. @@ -85,7 +91,7 @@ def method1(self) -> None: RATE: Final = 3000 -RATE = 300 # E: Cannot redefine Final value +RATE = 300 # E: Cannot redefine Final # > There can’t be separate class-level and instance-level constants # > with the same name. @@ -166,6 +172,8 @@ class NTWithFinal(NamedTuple): N(x="", y="") # E +ID1: Final = 1 + def func2() -> None: global ID1 diff --git a/docs/spec/qualifiers.rst b/docs/spec/qualifiers.rst index 1316353df..f2fecbbbc 100644 --- a/docs/spec/qualifiers.rst +++ b/docs/spec/qualifiers.rst @@ -91,8 +91,6 @@ Syntax ID: Final = 1 - The typechecker should apply the inference mechanisms - :ref:`described below ` to determine the type of ``ID``. Note that unlike for generic classes this is *not* the same as ``Final[Any]``. @@ -186,6 +184,16 @@ with ``Final`` to prevent mutating such values:: z: Final = ('a', 'b') # Also works +Type checkers should treat uses of a final name that was initialized +with a literal as if it was replaced by the literal. For example, the +following should be allowed:: + + from typing import NamedTuple, Final + + X: Final = "x" + Y: Final = "y" + N = NamedTuple("N", [(X, int), (Y, int)]) + ``Final`` cannot be used as a qualifier for a :ref:`TypedDict ` item or a :ref:`NamedTuple ` field. Such usage also generates an error at runtime. @@ -195,34 +203,41 @@ an error at runtime. Inference Rules ^^^^^^^^^^^^^^^ -In the example below, we know that ``foo`` will always be equal to -exactly ``3``. A type checker can use this information to deduce that ``foo`` -is valid to use in any context that expects a ``Literal[3]``:: +Type checkers should use the following inference rules for ``Final`` without a +type annotation: - def expects_three(x: Literal[3]) -> None: ... +* If the value is a literal value which is a valid parameter for + ``Literal[...]``, type checkers should infer that ``Literal``. For example:: - foo: Final = 3 - expects_three(foo) # Type checks, since 'foo' is Final and equal to 3 + bare1: Final = 3 # infer bare1 as Final[Literal[3]] -The ``Final`` qualifier serves as a shorthand for declaring that a variable -is *effectively Literal*. +* If the value is an expression whose result is a valid parameter for + ``Literal[...]``, type checkers may infer that ``Literal`` or use standard + inference rules. For example:: -Type checkers are expected to -support this shortcut. Specifically, given a variable or attribute assignment -of the form ``var: Final = value`` where ``value`` is a valid parameter for -``Literal[...]``, type checkers should understand that ``var`` may be used in -any context that expects a ``Literal[value]``. + bare2: Final = 1 + 2 # may infer bare2 as Final[Literal[3]] or Final[int] -Type checkers are not obligated to understand any other uses of Final. For -example, whether or not the following program type checks is left unspecified:: +* In all other cases, type checkers should use standard inference rules. + For example:: - # Note: The assignment does not exactly match the form 'var: Final = value'. - bar1: Final[int] = 3 - expects_three(bar1) # May or may not be accepted by type checkers + bare3: Final = 3.14 # infer bare3 as Final[float] or Final[float | int] + bare4: Final = range(3) # infer bare4 as Final[range] + +Type checkers should use the following inference rules for ``Final`` with an +explicit type: - # Note: "Literal[1 + 2]" is not a legal type. - bar2: Final = 1 + 2 - expects_three(bar2) # May or may not be accepted by type checkers +* If the right hand side is missing, type checkers should use the explicit + type:: + + typed1: Final[int] # infer typed1 as Final[int] + +* Type checkers are not obligated to understand any other uses of Final. For + example, whether or not the following program type checks is left + unspecified:: + + # Note: The assignment does not exactly match the form 'var: Final = value'. + typed2: Final[int] = 3 + expects_three(typed2) # May or may not be accepted by type checkers Type checkers should infer a final attribute that is initialized in a class body as being a class variable, except in the case of :doc:`dataclasses`, where From 7e6e1c365ee47b85a01560853c5dee2b192d0a6d Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Tue, 1 Sep 2026 12:55:15 +0200 Subject: [PATCH 14/15] Fix key names --- .../pycroscope/qualifiers_final_annotation.toml | 2 +- conformance/results/results.html | 16 ++++++++-------- .../results/ty/qualifiers_final_annotation.toml | 2 +- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/conformance/results/pycroscope/qualifiers_final_annotation.toml b/conformance/results/pycroscope/qualifiers_final_annotation.toml index bb0c97247..8479bd5cd 100644 --- a/conformance/results/pycroscope/qualifiers_final_annotation.toml +++ b/conformance/results/pycroscope/qualifiers_final_annotation.toml @@ -1,4 +1,4 @@ -conformance = "Partial" +conformant = "Partial" notes = """ Infers invalid `Literal` values from `float` and `range`. """ diff --git a/conformance/results/results.html b/conformance/results/results.html index 3aaae821c..195314d5c 100644 --- a/conformance/results/results.html +++ b/conformance/results/results.html @@ -1001,16 +1001,16 @@

    Python Type System Conformance Test Results

  • Does not report modification of local Final variable via for statement.
  • - - Unknown + + Partial
    • Infers invalid Literal values from float and range.
    Pass Pass - - Unknown + + Partial
    • Infers float* instead of float.
    @@ -1029,10 +1029,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.5 / 3 • 83.3% 3 / 3 • 100.0% @@ -2619,10 +2619,10 @@

    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% - 131 / 145 • 90.3% + 131.5 / 145 • 90.7% 144.5 / 145 • 99.7% diff --git a/conformance/results/ty/qualifiers_final_annotation.toml b/conformance/results/ty/qualifiers_final_annotation.toml index 5f4ed7c39..489ec1a5f 100644 --- a/conformance/results/ty/qualifiers_final_annotation.toml +++ b/conformance/results/ty/qualifiers_final_annotation.toml @@ -1,4 +1,4 @@ -conformance = "Partial" +conformant = "Partial" notes = """ Infers `float*` instead of `float`. """ From eb3b49674f79b7bdfa85ac9ad10957766632574d Mon Sep 17 00:00:00 2001 From: Sebastian Rittau Date: Tue, 1 Sep 2026 13:01:57 +0200 Subject: [PATCH 15/15] Remove unnecessary function --- .../mypy/qualifiers_final_annotation.toml | 80 +++++++++---------- .../qualifiers_final_annotation.toml | 74 ++++++++--------- .../pyrefly/qualifiers_final_annotation.toml | 64 +++++++-------- .../pyright/qualifiers_final_annotation.toml | 70 ++++++++-------- .../ty/qualifiers_final_annotation.toml | 70 ++++++++-------- .../zuban/qualifiers_final_annotation.toml | 58 +++++++------- .../tests/qualifiers_final_annotation.py | 2 - 7 files changed, 208 insertions(+), 210 deletions(-) diff --git a/conformance/results/mypy/qualifiers_final_annotation.toml b/conformance/results/mypy/qualifiers_final_annotation.toml index 54c7c263f..52e3e2aa2 100644 --- a/conformance/results/mypy/qualifiers_final_annotation.toml +++ b/conformance/results/mypy/qualifiers_final_annotation.toml @@ -7,51 +7,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:26: error: Expression is of type "Literal[3]", not "int" [assert-type] -qualifiers_final_annotation.py:31: error: Expression is of type "Literal[3.14]", not "float" [assert-type] -qualifiers_final_annotation.py:32: error: Expression is of type "Literal[3.14]", not "float | int" [assert-type] -qualifiers_final_annotation.py:39: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:41: error: Final[...] takes at most one type argument [misc] -qualifiers_final_annotation.py:57: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:61: error: Final name must be initialized with a value [misc] -qualifiers_final_annotation.py:77: error: Cannot assign to final attribute "ID5" [misc] -qualifiers_final_annotation.py:82: error: Cannot assign to final attribute "ID6" [misc] -qualifiers_final_annotation.py:85: error: Can only declare a final attribute in class body or __init__ [misc] -qualifiers_final_annotation.py:86: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:24: error: Expression is of type "Literal[3]", not "int" [assert-type] +qualifiers_final_annotation.py:29: error: Expression is of type "Literal[3.14]", not "float" [assert-type] +qualifiers_final_annotation.py:30: error: Expression is of type "Literal[3.14]", not "float | int" [assert-type] +qualifiers_final_annotation.py:37: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:39: error: Final[...] takes at most one type argument [misc] +qualifiers_final_annotation.py:55: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:59: error: Final name must be initialized with a value [misc] +qualifiers_final_annotation.py:75: error: Cannot assign to final attribute "ID5" [misc] +qualifiers_final_annotation.py:80: error: Cannot assign to final attribute "ID6" [misc] +qualifiers_final_annotation.py:83: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:84: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:86: error: Cannot assign to final attribute "ID7" [misc] qualifiers_final_annotation.py:88: error: Cannot assign to final attribute "ID7" [misc] -qualifiers_final_annotation.py:90: error: Cannot assign to final attribute "ID7" [misc] -qualifiers_final_annotation.py:94: error: Cannot assign to final name "RATE" [misc] -qualifiers_final_annotation.py:104: error: Cannot assign to final attribute "DEFAULT_ID" [misc] -qualifiers_final_annotation.py:117: error: Cannot assign to final name "BORDER_WIDTH" [misc] -qualifiers_final_annotation.py:119: error: Cannot assign to final name "__private" [misc] -qualifiers_final_annotation.py:130: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] -qualifiers_final_annotation.py:131: error: Variable should not be annotated with both ClassVar and Final [misc] -qualifiers_final_annotation.py:141: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] -qualifiers_final_annotation.py:144: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] -qualifiers_final_annotation.py:154: error: Final[...] can't be used inside a TypedDict [valid-type] -qualifiers_final_annotation.py:159: error: Final[...] can't be used inside a NamedTuple [valid-type] -qualifiers_final_annotation.py:168: error: Invalid "NamedTuple()" field name [misc] +qualifiers_final_annotation.py:92: error: Cannot assign to final name "RATE" [misc] +qualifiers_final_annotation.py:102: error: Cannot assign to final attribute "DEFAULT_ID" [misc] +qualifiers_final_annotation.py:115: error: Cannot assign to final name "BORDER_WIDTH" [misc] +qualifiers_final_annotation.py:117: error: Cannot assign to final name "__private" [misc] +qualifiers_final_annotation.py:128: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] +qualifiers_final_annotation.py:129: error: Variable should not be annotated with both ClassVar and Final [misc] +qualifiers_final_annotation.py:139: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] +qualifiers_final_annotation.py:142: error: Final can be only used as an outermost qualifier in a variable annotation [valid-type] +qualifiers_final_annotation.py:152: error: Final[...] can't be used inside a TypedDict [valid-type] +qualifiers_final_annotation.py:157: error: Final[...] can't be used inside a NamedTuple [valid-type] +qualifiers_final_annotation.py:166: error: Invalid "NamedTuple()" field name [misc] +qualifiers_final_annotation.py:168: error: Unexpected keyword argument "x" for "N" [call-arg] +qualifiers_final_annotation.py:168: error: Unexpected keyword argument "y" for "N" [call-arg] +qualifiers_final_annotation.py:169: error: Unexpected keyword argument "a" for "N" [call-arg] qualifiers_final_annotation.py:170: error: Unexpected keyword argument "x" for "N" [call-arg] qualifiers_final_annotation.py:170: error: Unexpected keyword argument "y" for "N" [call-arg] -qualifiers_final_annotation.py:171: error: Unexpected keyword argument "a" for "N" [call-arg] -qualifiers_final_annotation.py:172: error: Unexpected keyword argument "x" for "N" [call-arg] -qualifiers_final_annotation.py:172: error: Unexpected keyword argument "y" for "N" [call-arg] -qualifiers_final_annotation.py:180: error: Cannot assign to final name "ID1" [misc] +qualifiers_final_annotation.py:178: error: Cannot assign to final name "ID1" [misc] +qualifiers_final_annotation.py:182: error: Cannot assign to final name "x" [misc] qualifiers_final_annotation.py:184: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:186: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:191: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] -qualifiers_final_annotation.py:194: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:205: error: Cannot assign to final name "TEN" [misc] -qualifiers_final_annotation.py:209: error: Cannot assign to final name "PI" [misc] +qualifiers_final_annotation.py:189: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] +qualifiers_final_annotation.py:192: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:203: error: Cannot assign to final name "TEN" [misc] +qualifiers_final_annotation.py:207: error: Cannot assign to final name "PI" [misc] """ conformance_automated = "Fail" errors_diff = """ -Line 188: Expected 1 errors -Lines 31, 32: Expected at least one success (tag 'bare3') -Line 31: Unexpected errors ['qualifiers_final_annotation.py:31: error: Expression is of type "Literal[3.14]", not "float" [assert-type]'] -Line 32: Unexpected errors ['qualifiers_final_annotation.py:32: error: Expression is of type "Literal[3.14]", not "float | int" [assert-type]'] -Line 82: Unexpected errors ['qualifiers_final_annotation.py:82: error: Cannot assign to final attribute "ID6" [misc]'] -Line 119: Unexpected errors ['qualifiers_final_annotation.py:119: error: Cannot assign to final name "__private" [misc]'] -Line 168: Unexpected errors ['qualifiers_final_annotation.py:168: error: Invalid "NamedTuple()" field name [misc]'] -Line 170: Unexpected errors ['qualifiers_final_annotation.py:170: error: Unexpected keyword argument "x" for "N" [call-arg]', 'qualifiers_final_annotation.py:170: error: Unexpected keyword argument "y" for "N" [call-arg]'] +Line 186: Expected 1 errors +Lines 29, 30: Expected at least one success (tag 'bare3') +Line 29: Unexpected errors ['qualifiers_final_annotation.py:29: error: Expression is of type "Literal[3.14]", not "float" [assert-type]'] +Line 30: Unexpected errors ['qualifiers_final_annotation.py:30: error: Expression is of type "Literal[3.14]", not "float | int" [assert-type]'] +Line 80: Unexpected errors ['qualifiers_final_annotation.py:80: error: Cannot assign to final attribute "ID6" [misc]'] +Line 117: Unexpected errors ['qualifiers_final_annotation.py:117: error: Cannot assign to final name "__private" [misc]'] +Line 166: Unexpected errors ['qualifiers_final_annotation.py:166: error: Invalid "NamedTuple()" field name [misc]'] +Line 168: Unexpected errors ['qualifiers_final_annotation.py:168: error: Unexpected keyword argument "x" for "N" [call-arg]', 'qualifiers_final_annotation.py:168: 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 8479bd5cd..7be3a9c27 100644 --- a/conformance/results/pycroscope/qualifiers_final_annotation.toml +++ b/conformance/results/pycroscope/qualifiers_final_annotation.toml @@ -4,44 +4,44 @@ Infers invalid `Literal` values from `float` and `range`. """ conformance_automated = "Fail" errors_diff = """ -Lines 31, 32: Expected at least one success (tag 'bare3') -Line 31: Unexpected errors ['./qualifiers_final_annotation.py:31:12: Literal[3.14] is not equivalent to float | int'] -Line 32: Unexpected errors ['./qualifiers_final_annotation.py:32:12: Literal[3.14] is not equivalent to float | int'] -Line 35: Unexpected errors ['./qualifiers_final_annotation.py:35:12: Literal[range(0, 3)] is not equivalent to range'] +Lines 29, 30: Expected at least one success (tag 'bare3') +Line 29: Unexpected errors ['./qualifiers_final_annotation.py:29:12: Literal[3.14] is not equivalent to float | int'] +Line 30: Unexpected errors ['./qualifiers_final_annotation.py:30:12: Literal[3.14] is not equivalent to float | int'] +Line 33: Unexpected errors ['./qualifiers_final_annotation.py:33:12: Literal[range(0, 3)] is not equivalent to range'] """ output = """ -./qualifiers_final_annotation.py:26:12: Literal[3] is not equivalent to int -./qualifiers_final_annotation.py:31:12: Literal[3.14] is not equivalent to float | int -./qualifiers_final_annotation.py:32:12: Literal[3.14] is not equivalent to float | int -./qualifiers_final_annotation.py:35:12: Literal[range(0, 3)] is not equivalent to range -./qualifiers_final_annotation.py:39:6: Final annotation without assignment requires an explicit type [invalid_qualifier] -./qualifiers_final_annotation.py:41:6: Invalid type annotation (, ) [invalid_annotation] -./qualifiers_final_annotation.py:57:9: Final annotation without assignment requires an explicit type [invalid_qualifier] -./qualifiers_final_annotation.py:57:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:61:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:77:8: Cannot assign to final name ID5 [incompatible_assignment] -./qualifiers_final_annotation.py:85:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:86:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:24:12: Literal[3] is not equivalent to int +./qualifiers_final_annotation.py:29:12: Literal[3.14] is not equivalent to float | int +./qualifiers_final_annotation.py:30:12: Literal[3.14] is not equivalent to float | int +./qualifiers_final_annotation.py:33:12: Literal[range(0, 3)] is not equivalent to range +./qualifiers_final_annotation.py:37:6: Final annotation without assignment requires an explicit type [invalid_qualifier] +./qualifiers_final_annotation.py:39:6: Invalid type annotation (, ) [invalid_annotation] +./qualifiers_final_annotation.py:55:9: Final annotation without assignment requires an explicit type [invalid_qualifier] +./qualifiers_final_annotation.py:55:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:59:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:75:8: Cannot assign to final name ID5 [incompatible_assignment] +./qualifiers_final_annotation.py:83:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:84:18: Final instance attributes may be declared only in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:86:8: Cannot assign to final name ID7 [incompatible_assignment] ./qualifiers_final_annotation.py:88:8: Cannot assign to final name ID7 [incompatible_assignment] -./qualifiers_final_annotation.py:90:8: Cannot assign to final name ID7 [incompatible_assignment] -./qualifiers_final_annotation.py:94:0: Cannot assign to final name RATE [incompatible_assignment] -./qualifiers_final_annotation.py:104:0: Cannot assign to final name DEFAULT_ID [incompatible_assignment] -./qualifiers_final_annotation.py:117:4: Cannot override final attribute BORDER_WIDTH [incompatible_override] -./qualifiers_final_annotation.py:130:12: Final cannot be combined with ClassVar [invalid_qualifier] -./qualifiers_final_annotation.py:131:12: Final cannot be combined with ClassVar [invalid_qualifier] -./qualifiers_final_annotation.py:141:3: Unrecognized annotation typing.Final[] [invalid_annotation] -./qualifiers_final_annotation.py:144:13: Unexpected Final annotation [invalid_qualifier] -./qualifiers_final_annotation.py:154:7: Unexpected Final annotation [invalid_qualifier] -./qualifiers_final_annotation.py:159:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] -./qualifiers_final_annotation.py:171:0: In call to pycroscope.signature.N: Missing required argument 'x' [incompatible_call] -./qualifiers_final_annotation.py:172:4: Incompatible argument type for x: expected int but got Literal[''] [incompatible_argument] -./qualifiers_final_annotation.py:172:10: Incompatible argument type for y: expected int but got Literal[''] [incompatible_argument] -./qualifiers_final_annotation.py:180:4: Cannot assign to final name ID1 [incompatible_assignment] -./qualifiers_final_annotation.py:184:4: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:186:9: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:188:8: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:191:29: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:194:8: Cannot assign to final name x [incompatible_assignment] -./qualifiers_final_annotation.py:205:0: Cannot assign to final name TEN [incompatible_assignment] -./qualifiers_final_annotation.py:209:0: Cannot assign to final name PI [incompatible_assignment] +./qualifiers_final_annotation.py:92:0: Cannot assign to final name RATE [incompatible_assignment] +./qualifiers_final_annotation.py:102:0: Cannot assign to final name DEFAULT_ID [incompatible_assignment] +./qualifiers_final_annotation.py:115:4: Cannot override final attribute BORDER_WIDTH [incompatible_override] +./qualifiers_final_annotation.py:128:12: Final cannot be combined with ClassVar [invalid_qualifier] +./qualifiers_final_annotation.py:129:12: Final cannot be combined with ClassVar [invalid_qualifier] +./qualifiers_final_annotation.py:139:3: Unrecognized annotation typing.Final[] [invalid_annotation] +./qualifiers_final_annotation.py:142:13: Unexpected Final annotation [invalid_qualifier] +./qualifiers_final_annotation.py:152:7: Unexpected Final annotation [invalid_qualifier] +./qualifiers_final_annotation.py:157:4: Final class attributes without initializers must be assigned in __init__ [invalid_qualifier] +./qualifiers_final_annotation.py:169:0: In call to pycroscope.signature.N: Missing required argument 'x' [incompatible_call] +./qualifiers_final_annotation.py:170:4: Incompatible argument type for x: expected int but got Literal[''] [incompatible_argument] +./qualifiers_final_annotation.py:170:10: Incompatible argument type for y: expected int but got Literal[''] [incompatible_argument] +./qualifiers_final_annotation.py:178:4: Cannot assign to final name ID1 [incompatible_assignment] +./qualifiers_final_annotation.py:182:4: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:184:9: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:186:8: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:189:29: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:192:8: Cannot assign to final name x [incompatible_assignment] +./qualifiers_final_annotation.py:203:0: Cannot assign to final name TEN [incompatible_assignment] +./qualifiers_final_annotation.py:207: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 4a33a6e43..1d73df29d 100644 --- a/conformance/results/pyrefly/qualifiers_final_annotation.toml +++ b/conformance/results/pyrefly/qualifiers_final_annotation.toml @@ -2,37 +2,37 @@ conformance_automated = "Pass" errors_diff = """ """ output = """ -ERROR qualifiers_final_annotation.py:25:12-31: assert_type(int, Literal[3]) failed [assert-type] -ERROR qualifiers_final_annotation.py:39:7-12: Expected a type argument for `Final` [invalid-annotation] -ERROR qualifiers_final_annotation.py:41:7-22: Expected 1 type argument for `Final`, got 2 [invalid-annotation] -ERROR qualifiers_final_annotation.py:57:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] -ERROR qualifiers_final_annotation.py:61:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] -ERROR qualifiers_final_annotation.py:77:9-17: Cannot set field `ID5` [read-only] -ERROR qualifiers_final_annotation.py:85:9-17: Cannot set field `id3` [read-only] -ERROR qualifiers_final_annotation.py:86:9-17: Cannot set field `id4` [read-only] +ERROR qualifiers_final_annotation.py:23:12-31: assert_type(int, Literal[3]) failed [assert-type] +ERROR qualifiers_final_annotation.py:37:7-12: Expected a type argument for `Final` [invalid-annotation] +ERROR qualifiers_final_annotation.py:39:7-22: Expected 1 type argument for `Final`, got 2 [invalid-annotation] +ERROR qualifiers_final_annotation.py:55:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] +ERROR qualifiers_final_annotation.py:59:5-8: Final attribute declared in class body must be initialized with a value or in `__init__` [invalid-annotation] +ERROR qualifiers_final_annotation.py:75:9-17: Cannot set field `ID5` [read-only] +ERROR qualifiers_final_annotation.py:83:9-17: Cannot set field `id3` [read-only] +ERROR qualifiers_final_annotation.py:84:9-17: Cannot set field `id4` [read-only] +ERROR qualifiers_final_annotation.py:86:9-17: Cannot set field `ID7` [read-only] ERROR qualifiers_final_annotation.py:88:9-17: Cannot set field `ID7` [read-only] -ERROR qualifiers_final_annotation.py:90:9-17: Cannot set field `ID7` [read-only] -ERROR qualifiers_final_annotation.py:94:8-11: Cannot assign to variable `RATE` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:104:1-18: Cannot set field `DEFAULT_ID` [read-only] -ERROR qualifiers_final_annotation.py:117:5-17: `BORDER_WIDTH` is declared as final in parent class `ClassC` [bad-override] -ERROR qualifiers_final_annotation.py:130:5-11: `Final` may not be nested inside `ClassVar` [invalid-annotation] -ERROR qualifiers_final_annotation.py:131:19-27: `ClassVar` may not be nested inside `Final` [invalid-annotation] -ERROR qualifiers_final_annotation.py:141:9-19: `Final` is not allowed in this context [invalid-annotation] -ERROR qualifiers_final_annotation.py:144:14-19: `Final` is only allowed on a class or local variable annotation [invalid-annotation] -ERROR qualifiers_final_annotation.py:144:14-30: `Final` is not allowed in this context [invalid-annotation] -ERROR qualifiers_final_annotation.py:154:5-6: `Final` may not be used for TypedDict members [invalid-annotation] -ERROR qualifiers_final_annotation.py:159:5-6: `Final` may not be used for NamedTuple members [invalid-annotation] -ERROR qualifiers_final_annotation.py:171:2-7: Missing argument `x` in function `N.__new__` [missing-argument] -ERROR qualifiers_final_annotation.py:171:2-7: Missing argument `y` in function `N.__new__` [missing-argument] -ERROR qualifiers_final_annotation.py:171:3-4: Unexpected keyword argument `a` in function `N.__new__` [unexpected-keyword] -ERROR qualifiers_final_annotation.py:172: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:172: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:180:11-12: Cannot assign to variable `ID1` 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:186:15-16: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:188:14-23: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:191:10-26: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:194:5-11: Cannot assign to variable `x` because it is marked final [bad-assignment] -ERROR qualifiers_final_annotation.py:205:1-4: Cannot assign to `TEN` because it is imported as final [bad-assignment] -ERROR qualifiers_final_annotation.py:209:1-3: Cannot assign to `PI` because it is imported as final [bad-assignment] +ERROR qualifiers_final_annotation.py:92:8-11: Cannot assign to variable `RATE` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:102:1-18: Cannot set field `DEFAULT_ID` [read-only] +ERROR qualifiers_final_annotation.py:115:5-17: `BORDER_WIDTH` is declared as final in parent class `ClassC` [bad-override] +ERROR qualifiers_final_annotation.py:128:5-11: `Final` may not be nested inside `ClassVar` [invalid-annotation] +ERROR qualifiers_final_annotation.py:129:19-27: `ClassVar` may not be nested inside `Final` [invalid-annotation] +ERROR qualifiers_final_annotation.py:139:9-19: `Final` is not allowed in this context [invalid-annotation] +ERROR qualifiers_final_annotation.py:142:14-19: `Final` is only allowed on a class or local variable annotation [invalid-annotation] +ERROR qualifiers_final_annotation.py:142:14-30: `Final` is not allowed in this context [invalid-annotation] +ERROR qualifiers_final_annotation.py:152:5-6: `Final` may not be used for TypedDict members [invalid-annotation] +ERROR qualifiers_final_annotation.py:157:5-6: `Final` may not be used for NamedTuple members [invalid-annotation] +ERROR qualifiers_final_annotation.py:169:2-7: Missing argument `x` in function `N.__new__` [missing-argument] +ERROR qualifiers_final_annotation.py:169:2-7: Missing argument `y` in function `N.__new__` [missing-argument] +ERROR qualifiers_final_annotation.py:169:3-4: Unexpected keyword argument `a` in function `N.__new__` [unexpected-keyword] +ERROR qualifiers_final_annotation.py:170: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:170: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:178:11-12: Cannot assign to variable `ID1` 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:184:15-16: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:186:14-23: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:189:10-26: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:192:5-11: Cannot assign to variable `x` because it is marked final [bad-assignment] +ERROR qualifiers_final_annotation.py:203:1-4: Cannot assign to `TEN` because it is imported as final [bad-assignment] +ERROR qualifiers_final_annotation.py:207: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 176d1a80d..7a44da79e 100644 --- a/conformance/results/pyright/qualifiers_final_annotation.toml +++ b/conformance/results/pyright/qualifiers_final_annotation.toml @@ -1,50 +1,50 @@ conformant = "Pass" output = """ -qualifiers_final_annotation.py:26:13 - error: "assert_type" mismatch: expected "int" but received "Literal[3]" (reportAssertTypeFailure) -qualifiers_final_annotation.py:32:13 - error: "assert_type" mismatch: expected "float | int" but received "float" (reportAssertTypeFailure) -qualifiers_final_annotation.py:39:1 - error: "BAD1" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:41:7 - error: Expected a single type argument after "Final" (reportInvalidTypeForm) -qualifiers_final_annotation.py:57:5 - error: "ID2" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:61:5 - error: "ID3" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:77:14 - error: Cannot assign to attribute "ID5" for class "ClassA*" +qualifiers_final_annotation.py:24:13 - error: "assert_type" mismatch: expected "int" but received "Literal[3]" (reportAssertTypeFailure) +qualifiers_final_annotation.py:30:13 - error: "assert_type" mismatch: expected "float | int" but received "float" (reportAssertTypeFailure) +qualifiers_final_annotation.py:37:1 - error: "BAD1" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:39:7 - error: Expected a single type argument after "Final" (reportInvalidTypeForm) +qualifiers_final_annotation.py:55:5 - error: "ID2" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:59:5 - error: "ID3" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:75: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:85:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:86:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:86:32 - error: Cannot assign to attribute "id4" for class "ClassA*" +qualifiers_final_annotation.py:83:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:84:19 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:84:32 - error: Cannot assign to attribute "id4" for class "ClassA*"   "Literal[1]" is not assignable to "Final" (reportAttributeAccessIssue) -qualifiers_final_annotation.py:88:14 - error: Cannot assign to attribute "ID7" for class "ClassA*" +qualifiers_final_annotation.py:86: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:90:14 - error: Cannot assign to attribute "ID7" for class "ClassA*" +qualifiers_final_annotation.py:88: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:94:1 - error: "RATE" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:104:8 - error: Cannot assign to attribute "DEFAULT_ID" for class "type[ClassB]" +qualifiers_final_annotation.py:92:1 - error: "RATE" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:102: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:117:5 - error: "BORDER_WIDTH" cannot be redeclared because parent class "ClassC" declares it as Final (reportGeneralTypeIssues) -qualifiers_final_annotation.py:130:22 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:131:19 - error: "ClassVar" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:141:9 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:144:14 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:154:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:154:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:159:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:159:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) -qualifiers_final_annotation.py:171:1 - error: Arguments missing for parameters "x", "y" (reportCallIssue) -qualifiers_final_annotation.py:171:3 - error: No parameter named "a" (reportCallIssue) -qualifiers_final_annotation.py:172:5 - error: Argument of type "Literal['']" cannot be assigned to parameter "x" of type "int" in function "__new__" +qualifiers_final_annotation.py:115:5 - error: "BORDER_WIDTH" cannot be redeclared because parent class "ClassC" declares it as Final (reportGeneralTypeIssues) +qualifiers_final_annotation.py:128:22 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:129:19 - error: "ClassVar" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:139:9 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:142:14 - 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:157:5 - error: "b" is declared Final, but value is not assigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:157:8 - error: "Final" is not allowed in this context (reportInvalidTypeForm) +qualifiers_final_annotation.py:169:1 - error: Arguments missing for parameters "x", "y" (reportCallIssue) +qualifiers_final_annotation.py:169:3 - error: No parameter named "a" (reportCallIssue) +qualifiers_final_annotation.py:170: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:172:11 - error: Argument of type "Literal['']" cannot be assigned to parameter "y" of type "int" in function "__new__" +qualifiers_final_annotation.py:170: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:180:5 - error: "ID1" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:184:5 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:186:10 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:188:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:191:30 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:194:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:205:1 - error: "TEN" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) -qualifiers_final_annotation.py:209:1 - error: "PI" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:178:5 - error: "ID1" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:182:5 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:184:10 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:186:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:189:30 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:192:9 - error: "x" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:203:1 - error: "TEN" is declared as Final and cannot be reassigned (reportGeneralTypeIssues) +qualifiers_final_annotation.py:207: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 489ec1a5f..83fb99cee 100644 --- a/conformance/results/ty/qualifiers_final_annotation.toml +++ b/conformance/results/ty/qualifiers_final_annotation.toml @@ -4,42 +4,42 @@ Infers `float*` instead of `float`. """ conformance_automated = "Fail" errors_diff = """ -Lines 31, 32: Expected at least one success (tag 'bare3') -Line 31: Unexpected errors ['qualifiers_final_annotation.py:31:1: error[type-assertion-failure] Type `float*` does not match asserted type `float`'] -Line 32: Unexpected errors ['qualifiers_final_annotation.py:32:1: error[type-assertion-failure] Type `float*` does not match asserted type `float`'] +Lines 29, 30: Expected at least one success (tag 'bare3') +Line 29: Unexpected errors ['qualifiers_final_annotation.py:29:1: error[type-assertion-failure] Type `float*` does not match asserted type `float`'] +Line 30: Unexpected errors ['qualifiers_final_annotation.py:30:1: error[type-assertion-failure] Type `float*` does not match asserted type `float`'] """ output = """ -qualifiers_final_annotation.py:26:1: error[type-assertion-failure] Type `Literal[3]` does not match asserted type `int` -qualifiers_final_annotation.py:31:1: error[type-assertion-failure] Type `float*` does not match asserted type `float` -qualifiers_final_annotation.py:32:1: error[type-assertion-failure] Type `float*` does not match asserted type `float` -qualifiers_final_annotation.py:39:1: error[final-without-value] `Final` symbol `BAD1` is not assigned a value -qualifiers_final_annotation.py:41:7: error[invalid-type-form] Type qualifier `typing.Final` expected exactly 1 argument, got 2 -qualifiers_final_annotation.py:57:5: error[final-without-value] `Final` symbol `ID2` is not assigned a value -qualifiers_final_annotation.py:61:5: error[final-without-value] `Final` symbol `ID3` is not assigned a value -qualifiers_final_annotation.py:77:9: error[invalid-assignment] Invalid assignment to final attribute: `ID5` already has a value in the class body -qualifiers_final_annotation.py:85: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:86: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:24:1: error[type-assertion-failure] Type `Literal[3]` does not match asserted type `int` +qualifiers_final_annotation.py:29:1: error[type-assertion-failure] Type `float*` does not match asserted type `float` +qualifiers_final_annotation.py:30:1: error[type-assertion-failure] Type `float*` does not match asserted type `float` +qualifiers_final_annotation.py:37:1: error[final-without-value] `Final` symbol `BAD1` is not assigned a value +qualifiers_final_annotation.py:39:7: error[invalid-type-form] Type qualifier `typing.Final` expected exactly 1 argument, got 2 +qualifiers_final_annotation.py:55:5: error[final-without-value] `Final` symbol `ID2` is not assigned a value +qualifiers_final_annotation.py:59:5: error[final-without-value] `Final` symbol `ID3` is not assigned a value +qualifiers_final_annotation.py:75:9: error[invalid-assignment] Invalid assignment to final attribute: `ID5` already has a value in the class body +qualifiers_final_annotation.py:83: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:84: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:86: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:88: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:90: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:94:1: error[invalid-assignment] Reassignment of `Final` symbol `RATE` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:104: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:117:5: error[override-of-final-variable] Cannot override final variable `BORDER_WIDTH` from superclass `ClassC` -qualifiers_final_annotation.py:130:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant -qualifiers_final_annotation.py:131:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant -qualifiers_final_annotation.py:141:9: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in type expressions (only in annotation expressions) -qualifiers_final_annotation.py:144:14: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in parameter annotations -qualifiers_final_annotation.py:154:8: error[invalid-type-form] `Final` is not allowed in TypedDict fields -qualifiers_final_annotation.py:159:5: error[invalid-named-tuple] Type qualifier `Final` is not allowed on NamedTuple field `b` -qualifiers_final_annotation.py:171:1: error[missing-argument] No arguments provided for required parameters `x`, `y` -qualifiers_final_annotation.py:171:3: error[unknown-argument] Argument `a` does not match any known parameter -qualifiers_final_annotation.py:172:3: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` -qualifiers_final_annotation.py:172:9: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` -qualifiers_final_annotation.py:180:5: error[invalid-assignment] Reassignment of `Final` symbol `ID1` is not allowed: Reassignment of `Final` symbol -qualifiers_final_annotation.py:184:5: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:186:10: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:188:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:191:30: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:194:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here -qualifiers_final_annotation.py:205:1: error[invalid-assignment] Reassignment of `Final` symbol `TEN` is not allowed: Reassignment of `Final` symbol -qualifiers_final_annotation.py:209:1: error[invalid-assignment] Reassignment of `Final` symbol `PI` is not allowed: Reassignment of `Final` symbol +qualifiers_final_annotation.py:92:1: error[invalid-assignment] Reassignment of `Final` symbol `RATE` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:102: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:115:5: error[override-of-final-variable] Cannot override final variable `BORDER_WIDTH` from superclass `ClassC` +qualifiers_final_annotation.py:128:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant +qualifiers_final_annotation.py:129:13: error[redundant-final-classvar] `Combining `ClassVar` and `Final` is redundant +qualifiers_final_annotation.py:139:9: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in type expressions (only in annotation expressions) +qualifiers_final_annotation.py:142:14: error[invalid-type-form] Type qualifier `typing.Final` is not allowed in parameter annotations +qualifiers_final_annotation.py:152:8: error[invalid-type-form] `Final` is not allowed in TypedDict fields +qualifiers_final_annotation.py:157:5: error[invalid-named-tuple] Type qualifier `Final` is not allowed on NamedTuple field `b` +qualifiers_final_annotation.py:169:1: error[missing-argument] No arguments provided for required parameters `x`, `y` +qualifiers_final_annotation.py:169:3: error[unknown-argument] Argument `a` does not match any known parameter +qualifiers_final_annotation.py:170:3: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` +qualifiers_final_annotation.py:170:9: error[invalid-argument-type] Argument is incorrect: Expected `int`, found `Literal[""]` +qualifiers_final_annotation.py:178:5: error[invalid-assignment] Reassignment of `Final` symbol `ID1` is not allowed: Reassignment of `Final` symbol +qualifiers_final_annotation.py:182:5: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:184:10: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:186:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:189:30: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:192:9: error[invalid-assignment] Reassignment of `Final` symbol `x` is not allowed: Symbol later reassigned here +qualifiers_final_annotation.py:203:1: error[invalid-assignment] Reassignment of `Final` symbol `TEN` is not allowed: Reassignment of `Final` symbol +qualifiers_final_annotation.py:207: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 0d38cbb02..a5c6254a1 100644 --- a/conformance/results/zuban/qualifiers_final_annotation.toml +++ b/conformance/results/zuban/qualifiers_final_annotation.toml @@ -2,36 +2,36 @@ conformance_automated = "Pass" errors_diff = """ """ output = """ -qualifiers_final_annotation.py:26: error: Expression is of type "Literal[3]", not "int" [misc] -qualifiers_final_annotation.py:32: error: Expression is of type "float", not "float | int" [misc] -qualifiers_final_annotation.py:39: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:41: error: Final[...] takes at most one type argument [misc] -qualifiers_final_annotation.py:57: error: Type in Final[...] can only be omitted if there is an initializer [misc] -qualifiers_final_annotation.py:61: error: Final name must be initialized with a value [misc] -qualifiers_final_annotation.py:77: error: Cannot assign to final attribute "ID5" [misc] -qualifiers_final_annotation.py:85: error: Can only declare a final attribute in class body or __init__ [misc] -qualifiers_final_annotation.py:86: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:24: error: Expression is of type "Literal[3]", not "int" [misc] +qualifiers_final_annotation.py:30: error: Expression is of type "float", not "float | int" [misc] +qualifiers_final_annotation.py:37: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:39: error: Final[...] takes at most one type argument [misc] +qualifiers_final_annotation.py:55: error: Type in Final[...] can only be omitted if there is an initializer [misc] +qualifiers_final_annotation.py:59: error: Final name must be initialized with a value [misc] +qualifiers_final_annotation.py:75: error: Cannot assign to final attribute "ID5" [misc] +qualifiers_final_annotation.py:83: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:84: error: Can only declare a final attribute in class body or __init__ [misc] +qualifiers_final_annotation.py:86: error: Cannot assign to final attribute "ID7" [misc] qualifiers_final_annotation.py:88: error: Cannot assign to final attribute "ID7" [misc] -qualifiers_final_annotation.py:90: error: Cannot assign to final attribute "ID7" [misc] -qualifiers_final_annotation.py:94: error: Cannot assign to final name "RATE" [misc] -qualifiers_final_annotation.py:104: error: Cannot assign to final attribute "DEFAULT_ID" [misc] -qualifiers_final_annotation.py:117: error: Cannot assign to final name "BORDER_WIDTH" [misc] -qualifiers_final_annotation.py:130: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:131: error: Invalid Type: ClassVar nested inside other type [misc] -qualifiers_final_annotation.py:141: 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:154: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:159: error: Final can be only used as an outermost qualifier in a variable annotation [misc] -qualifiers_final_annotation.py:171: error: Unexpected keyword argument "a" for "N" [call-arg] -qualifiers_final_annotation.py:172: error: Argument "x" to "N" has incompatible type "str"; expected "int" [arg-type] -qualifiers_final_annotation.py:172: error: Argument "y" to "N" has incompatible type "str"; expected "int" [arg-type] -qualifiers_final_annotation.py:180: error: Cannot assign to final name "ID1" [misc] +qualifiers_final_annotation.py:92: error: Cannot assign to final name "RATE" [misc] +qualifiers_final_annotation.py:102: error: Cannot assign to final attribute "DEFAULT_ID" [misc] +qualifiers_final_annotation.py:115: error: Cannot assign to final name "BORDER_WIDTH" [misc] +qualifiers_final_annotation.py:128: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:129: error: Invalid Type: ClassVar nested inside other type [misc] +qualifiers_final_annotation.py:139: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:142: 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:157: error: Final can be only used as an outermost qualifier in a variable annotation [misc] +qualifiers_final_annotation.py:169: error: Unexpected keyword argument "a" for "N" [call-arg] +qualifiers_final_annotation.py:170: error: Argument "x" to "N" has incompatible type "str"; expected "int" [arg-type] +qualifiers_final_annotation.py:170: error: Argument "y" to "N" has incompatible type "str"; expected "int" [arg-type] +qualifiers_final_annotation.py:178: error: Cannot assign to final name "ID1" [misc] +qualifiers_final_annotation.py:182: error: Cannot assign to final name "x" [misc] qualifiers_final_annotation.py:184: error: Cannot assign to final name "x" [misc] qualifiers_final_annotation.py:186: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:188: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:191: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:191: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] -qualifiers_final_annotation.py:194: error: Cannot assign to final name "x" [misc] -qualifiers_final_annotation.py:205: error: Cannot assign to final name "TEN" [misc] -qualifiers_final_annotation.py:209: error: Cannot assign to final name "PI" [misc] +qualifiers_final_annotation.py:189: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:189: error: Incompatible types in assignment (expression has type "TextIOWrapper[_WrappedBuffer]", variable has type "int") [assignment] +qualifiers_final_annotation.py:192: error: Cannot assign to final name "x" [misc] +qualifiers_final_annotation.py:203: error: Cannot assign to final name "TEN" [misc] +qualifiers_final_annotation.py:207: 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 3fdc3c392..b85d644fb 100644 --- a/conformance/tests/qualifiers_final_annotation.py +++ b/conformance/tests/qualifiers_final_annotation.py @@ -6,8 +6,6 @@ # Specification: https://typing.readthedocs.io/en/latest/spec/qualifiers.html#id1 -def expects_one(x: Literal[1]) -> None: ... - # > If the value is a literal value which is a valid parameter for # > Literal[...], type checkers should infer that Literal.