Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Crash while inspecting file with Rubocop and Truffleruby head #1913

Closed
jaime-rave-conichi opened this issue Feb 17, 2020 · 4 comments
Closed

Comments

@jaime-rave-conichi
Copy link

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

@bjfish
Copy link
Contributor

bjfish commented Mar 24, 2020

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`

@eregon
Copy link
Member

eregon commented Mar 24, 2020

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

@jaimerave
Copy link

I have created a PR in Rubocop to work around the issue in Truffleruby rubocop/rubocop#8602

@eregon
Copy link
Member

eregon commented Sep 1, 2020

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants
@bjfish @eregon @jaimerave @jaime-rave-conichi and others