3 ms·
Pyright doesn't support narrowing based on object truthiness and some other python isms. In my experience, mypy tends to be more correct and correctly understa
by emptysea 4y ago
Pyright doesn't support narrowing based on object truthiness and some other python isms.
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
- Mehdi2277 4y agoPyright's vendoring of stubs or pylance's? Pylance vendors extra stubs (microsoft type stubs), but pyright itself does not. Pyright does vendor typeshed, but all type checkers including mypy vendor typeshed. 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.
- emptysea 4y agoIf you have a tagged union type with Boolean literals as the tags, like in the slack api, then you can’t say ‘if not res.ok’ to narrow the type, you have to say ‘if res.ok == True’ Which isn’t very pythonic imho Also I’m pretty sure ‘if res.ok is True’ doesn’t work
- geekraver 4y agoThe precedence should be: "typing" folder in workspace root -> project "extra paths" -> python search paths -> pylance bundled. If that's not working for you you should open an issue at https://github.com/microsoft/pylance-release https://github.com/microsoft/pylance-release.