diff --git a/mypy/fastparse.py b/mypy/fastparse.py index e85b8fffaf9e..d9e2d5df8f4c 100644 --- a/mypy/fastparse.py +++ b/mypy/fastparse.py @@ -1958,7 +1958,10 @@ def visit_Call(self, e: Call) -> Type: if not isinstance(self.parent(), ast3.List): note = None if constructor: - note = "Suggestion: use {0}[...] instead of {0}(...)".format(constructor) + if e.keywords: + note = "Cannot use a function call in a type annotation" + else: + note = "Suggestion: use {0}[...] instead of {0}(...)".format(constructor) return self.invalid_type(e, note=note) if not constructor: self.fail(message_registry.ARG_CONSTRUCTOR_NAME_EXPECTED, e.lineno, e.col_offset) diff --git a/test-data/unit/check-fastparse.test b/test-data/unit/check-fastparse.test index 7ee5a9c43216..79318d24c870 100644 --- a/test-data/unit/check-fastparse.test +++ b/test-data/unit/check-fastparse.test @@ -207,6 +207,17 @@ def f(a: Foo(int)) -> int: main:7: error: Invalid type comment or annotation main:7: note: Suggestion: use Foo[...] instead of Foo(...) +[case testFasterParseCallWithKeywordArgs_no_native_parse] + +def Foo(sort: bool) -> type: + return int + +def f(a: Foo(sort=True)) -> int: + pass +[out] +main:5: error: Invalid type comment or annotation +main:5: note: Cannot use a function call in a type annotation + [case testFastParseMatMul] from typing import Any