Skip to content

Conversation

@apiology
Copy link
Contributor

@apiology apiology commented Nov 24, 2025

Solargraph found this in another branch while improving typechecking. I'm not aware of any practical impact from the bug - I don't think we end up combining directives in practice.

Includes for a working build:

apiology and others added 30 commits July 13, 2025 12:44
```sh
$ SOLARGRAPH_ASSERTS=on bundle exec solargraph method_pin --rbs 'RuboCop::AST::ArrayNode#values'
def values: () -> Array
$ bundle exec solargraph help method_pin
Usage:
  solargraph method_pin [PATH]

Options:
  [--rbs], [--no-rbs], [--skip-rbs]           # Output the pin as RBS
                                              # Default: false
  [--typify], [--no-typify], [--skip-typify]  # Output the calculated return type of the pin from annotations
                                              # Default: false
  [--probe], [--no-probe], [--skip-probe]     # Output the calculated return type of the pin from annotations and inference
                                              # Default: false
  [--stack], [--no-stack], [--skip-stack]     # Show entire stack by including definitions in superclasses
                                              # Default: false

Describe a method pin
$
```
* Allow newer RBS gem versions

This allow users to upgrade to recent Tapioca versions.

Tapioca now requires newish versions of the spoom gem, which depends on 4.x
pre-releases of the rbs gem.

* Add RBS version to test matrix

* Add exclude rule

* Move to 3.6.1
* Look for external requires before cataloging bench

It seems like sync_catalog will go through the motions but not
actually load pins from gems here due to passing an empty requires
array to ApiMap.

I'm sure those requires get pulled in eventually, but we go through at
least one catalog cycle without it happening.

Found while trying to test a different issue but not being able to get
completions from a gem in a spec.

* Ensure backport is pre-cached
…astwide#1011)

* Complain in strong type-checking if an @sg-ignore line is not needed

* Fix return type

* Fix spec

* Linting/coverage fixes

* Coverage fix
* Document a log level env variable

* Fix logger reference

* Fix env var name

* Populate location information from RBS files (castwide#768)

* Populate location information from RBS files

The 'rbs' gem maps the location of different definitions to the
relevant point in the RGS files themselves - this change provides the
ability to jump into the right place in those files to see the type
definition via the LSP.

* Prefer source location in language server

* Resolve merge issue

* Fix Path vs String type error

* Consolidate parameter handling into Pin::Callable (castwide#844)

* Consolidate parameter handling into Pin::Closure

* Clarify clobbered variable names

* Fix bug in to_rbs, add spec, then fix new bug found after running spec

* Catch one more Signature.new to translate from strict typechecking

* Introduce Pin::Callable

* Introduce Pin::Callable

* Introduce Pin::Callable

* Introduce Pin::Callable

* Introduce Pin::Callable

* Introduce Pin::Callable

* Introduce Pin::Callable

* Use Pin::Callable type in args_node.rb

* Select String#each_line overload with mandatory vs optional arg info

* Adjust local variable presence to start after assignment, not before (castwide#864)

* Adjust local variable presence to start after assignment, not before

* Add regression test around assignment in return position

* Fix assignment visibility code, which relied on bad asgn semantics

* Resolve params from ref tags (castwide#872)

* Resolve params from ref tags

* Resolve ref tags with namespaces

* Fix merge issue

* RuboCop fixes

* Add @sg-ignore

* Linting

* Linting fix

* Linting fix

---------

Co-authored-by: Fred Snyder <fsnyder@castwide.com>
* Fix hole in type checking evaluation

The call to `bar()` in `[ bar('string') ].compact` is not currently
type-checked due to a missed spot in `NodeMethods#call_nodes_from(node)`

* Avoid over-reporting call issues

* Fix annotation

* Add nocov markers around unreachable area

* Fix a coverage issue

* Cover more paths in type checking

* Fix a code coverage issue

* Drop blank line

* Ratchet Rubocop todo

* Fix missing coverage
If we know the target of an unresolved method call, include it in the
error message.
* Internal strict type-checking fixes

* Add annotation

* Add annotation

* Add @sg-ignores for now
* Reproduce and fix a ||= (or-asgn) evaluation issue

* Fix linting issue
This isn't used anywhere to my knowledge, but it makes sense to think
of symbols as being in the global namespace, helps guarantee that
closure is always available on a pin, and of course keeps the assert
happy ;)
* Fix 'all!' config to reporters

Solargraph found the type error here!

* Linting fixes
* Fix RuboCop linting errors in regular expressions

* Continue on rubocop_todo errors

* Move configuration

* Continue on undercover errors
* Resolve class aliases via Constant pins

This also eliminates the need for Parser::NodeMethods as a searately
defined class.

* Resolve merge issues

* Resolve Solargraph strong complaint

* Add @sg-ignore

* Fix RuboCop issues

* Drop unused method

* Ratchet .rubocop_todo.yml
* Improve performance of resolve_method_aliases method

- Add indexed lookups for methods and aliases by name
- Cache ancestor traversal to avoid repeated computations
- Separate regular pins from aliases for more efficient processing
- Replace linear search with direct indexed method lookup
- Add fast path for creating resolved alias pins without individual lookups

Generated with Claude Code

* Update .rubocop_todo.yml

* Fix typechecking - get_method_stack order

`get_method_stack` returns the following order for `Enumerable#select`:

- master branch:

=> ["Enumerable#select", "Kernel#select"]

- current branch:

=> ["Kernel#select", "Enumerable#select"]

* Avoid redundant indexing methods_by_name

loop through ancestors and rely on store.get_path_pins
@apiology apiology mentioned this pull request Jan 7, 2026
1 task
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants