Skip to content

steep langserver stacks when unsaved ruby file is opened in VSCode #526

@autopp

Description

@autopp

In VSCode, when we open a new file and set Ruby to its syntax, langserver stacks.

Procedure for reproducing

  • Add steep to Gemfile
  • Create and setup Steepfile
  • Create a new file (Untitled-1 in editor) in VSCode
  • Set Ruby to the file by Change Language Mode
  • Do Steep: Restart all

image

Output :
[Steep 0.51.0] [master] [main] [ReceiveMessageJob(client/textDocument/didOpen/)] Processing message from client: method=textDocument/didOpen, id=
#<TypeError: no implicit conversion of nil into String>
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/master.rb:466:in `initialize'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/master.rb:466:in `Pathname'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/master.rb:466:in `pathname'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/master.rb:543:in `process_message_from_client'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/master.rb:426:in `block (3 levels) in start'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:99:in `block in tagged'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:37:in `tagged'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:99:in `tagged'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/master.rb:419:in `block (2 levels) in start'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:99:in `block in tagged'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:37:in `tagged'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:99:in `tagged'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/master.rb:410:in `block in start'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:99:in `block in tagged'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:37:in `tagged'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:99:in `tagged'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/master.rb:380:in `start'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/drivers/langserver.rb:52:in `run'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/cli.rb:193:in `process_langserver'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/cli.rb:60:in `run'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/exe/steep:11:in `<top (required)>'
  /Users/autopp/.rbenv/versions/3.1.1/bin/steep:25:in `load'
  /Users/autopp/.rbenv/versions/3.1.1/bin/steep:25:in `<top (required)>'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/bundler-2.3.7/lib/bundler/cli/exec.rb:58:in `load'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/bundler-2.3.7/lib/bundler/cli/exec.rb:58:in `kernel_load'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/bundler-2.3.7/lib/bundler/cli/exec.rb:23:in `run'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/bundler-2.3.7/lib/bundler/cli.rb:484:in `exec'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/bundler-2.3.7/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/bundler-2.3.7/lib/bundler/vendor/thor/lib/thor/invocation.rb:127:in `invoke_command'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/bundler-2.3.7/lib/bundler/vendor/thor/lib/thor.rb:392:in `dispatch'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/bundler-2.3.7/lib/bundler/cli.rb:31:in `dispatch'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/bundler-2.3.7/lib/bundler/vendor/thor/lib/thor/base.rb:485:in `start'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/bundler-2.3.7/lib/bundler/cli.rb:25:in `start'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/bundler-2.3.7/exe/bundle:48:in `block in <top (required)>'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/bundler-2.3.7/lib/bundler/friendly_errors.rb:103:in `with_friendly_errors'
  /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/bundler-2.3.7/exe/bundle:36:in `<top (required)>'
  /Users/autopp/.rbenv/versions/3.1.1/bin/bundle:25:in `load'
  /Users/autopp/.rbenv/versions/3.1.1/bin/bundle:25:in `<main>'
/Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/base_worker.rb:89:in `join': No live threads left. Deadlock? (/Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/base_worker.rb:89:in `join'/Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/base_worker.rb:89:in `join'fatal/Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/base_worker.rb:89:in `join': ): No live threads left. Deadlock? (fatal)No live threads left. Deadlock?

2 threads, 2 sleeps current:0x00007ffe99704080 main thread:0x00007ffe99704080
* #<Thread:0x0000000101a28d00 sleep_forever>
   rb_thread_t:0x00007ffe99704080 native:0x0000000109b25dc0 int:0
   
* #<Thread:0x0000000106e498f8 /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/base_worker.rb:42 sleep_forever>
   rb_thread_t:0x00007ffe3a1a7790 native:0x0000700000ad8000 int:0
    depended by: tb_thread_id:0x00007ffe99704080
   
:  (2 threads, 2 sleeps current:0x00007ff961c077a0 main thread:0x00007ff961c077a0
* #<Thread:0x000000010c698d10 sleep_forever>
   rb_thread_t:0x00007ff961c077a0 native:0x0000000112b49dc0 int:0
   
* #<Thread:0x0000000111ab2568 /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/base_worker.rb:42 sleep_forever>
   rb_thread_t:0x00007ff9025acea0 native:0x0000700007aee000 int:0
    depended by: tb_thread_id:0x00007ff961c077a0
   
No live threads left. Deadlock?	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/base_worker.rb:89:in `block in run'
fatal	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:99:in `block in tagged'
) (fatal)	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/base_worker.rb:89:in `block in run'

	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:99:in `block in tagged'

	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:37:in `tagged'
2 threads, 2 sleeps current:0x00007fb38b407780 main thread:0x00007fb38b407780
* #<Thread:0x000000010213cd08 sleep_forever>
   rb_thread_t:0x00007fb38b407780 native:0x000000010804ddc0 int:0
   
* #<Thread:0x00000001075526e0 /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/base_worker.rb:42 sleep_forever>
   rb_thread_t:0x00007fb32c9114d0 native:0x000070000942f000 int:0
    depended by: tb_thread_id:0x00007fb38b407780
   
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:37:in `tagged'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:99:in `tagged'
2 threads, 2 sleeps current:0x00007f93a9c07750 main thread:0x00007f93a9c07750
* #<Thread:0x000000010e5e0d08 sleep_forever>
   rb_thread_t:0x00007f93a9c07750 native:0x000000011d537dc0 int:0
   
* #<Thread:0x0000000113a01b08 /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/base_worker.rb:42 sleep_forever>
   rb_thread_t:0x00007f934accbdb0 native:0x00007000043ad000 int:0
    depended by: tb_thread_id:0x00007f93a9c07750
   
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/base_worker.rb:73:in `run'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:99:in `tagged'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/drivers/worker.rb:50:in `block in run'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:99:in `block in tagged'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/base_worker.rb:73:in `run'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:37:in `tagged'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/drivers/worker.rb:50:in `block in run'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:99:in `tagged'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/base_worker.rb:89:in `block in run'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/drivers/worker.rb:24:in `run'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/base_worker.rb:89:in `block in run'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:99:in `block in tagged'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:99:in `block in tagged'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:37:in `tagged'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/cli.rb:232:in `process_worker'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:99:in `tagged'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:99:in `block in tagged'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:37:in `tagged'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:37:in `tagged'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:99:in `tagged'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/base_worker.rb:73:in `run'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/drivers/worker.rb:24:in `run'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/drivers/worker.rb:50:in `block in run'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:99:in `tagged'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:99:in `block in tagged'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/cli.rb:60:in `run'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:37:in `tagged'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/server/base_worker.rb:73:in `run'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/cli.rb:232:in `process_worker'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:99:in `tagged'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/exe/steep:11:in `<top (required)>'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/drivers/worker.rb:50:in `block in run'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/drivers/worker.rb:24:in `run'
	from /Users/autopp/.rbenv/versions/3.1.1/bin/steep:25:in `load'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:99:in `block in tagged'
	from /Users/autopp/.rbenv/versions/3.1.1/bin/steep:25:in `<main>'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/cli.rb:60:in `run'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/cli.rb:232:in `process_worker'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/exe/steep:11:in `<top (required)>'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/cli.rb:60:in `run'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:37:in `tagged'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/exe/steep:11:in `<top (required)>'
	from /Users/autopp/.rbenv/versions/3.1.1/bin/steep:25:in `load'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/activesupport-7.0.2.3/lib/active_support/tagged_logging.rb:99:in `tagged'
	from /Users/autopp/.rbenv/versions/3.1.1/bin/steep:25:in `load'
	from /Users/autopp/.rbenv/versions/3.1.1/bin/steep:25:in `<main>'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/drivers/worker.rb:24:in `run'
	from /Users/autopp/.rbenv/versions/3.1.1/bin/steep:25:in `<main>'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/cli.rb:232:in `process_worker'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/lib/steep/cli.rb:60:in `run'
	from /Users/autopp/.rbenv/versions/3.1.1/lib/ruby/gems/3.1.0/gems/steep-0.51.0/exe/steep:11:in `<top (required)>'
	from /Users/autopp/.rbenv/versions/3.1.1/bin/steep:25:in `load'
	from /Users/autopp/.rbenv/versions/3.1.1/bin/steep:25:in `<main>'
[Info  - 22:30:47] Connection to server got closed. Server will restart.

Detail

TypeError was occured at Steep::Server::Master#pathname. In this case, URI.parse(uri).path is nil because uri is "untitled:Untitled-1".

It seems to langserver should check protocol. (E.g. gopls seems to checks the protocol)

Environment

  • OS: Mac
  • Ruby: 3.1.1
  • Steep: 0.51.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions