Alex Waygood 
								
							 
						 
						
							
							
								
								
							
							
							
								
							
							
								27b03a9d7b 
								
							 
						 
						
							
							
								
								[ty] Remove special casing for string-literal-in-tuple __contains__ ( #19642 )  
							
							
							
						 
						
							2025-07-31 11:28:03 +01:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Alex Waygood 
								
							 
						 
						
							
							
								
								
							
							
							
								
							
							
								7b4103bcb6 
								
							 
						 
						
							
							
								
								[ty] Remove special casing for tuple addition ( #19636 )  
							
							
	
		
			
	 
	
	
		
	
	
		
			
				
	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 / 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 / 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 / mkdocs (push) Waiting to run 
				
			 
		
			
				
	CI / formatter instabilities and black similarity (push) Blocked by required conditions 
				
			 
		
			
				
	CI / test ruff-lsp (push) Blocked by required conditions 
				
			 
		
			
				
	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 
				
			 
		
		
	 
 
	 
							
						 
						
							2025-07-30 16:25:42 +00:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Douglas Creager 
								
							 
						 
						
							
							
								
								
							
							
							
								
							
							
								ea812d0813 
								
							 
						 
						
							
							
								
								[ty] Homogeneous and mixed tuples ( #18600 )  
							
							... 
							
							
	
		
			
	 
	
	
		
	
	
		
			
				
	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 / 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 / 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 / mkdocs (push) Waiting to run 
				
			 
		
			
				
	CI / formatter instabilities and black similarity (push) Blocked by required conditions 
				
			 
		
			
				
	CI / test ruff-lsp (push) Blocked by required conditions 
				
			 
		
			
				
	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 
				
			 
		
		
	 
 
	 
							
							We already had support for homogeneous tuples (`tuple[int, ...]`). This
PR extends this to also support mixed tuples (`tuple[str, str,
*tuple[int, ...], str str]`).
A mixed tuple consists of a fixed-length (possibly empty) prefix and
suffix, and a variable-length portion in the middle. Every element of
the variable-length portion must be of the same type. A homogeneous
tuple is then just a mixed tuple with an empty prefix and suffix.
The new data representation uses different Rust types for a fixed-length
(aka heterogeneous) tuple. Another option would have been to use the
`VariableLengthTuple` representation for all tuples, and to wrap the
"variable + suffix" portion in an `Option`. I don't think that would
simplify the method implementations much, though, since we would still
have a 2×2 case analysis for most of them.
One wrinkle is that the definition of the `tuple` class in the typeshed
has a single typevar, and canonically represents a homogeneous tuple.
When getting the class of a tuple instance, that means that we have to
summarize our detailed mixed tuple type information into its
"homogeneous supertype". (We were already doing this for heterogeneous
types.)
A similar thing happens when concatenating two mixed tuples: the
variable-length portion and suffix of the LHS, and the prefix and
variable-length portion of the RHS, all get unioned into the
variable-length portion of the result. The LHS prefix and RHS suffix
carry through unchanged.
---------
Co-authored-by: Alex Waygood <Alex.Waygood@Gmail.com> 
							
						 
						
							2025-06-20 18:23:54 -04:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Alperen Keleş 
								
							 
						 
						
							
							
								
								
							
							
							
								
							
							
								932f941d15 
								
							 
						 
						
							
							
								
								[ty] fix binary expression inference between boolean literals and bool instances ( #18663 )  
							
							
							
						 
						
							2025-06-17 18:02:40 +01:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Andrew Gallant 
								
							 
						 
						
							
							
								
								
							
							
							
								
							
							
								fc549bda94 
								
							 
						 
						
							
							
								
								[ty] Minor tweaks to "list all members" docs and tests ( #18388 )  
							
							... 
							
							
	
		
			
	 
	
	
		
	
	
		
			
				
	CI / cargo clippy (push) Blocked by required conditions 
				
			 
		
			
				
	CI / cargo build (msrv) (push) Blocked by required conditions 
				
			 
		
			
				
	CI / Determine changes (push) Waiting to run 
				
			 
		
			
				
	CI / cargo fmt (push) Waiting to run 
				
			 
		
			
				
	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 / 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 / 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 / mkdocs (push) Waiting to run 
				
			 
		
			
				
	CI / formatter instabilities and black similarity (push) Blocked by required conditions 
				
			 
		
			
				
	CI / test ruff-lsp (push) Blocked by required conditions 
				
			 
		
			
				
	CI / check playground (push) Blocked by required conditions 
				
			 
		
			
				
	CI / benchmarks (push) Blocked by required conditions 
				
			 
		
			
				
	[ty Playground] Release / publish (push) Waiting to run 
				
			 
		
		
	 
 
	 
							
							Ref https://github.com/astral-sh/ruff/pull/18251#pullrequestreview-2881810681  
							
						 
						
							2025-05-30 13:36:57 -04:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									David Peter 
								
							 
						 
						
							
							
								
								
							
							
							
								
							
							
								e730f27f80 
								
							 
						 
						
							
							
								
								[ty] List available members for a given type ( #18251 )  
							
							... 
							
							
							
							This PR adds initial support for listing all attributes of
an object. It is exposed through a new `all_members`
routine in `ty_extensions`, which is in turn used to test
the functionality.
The purpose of listing all members is for code
completion. That is, given a `object.<CURSOR>`, we
would like to list all available attributes on
`object`. 
							
						 
						
							2025-05-30 11:24:20 -04:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Brandt Bucher 
								
							 
						 
						
							
							
								
								
							
							
							
								
							
							
								91b7a570c2 
								
							 
						 
						
							
							
								
								[ty] Implement Python's floor division semantics for Literal ints ( #18249 )  
							
							... 
							
							
	
		
			
	 
	
	
		
	
	
		
			
				
	CI / cargo clippy (push) Blocked by required conditions 
				
			 
		
			
				
	CI / cargo build (msrv) (push) Blocked by required conditions 
				
			 
		
			
				
	CI / cargo fuzz build (push) Blocked by required conditions 
				
			 
		
			
				
	CI / Determine changes (push) Waiting to run 
				
			 
		
			
				
	CI / cargo fmt (push) Waiting to run 
				
			 
		
			
				
	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 / fuzz parser (push) Blocked by required conditions 
				
			 
		
			
				
	CI / test scripts (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 / mkdocs (push) Waiting to run 
				
			 
		
			
				
	CI / formatter instabilities and black similarity (push) Blocked by required conditions 
				
			 
		
			
				
	CI / test ruff-lsp (push) Blocked by required conditions 
				
			 
		
			
				
	CI / check playground (push) Blocked by required conditions 
				
			 
		
			
				
	CI / benchmarks (push) Blocked by required conditions 
				
			 
		
			
				
	[ty Playground] Release / publish (push) Waiting to run 
				
			 
		
		
	 
 
	 
							
							Division works differently in Python than in Rust. If the result is
negative and there is a remainder, the division rounds down (instead of
towards zero). The remainder needs to be adjusted to compensate so that
`(lhs // rhs) * rhs + (lhs % rhs) == lhs`.
Fixes  astral-sh/ty#481 . 
							
						 
						
							2025-05-22 10:42:29 -04:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Douglas Creager 
								
							 
						 
						
							
							
								
								
							
							
							
								
							
							
								0fb94c052e 
								
							 
						 
						
							
							
								
								[ty] Infer parameter specializations of generic aliases ( #18021 )  
							
							... 
							
							
	
		
			
	 
	
	
		
	
	
		
			
				
	CI / cargo build (msrv) (push) Blocked by required conditions 
				
			 
		
			
				
	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 / 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 / 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 / mkdocs (push) Waiting to run 
				
			 
		
			
				
	CI / formatter instabilities and black similarity (push) Blocked by required conditions 
				
			 
		
			
				
	CI / test ruff-lsp (push) Blocked by required conditions 
				
			 
		
			
				
	CI / check playground (push) Blocked by required conditions 
				
			 
		
			
				
	CI / benchmarks (push) Blocked by required conditions 
				
			 
		
			
				
	[ty Playground] Release / publish (push) Waiting to run 
				
			 
		
		
	 
 
	 
							
							This updates our function specialization inference to infer type
mappings from parameters that are generic aliases, e.g.:
```py
def f[T](x: list[T]) -> T: ...
reveal_type(f(["a", "b"]))  # revealed: str
```
Though note that we're still inferring the type of list literals as
`list[Unknown]`, so for now we actually need something like the
following in our tests:
```py
def _(x: list[str]):
    reveal_type(f(x))  # revealed: str
``` 
							
						 
						
							2025-05-12 22:12:44 -04:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Alex Waygood 
								
							 
						 
						
							
							
								
								
							
							
							
								
							
							
								55df9271ba 
								
							 
						 
						
							
							
								
								[ty] Understand homogeneous tuple annotations ( #17998 )  
							
							
							
						 
						
							2025-05-12 22:02:25 -04:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Alex Waygood 
								
							 
						 
						
							
							
								
								
							
							
							
								
							
							
								67cd94ed64 
								
							 
						 
						
							
							
								
								[ty] Add missing bitwise-operator branches for boolean and integer arithmetic ( #17949 )  
							
							
							
						 
						
							2025-05-08 14:10:35 +01:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Charlie Marsh 
								
							 
						 
						
							
							
								
								
							
							
							
								
							
							
								a2e9a7732a 
								
							 
						 
						
							
							
								
								Update class literal display to use <class 'Foo'> style ( #17889 )  
							
							... 
							
							
							
							## Summary
Closes https://github.com/astral-sh/ruff/issues/17238 . 
							
						 
						
							2025-05-06 20:11:25 -04:00 
							
								 
							
							
								 
							
						 
					 
				
					
						
							
								
								
									Micha Reiser 
								
							 
						 
						
							
							
								
								
							
							
							
								
							
							
								b51c4f82ea 
								
							 
						 
						
							
							
								
								Rename Red Knot ( #17820 )  
							
							
							
						 
						
							2025-05-03 19:49:15 +02:00