Skip to content

undefined method 'sub' for nil:NilClass (NoMethodError) #93

@dnalbach

Description

@dnalbach

Ubuntu 24.04

VS Code 1.105.1

ruby 3.2.8

Gemfile.lock:

ruby-lsp (0.26.2)
  language_server-protocol (~> 3.17.0)
  prism (>= 1.2, < 2.0)
  rbs (>= 3, < 5)
ruby-lsp-rspec (0.1.28)
  ruby-lsp (~> 0.26.0)

The below error output came after my test output.

<5 more of these above>

  6) XYZ::RequisitionGateway#fetch returns a successful response with the parsed document
     Failure/Error: parts[0].sub(/^\./, "file://" + File.expand_path(".")) + ":" + parts[1] + " : " + (parts[2] || "")
     
     NoMethodError:
       undefined method `sub' for nil:NilClass

Randomized with seed 60755

/home/myapppath/vendor/bundle/ruby/3.2.0/gems/ruby-lsp-rspec-0.1.28/lib/ruby_lsp/ruby_lsp_rspec/rspec_formatter.rb:83:in `adjust_backtrace': undefined method `sub' for nil:NilClass (NoMethodError)

        parts[0].sub(/^\./, "file://" + File.expand_path(".")) + ":" + parts[1] + " : " + (parts[2] || "")
                ^^^^
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/ruby-lsp-rspec-0.1.28/lib/ruby_lsp/ruby_lsp_rspec/rspec_formatter.rb:50:in `map'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/ruby-lsp-rspec-0.1.28/lib/ruby_lsp/ruby_lsp_rspec/rspec_formatter.rb:50:in `example_failed'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:209:in `block in notify'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:208:in `each'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:208:in `notify'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:145:in `example_failed'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:484:in `finish'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:442:in `fail_with_exception'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:614:in `block in run'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:656:in `each'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:656:in `for_filtered_examples'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:660:in `block in for_filtered_examples'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:658:in `each'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:658:in `for_filtered_examples'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:614:in `rescue in run'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:610:in `run'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `block (3 levels) in run_specs'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `map'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `block (2 levels) in run_specs'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2091:in `with_suite_hooks'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:116:in `block in run_specs'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:74:in `report'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:115:in `run_specs'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:89:in `run'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:71:in `run'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:45:in `invoke'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/exe/rspec:4:in `<top (required)>'
        from bin/rspec:29:in `load'
        from bin/rspec:29:in `<main>'
/home/myapppath/vendor/bundle/ruby/3.2.0/gems/ruby-lsp-rspec-0.1.28/lib/ruby_lsp/ruby_lsp_rspec/rspec_formatter.rb:83:in `adjust_backtrace': undefined method `sub' for nil:NilClass (NoMethodError)

        parts[0].sub(/^\./, "file://" + File.expand_path(".")) + ":" + parts[1] + " : " + (parts[2] || "")
                ^^^^
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/ruby-lsp-rspec-0.1.28/lib/ruby_lsp/ruby_lsp_rspec/rspec_formatter.rb:50:in `map'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/ruby-lsp-rspec-0.1.28/lib/ruby_lsp/ruby_lsp_rspec/rspec_formatter.rb:50:in `example_failed'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:209:in `block in notify'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:208:in `each'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:208:in `notify'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:145:in `example_failed'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:484:in `finish'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:442:in `fail_with_exception'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:614:in `block in run'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:656:in `each'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:656:in `for_filtered_examples'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:614:in `rescue in run'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:610:in `run'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:608:in `block in run'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:608:in `map'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:608:in `run'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `block (3 levels) in run_specs'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `map'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `block (2 levels) in run_specs'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2091:in `with_suite_hooks'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:116:in `block in run_specs'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:74:in `report'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:115:in `run_specs'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:89:in `run'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:71:in `run'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:45:in `invoke'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/exe/rspec:4:in `<top (required)>'
        from bin/rspec:29:in `load'
        from bin/rspec:29:in `<main>'
/home/myapppath/vendor/bundle/ruby/3.2.0/gems/ruby-lsp-rspec-0.1.28/lib/ruby_lsp/ruby_lsp_rspec/rspec_formatter.rb:83:in `+': no implicit conversion of nil into String (TypeError)

        parts[0].sub(/^\./, "file://" + File.expand_path(".")) + ":" + parts[1] + " : " + (parts[2] || "")
                                                                       ^^^^^^^^
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/ruby-lsp-rspec-0.1.28/lib/ruby_lsp/ruby_lsp_rspec/rspec_formatter.rb:83:in `adjust_backtrace'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/ruby-lsp-rspec-0.1.28/lib/ruby_lsp/ruby_lsp_rspec/rspec_formatter.rb:50:in `map'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/ruby-lsp-rspec-0.1.28/lib/ruby_lsp/ruby_lsp_rspec/rspec_formatter.rb:50:in `example_failed'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:209:in `block in notify'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:208:in `each'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:208:in `notify'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:145:in `example_failed'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:484:in `finish'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example.rb:293:in `run'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:646:in `block in run_examples'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:642:in `map'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:642:in `run_examples'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:607:in `run'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:608:in `block in run'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:608:in `map'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/example_group.rb:608:in `run'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `block (3 levels) in run_specs'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `map'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:121:in `block (2 levels) in run_specs'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/configuration.rb:2091:in `with_suite_hooks'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:116:in `block in run_specs'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/reporter.rb:74:in `report'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:115:in `run_specs'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:89:in `run'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:71:in `run'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/lib/rspec/core/runner.rb:45:in `invoke'
        from /home/myapppath/vendor/bundle/ruby/3.2.0/gems/rspec-core-3.13.0/exe/rspec:4:in `<top (required)>'
        from bin/rspec:29:in `load'
        from bin/rspec:29:in `<main>'

I have failing tests right now due to a tenant schema issue where a table is not being found in the public schema, which is the wrong schema to look in. That issue has nothing to do with LSP, but that issue has caused a problem for the formatter as seen above, and it is causing an error that it shouldn't. The case of nil should be handled without an exception.

If I run bin/rspec in a terminal, the failing tests give this error without separate exceptions:

     ActiveRecord::StatementInvalid:
       PG::UndefinedTable: ERROR:  relation "optum_lab_orders" does not exist
       LINE 1: UPDATE "optum_lab_orders" SET "optum_lab_order_id" = $1 WHER...
                      ^

So that's the real error that the rspec_formatter should be surfacing in the test failures without a backtrace, and that's what running rspec directly shows. My desired outcome is that the formatter output match rspec's output.

You might be able to reproduce the issue by running a migration for a table, creating the model, writing tests for that model, and then manually deleting that table from the database. That might produce similar behavior. I have not tried to reproduce the situation artificially.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions