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

Support non-string input in show_source #430

Merged
merged 2 commits into from
Nov 7, 2022
Merged

Conversation

k0kubun
Copy link
Member

@k0kubun k0kubun commented Nov 4, 2022

This PR allows a non-String literal input in show_source, just like Pry.

Example

$ irb -rerb
irb(main)[01:0]> show_source ERB#result

From: /home/k0kubun/.rbenv/versions/3.1.2/lib/ruby/3.1.0/erb.rb:901

  def result(b=new_toplevel)
    unless @_init.equal?(self.class.singleton_class)
      raise ArgumentError, "not initialized"
    end
    eval(@src, b, (@filename || '(erb)'), @lineno)
  end

=> nil

@k0kubun k0kubun requested a review from st0012 November 4, 2022 06:12
next if cmd_name != command && aliases.all? { |alias_name, _| alias_name != command }

if !defined?(ExtendCommand) || !ExtendCommand.const_defined?(cmd_class, false)
require_relative load_file
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this line can be removed because of this change?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No, this require_relative is executed only when it's used at the beginning of a file, but because it's a method, it could still be called in the middle of a line. So I don't think it's still safe to remove it.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry I don't get it. Here's my understanding:

  • This piece of code is always run before the command methods (e.g. irb_show_source) being called.
  • It checks if the command definition (ExtendedCommand::ShowSource) has been loaded yet. If it hasn't, we load it here with require_relative "cmd/show_source".
  • So by the time the irb_show_source method is reached, the definition should always be there. And therefore the require_relative I linked is obsolete now.

Copy link
Member Author

@k0kubun k0kubun Nov 7, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So, if you look at my comment, the key is "in the middle of a line". I intend to invoke ExtendCommandBundle.load_command for commands like irb_show_source ERB#result, but not for p irb_show_source("ERB#result"), which is technically still possible and might be still used for debugging IRB itself or something we can't imagine.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ah I didn't know that's an expected usage, thanks for sharing. I don't see a point of doing that though because we generally don't care about what the command returns but its side-effects (printing to stdin/out).
But I think supporting it or not is outside of the scope of this PR.

Copy link
Member

@st0012 st0012 Nov 7, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

With that being said, do you think you can add another test case for p irb_show_source("ERB#result")?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

👍 done e8b1c9d

Copy link
Member

@st0012 st0012 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🎉

@k0kubun k0kubun merged commit 785439e into ruby:master Nov 7, 2022
@k0kubun k0kubun deleted the transform-args branch November 7, 2022 17:29
matzbot pushed a commit to ruby/ruby that referenced this pull request Nov 7, 2022
(ruby/irb#430)

* Support non-string input in show_source

* Test show_source as a method
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Development

Successfully merging this pull request may close these issues.

2 participants