mirror of
				https://github.com/astral-sh/ruff.git
				synced 2025-10-31 12:05:57 +00:00 
			
		
		
		
	|  905b9d7f51 
		
			Some checks are pending
		
		
	 CI / mkdocs (push) Waiting to run CI / Determine changes (push) Waiting to run CI / cargo fmt (push) Waiting to run CI / cargo clippy (push) Blocked by required conditions CI / cargo test (linux) (push) Blocked by required conditions CI / cargo test (linux, release) (push) Blocked by required conditions CI / cargo test (windows) (push) Blocked by required conditions CI / cargo test (wasm) (push) Blocked by required conditions CI / cargo build (release) (push) Waiting to run CI / formatter instabilities and black similarity (push) Blocked by required conditions CI / cargo build (msrv) (push) Blocked by required conditions CI / cargo fuzz build (push) Blocked by required conditions CI / fuzz parser (push) Blocked by required conditions CI / test scripts (push) Blocked by required conditions CI / test ruff-lsp (push) Blocked by required conditions CI / ecosystem (push) Blocked by required conditions CI / Fuzz for new ty panics (push) Blocked by required conditions CI / cargo shear (push) Blocked by required conditions CI / python package (push) Waiting to run CI / pre-commit (push) Waiting to run CI / check playground (push) Blocked by required conditions CI / benchmarks-instrumented (push) Blocked by required conditions CI / benchmarks-walltime (push) Blocked by required conditions [ty Playground] Release / publish (push) Waiting to run ## Summary
Add more precise type inference for a limited set of `isinstance(…)`
calls, i.e. return `Literal[True]` if we can be sure that this is the
correct result. This improves exhaustiveness checking / reachability
analysis for if-elif-else chains with `isinstance` checks. For example:
```py
def is_number(x: int | str) -> bool:  # no "can implicitly return `None` error here anymore
    if isinstance(x, int):
        return True
    elif isinstance(x, str):
        return False
    # code here is now detected as being unreachable
```
This PR also adds a new test suite for exhaustiveness checking.
## Test Plan
New Markdown tests
### Ecosystem analysis
The removed diagnostics look good. There's [one
case]( | ||
|---|---|---|
| .. | ||
| annotation.md | ||
| builtins.md | ||
| callable_instance.md | ||
| constructor.md | ||
| dunder.md | ||
| dunder_import.md | ||
| function.md | ||
| getattr_static.md | ||
| invalid_syntax.md | ||
| methods.md | ||
| never.md | ||
| overloads.md | ||
| str_startswith.md | ||
| subclass_of.md | ||
| union.md | ||