# Analysing ruby code

**URL:** <https://www.ruby-forum.com/t/analysing-ruby-code/104817>\
**Category:** Ruby\
**Created:** [May 22, 2007, 9:45pm UTC](https://www.ruby-forum.com/t/analysing-ruby-code/104817 "2007-05-22T21:45:26Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [May 22, 2007, 9:45pm UTC](https://www.ruby-forum.com/t/analysing-ruby-code/104817/1 "2007-05-22T21:45:26Z")

</div>

Hello everybody !

Somebody knows the best way or even a tool to split ruby code into its  
different constructs ?  
For example:

class Foo  
def initialize  
@x = “y”  
end

def Bar(\*args)  
if args[0]  
puts “Bar” + args[0]  
else  
puts @x  
end  
end  
end

should be split into an Array

[“class Foo\n”, “def initialize\n\t@x=“y”\nend\n”, “def Bar(\*args)\n”,  
"if args[0]…

Thanks a lot !

Domenico

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [May 22, 2007, 10:07pm UTC](https://www.ruby-forum.com/t/analysing-ruby-code/104817/2 "2007-05-22T22:07:28Z")

</div>

On 5/22/07, removed\_email\_address@domain.invalid [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> [“class Foo\n”, “def initialize\n\t@x=“y”\nend\n”, “def Bar(\*args)\n”,  
> "if args[0]…

This looks like you are just splitting it into lines. If so then if  
it’s in a file  
filename = ‘myprog.rb’  
line\_array = File.readlines(filename)

Or if it’s a string  
source = \<\<END  
class Foo  
def initialize  
@x = “y”  
end

def Bar(\*args)  
if args[0]  
puts “Bar” + args[0]  
else  
puts @x  
end  
end  
end  
END  
line\_array = source.to\_a

–  
Rick DeNatale

My blog on Ruby  
[http://talklikeaduck.denhaven2.com/](http://talklikeaduck.denhaven2.com/)

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [May 22, 2007, 10:26pm UTC](https://www.ruby-forum.com/t/analysing-ruby-code/104817/3 "2007-05-22T22:26:04Z")

</div>

unknown wrote:

> No, it’s a little bit more than just splitting it into lines.  
> It’s more that I want
> 
> [beginning of class, methode 1, methode 2, if-construct in methode 2,  
> the rest of methode 2, …]
> 
> so basicly every methode/class/if/… with their code as an own entry  
> in an array.
> 
> Domenico

You can use the irb tokenizer to do that. I used it to create colored  
HTML. It takes a bit reading into it, though. But if you know ruby a bit  
it’s doable.

Regards  
Stefan

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [May 22, 2007, 10:20pm UTC](https://www.ruby-forum.com/t/analysing-ruby-code/104817/4 "2007-05-22T22:20:29Z")

</div>

No, it’s a little bit more than just splitting it into lines.  
It’s more that I want

[beginning of class, methode 1, methode 2, if-construct in methode 2,  
the rest of methode 2, …]

so basicly every methode/class/if/… with their code as an own entry  
in an array.

Domenico

---

<div class="post-metadata">

**Author:** ![unknown](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/u/4bbf92/32.png) [@unknown](https://www.ruby-forum.com/u/unknown)\
**Post date:** [May 22, 2007, 10:34pm UTC](https://www.ruby-forum.com/t/analysing-ruby-code/104817/5 "2007-05-22T22:34:31Z")

</div>

On 5/22/07, removed\_email\_address@domain.invalid [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> No, it’s a little bit more than just splitting it into lines.  
> It’s more that I want
> 
> [beginning of class, methode 1, methode 2, if-construct in methode 2,  
> the rest of methode 2, …]

Maybe ParseTree [1] is what you are looking for. Look at the example  
at [zenspider projects | software projects | by ryan davis](http://www.zenspider.com/ZSS/Products/ParseTree/)

[1] [http://rubyforge.org/projects/parsetree/](http://rubyforge.org/projects/parsetree/)
