facebook / facebook/pyrefly

always `True` & always `False` variables are incorrectly treated as if they could be either

Open
#3,537 0 comments 2 reactions 0 assignees View on GitHub
typechecking
Dominant language
Rust
Stars
7k
Forks
516
PR merge metrics
No merged PRs in 30d

Description

### Describe the Bug

```python
from typing import reveal_type, Final, Literal

asdf: Final = False
reveal_type(asdf) # revealed type: Literal[False]

if asdf:
foo = 1
else:
foo = 2

reveal_type(foo) # revealed type: Literal[1, 2] (wrong)

if False:
bar = 1
else:
bar = 2

reveal_type(bar) # revealed type: Literal[2] (correct)

```

Python: 3.14

### Sandbox Link

https://pyrefly.org/sandbox/?project=N4IgZglgNgpgziAXKOBDAdgEwEYHsAeAdAA4CeS4ATrgLYAEALqcROgOZ0Q3G6UN2UYANxiooAfSbEYAGjoAxVmLkAZCAxiUxAHXS7UcTGEQKlUOgF4FYuDF2CRYycxgAKA0YCUdAMQDhorCYjC4mahpaUADa8jYwALq6uhBgdB7GunRZdGC4uJZ0AIy6MFC2iJnZuflWAExJ6A6BztKu1d5%2BTWIwwVIwYeqaYlGFcrXxdK4A7tTsng0p1mX9lVnYqJQFxeil5at065t1DV0Sfa6HHf6OQSHSAxHD45MAxryCLwzz6CAyIGSCMBQUiEBi0KAUMgMAAWuHQAFoRJQ4BA4QVtCAAMyEQoAFgxuiimmoyMSWBgxA%2BqA0wSsGOJvAxdGS3CgEBe6nhqGwcAYWk%2B8JeUAMcHRIAZlAJ6C4xDZHIY8JlvH4dPFlBJTJZsvZ6mB8MwMEgO0wXIYfIg2AArhoxRKpTQIHAUex4XBcJbKC8YLb1YyQLp0HD4TB8NDUJbeRARPCaNSXtCfRr-ehAwrBABHS0QQQmgDWMFIXJeXqdib9ulw0gRlvQxFQL1zrA4qrtIGZjR6NcwGAVLwMKuZaqT7ZzXZ7grhmHUqPQZclbd0NZ2JbQlELb24G0daJbvvn7aXMBXG0LfQn6CRKJ3g9bB479bD2Fgc816Brggf3NgMbj0MFBm9Xdh0XDs3SgIQvxgfUu00LkoHMIC-TvPoTSVPgXwXN831sVC2EDQQMPbCDKAgDAvRjR1YwYeNCOSC8xAgE0DTeLQwSOG89wxEAAF8-nrBgoxgRRYAoNAsDwIgyB4oA

### (Only applicable for extension issues) IDE Information

_No response_

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.