Truffleruby: Crash while inspecting file with Rubocop and Truffleruby head

Created on 17 Feb 2020  Â·  4Comments  Â·  Source: oracle/truffleruby

I'm seeing a crash while running Rubocop on the following file:

module BodyBuilder
  class Rubocop
    def document_doe
      @user.document_doe.to_datetime.strftime("%Y-%m-%d")
    end
  end
end

The backtrace of the crash is:

➜  Projects rubocop -d voyager.rb       
For /Users/rave/Projects: configuration from /Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/config/default.yml
Inspecting 1 file
Scanning /Users/rave/Projects/voyager.rb
An error occurred while Style/FormatStringToken cop was inspecting /Users/rave/Projects/voyager.rb:4:46.
undefined method `[]' for nil:NilClass
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/utils/format_string.rb:48:in `initialize'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/utils/format_string.rb:112:in `new'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/utils/format_string.rb:112:in `block in parse'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/utils/format_string.rb:111:in `block in collect'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/utils/format_string.rb:111:in `block in each'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/utils/format_string.rb:111:in `block in each_with_block'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/utils/format_string.rb:111:in `scan'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/utils/format_string.rb:111:in `each_with_block'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/utils/format_string.rb:111:in `each'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/utils/format_string.rb:111:in `collect'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/utils/format_string.rb:111:in `parse'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/utils/format_string.rb:97:in `format_sequences'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/style/format_string_token.rb:106:in `token_ranges'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/style/format_string_token.rb:90:in `tokens'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/style/format_string_token.rb:47:in `on_str'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/commissioner.rb:57:in `block (2 levels) in trigger_responding_cops'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/commissioner.rb:136:in `with_cop_error_handling'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/commissioner.rb:56:in `block in trigger_responding_cops'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/commissioner.rb:55:in `each'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/commissioner.rb:55:in `trigger_responding_cops'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/commissioner.rb:32:in `on_str'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/ast/traversal.rb:114:in `block in on_send'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/ast/traversal.rb:111:in `each_with_index'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/ast/traversal.rb:111:in `on_send'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/commissioner.rb:33:in `on_send'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/ast/traversal.rb:107:in `on_def'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/commissioner.rb:33:in `on_def'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/ast/traversal.rb:99:in `on_class'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/commissioner.rb:33:in `on_class'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/ast/traversal.rb:157:in `on_while'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/commissioner.rb:33:in `on_module'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/ast/traversal.rb:14:in `walk'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/commissioner.rb:44:in `investigate'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/team.rb:124:in `investigate'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/team.rb:112:in `offenses'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cop/team.rb:44:in `inspect_file'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/runner.rb:296:in `inspect_file'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/runner.rb:244:in `block in do_inspection_loop'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/runner.rb:276:in `block in iterate_until_no_changes'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/runner.rb:269:in `loop'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/runner.rb:269:in `iterate_until_no_changes'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/runner.rb:240:in `do_inspection_loop'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/runner.rb:119:in `block in file_offenses'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/runner.rb:143:in `file_offense_cache'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/runner.rb:117:in `file_offenses'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/runner.rb:108:in `process_file'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/runner.rb:87:in `block in each_inspected_file'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/runner.rb:86:in `inject'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/runner.rb:86:in `each_inspected_file'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/runner.rb:73:in `inspect_files'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/runner.rb:39:in `run'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cli/command/execute_runner.rb:21:in `execute_runner'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cli/command/execute_runner.rb:13:in `run'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cli/command.rb:10:in `run'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cli/environment.rb:17:in `run'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cli.rb:65:in `run_command'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cli.rb:72:in `execute_runners'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/lib/rubocop/cli.rb:41:in `run'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/exe/rubocop:13:in `block in <top (required)>'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/mri/benchmark.rb:308:in `realtime'
/Users/rave/.rbenv/versions/truffleruby-dev/lib/gems/gems/rubocop-0.79.0/exe/rubocop:12:in `<top (required)>'
/Users/rave/.rbenv/versions/truffleruby-dev/bin/rubocop:23:in `load'
/Users/rave/.rbenv/versions/truffleruby-dev/bin/rubocop:23:in `load'
/Users/rave/.rbenv/versions/truffleruby-dev/bin/rubocop:23:in `<main>'
C

Offenses:

voyager.rb:1:1: C: Style/FrozenStringLiteralComment: Missing magic comment # frozen_string_literal: true.
module BodyBuilder
^
voyager.rb:2:3: C: Style/Documentation: Missing top-level class documentation comment.
  class Rubocop
  ^^^^^
voyager.rb:4:47: C: Style/StringLiterals: Prefer single-quoted strings when you don't need string interpolation or special symbols.
      @user.document_doe.to_datetime.strftime("%Y-%m-%d")
                                              ^^^^^^^^^^

1 file inspected, 3 offenses detected

1 error occurred:
An error occurred while Style/FormatStringToken cop was inspecting /Users/rave/Projects/voyager.rb:4:46.
Errors are usually caused by RuboCop bugs.
Please, report your problems to RuboCop's issue tracker.
https://github.com/rubocop-hq/rubocop/issues

Mention the following information in the issue report:
0.79.0 (using Parser 2.7.0.2, running on truffleruby 2.6.5 x86_64-darwin19)
Finished in 16.316024991014274 seconds

My Truffleruby version is truffleruby 20.1.0-dev-c24c4074, like ruby 2.6.5, GraalVM CE Native [x86_64-darwin]. It works fine under MRI 2.6.5

compatibility duplicate

Most helpful comment

RuboCop 0.90 has been released with that PR, I think we can close this, thanks @jaimerave!

All 4 comments

A minimal case:

"a".to_enum(:scan, /a/).map do
  puts "Regexp.last_match:`#{Regexp.last_match.inspect}`"
end

Expected:

Regexp.last_match:`#<MatchData "a">`

Actual:

Regexp.last_match:`nil`

That sounds like a duplicate of #1484 then. Unfortunately that doesn't seem easy to fix.

Code in RuboCop: https://github.com/rubocop-hq/rubocop/blob/ca80c319272fe1d93575aae47b8b2fa17072395d/lib/rubocop/cop/utils/format_string.rb#L111-L115

I have created a PR in Rubocop to work around the issue in Truffleruby https://github.com/rubocop-hq/rubocop/pull/8602

RuboCop 0.90 has been released with that PR, I think we can close this, thanks @jaimerave!

Was this page helpful?
0 / 5 - 0 ratings

Related issues

palkan picture palkan  Â·  3Comments

deepj picture deepj  Â·  5Comments

ioquatix picture ioquatix  Â·  5Comments

gogainda picture gogainda  Â·  3Comments

pitr-ch picture pitr-ch  Â·  4Comments