I think that, in general, a definition may start
anywhere within a line and end anywhere within
a later line.  If the goal is to return the exact
text of the definition and only that text, one
would need start and ending line _and_ column numbers.
Without this, one would have to parse the source
to determine the exact extent of a code block :-(

x = 8; puts "Yuck."; def z boo
puts boo*3; end; str="It's awful style :-("
puts "but I think it's syntactically correct!"

However, since my goal is to support an IDE that will simply
find the definition's text for the developer to edit or view,
just exposing the information already in the parse tree
in the current implementation is perfectly adequate.

- brent

>>From: Yukihiro Matsumoto [mailto:matz / ruby-lang.org] 
>>> Sent: Tuesday, February 25, 2003 2:49 AM
> 
> 
>>> |The reserved words __FILE__ and __LINE__ cannot be used
>>> |to extract the source location of a previously parsed block of
>>> |ruby code, because the parser does a literal substitution of 
>>> the String
>>> |or FixNum, respectively.  So, at least in Ruby 1.6.8, Matz's 
>>> suggested
>>> |technique of evaluating __FILE__ and __LINE__ in the binding
>>> |of the block does not work.  Please see:
>>> |
>>> |http://www.ruby-talk.org/cgi-bin/scat.rb/ruby/ruby-talk/21555
>>> 
>>> First of all, I said I would fix, but I haven't.  Sorry for this.
>>> 
>>> Secondly, I'm not sure whether it makes sense that method returns
>>> single line number.  They might be multi-line method.  I'd like to
>>> hear the comments from others.
> 
> 
> It seems reasonable for me at the point that
> you abstract multi-line method to be located at
> the beginning line of its definition.
> 
> Do you mean it should return two line numbers; begin and end?
> 
> Regards,
> // NaHi
> 
>