Skip to content

os.name gate not recognized statically #2511

@grievejia

Description

@grievejia

Describe the Bug

While pyrefly correctly handles sys.platform guards (recognizing them as platform narrowing), it does not recognize os.name as a platform guard. This causes false positives for Windows-only attributes that are conditionally accessed behind os.name == "nt" checks.

Minimal repro:

import os
import subprocess
if os.name == "nt":
    flags = subprocess.CREATE_NO_WINDOW  # FP: No attribute `CREATE_NO_WINDOW`
else:
    flags = 0

Sandbox Link

https://pyrefly.org/sandbox/?project=N4IgZglgNgpgziAXKOBDAdgEwEYHsAeAdAA4CeSIEAtsbgE4AuABLnADrrW2NNwCu2YnVwBjeO05gWcQulRUYTALxKmbEOgbrEHJnqZgoqAOZxlvAUNHjCAYQBKAUQCCAFUcB9AHIB5DwHUASS8AER9-PQBiJgAxAAVEJi9cJlQGBjoIbD4GRQADBxd3bz8g0PC8jhgoOBgddH0DI1NzAAYQABoQHOgZMgpogFUGaAgGUgM%2BdBER3HQJDkwYKTB6KjSPdD4qbBg6AAp8RIhNAEomAFoAPl4M%2Bsa6GAY%2BOgawdS9t3bpE4HwAX3UHE6IDIj0MpEIDFwVCgAyYcVI4KgEzQWDw%2BCYIjmkGMLzSEDmhA40QAyjBFAALdLEOCIAD09LByxRhHoxnpMHQ9Mwojg9Ox6Fx%2BNm3IM9FSADdUNBUNhYFicRA8XQCXMWMRRTIOGQGJS5hdJXs4ISGqp1ABmQgARgATED0CB-l1UDMIEaYtAYBQ0TgCCRyP8gA

(Only applicable for extension issues) IDE Information

No response

Metadata

Metadata

Assignees

Labels

typecheckingusabilityUsability & readiness issues identified with running Pyrefly on top OSS projects

Type

No fields configured for Bug.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions