The third step in flay’s process is to run the s-expressions through the #analyze method. The Code 1 2 3 4 5 6 7 8 9 10 def analyze self.prune self.hashes.each do |hash,nodes| identical[hash] = nodes[1..-1].all? { |n| n == nodes.first } masses[hash] = nodes.first.mass * nodes.size masses[hash] *= (nodes.size) if identical[hash] self.total += …
Tag: code-reading
Daily Code Reading #15 – Flay#process_sexp
Now I’m starting to get into the deep dark corners of flay. The #process_sexp method is the next step in the process. The Code 1 2 3 4 5 6 7 8 def process_sexp pt pt.deep_each do |node| next unless node.any? { |sub| Sexp === sub } next if node.mass < self.mass_threshold self.hashes[node.structural_hash] << …
Daily Code Reading #14 – Flay#process
Today I’m reading through flay’s #process method. This is one of the core methods that performs the analysis. The Code 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 …
Daily Code Reading #13 – Flay#expand_dirs_to_files
I’m looking at flay’s #expand_dirs_to_files today. This method takes a list of files and directories and will recursively walk them to collect all of the Ruby source files that need to be analyzed. The Code 1 2 3 4 5 6 7 8 9 10 11 def self.expand_dirs_to_files *dirs extensions = ['rb'] + Flay.load_plugins …
Daily Code Reading #12 – Flay executable
This week I’m looking at some of the metrics libraries included in metric_fu. Since these libraries analyze Ruby code, I suspect that I’ll find some very interesting Ruby inside them. I’m starting with flay, a library that analyzes code for duplication and structural similarities. Since flay includes a command line executable, I’m starting with that …