Jake Zimmerman
Jake Zimmerman
#### Input [→ View on sorbet.run](https://sorbet.run/#%23%20typed%3A%20true%0A%0A%23%20Type%20parameters%20don't%20have%20lower%2Bupper%20bounds%20like%0A%23%20type%20members%20do%2C%20which%20means%20that%20they%20don't%20behave%0A%23%20correctly%20in%20certain%20subtyping%20cases.%0A%0Aclass%20A%0A%20%20extend%20T%3A%3ASig%2C%20T%3A%3AGeneric%0A%20%20abstract!%0A%0A%20%20X%20%3D%20type_member%20%7B%20%7Bupper%3A%20T.noreturn%7D%20%7D%0A%0A%20%20sig%20%7B%20returns%28X%29%20%7D%0A%20%20def%20raises%0A%20%20%20%20raise%0A%20%20end%0A%0A%20%20sig%20%7B%20returns%28T.noreturn%29%20%7D%0A%20%20def%20also_raises%0A%20%20%20%20raises%0A%20%20end%0A%0A%20%20sig%20%7B%20type_parameters%28%3AU%29.returns%28T.type_parameter%28%3AU%29%29%20%7D%0A%20%20def%20raises_too%0A%20%20%20%20raises%0A%20%20end%0Aend) ```ruby # typed: true # Type parameters don't have lower+upper bounds like # type members do, which means that they don't behave # correctly...
#### Input [→ View on sorbet.run](https://sorbet.run/#%23%20typed%3A%20true%0Aextend%20T%3A%3ASig%0A%0Asig%20%7B%0A%20%20type_parameters%28%3AU%29%0A%20%20%20%20.params%28fn%3A%20T.type_parameter%28%3AU%29%29%0A%20%20%20%20.returns%28T.type_parameter%28%3AU%29%29%0A%7D%0Adef%20id%28fn%29%0A%20%20fn%0Aend%0A%0Asig%20%7B%0A%20%20type_parameters%28%3AU%29%0A%20%20%20%20.params%28fn%3A%20T.proc.params%28arg0%3A%20T.type_parameter%28%3AU%29%29.void%29%0A%20%20%20%20.returns%28T.proc.params%28arg0%3A%20T.type_parameter%28%3AU%29%29.void%29%0A%7D%0Adef%20id_fn%28fn%29%0A%20%20fn%0Aend%0A%0Af%20%3D%20T.let%28-%3E%20%7B%7D%2C%20T.proc.params%28arg0%3A%20T.anything%29.void%29%0AT.reveal_type%28f%29%0Af.call%280%29%0A%0Ag_id%20%3D%20id%28f%29%0AT.reveal_type%28g_id%29%0Ag_id.call%280%29%0A%0Ag_id_fn%20%3D%20id_fn%28f%29%0AT.reveal_type%28g_id_fn%29%0Ag_id_fn.call%280%29%20%23%20%3C-%20no%20reason%20to%20reject%20this) ```ruby # typed: true extend T::Sig sig { type_parameters(:U) .params(fn: T.type_parameter(:U)) .returns(T.type_parameter(:U)) } def id(fn) fn end sig { type_parameters(:U) .params(fn: T.proc.params(arg0: T.type_parameter(:U)).void) .returns(T.proc.params(arg0:...
### Problem We find that developers in large Ruby codebases are reluctant to do large codemods that introduce new arguments. They're more likely to adopt solutions that effectively passes information...
### Motivation ### Test plan See included automated tests.
### Motivation If we can make this operate on a `const` tree, we can keep the resolved trees around in LSP mode (and then e.g., use them to service stale...
#### Input [→ View on sorbet.run](https://sorbet.run/#%23%20typed%3A%20strict%0A%0Aclass%20A%0A%20%20include%20Enumerable%0Aend) ```ruby # typed: strict class A include Enumerable end ``` #### Observed output ``` editor.rb:3: Type Elem declared by parent Enumerable must be re-declared...
#### Input [→ View on sorbet.run](https://sorbet.run/#%23%20typed%3A%20true%0Aextend%20T%3A%3ASig%0A%0Asig%20%7Bparams%28x%3A%20Integer%29.void%7D%0Adef%20foo%28x%3A%29%0A%20%20puts%28x%20%2B%201%29%0A%20%20%23%20%20%20%20%5E%20rename%3A%20x%20-%3E%20y%0Aend%0A%0Afoo%28x%3A%200%29) ```ruby # typed: true extend T::Sig sig {params(x: Integer).void} def foo(x:) puts(x + 1) # ^ rename: x -> y end foo(x: 0) ```...
### Motivation Makes it so that getting or setting the package for a specific file does not imply a vector reallocation. ### Test plan Existing tests
> [!NOTE] > This issue remains open until VS Code support is implemented for #9445. - - - - - ### Problem ```ruby class Parent extend T::Helpers abstract! sig {...
#9094 suggests a new LSP method that finds references to all abstract callers when finding references to an implementation of that abstract method. #9445 generalized this to the entire inheritance...