solargraph icon indicating copy to clipboard operation
solargraph copied to clipboard

Workspace scan failing or stuck

Open oswaldoleal opened this issue 6 months ago • 2 comments

Context: I primarily use the Ruby Solargraph extension inside VS Code, however over the last few days I notice the function definition links were not working and a pop up to update solarpgrahp came up, I updated but now, every time I try to load the project, the notification displaying the progress of mapping the workspace always gets stuck at 465/4915.

Image

So naturally I try to run in on console, with this command solargraph scan -v, but it fails right after running it.

This is the version output:

$ solargraph --version
0.55.1

And this is the full output for the scan command:

$ solargraph scan -v
/home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/flow_sensitive_typing.rb:167:in `parse_isa': undefined method `type' for nil (NoMethodError)

        if isa_receiver.type == :send && isa_receiver.children[0].nil? && isa_receiver.children[1].is_a?(Symbol)
                       ^^^^^
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/flow_sensitive_typing.rb:185:in `process_isa'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/flow_sensitive_typing.rb:146:in `process_conditional'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/flow_sensitive_typing.rb:61:in `process_if'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/parser_gem/node_processors/if_node.rb:15:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor.rb:39:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:47:in `block in process_children'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:45:in `each'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:45:in `process_children'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb:9:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor.rb:39:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/parser_gem/node_processors/resbody_node.rb:30:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor.rb:39:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:47:in `block in process_children'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:45:in `each'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:45:in `process_children'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb:9:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor.rb:39:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:47:in `block in process_children'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:45:in `each'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:45:in `process_children'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/parser_gem/node_processors/def_node.rb:44:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor.rb:39:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:47:in `block in process_children'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:45:in `each'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:45:in `process_children'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb:9:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor.rb:39:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:47:in `block in process_children'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:45:in `each'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:45:in `process_children'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb:43:in `process_namespace'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb:17:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor.rb:39:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:47:in `block in process_children'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:45:in `each'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:45:in `process_children'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/parser_gem/node_processors/begin_node.rb:9:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor.rb:39:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:47:in `block in process_children'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:45:in `each'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:45:in `process_children'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb:43:in `process_namespace'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb:17:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor.rb:39:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:47:in `block in process_children'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:45:in `each'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:45:in `process_children'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb:43:in `process_namespace'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb:17:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor.rb:39:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:47:in `block in process_children'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:45:in `each'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:45:in `process_children'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb:43:in `process_namespace'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb:17:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor.rb:39:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:47:in `block in process_children'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:45:in `each'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor/base.rb:45:in `process_children'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb:43:in `process_namespace'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/parser_gem/node_processors/namespace_node.rb:17:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/node_processor.rb:39:in `process'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/parser/parser_gem/class_methods.rb:53:in `map'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/source_map/mapper.rb:26:in `map'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/source_map/mapper.rb:52:in `map'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/source_map/data.rb:26:in `generate'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/source_map/data.rb:11:in `pins'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/source_map.rb:21:in `pins'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/source_map.rb:77:in `document_symbols'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-rails-1.1.0/lib/solargraph-rails.rb:38:in `local'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/convention.rb:29:in `block in for_local'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/3.3.0/set.rb:501:in `each_key'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/3.3.0/set.rb:501:in `each'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/convention.rb:28:in `for_local'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/source_map.rb:33:in `initialize'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/source_map.rb:172:in `new'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/source_map.rb:172:in `map'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/library.rb:494:in `block in map!'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/library.rb:493:in `each'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/library.rb:493:in `map!'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/api_map.rb:166:in `load'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/api_map.rb:182:in `load_with_cache'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/shell.rb:211:in `block in scan'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/benchmark-0.4.0/lib/benchmark.rb:304:in `measure'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/lib/solargraph/shell.rb:210:in `scan'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/thor-1.3.2/lib/thor/command.rb:28:in `run'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/thor-1.3.2/lib/thor/invocation.rb:127:in `invoke_command'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/thor-1.3.2/lib/thor.rb:538:in `dispatch'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/thor-1.3.2/lib/thor/base.rb:584:in `start'
	from /home/oswaldo/.rbenv/versions/3.3.6/lib/ruby/gems/3.3.0/gems/solargraph-0.55.1/bin/solargraph:5:in `<top (required)>'
	from /home/oswaldo/.rbenv/versions/3.3.6/bin/solargraph:25:in `load'
	from /home/oswaldo/.rbenv/versions/3.3.6/bin/solargraph:25:in `<main>'

I'm using rbenv to manage my ruby versions, and this is the ruby version i'm running

$ rbenv version
3.3.6 (set by <path_to_project>/.ruby-version)

Let me know if you need some additional information to figure this out. Thanks :)

oswaldoleal avatar Jun 10 '25 23:06 oswaldoleal

Thanks for all the detail. I think I see what's causing the error. It looks like there are cases where the new flow-sensitive typing feature needs some extra runtime type safety. It should be fixable for the next release.

castwide avatar Jun 11 '25 01:06 castwide

I can confirm the reported issue. Downgrading to 54.2 seem to have fixed the issue for me.

The issue seems related to is_a? call without a caller, e.g.:

if is_a? Object
end

Drowze avatar Jun 12 '25 20:06 Drowze

Fix released in v0.55.3.

castwide avatar Jun 25 '25 21:06 castwide