You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
162 lines
6.5 KiB
162 lines
6.5 KiB
From 13ae58ffe8bedb7da9f4c657297f0d61e681d671 Mon Sep 17 00:00:00 2001
|
|
From: Shantanu <12621235+hauntsaninja@users.noreply.github.com>
|
|
Date: Sun, 30 Aug 2020 18:11:57 -0700
|
|
Subject: [PATCH] mypy: get CI green for py39 (#9376)
|
|
|
|
Due to Python 3.9's new parser, this has a different (and better) error
|
|
message on Python 3.9.
|
|
|
|
This is effectively a test of typed_ast / ast, so I don't think it
|
|
matters too much. I'm happy to alternatively just get rid of the test
|
|
altogether, or if people feel strongly, come up with a way to run the
|
|
test when run with older Pythons.
|
|
|
|
Co-authored-by: hauntsaninja <>
|
|
---
|
|
.travis.yml | 3 ---
|
|
mypy/test/testcheck.py | 2 ++
|
|
test-data/unit/check-kwargs.test | 7 -------
|
|
test-data/unit/check-python39.test | 9 +++++++++
|
|
4 files changed, 11 insertions(+), 10 deletions(-)
|
|
create mode 100644 test-data/unit/check-python39.test
|
|
|
|
diff --git a/mypy/test/testcheck.py b/mypy/test/testcheck.py
|
|
index 49a85861b6..39a35c7280 100644
|
|
--- a/mypy/test/testcheck.py
|
|
+++ b/mypy/test/testcheck.py
|
|
@@ -94,6 +94,8 @@
|
|
# Tests that use Python 3.8-only AST features (like expression-scoped ignores):
|
|
if sys.version_info >= (3, 8):
|
|
typecheck_files.append('check-python38.test')
|
|
+if sys.version_info >= (3, 9):
|
|
+ typecheck_files.append('check-python39.test')
|
|
|
|
# Special tests for platforms with case-insensitive filesystems.
|
|
if sys.platform in ('darwin', 'win32'):
|
|
diff --git a/test-data/unit/check-kwargs.test b/test-data/unit/check-kwargs.test
|
|
index 1dd450caae..a587be3e06 100644
|
|
--- a/test-data/unit/check-kwargs.test
|
|
+++ b/test-data/unit/check-kwargs.test
|
|
@@ -53,13 +53,6 @@ f(b=[], a=A())
|
|
class A: pass
|
|
[builtins fixtures/list.pyi]
|
|
|
|
-[case testGivingSameKeywordArgumentTwice]
|
|
-import typing
|
|
-def f(a: 'A', b: 'B') -> None: pass
|
|
-f(a=A(), b=B(), a=A()) # E: keyword argument repeated
|
|
-class A: pass
|
|
-class B: pass
|
|
-
|
|
[case testGivingArgumentAsPositionalAndKeywordArg]
|
|
import typing
|
|
def f(a: 'A', b: 'B' = None) -> None: pass
|
|
diff --git a/test-data/unit/check-python39.test b/test-data/unit/check-python39.test
|
|
new file mode 100644
|
|
index 0000000000..0e9ec683ae
|
|
--- /dev/null
|
|
+++ b/test-data/unit/check-python39.test
|
|
@@ -0,0 +1,9 @@
|
|
+[case testGivingSameKeywordArgumentTwice]
|
|
+# This test was originally in check-kwargs.test
|
|
+# Python 3.9's new parser started producing a different error message here. Since this isn't the
|
|
+# most important test, to deal with this we'll only run this test with Python 3.9 and later.
|
|
+import typing
|
|
+def f(a: 'A', b: 'B') -> None: pass
|
|
+f(a=A(), b=B(), a=A()) # E: "f" gets multiple values for keyword argument "a"
|
|
+class A: pass
|
|
+class B: pass
|
|
From ab1bd98cc8a6415398121a47c687ede6f4cca4fd Mon Sep 17 00:00:00 2001
|
|
From: Shantanu <12621235+hauntsaninja@users.noreply.github.com>
|
|
Date: Thu, 8 Oct 2020 11:18:18 -0700
|
|
Subject: [PATCH] py39: fix mypyc complaint (#9552)
|
|
|
|
I was trying to build wheels for Python 3.9 as part of #9536, but ran
|
|
into this issue. You'll notice a couple hundred lines up msullivan
|
|
points out that mypyc can't handle conditional method definition, so
|
|
that's not an option here.
|
|
|
|
Co-authored-by: hauntsaninja <>
|
|
---
|
|
mypy/fastparse.py | 6 ++++--
|
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
|
|
|
diff --git a/mypy/fastparse.py b/mypy/fastparse.py
|
|
index 2dafbf4e14..0b72214100 100644
|
|
--- a/mypy/fastparse.py
|
|
+++ b/mypy/fastparse.py
|
|
@@ -1257,11 +1257,13 @@ def visit_Slice(self, n: ast3.Slice) -> SliceExpr:
|
|
|
|
# ExtSlice(slice* dims)
|
|
def visit_ExtSlice(self, n: ast3.ExtSlice) -> TupleExpr:
|
|
- return TupleExpr(self.translate_expr_list(n.dims))
|
|
+ # cast for mypyc's benefit on Python 3.9
|
|
+ return TupleExpr(self.translate_expr_list(cast(Any, n.dims)))
|
|
|
|
# Index(expr value)
|
|
def visit_Index(self, n: Index) -> Node:
|
|
- return self.visit(n.value)
|
|
+ # cast for mypyc's benefit on Python 3.9
|
|
+ return self.visit(cast(Any, n.value))
|
|
|
|
|
|
class TypeConverter:
|
|
From ffed88fb95fcbfdd1363f0f719bd3e13f8fe20e9 Mon Sep 17 00:00:00 2001
|
|
From: Shantanu <12621235+hauntsaninja@users.noreply.github.com>
|
|
Date: Thu, 8 Oct 2020 15:00:42 -0700
|
|
Subject: [PATCH] py39: fix mypyc complaints part 2 (#9562)
|
|
|
|
Necessary because I previously didn't actually fix mypyc's complaint +
|
|
mypyc has more complaints.
|
|
The sys.version_info aliasing works around us hitting
|
|
https://github.com/python/mypy/blob/08f207ef4a09f56d710d63775771ae921c41d4bc/mypyc/irbuild/expression.py#L44
|
|
|
|
Co-authored-by: hauntsaninja <>
|
|
---
|
|
mypy/fastparse.py | 12 ++++++++----
|
|
1 file changed, 8 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/mypy/fastparse.py b/mypy/fastparse.py
|
|
index 0b72214100..3319cd6489 100644
|
|
--- a/mypy/fastparse.py
|
|
+++ b/mypy/fastparse.py
|
|
@@ -169,7 +169,9 @@ def parse(source: Union[str, bytes],
|
|
tree.path = fnam
|
|
tree.is_stub = is_stub_file
|
|
except SyntaxError as e:
|
|
- if sys.version_info < (3, 9) and e.filename == "<fstring>":
|
|
+ # alias to please mypyc
|
|
+ is_py38_or_earlier = sys.version_info < (3, 9)
|
|
+ if is_py38_or_earlier and e.filename == "<fstring>":
|
|
# In Python 3.8 and earlier, syntax errors in f-strings have lineno relative to the
|
|
# start of the f-string. This would be misleading, as mypy will report the error as the
|
|
# lineno within the file.
|
|
@@ -1210,9 +1212,11 @@ def visit_Attribute(self, n: Attribute) -> Union[MemberExpr, SuperExpr]:
|
|
def visit_Subscript(self, n: ast3.Subscript) -> IndexExpr:
|
|
e = IndexExpr(self.visit(n.value), self.visit(n.slice))
|
|
self.set_line(e, n)
|
|
+ # alias to please mypyc
|
|
+ is_py38_or_earlier = sys.version_info < (3, 9)
|
|
if (
|
|
isinstance(n.slice, ast3.Slice) or
|
|
- (sys.version_info < (3, 9) and isinstance(n.slice, ast3.ExtSlice))
|
|
+ (is_py38_or_earlier and isinstance(n.slice, ast3.ExtSlice))
|
|
):
|
|
# Before Python 3.9, Slice has no line/column in the raw ast. To avoid incompatibility
|
|
# visit_Slice doesn't set_line, even in Python 3.9 on.
|
|
@@ -1258,12 +1262,12 @@ def visit_Slice(self, n: ast3.Slice) -> SliceExpr:
|
|
# ExtSlice(slice* dims)
|
|
def visit_ExtSlice(self, n: ast3.ExtSlice) -> TupleExpr:
|
|
# cast for mypyc's benefit on Python 3.9
|
|
- return TupleExpr(self.translate_expr_list(cast(Any, n.dims)))
|
|
+ return TupleExpr(self.translate_expr_list(cast(Any, n).dims))
|
|
|
|
# Index(expr value)
|
|
def visit_Index(self, n: Index) -> Node:
|
|
# cast for mypyc's benefit on Python 3.9
|
|
- return self.visit(cast(Any, n.value))
|
|
+ return self.visit(cast(Any, n).value)
|
|
|
|
|
|
class TypeConverter:
|