solargraph icon indicating copy to clipboard operation
solargraph copied to clipboard

[NoMethodError] undefined method 'parameter_names' for an instance of Solargraph::Pin::Namespace

Open semaperepelitsa opened this issue 4 months ago • 8 comments

Solargraph crashes with this error while working on some files. I will try to extract a simple reproducible example, but in the meantime, I thought you may already tell what is wrong based on the backtrace.

ruby: [WARN] Error processing request: [NoMethodError] undefined method 'parameter_names' for an instance of Solargraph::Pin::Namespace
ruby: [WARN] /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/pin/parameter.rb:154:in 'Solargraph::Pin::Parameter#index'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/pin/parameter.rb:186:in 'Solargraph::Pin::Parameter#param_tag'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/pin/parameter.rb:132:in 'Solargraph::Pin::Parameter#return_type'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/pin/base.rb:343:in 'Solargraph::Pin::Base#transform_types'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/pin/callable.rb:183:in 'block in Solargraph::Pin::Callable#transform_types'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/pin/callable.rb:182:in 'Array#map'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/pin/callable.rb:182:in 'Solargraph::Pin::Callable#transform_types'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/pin/method.rb:106:in 'Solargraph::Pin::Method#transform_types'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/pin/base.rb:354:in 'Solargraph::Pin::Base#resolve_generics'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/api_map.rb:459:in 'block in Solargraph::ApiMap#get_methods'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/api_map.rb:459:in 'Array#map'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/api_map.rb:459:in 'Solargraph::ApiMap#get_methods'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/api_map.rb:522:in 'Solargraph::ApiMap#get_method_stack'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/api_map.rb:419:in 'block in Solargraph::ApiMap#get_methods'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/api_map.rb:417:in 'Array#map!'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/api_map.rb:417:in 'Solargraph::ApiMap#get_methods'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/api_map.rb:522:in 'Solargraph::ApiMap#get_method_stack'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/pin/parameter.rb:202:in 'Solargraph::Pin::Parameter#typify_method_param'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/pin/parameter.rb:160:in 'Solargraph::Pin::Parameter#typify'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/pin/parameter.rb:168:in 'Solargraph::Pin::Parameter#compatible_arg?'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain/call.rb:102:in 'block (3 levels) in Solargraph::Source::Chain::Call#inferred_pins'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain/call.rb:95:in 'Array#each'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain/call.rb:95:in 'Enumerable#each_with_index'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain/call.rb:95:in 'block (2 levels) in Solargraph::Source::Chain::Call#inferred_pins'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain/call.rb:90:in 'Array#each'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain/call.rb:90:in 'block in Solargraph::Source::Chain::Call#inferred_pins'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain/call.rb:76:in 'Array#map'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain/call.rb:76:in 'Solargraph::Source::Chain::Call#inferred_pins'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain/call.rb:65:in 'Solargraph::Source::Chain::Call#resolve'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain.rb:129:in 'Solargraph::Source::Chain#define'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain.rb:156:in 'Solargraph::Source::Chain#infer_uncached'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain.rb:146:in 'Solargraph::Source::Chain#infer'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain/if.rb:22:in 'block in Solargraph::Source::Chain::If#resolve'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain/if.rb:22:in 'Array#map'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain/if.rb:22:in 'Solargraph::Source::Chain::If#resolve'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain.rb:129:in 'Solargraph::Source::Chain#define'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain.rb:156:in 'Solargraph::Source::Chain#infer_uncached'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain.rb:146:in 'Solargraph::Source::Chain#infer'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain/if.rb:22:in 'block in Solargraph::Source::Chain::If#resolve'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain/if.rb:22:in 'Array#map'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain/if.rb:22:in 'Solargraph::Source::Chain::If#resolve'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain.rb:129:in 'Solargraph::Source::Chain#define'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain.rb:156:in 'Solargraph::Source::Chain#infer_uncached'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain.rb:146:in 'Solargraph::Source::Chain#infer'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain/if.rb:22:in 'block in Solargraph::Source::Chain::If#resolve'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain/if.rb:22:in 'Array#map'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain/if.rb:22:in 'Solargraph::Source::Chain::If#resolve'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source/chain.rb:129:in 'Solargraph::Source::Chain#define'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/source_map/clip.rb:22:in 'Solargraph::SourceMap::Clip#define'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/library.rb:197:in 'block in Solargraph::Library#definitions_at'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/library.rb:195:in 'Thread::Mutex#synchronize'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/library.rb:195:in 'Solargraph::Library#definitions_at'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/library.rb:258:in 'block (2 levels) in Solargraph::Library#references_from'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/library.rb:257:in 'Array#select!'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/library.rb:257:in 'block in Solargraph::Library#references_from'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/library.rb:255:in 'Array#each'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/library.rb:255:in 'Solargraph::Library#references_from'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/language_server/host.rb:582:in 'Solargraph::LanguageServer::Host#references_from'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/language_server/message/text_document/document_highlight.rb:6:in 'Solargraph::LanguageServer::Message::TextDocument::DocumentHighlight#process'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/language_server/host.rb:104:in 'Solargraph::LanguageServer::Host#receive'
ruby: /Users/sema/.gem/ruby/3.4.0/gems/solargraph-0.56.2/lib/solargraph/language_server/host/message_worker.rb:69:in 'Solargraph::LanguageServer::Host::MessageWorker#tick'

semaperepelitsa avatar Aug 28 '25 21:08 semaperepelitsa

Hmm. Maybe a restarg situation in a block?

Let me know if you give up on reproducing that--it's not super obvious at first glance, but there's probably enough there to figure it out if you can't.

apiology avatar Aug 28 '25 21:08 apiology

Hi!

I can trigger the same or a very similar error by executing solargraph typecheck foo.rb with the following file content: Foo = Struct.new(:x) (just one line)

Ruby version: ruby 3.4.5 (2025-07-16 revision 20cda200d3) +PRISM [x86_64-linux] SolarGraph version: 0.56.2

(by the way: thanks for the typecheck feature, it's awesome!)

arlol123 avatar Sep 07 '25 18:09 arlol123

Perfect, thanks!

apiology avatar Sep 07 '25 19:09 apiology

Based on the repro, this was fixed in #1031 (confirmed by git bisect), which will be in the next release.

If you'd like to verify, you can set this in Gemfile:

gem 'yard', github: 'castwide/solargraph', branch: 'master', require: false

apiology avatar Sep 07 '25 19:09 apiology

(sorry I didn't spot the similarity in the backtrace!)

apiology avatar Sep 07 '25 19:09 apiology

I can confirm it works with latest master branch of gem solargraph 👍 . Thanks!

Is there a scheduled date for the next release including this fix?

arlol123 avatar Sep 08 '25 17:09 arlol123

I can confirm it works with latest master branch of gem solargraph 👍 . Thanks!

Is there a scheduled date for the next release including this fix?

ETA this week. Aiming for Friday at the latest.

castwide avatar Sep 08 '25 17:09 castwide

Fix released in version 0.57.0.

castwide avatar Sep 17 '25 01:09 castwide