Is there a reason not to go with Pyright and stick with MyPy?
Is there a reason not to go with Pyright and stick with MyPy?
I think the major reasons for mypy is if you are working on a library to be shared with many others (especially open source one) you'd like library to be compatible with mypy as your users are likely to use mypy as it's still most popular type checker. So for open source libraries it makes sense to use both mypy/pyright. For projects that you do not expect main users (company internal one you define standards) it's more fine to pick type checker you prefer. The other main place mypy can be helpful is plugins if you need some behavior outside of type system for a library you work with a lot.
Also pyright is implemented in typescript which does mean you'll need to have a CI dependency on javascript environment that python project's often don't need. Lastly for typical python developer it's a bit easier to make pull request to mypy vs pyright just as they normally have more python knowledge then javascript knowledge. This is pretty minor given most people don't debug there own type checker and pyright's bug list is very short.
In my experience, mypy tends to be more correct and correctly understands more python code.
For example, the following won't type check in pyright (it doesn't infer the type of out):
out = []
for x in bar:
out.append(x \* 2)
return out
Edit: also pyright's vendoring of type stubs is annoying as they take precedence over downloaded type stubs.Edit2: also lack of plugins, makes using things like Pydantic less type safe compared to mypy
Narrowing on object truthiness unsure what you mean. That's intended to be supported. The out example is real difference where mypy does do better. It should at least type check on basic pyright but won't type check on strict without doing out: list[int]. That one comes from mypy has special handling for lists to allow inferring type of elements later, while pyright always infers type of a variable only based on it's declarations and never it's method calls like append.
Which isn’t very pythonic imho
Also I’m pretty sure ‘if res.ok is True’ doesn’t work
If that's not working for you you should open an issue at https://github.com/microsoft/pylance-release.