banister / method_source

return the sourcecode for a method
MIT License
361 stars 43 forks source link

Exclude Proc#source Enclosure #26

Open bryanp opened 11 years ago

bryanp commented 11 years ago

Hit a case where I need the Proc source without the enclosure. For example:

p = Proc.new do
  puts 'proc'
end

p.source currently gives me all three lines, but I really want:

puts 'proc'

There doesn't appear to be a way to do this. Possible to add?

ConradIrwin commented 11 years ago

It'll be quite hard. The way we currently do this is find the first line of the method, and then extract one complete expression from ruby. To get it without the begin end, it might be sufficient to drop the last end, and delete everything up to the first do or {; but there'll obviously be edge-cases.

bryanp commented 11 years ago

Eh, that's what I was afraid of. I may work on a solution for easy cases. If so I'll be sure to send a PR along.

banister commented 11 years ago

There's a crazy gem called sourcify which uses its own ragel scanner to do this accurately, you might get some mileague with that ;)

bryanp commented 11 years ago

Tried sourcify before method_source. It failed anytime a string was defined with double quotes.

Simple is better, I think.